Merge "Clear FLAG_STARTING_WINDOW_TRANSFER_RECIPIENT properly" into udc-dev
diff --git a/apex/jobscheduler/service/java/com/android/server/AppStateTrackerImpl.java b/apex/jobscheduler/service/java/com/android/server/AppStateTrackerImpl.java
index ce381b6..e08200b 100644
--- a/apex/jobscheduler/service/java/com/android/server/AppStateTrackerImpl.java
+++ b/apex/jobscheduler/service/java/com/android/server/AppStateTrackerImpl.java
@@ -22,7 +22,6 @@
import android.app.AppOpsManager;
import android.app.AppOpsManager.PackageOps;
import android.app.IActivityManager;
-import android.app.UidObserver;
import android.app.usage.UsageStatsManager;
import android.content.BroadcastReceiver;
import android.content.Context;
@@ -54,6 +53,7 @@
import com.android.internal.app.IAppOpsService;
import com.android.internal.util.ArrayUtils;
import com.android.internal.util.StatLogger;
+import com.android.modules.expresslog.Counter;
import com.android.server.AppStateTrackerProto.ExemptedPackage;
import com.android.server.AppStateTrackerProto.RunAnyInBackgroundRestrictedPackages;
import com.android.server.usage.AppStandbyInternal;
@@ -79,6 +79,9 @@
public class AppStateTrackerImpl implements AppStateTracker {
private static final boolean DEBUG = false;
+ private static final String APP_RESTRICTION_COUNTER_METRIC_ID =
+ "battery.value_app_background_restricted";
+
private final Object mLock = new Object();
private final Context mContext;
@@ -748,6 +751,9 @@
} catch (RemoteException e) {
// Shouldn't happen
}
+ if (restricted) {
+ Counter.logIncrementWithUid(APP_RESTRICTION_COUNTER_METRIC_ID, uid);
+ }
synchronized (mLock) {
if (updateForcedAppStandbyUidPackageLocked(uid, packageName, restricted)) {
mHandler.notifyRunAnyAppOpsChanged(uid, packageName);
diff --git a/apex/jobscheduler/service/java/com/android/server/job/JobConcurrencyManager.java b/apex/jobscheduler/service/java/com/android/server/job/JobConcurrencyManager.java
index b9b825c..a0634f0 100644
--- a/apex/jobscheduler/service/java/com/android/server/job/JobConcurrencyManager.java
+++ b/apex/jobscheduler/service/java/com/android/server/job/JobConcurrencyManager.java
@@ -62,6 +62,7 @@
import com.android.internal.app.procstats.ProcessStats;
import com.android.internal.util.MemInfoReader;
import com.android.internal.util.StatLogger;
+import com.android.modules.expresslog.Histogram;
import com.android.server.AppSchedulingModuleThread;
import com.android.server.LocalServices;
import com.android.server.job.controllers.JobStatus;
@@ -471,6 +472,13 @@
private final Consumer<PackageStats> mPackageStatsStagingCountClearer =
PackageStats::resetStagedCount;
+ private static final Histogram sConcurrencyHistogramLogger = new Histogram(
+ "job_scheduler.value_hist_job_concurrency",
+ // Create a histogram that expects values in the range [0, 99].
+ // Include more buckets than MAX_CONCURRENCY_LIMIT to account for/identify the cases
+ // where we may create additional slots for TOP-started EJs and UIJs
+ new Histogram.UniformOptions(100, 0, 99));
+
private final StatLogger mStatLogger = new StatLogger(new String[]{
"assignJobsToContexts",
"refreshSystemState",
@@ -1433,6 +1441,7 @@
mService.mJobPackageTracker.noteConcurrency(mRunningJobs.size(),
// TODO: log per type instead of only TOP
mWorkCountTracker.getRunningJobCount(WORK_TYPE_TOP));
+ sConcurrencyHistogramLogger.logSample(mActiveServices.size());
}
@GuardedBy("mLock")
diff --git a/apex/jobscheduler/service/java/com/android/server/job/JobNotificationCoordinator.java b/apex/jobscheduler/service/java/com/android/server/job/JobNotificationCoordinator.java
index d94674b..8a5d094 100644
--- a/apex/jobscheduler/service/java/com/android/server/job/JobNotificationCoordinator.java
+++ b/apex/jobscheduler/service/java/com/android/server/job/JobNotificationCoordinator.java
@@ -33,6 +33,7 @@
import android.util.SparseSetArray;
import com.android.internal.annotations.GuardedBy;
+import com.android.modules.expresslog.Counter;
import com.android.server.LocalServices;
import com.android.server.job.controllers.JobStatus;
import com.android.server.notification.NotificationManagerInternal;
@@ -114,11 +115,39 @@
@JobService.JobEndNotificationPolicy int jobEndNotificationPolicy) {
validateNotification(packageName, callingUid, notification, jobEndNotificationPolicy);
final JobStatus jobStatus = hostingContext.getRunningJobLocked();
+ if (jobStatus == null) {
+ Slog.wtfStack(TAG, "enqueueNotification called with no running job");
+ return;
+ }
final NotificationDetails oldDetails = mNotificationDetails.get(hostingContext);
- if (oldDetails != null && oldDetails.notificationId != notificationId) {
- // App is switching notification IDs. Remove association with the old one.
- removeNotificationAssociation(hostingContext, JobParameters.STOP_REASON_UNDEFINED,
- jobStatus);
+ if (oldDetails == null) {
+ if (jobStatus.startedAsUserInitiatedJob) {
+ Counter.logIncrementWithUid(
+ "job_scheduler.value_cntr_w_uid_initial_setNotification_call_required",
+ jobStatus.getUid());
+ } else {
+ Counter.logIncrementWithUid(
+ "job_scheduler.value_cntr_w_uid_initial_setNotification_call_optional",
+ jobStatus.getUid());
+ }
+ } else {
+ if (jobStatus.startedAsUserInitiatedJob) {
+ Counter.logIncrementWithUid(
+ "job_scheduler.value_cntr_w_uid_subsequent_setNotification_call_required",
+ jobStatus.getUid());
+ } else {
+ Counter.logIncrementWithUid(
+ "job_scheduler.value_cntr_w_uid_subsequent_setNotification_call_optional",
+ jobStatus.getUid());
+ }
+ if (oldDetails.notificationId != notificationId) {
+ // App is switching notification IDs. Remove association with the old one.
+ removeNotificationAssociation(hostingContext, JobParameters.STOP_REASON_UNDEFINED,
+ jobStatus);
+ Counter.logIncrementWithUid(
+ "job_scheduler.value_cntr_w_uid_setNotification_changed_notification_ids",
+ jobStatus.getUid());
+ }
}
final int userId = UserHandle.getUserId(callingUid);
if (jobStatus != null && jobStatus.startedAsUserInitiatedJob) {
diff --git a/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java b/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java
index 8a4b464..e4e3de2 100644
--- a/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java
+++ b/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java
@@ -106,6 +106,8 @@
import com.android.internal.util.ArrayUtils;
import com.android.internal.util.DumpUtils;
import com.android.internal.util.FrameworkStatsLog;
+import com.android.modules.expresslog.Counter;
+import com.android.modules.expresslog.Histogram;
import com.android.server.AppSchedulingModuleThread;
import com.android.server.AppStateTracker;
import com.android.server.AppStateTrackerImpl;
@@ -378,6 +380,28 @@
private final long[] mLastCancelledJobTimeElapsed =
new long[DEBUG ? NUM_COMPLETED_JOB_HISTORY : 0];
+ private static final Histogram sEnqueuedJwiHighWaterMarkLogger = new Histogram(
+ "job_scheduler.value_hist_w_uid_enqueued_work_items_high_water_mark",
+ new Histogram.ScaledRangeOptions(25, 0, 5, 1.4f));
+ private static final Histogram sInitialJobEstimatedNetworkDownloadKBLogger = new Histogram(
+ "job_scheduler.value_hist_initial_job_estimated_network_download_kilobytes",
+ new Histogram.ScaledRangeOptions(50, 0, 32 /* 32 KB */, 1.31f));
+ private static final Histogram sInitialJwiEstimatedNetworkDownloadKBLogger = new Histogram(
+ "job_scheduler.value_hist_initial_jwi_estimated_network_download_kilobytes",
+ new Histogram.ScaledRangeOptions(50, 0, 32 /* 32 KB */, 1.31f));
+ private static final Histogram sInitialJobEstimatedNetworkUploadKBLogger = new Histogram(
+ "job_scheduler.value_hist_initial_job_estimated_network_upload_kilobytes",
+ new Histogram.ScaledRangeOptions(50, 0, 32 /* 32 KB */, 1.31f));
+ private static final Histogram sInitialJwiEstimatedNetworkUploadKBLogger = new Histogram(
+ "job_scheduler.value_hist_initial_jwi_estimated_network_upload_kilobytes",
+ new Histogram.ScaledRangeOptions(50, 0, 32 /* 32 KB */, 1.31f));
+ private static final Histogram sJobMinimumChunkKBLogger = new Histogram(
+ "job_scheduler.value_hist_w_uid_job_minimum_chunk_kilobytes",
+ new Histogram.ScaledRangeOptions(25, 0, 5 /* 5 KB */, 1.76f));
+ private static final Histogram sJwiMinimumChunkKBLogger = new Histogram(
+ "job_scheduler.value_hist_w_uid_jwi_minimum_chunk_kilobytes",
+ new Histogram.ScaledRangeOptions(25, 0, 5 /* 5 KB */, 1.76f));
+
/**
* A mapping of which uids are currently in the foreground to their effective bias.
*/
@@ -1419,9 +1443,38 @@
if (mActivityManagerInternal.isAppStartModeDisabled(uId, servicePkg)) {
Slog.w(TAG, "Not scheduling job " + uId + ":" + job.toString()
+ " -- package not allowed to start");
+ Counter.logIncrementWithUid(
+ "job_scheduler.value_cntr_w_uid_schedule_failure_app_start_mode_disabled",
+ uId);
return JobScheduler.RESULT_FAILURE;
}
+ if (job.getRequiredNetwork() != null) {
+ sInitialJobEstimatedNetworkDownloadKBLogger.logSample(
+ safelyScaleBytesToKBForHistogram(
+ job.getEstimatedNetworkDownloadBytes()));
+ sInitialJobEstimatedNetworkUploadKBLogger.logSample(
+ safelyScaleBytesToKBForHistogram(job.getEstimatedNetworkUploadBytes()));
+ sJobMinimumChunkKBLogger.logSampleWithUid(uId,
+ safelyScaleBytesToKBForHistogram(job.getMinimumNetworkChunkBytes()));
+ if (work != null) {
+ sInitialJwiEstimatedNetworkDownloadKBLogger.logSample(
+ safelyScaleBytesToKBForHistogram(
+ work.getEstimatedNetworkDownloadBytes()));
+ sInitialJwiEstimatedNetworkUploadKBLogger.logSample(
+ safelyScaleBytesToKBForHistogram(
+ work.getEstimatedNetworkUploadBytes()));
+ sJwiMinimumChunkKBLogger.logSampleWithUid(uId,
+ safelyScaleBytesToKBForHistogram(
+ work.getMinimumNetworkChunkBytes()));
+ }
+ }
+
+ if (work != null) {
+ Counter.logIncrementWithUid(
+ "job_scheduler.value_cntr_w_uid_job_work_items_enqueued", uId);
+ }
+
synchronized (mLock) {
final JobStatus toCancel = mJobs.getJobByUidAndJobId(uId, namespace, job.getId());
@@ -1451,6 +1504,7 @@
toCancel.enqueueWorkLocked(work);
mJobs.touchJob(toCancel);
+ sEnqueuedJwiHighWaterMarkLogger.logSampleWithUid(uId, toCancel.getWorkCount());
// If any of work item is enqueued when the source is in the foreground,
// exempt the entire job.
@@ -1468,6 +1522,9 @@
if ((mConstants.USE_TARE_POLICY && !mTareController.canScheduleEJ(jobStatus))
|| (!mConstants.USE_TARE_POLICY
&& !mQuotaController.isWithinEJQuotaLocked(jobStatus))) {
+ Counter.logIncrementWithUid(
+ "job_scheduler.value_cntr_w_uid_schedule_failure_ej_out_of_quota",
+ uId);
return JobScheduler.RESULT_FAILURE;
}
}
@@ -1483,6 +1540,8 @@
if (packageName == null) {
if (mJobs.countJobsForUid(uId) > MAX_JOBS_PER_APP) {
Slog.w(TAG, "Too many jobs for uid " + uId);
+ Counter.logIncrementWithUid(
+ "job_scheduler.value_cntr_w_uid_max_scheduling_limit_hit", uId);
throw new IllegalStateException("Apps may not schedule more than "
+ MAX_JOBS_PER_APP + " distinct jobs");
}
@@ -1522,6 +1581,7 @@
if (work != null) {
// If work has been supplied, enqueue it into the new job.
jobStatus.enqueueWorkLocked(work);
+ sEnqueuedJwiHighWaterMarkLogger.logSampleWithUid(uId, jobStatus.getWorkCount());
}
FrameworkStatsLog.write_non_chained(FrameworkStatsLog.SCHEDULED_JOB_STATE_CHANGED,
@@ -3834,6 +3894,18 @@
return bucket;
}
+ static int safelyScaleBytesToKBForHistogram(long bytes) {
+ long kilobytes = bytes / 1000;
+ // Anything over Integer.MAX_VALUE or under Integer.MIN_VALUE isn't expected and will
+ // be put into the overflow buckets.
+ if (kilobytes > Integer.MAX_VALUE) {
+ return Integer.MAX_VALUE;
+ } else if (kilobytes < Integer.MIN_VALUE) {
+ return Integer.MIN_VALUE;
+ }
+ return (int) kilobytes;
+ }
+
private class CloudProviderChangeListener implements
StorageManagerInternal.CloudProviderChangeListener {
@@ -4017,6 +4089,9 @@
if (!isInStateToScheduleUiJobSource && !isInStateToScheduleUiJobCalling) {
Slog.e(TAG, "Uid(s) " + sourceUid + "/" + callingUid
+ " not in a state to schedule user-initiated jobs");
+ Counter.logIncrementWithUid(
+ "job_scheduler.value_cntr_w_uid_schedule_failure_uij_invalid_state",
+ callingUid);
return JobScheduler.RESULT_FAILURE;
}
}
@@ -4058,6 +4133,10 @@
if (namespace.isEmpty()) {
throw new IllegalArgumentException("namespace cannot be empty");
}
+ if (namespace.length() > 1000) {
+ throw new IllegalArgumentException(
+ "namespace cannot be more than 1000 characters");
+ }
namespace = namespace.intern();
}
return namespace;
@@ -4066,10 +4145,14 @@
private int validateRunUserInitiatedJobsPermission(int uid, String packageName) {
final int state = getRunUserInitiatedJobsPermissionState(uid, packageName);
if (state == PermissionChecker.PERMISSION_HARD_DENIED) {
+ Counter.logIncrementWithUid(
+ "job_scheduler.value_cntr_w_uid_schedule_failure_uij_no_permission", uid);
throw new SecurityException(android.Manifest.permission.RUN_USER_INITIATED_JOBS
+ " required to schedule user-initiated jobs.");
}
if (state == PermissionChecker.PERMISSION_SOFT_DENIED) {
+ Counter.logIncrementWithUid(
+ "job_scheduler.value_cntr_w_uid_schedule_failure_uij_no_permission", uid);
return JobScheduler.RESULT_FAILURE;
}
return JobScheduler.RESULT_SUCCESS;
diff --git a/apex/jobscheduler/service/java/com/android/server/job/JobServiceContext.java b/apex/jobscheduler/service/java/com/android/server/job/JobServiceContext.java
index f95df44..2944095e 100644
--- a/apex/jobscheduler/service/java/com/android/server/job/JobServiceContext.java
+++ b/apex/jobscheduler/service/java/com/android/server/job/JobServiceContext.java
@@ -20,6 +20,7 @@
import static com.android.server.job.JobConcurrencyManager.WORK_TYPE_NONE;
import static com.android.server.job.JobSchedulerService.sElapsedRealtimeClock;
+import static com.android.server.job.JobSchedulerService.safelyScaleBytesToKBForHistogram;
import android.Manifest;
import android.annotation.BytesLong;
@@ -66,6 +67,8 @@
import com.android.internal.app.IBatteryStats;
import com.android.internal.os.TimeoutRecord;
import com.android.internal.util.FrameworkStatsLog;
+import com.android.modules.expresslog.Counter;
+import com.android.modules.expresslog.Histogram;
import com.android.server.EventLogTags;
import com.android.server.LocalServices;
import com.android.server.job.controllers.JobStatus;
@@ -111,6 +114,22 @@
private static final long NOTIFICATION_TIMEOUT_MILLIS = 10_000L * Build.HW_TIMEOUT_MULTIPLIER;
private static final long EXECUTION_DURATION_STAMP_PERIOD_MILLIS = 5 * 60_000L;
+ private static final Histogram sEnqueuedJwiAtJobStart = new Histogram(
+ "job_scheduler.value_hist_w_uid_enqueued_work_items_at_job_start",
+ new Histogram.ScaledRangeOptions(20, 1, 3, 1.4f));
+ private static final Histogram sTransferredNetworkDownloadKBHighWaterMarkLogger = new Histogram(
+ "job_scheduler.value_hist_transferred_network_download_kilobytes_high_water_mark",
+ new Histogram.ScaledRangeOptions(50, 0, 32 /* 32 KB */, 1.31f));
+ private static final Histogram sTransferredNetworkUploadKBHighWaterMarkLogger = new Histogram(
+ "job_scheduler.value_hist_transferred_network_upload_kilobytes_high_water_mark",
+ new Histogram.ScaledRangeOptions(50, 0, 32 /* 32 KB */, 1.31f));
+ private static final Histogram sUpdatedEstimatedNetworkDownloadKBLogger = new Histogram(
+ "job_scheduler.value_hist_updated_estimated_network_download_kilobytes",
+ new Histogram.ScaledRangeOptions(50, 0, 32 /* 32 KB */, 1.31f));
+ private static final Histogram sUpdatedEstimatedNetworkUploadKBLogger = new Histogram(
+ "job_scheduler.value_hist_updated_estimated_network_upload_kilobytes",
+ new Histogram.ScaledRangeOptions(50, 0, 32 /* 32 KB */, 1.31f));
+
private static final String[] VERB_STRINGS = {
"VERB_BINDING", "VERB_STARTING", "VERB_EXECUTING", "VERB_STOPPING", "VERB_FINISHED"
};
@@ -350,6 +369,7 @@
job.shouldTreatAsUserInitiatedJob(), triggeredUris, triggeredAuthorities,
passedNetwork);
mExecutionStartTimeElapsed = sElapsedRealtimeClock.millis();
+ mLastExecutionDurationStampTimeElapsed = mExecutionStartTimeElapsed;
mMinExecutionGuaranteeMillis = mService.getMinJobExecutionGuaranteeMs(job);
mMaxExecutionTimeMillis =
Math.max(mService.getMaxJobExecutionTimeMs(job), mMinExecutionGuaranteeMillis);
@@ -479,6 +499,7 @@
job.getEstimatedNetworkUploadBytes(),
job.getWorkCount(),
ActivityManager.processStateAmToProto(mService.getUidProcState(job.getUid())));
+ sEnqueuedJwiAtJobStart.logSampleWithUid(job.getUid(), job.getWorkCount());
final String sourcePackage = job.getSourcePackageName();
if (Trace.isTagEnabled(Trace.TRACE_TAG_SYSTEM_SERVER)) {
final String componentPackage = job.getServiceComponent().getPackageName();
@@ -815,6 +836,41 @@
if (!verifyCallerLocked(cb)) {
return;
}
+ Counter.logIncrementWithUid(
+ "job_scheduler.value_cntr_w_uid_estimated_network_bytes_updated",
+ mRunningJob.getUid());
+ sUpdatedEstimatedNetworkDownloadKBLogger.logSample(
+ safelyScaleBytesToKBForHistogram(downloadBytes));
+ sUpdatedEstimatedNetworkUploadKBLogger.logSample(
+ safelyScaleBytesToKBForHistogram(uploadBytes));
+ if (mEstimatedDownloadBytes != JobInfo.NETWORK_BYTES_UNKNOWN
+ && downloadBytes != JobInfo.NETWORK_BYTES_UNKNOWN) {
+ if (mEstimatedDownloadBytes < downloadBytes) {
+ Counter.logIncrementWithUid(
+ "job_scheduler."
+ + "value_cntr_w_uid_estimated_network_download_bytes_increased",
+ mRunningJob.getUid());
+ } else if (mEstimatedDownloadBytes > downloadBytes) {
+ Counter.logIncrementWithUid(
+ "job_scheduler."
+ + "value_cntr_w_uid_estimated_network_download_bytes_decreased",
+ mRunningJob.getUid());
+ }
+ }
+ if (mEstimatedUploadBytes != JobInfo.NETWORK_BYTES_UNKNOWN
+ && uploadBytes != JobInfo.NETWORK_BYTES_UNKNOWN) {
+ if (mEstimatedUploadBytes < uploadBytes) {
+ Counter.logIncrementWithUid(
+ "job_scheduler"
+ + ".value_cntr_w_uid_estimated_network_upload_bytes_increased",
+ mRunningJob.getUid());
+ } else if (mEstimatedUploadBytes > uploadBytes) {
+ Counter.logIncrementWithUid(
+ "job_scheduler"
+ + ".value_cntr_w_uid_estimated_network_upload_bytes_decreased",
+ mRunningJob.getUid());
+ }
+ }
mEstimatedDownloadBytes = downloadBytes;
mEstimatedUploadBytes = uploadBytes;
}
@@ -827,6 +883,41 @@
if (!verifyCallerLocked(cb)) {
return;
}
+ Counter.logIncrementWithUid(
+ "job_scheduler.value_cntr_w_uid_transferred_network_bytes_updated",
+ mRunningJob.getUid());
+ sTransferredNetworkDownloadKBHighWaterMarkLogger.logSample(
+ safelyScaleBytesToKBForHistogram(downloadBytes));
+ sTransferredNetworkUploadKBHighWaterMarkLogger.logSample(
+ safelyScaleBytesToKBForHistogram(uploadBytes));
+ if (mTransferredDownloadBytes != JobInfo.NETWORK_BYTES_UNKNOWN
+ && downloadBytes != JobInfo.NETWORK_BYTES_UNKNOWN) {
+ if (mTransferredDownloadBytes < downloadBytes) {
+ Counter.logIncrementWithUid(
+ "job_scheduler."
+ + "value_cntr_w_uid_transferred_network_download_bytes_increased",
+ mRunningJob.getUid());
+ } else if (mTransferredDownloadBytes > downloadBytes) {
+ Counter.logIncrementWithUid(
+ "job_scheduler."
+ + "value_cntr_w_uid_transferred_network_download_bytes_decreased",
+ mRunningJob.getUid());
+ }
+ }
+ if (mTransferredUploadBytes != JobInfo.NETWORK_BYTES_UNKNOWN
+ && uploadBytes != JobInfo.NETWORK_BYTES_UNKNOWN) {
+ if (mTransferredUploadBytes < uploadBytes) {
+ Counter.logIncrementWithUid(
+ "job_scheduler."
+ + "value_cntr_w_uid_transferred_network_upload_bytes_increased",
+ mRunningJob.getUid());
+ } else if (mTransferredUploadBytes > uploadBytes) {
+ Counter.logIncrementWithUid(
+ "job_scheduler."
+ + "value_cntr_w_uid_transferred_network_upload_bytes_decreased",
+ mRunningJob.getUid());
+ }
+ }
mTransferredDownloadBytes = downloadBytes;
mTransferredUploadBytes = uploadBytes;
}
@@ -897,6 +988,11 @@
// Use that as the stop reason for logging/debugging purposes.
mParams.setStopReason(
mDeathMarkStopReason, mDeathMarkInternalStopReason, mDeathMarkDebugReason);
+ } else if (mRunningJob != null) {
+ Counter.logIncrementWithUid(
+ "job_scheduler.value_cntr_w_uid_unexpected_service_disconnects",
+ // Use the calling UID since that's the one this context was connected to.
+ mRunningJob.getUid());
}
closeAndCleanupJobLocked(true /* needsReschedule */, "unexpectedly disconnected");
}
@@ -1223,6 +1319,8 @@
switch (mVerb) {
case VERB_BINDING:
onSlowAppResponseLocked(/* reschedule */ false, /* updateStopReasons */ true,
+ /* texCounterMetricId */
+ "job_scheduler.value_cntr_w_uid_slow_app_response_binding",
/* debugReason */ "timed out while binding",
/* anrMessage */ "Timed out while trying to bind",
CompatChanges.isChangeEnabled(ANR_PRE_UDC_APIS_ON_SLOW_RESPONSES,
@@ -1233,6 +1331,8 @@
// know what happened so let's log it and notify the JobScheduler
// FINISHED/NO-RETRY.
onSlowAppResponseLocked(/* reschedule */ false, /* updateStopReasons */ true,
+ /* texCounterMetricId */
+ "job_scheduler.value_cntr_w_uid_slow_app_response_onStartJob",
/* debugReason */ "timed out while starting",
/* anrMessage */ "No response to onStartJob",
CompatChanges.isChangeEnabled(ANR_PRE_UDC_APIS_ON_SLOW_RESPONSES,
@@ -1243,6 +1343,8 @@
// Don't update the stop reasons since we were already stopping the job for some
// other reason.
onSlowAppResponseLocked(/* reschedule */ true, /* updateStopReasons */ false,
+ /* texCounterMetricId */
+ "job_scheduler.value_cntr_w_uid_slow_app_response_onStopJob",
/* debugReason */ "timed out while stopping",
/* anrMessage */ "No response to onStopJob",
CompatChanges.isChangeEnabled(ANR_PRE_UDC_APIS_ON_SLOW_RESPONSES,
@@ -1298,6 +1400,8 @@
}
} else if (mAwaitingNotification) {
onSlowAppResponseLocked(/* reschedule */ true, /* updateStopReasons */ true,
+ /* texCounterMetricId */
+ "job_scheduler.value_cntr_w_uid_slow_app_response_setNotification",
/* debugReason */ "timed out while stopping",
/* anrMessage */ "required notification not provided",
/* triggerAnr */ true);
@@ -1347,8 +1451,11 @@
@GuardedBy("mLock")
private void onSlowAppResponseLocked(boolean reschedule, boolean updateStopReasons,
+ @NonNull String texCounterMetricId,
@NonNull String debugReason, @NonNull String anrMessage, boolean triggerAnr) {
Slog.w(TAG, anrMessage + " for " + getRunningJobNameLocked());
+ // Use the calling UID since that's the one this context was connected to.
+ Counter.logIncrementWithUid(texCounterMetricId, mRunningJob.getUid());
if (updateStopReasons) {
mParams.setStopReason(
JobParameters.STOP_REASON_UNDEFINED,
diff --git a/apex/jobscheduler/service/java/com/android/server/job/JobStore.java b/apex/jobscheduler/service/java/com/android/server/job/JobStore.java
index c540517..0a7bffc 100644
--- a/apex/jobscheduler/service/java/com/android/server/job/JobStore.java
+++ b/apex/jobscheduler/service/java/com/android/server/job/JobStore.java
@@ -49,8 +49,10 @@
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.ArrayUtils;
import com.android.internal.util.BitUtils;
+import com.android.modules.expresslog.Histogram;
import com.android.modules.utils.TypedXmlPullParser;
import com.android.modules.utils.TypedXmlSerializer;
+import com.android.server.AppSchedulingModuleThread;
import com.android.server.IoThread;
import com.android.server.job.JobSchedulerInternal.JobStorePersistStats;
import com.android.server.job.controllers.JobStatus;
@@ -94,6 +96,7 @@
/** Threshold to adjust how often we want to write to the db. */
private static final long JOB_PERSIST_DELAY = 2000L;
+ private static final long SCHEDULED_JOB_HIGH_WATER_MARK_PERIOD_MS = 30 * 60_000L;
@VisibleForTesting
static final String JOB_FILE_SPLIT_PREFIX = "jobs_";
private static final int ALL_UIDS = -1;
@@ -131,6 +134,30 @@
private JobStorePersistStats mPersistInfo = new JobStorePersistStats();
+ /**
+ * Separately updated value of the JobSet size to avoid recalculating it frequently for logging
+ * purposes. Continue to use {@link JobSet#size()} for the up-to-date and accurate value.
+ */
+ private int mCurrentJobSetSize = 0;
+ private int mScheduledJob30MinHighWaterMark = 0;
+ private static final Histogram sScheduledJob30MinHighWaterMarkLogger = new Histogram(
+ "job_scheduler.value_hist_scheduled_job_30_min_high_water_mark",
+ new Histogram.ScaledRangeOptions(15, 1, 99, 1.5f));
+ private final Runnable mScheduledJobHighWaterMarkLoggingRunnable = new Runnable() {
+ @Override
+ public void run() {
+ AppSchedulingModuleThread.getHandler().removeCallbacks(this);
+ synchronized (mLock) {
+ sScheduledJob30MinHighWaterMarkLogger.logSample(mScheduledJob30MinHighWaterMark);
+ mScheduledJob30MinHighWaterMark = mJobSet.size();
+ }
+ // The count doesn't need to be logged at exact times. Logging based on system uptime
+ // should be fine.
+ AppSchedulingModuleThread.getHandler()
+ .postDelayed(this, SCHEDULED_JOB_HIGH_WATER_MARK_PERIOD_MS);
+ }
+ };
+
/** Used by the {@link JobSchedulerService} to instantiate the JobStore. */
static JobStore get(JobSchedulerService jobManagerService) {
synchronized (sSingletonLock) {
@@ -183,6 +210,9 @@
mXmlTimestamp = mJobsFile.exists()
? mJobsFile.getLastModifiedTime() : mJobFileDirectory.lastModified();
mRtcGood = (sSystemClock.millis() > mXmlTimestamp);
+
+ AppSchedulingModuleThread.getHandler().postDelayed(
+ mScheduledJobHighWaterMarkLoggingRunnable, SCHEDULED_JOB_HIGH_WATER_MARK_PERIOD_MS);
}
private void init() {
@@ -252,7 +282,10 @@
* @param jobStatus Job to add.
*/
public void add(JobStatus jobStatus) {
- mJobSet.add(jobStatus);
+ if (mJobSet.add(jobStatus)) {
+ mCurrentJobSetSize++;
+ maybeUpdateHighWaterMark();
+ }
if (jobStatus.isPersisted()) {
mPendingJobWriteUids.put(jobStatus.getUid(), true);
maybeWriteStatusToDiskAsync();
@@ -267,7 +300,10 @@
*/
@VisibleForTesting
public void addForTesting(JobStatus jobStatus) {
- mJobSet.add(jobStatus);
+ if (mJobSet.add(jobStatus)) {
+ mCurrentJobSetSize++;
+ maybeUpdateHighWaterMark();
+ }
if (jobStatus.isPersisted()) {
mPendingJobWriteUids.put(jobStatus.getUid(), true);
}
@@ -303,6 +339,7 @@
}
return false;
}
+ mCurrentJobSetSize--;
if (removeFromPersisted && jobStatus.isPersisted()) {
mPendingJobWriteUids.put(jobStatus.getUid(), true);
maybeWriteStatusToDiskAsync();
@@ -315,7 +352,9 @@
*/
@VisibleForTesting
public void removeForTesting(JobStatus jobStatus) {
- mJobSet.remove(jobStatus);
+ if (mJobSet.remove(jobStatus)) {
+ mCurrentJobSetSize--;
+ }
if (jobStatus.isPersisted()) {
mPendingJobWriteUids.put(jobStatus.getUid(), true);
}
@@ -327,6 +366,7 @@
*/
public void removeJobsOfUnlistedUsers(int[] keepUserIds) {
mJobSet.removeJobsOfUnlistedUsers(keepUserIds);
+ mCurrentJobSetSize = mJobSet.size();
}
/** Note a change in the specified JobStatus that necessitates writing job state to disk. */
@@ -342,6 +382,7 @@
public void clear() {
mJobSet.clear();
mPendingJobWriteUids.put(ALL_UIDS, true);
+ mCurrentJobSetSize = 0;
maybeWriteStatusToDiskAsync();
}
@@ -352,6 +393,7 @@
public void clearForTesting() {
mJobSet.clear();
mPendingJobWriteUids.put(ALL_UIDS, true);
+ mCurrentJobSetSize = 0;
}
void setUseSplitFiles(boolean useSplitFiles) {
@@ -442,6 +484,12 @@
mJobSet.forEachJobForSourceUid(sourceUid, functor);
}
+ private void maybeUpdateHighWaterMark() {
+ if (mScheduledJob30MinHighWaterMark < mCurrentJobSetSize) {
+ mScheduledJob30MinHighWaterMark = mCurrentJobSetSize;
+ }
+ }
+
/** Version of the db schema. */
private static final int JOBS_FILE_VERSION = 1;
/**
@@ -1125,6 +1173,12 @@
if (needFileMigration) {
migrateJobFilesAsync();
}
+
+ // Log the count immediately after loading from boot.
+ mCurrentJobSetSize = numJobs;
+ mScheduledJob30MinHighWaterMark = mCurrentJobSetSize;
+ mScheduledJobHighWaterMarkLoggingRunnable.run();
+
if (mCompletionLatch != null) {
mCompletionLatch.countDown();
}
diff --git a/apex/jobscheduler/service/java/com/android/server/job/controllers/TimeController.java b/apex/jobscheduler/service/java/com/android/server/job/controllers/TimeController.java
index ba62e96..c272af0 100644
--- a/apex/jobscheduler/service/java/com/android/server/job/controllers/TimeController.java
+++ b/apex/jobscheduler/service/java/com/android/server/job/controllers/TimeController.java
@@ -90,6 +90,7 @@
final long nowElapsedMillis = sElapsedRealtimeClock.millis();
if (job.hasDeadlineConstraint() && evaluateDeadlineConstraint(job, nowElapsedMillis)) {
// We're intentionally excluding jobs whose deadlines have passed
+ // from the job_scheduler.value_job_scheduler_job_deadline_expired_counter count
// (mostly like deadlines of 0) when the job was scheduled.
return;
} else if (job.hasTimingDelayConstraint() && evaluateTimingDelayConstraint(job,
diff --git a/core/api/test-current.txt b/core/api/test-current.txt
index d97f718..e42e526 100644
--- a/core/api/test-current.txt
+++ b/core/api/test-current.txt
@@ -2037,6 +2037,7 @@
package android.media.soundtrigger {
public final class SoundTriggerInstrumentation {
+ method public void setInPhoneCallState(boolean);
method public void setResourceContention(boolean);
method public void triggerOnResourcesAvailable();
method public void triggerRestart();
@@ -2366,6 +2367,7 @@
method public static boolean isApp(int);
field public static final int MIN_SECONDARY_USER_ID = 10; // 0xa
field public static final int USER_ALL = -1; // 0xffffffff
+ field public static final int USER_CURRENT = -2; // 0xfffffffe
field public static final int USER_NULL = -10000; // 0xffffd8f0
field public static final int USER_SYSTEM = 0; // 0x0
}
@@ -2374,10 +2376,12 @@
method @Nullable @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public android.content.pm.UserInfo createProfileForUser(@Nullable String, @NonNull String, int, int, @Nullable String[]);
method @Nullable @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public android.content.pm.UserInfo createRestrictedProfile(@Nullable String);
method @Nullable @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public android.content.pm.UserInfo createUser(@Nullable String, @NonNull String, int);
+ method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public java.util.List<android.content.pm.UserInfo> getAliveUsers();
method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public android.os.UserHandle getBootUser();
method public int getMainDisplayIdAssignedToUser();
method @Nullable @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public java.util.Set<java.lang.String> getPreInstallableSystemPackages(@NonNull String);
method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS, android.Manifest.permission.QUERY_USERS}) public String getUserType();
+ method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public java.util.List<android.content.pm.UserInfo> getUsers();
method @Deprecated @NonNull @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public java.util.List<android.content.pm.UserInfo> getUsers(boolean, boolean, boolean);
method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public boolean hasBaseUserRestriction(@NonNull String, @NonNull android.os.UserHandle);
method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public boolean isUserTypeEnabled(@NonNull String);
diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java
index e2ef005..b5ee895 100644
--- a/core/java/android/app/ActivityManager.java
+++ b/core/java/android/app/ActivityManager.java
@@ -4433,6 +4433,21 @@
}
/**
+ * Similar to {@link #forceStopPackageAsUser(String, int)} but will also stop the package even
+ * when the user is in the stopping state.
+ *
+ * @hide
+ */
+ @RequiresPermission(Manifest.permission.FORCE_STOP_PACKAGES)
+ public void forceStopPackageAsUserEvenWhenStopping(String packageName, @UserIdInt int userId) {
+ try {
+ getService().forceStopPackageEvenWhenStopping(packageName, userId);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
* Sets the current locales of the device. Calling app must have the permission
* {@code android.permission.CHANGE_CONFIGURATION} and
* {@code android.permission.WRITE_SETTINGS}.
diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java
index 9e59ee4..ba5a9f7 100644
--- a/core/java/android/app/AppOpsManager.java
+++ b/core/java/android/app/AppOpsManager.java
@@ -60,13 +60,16 @@
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.SystemClock;
+import android.os.UserHandle;
import android.os.UserManager;
import android.provider.DeviceConfig;
import android.util.ArrayMap;
import android.util.ArraySet;
+import android.util.Log;
import android.util.LongSparseArray;
import android.util.LongSparseLongArray;
import android.util.Pools;
+import android.util.Slog;
import android.util.SparseArray;
import com.android.internal.annotations.GuardedBy;
@@ -179,6 +182,8 @@
*/
@SystemService(Context.APP_OPS_SERVICE)
public class AppOpsManager {
+ private static final String LOG_TAG = "AppOpsManager";
+
/**
* This is a subtle behavior change to {@link #startWatchingMode}.
*
@@ -7084,6 +7089,26 @@
*/
public interface OnOpChangedListener {
public void onOpChanged(String op, String packageName);
+
+ /**
+ * Implementations can override this method to add handling logic for AppOp changes.
+ *
+ * Normally, listeners to AppOp changes work in the same User Space as the App whose Op
+ * has changed. However, in some case listeners can have a single instance responsible for
+ * multiple users. (For ex single Media Provider instance in user 0 is responsible for both
+ * cloned and user 0 spaces). For handling such cases correctly, listeners need to be
+ * passed userId in addition to PackageName and Op.
+
+ * The default impl is to fallback onto {@link #onOpChanged(String, String)
+ *
+ * @param op The Op that changed.
+ * @param packageName Package of the app whose Op changed.
+ * @param userId User Space of the app whose Op changed.
+ * @hide
+ */
+ default void onOpChanged(@NonNull String op, @NonNull String packageName, int userId) {
+ onOpChanged(op, packageName);
+ }
}
/**
@@ -7517,6 +7542,7 @@
*/
@RequiresPermission(android.Manifest.permission.MANAGE_APP_OPS_MODES)
public void setUidMode(int code, int uid, @Mode int mode) {
+ logAnySeriousModeChanges(code, uid, null, mode);
try {
mService.setUidMode(code, uid, mode);
} catch (RemoteException e) {
@@ -7537,6 +7563,7 @@
@SystemApi
@RequiresPermission(android.Manifest.permission.MANAGE_APP_OPS_MODES)
public void setUidMode(@NonNull String appOp, int uid, @Mode int mode) {
+ logAnySeriousModeChanges(strOpToOp(appOp), uid, null, mode);
try {
mService.setUidMode(AppOpsManager.strOpToOp(appOp), uid, mode);
} catch (RemoteException e) {
@@ -7572,11 +7599,32 @@
}
}
+ private void logAnySeriousModeChanges(int code, int uid, String packageName, @Mode int mode) {
+ // TODO (b/280869337): Remove this once we have the required data.
+ if (code != OP_RUN_ANY_IN_BACKGROUND || mode == MODE_ALLOWED) {
+ return;
+ }
+ final StringBuilder log = new StringBuilder("Attempt to change RUN_ANY_IN_BACKGROUND to ")
+ .append(modeToName(mode))
+ .append(" for uid: ")
+ .append(UserHandle.formatUid(uid))
+ .append(" package: ")
+ .append(packageName)
+ .append(" by: ")
+ .append(mContext.getOpPackageName());
+ if (Process.myUid() == Process.SYSTEM_UID) {
+ Slog.wtfStack(LOG_TAG, log.toString());
+ } else {
+ Log.w(LOG_TAG, log.toString());
+ }
+ }
+
/** @hide */
@UnsupportedAppUsage
@TestApi
@RequiresPermission(android.Manifest.permission.MANAGE_APP_OPS_MODES)
public void setMode(int code, int uid, String packageName, @Mode int mode) {
+ logAnySeriousModeChanges(code, uid, packageName, mode);
try {
mService.setMode(code, uid, packageName, mode);
} catch (RemoteException e) {
@@ -7599,6 +7647,7 @@
@RequiresPermission(android.Manifest.permission.MANAGE_APP_OPS_MODES)
public void setMode(@NonNull String op, int uid, @Nullable String packageName,
@Mode int mode) {
+ logAnySeriousModeChanges(strOpToOp(op), uid, packageName, mode);
try {
mService.setMode(strOpToOp(op), uid, packageName, mode);
} catch (RemoteException e) {
@@ -7756,7 +7805,9 @@
((OnOpChangedInternalListener)callback).onOpChanged(op, packageName);
}
if (sAppOpInfos[op].name != null) {
- callback.onOpChanged(sAppOpInfos[op].name, packageName);
+
+ callback.onOpChanged(sAppOpInfos[op].name, packageName,
+ UserHandle.getUserId(uid));
}
}
};
diff --git a/core/java/android/app/IActivityManager.aidl b/core/java/android/app/IActivityManager.aidl
index 99ef315..e15e08f 100644
--- a/core/java/android/app/IActivityManager.aidl
+++ b/core/java/android/app/IActivityManager.aidl
@@ -102,6 +102,43 @@
void registerUidObserver(in IUidObserver observer, int which, int cutpoint,
String callingPackage);
void unregisterUidObserver(in IUidObserver observer);
+
+ /**
+ * Registers a UidObserver with a uid filter.
+ *
+ * @param observer The UidObserver implementation to register.
+ * @param which A bitmask of events to observe. See ActivityManager.UID_OBSERVER_*.
+ * @param cutpoint The cutpoint for onUidStateChanged events. When the state crosses this
+ * threshold in either direction, onUidStateChanged will be called.
+ * @param callingPackage The name of the calling package.
+ * @param uids A list of uids to watch. If all uids are to be watched, use
+ * registerUidObserver instead.
+ * @throws RemoteException
+ * @return Returns A binder token identifying the UidObserver registration.
+ */
+ IBinder registerUidObserverForUids(in IUidObserver observer, int which, int cutpoint,
+ String callingPackage, in int[] uids);
+
+ /**
+ * Adds a uid to the list of uids that a UidObserver will receive updates about.
+ *
+ * @param observerToken The binder token identifying the UidObserver registration.
+ * @param callingPackage The name of the calling package.
+ * @param uid The uid to watch.
+ * @throws RemoteException
+ */
+ void addUidToObserver(in IBinder observerToken, String callingPackage, int uid);
+
+ /**
+ * Removes a uid from the list of uids that a UidObserver will receive updates about.
+ *
+ * @param observerToken The binder token identifying the UidObserver registration.
+ * @param callingPackage The name of the calling package.
+ * @param uid The uid to stop watching.
+ * @throws RemoteException
+ */
+ void removeUidFromObserver(in IBinder observerToken, String callingPackage, int uid);
+
boolean isUidActive(int uid, String callingPackage);
@JavaPassthrough(annotation=
"@android.annotation.RequiresPermission(allOf = {android.Manifest.permission.PACKAGE_USAGE_STATS, android.Manifest.permission.INTERACT_ACROSS_USERS_FULL}, conditional = true)")
@@ -299,6 +336,7 @@
boolean registerForegroundServiceObserver(in IForegroundServiceObserver callback);
@UnsupportedAppUsage
void forceStopPackage(in String packageName, int userId);
+ void forceStopPackageEvenWhenStopping(in String packageName, int userId);
boolean killPids(in int[] pids, in String reason, boolean secure);
@UnsupportedAppUsage
List<ActivityManager.RunningServiceInfo> getServices(int maxNum, int flags);
diff --git a/core/java/android/app/IWallpaperManager.aidl b/core/java/android/app/IWallpaperManager.aidl
index 2b15589..94c46fa 100644
--- a/core/java/android/app/IWallpaperManager.aidl
+++ b/core/java/android/app/IWallpaperManager.aidl
@@ -220,20 +220,6 @@
void notifyGoingToSleep(int x, int y, in Bundle extras);
/**
- * Called when the screen has been fully turned on and is visible.
- *
- * @hide
- */
- void notifyScreenTurnedOn(int displayId);
-
- /**
- * Called when the screen starts turning on.
- *
- * @hide
- */
- void notifyScreenTurningOn(int displayId);
-
- /**
* Sets the wallpaper dim amount between [0f, 1f] which would be blended with the system default
* dimming. 0f doesn't add any additional dimming and 1f makes the wallpaper fully black.
*
@@ -259,6 +245,14 @@
boolean lockScreenWallpaperExists();
/**
+ * Return true if there is a static wallpaper on the specified screen. With which=FLAG_LOCK,
+ * always return false if the lock screen doesn't run its own wallpaper engine.
+ *
+ * @hide
+ */
+ boolean isStaticWallpaper(int which);
+
+ /**
* Temporary method for project b/197814683.
* Return true if the lockscreen wallpaper always uses a WallpaperService, not a static image.
* @hide
diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java
index 67226d0..df9257c 100644
--- a/core/java/android/app/Notification.java
+++ b/core/java/android/app/Notification.java
@@ -2886,10 +2886,23 @@
if (person != null) {
visitor.accept(person.getIconUri());
}
+
+ final RemoteInputHistoryItem[] history = extras.getParcelableArray(
+ Notification.EXTRA_REMOTE_INPUT_HISTORY_ITEMS,
+ RemoteInputHistoryItem.class);
+ if (history != null) {
+ for (int i = 0; i < history.length; i++) {
+ RemoteInputHistoryItem item = history[i];
+ if (item.getUri() != null) {
+ visitor.accept(item.getUri());
+ }
+ }
+ }
}
if (isStyle(MessagingStyle.class) && extras != null) {
- final Parcelable[] messages = extras.getParcelableArray(EXTRA_MESSAGES);
+ final Parcelable[] messages = extras.getParcelableArray(EXTRA_MESSAGES,
+ Parcelable.class);
if (!ArrayUtils.isEmpty(messages)) {
for (MessagingStyle.Message message : MessagingStyle.Message
.getMessagesFromBundleArray(messages)) {
@@ -2902,7 +2915,8 @@
}
}
- final Parcelable[] historic = extras.getParcelableArray(EXTRA_HISTORIC_MESSAGES);
+ final Parcelable[] historic = extras.getParcelableArray(EXTRA_HISTORIC_MESSAGES,
+ Parcelable.class);
if (!ArrayUtils.isEmpty(historic)) {
for (MessagingStyle.Message message : MessagingStyle.Message
.getMessagesFromBundleArray(historic)) {
@@ -2914,14 +2928,16 @@
}
}
}
+
+ visitIconUri(visitor, extras.getParcelable(EXTRA_CONVERSATION_ICON, Icon.class));
}
if (isStyle(CallStyle.class) & extras != null) {
- Person callPerson = extras.getParcelable(EXTRA_CALL_PERSON);
+ Person callPerson = extras.getParcelable(EXTRA_CALL_PERSON, Person.class);
if (callPerson != null) {
visitor.accept(callPerson.getIconUri());
}
- visitIconUri(visitor, extras.getParcelable(EXTRA_VERIFICATION_ICON));
+ visitIconUri(visitor, extras.getParcelable(EXTRA_VERIFICATION_ICON, Icon.class));
}
if (mBubbleMetadata != null) {
@@ -3396,7 +3412,7 @@
* separate object, replace it with the field's version to avoid holding duplicate copies.
*/
private void fixDuplicateExtra(@Nullable Parcelable original, @NonNull String extraName) {
- if (original != null && extras.getParcelable(extraName) != null) {
+ if (original != null && extras.getParcelable(extraName, Parcelable.class) != null) {
extras.putParcelable(extraName, original);
}
}
@@ -7073,7 +7089,8 @@
*/
public boolean hasImage() {
if (isStyle(MessagingStyle.class) && extras != null) {
- final Parcelable[] messages = extras.getParcelableArray(EXTRA_MESSAGES);
+ final Parcelable[] messages = extras.getParcelableArray(EXTRA_MESSAGES,
+ Parcelable.class);
if (!ArrayUtils.isEmpty(messages)) {
for (MessagingStyle.Message m : MessagingStyle.Message
.getMessagesFromBundleArray(messages)) {
@@ -8275,15 +8292,18 @@
protected void restoreFromExtras(Bundle extras) {
super.restoreFromExtras(extras);
- mUser = extras.getParcelable(EXTRA_MESSAGING_PERSON, Person.class);
- if (mUser == null) {
+ Person user = extras.getParcelable(EXTRA_MESSAGING_PERSON, Person.class);
+ if (user == null) {
CharSequence displayName = extras.getCharSequence(EXTRA_SELF_DISPLAY_NAME);
mUser = new Person.Builder().setName(displayName).build();
+ } else {
+ mUser = user;
}
mConversationTitle = extras.getCharSequence(EXTRA_CONVERSATION_TITLE);
- Parcelable[] messages = extras.getParcelableArray(EXTRA_MESSAGES);
+ Parcelable[] messages = extras.getParcelableArray(EXTRA_MESSAGES, Parcelable.class);
mMessages = Message.getMessagesFromBundleArray(messages);
- Parcelable[] histMessages = extras.getParcelableArray(EXTRA_HISTORIC_MESSAGES);
+ Parcelable[] histMessages = extras.getParcelableArray(EXTRA_HISTORIC_MESSAGES,
+ Parcelable.class);
mHistoricMessages = Message.getMessagesFromBundleArray(histMessages);
mIsGroupConversation = extras.getBoolean(EXTRA_IS_GROUP_CONVERSATION);
mUnreadMessageCount = extras.getInt(EXTRA_CONVERSATION_UNREAD_MESSAGE_COUNT);
@@ -11951,7 +11971,8 @@
if (b == null) {
return null;
}
- Parcelable[] parcelableMessages = b.getParcelableArray(KEY_MESSAGES);
+ Parcelable[] parcelableMessages = b.getParcelableArray(KEY_MESSAGES,
+ Parcelable.class);
String[] messages = null;
if (parcelableMessages != null) {
String[] tmp = new String[parcelableMessages.length];
@@ -12288,7 +12309,7 @@
@Nullable
private static <T extends Parcelable> T[] getParcelableArrayFromBundle(
Bundle bundle, String key, Class<T> itemClass) {
- final Parcelable[] array = bundle.getParcelableArray(key);
+ final Parcelable[] array = bundle.getParcelableArray(key, Parcelable.class);
final Class<?> arrayClass = Array.newInstance(itemClass, 0).getClass();
if (arrayClass.isInstance(array) || array == null) {
return (T[]) array;
diff --git a/core/java/android/app/WallpaperManager.java b/core/java/android/app/WallpaperManager.java
index f673304..1603cd9 100644
--- a/core/java/android/app/WallpaperManager.java
+++ b/core/java/android/app/WallpaperManager.java
@@ -231,6 +231,16 @@
public static final String COMMAND_WAKING_UP = "android.wallpaper.wakingup";
/**
+ * Command for {@link #sendWallpaperCommand}: reported by System UI when the device keyguard
+ * starts going away.
+ * This command is triggered by {@link android.app.IActivityTaskManager#keyguardGoingAway(int)}.
+ *
+ * @hide
+ */
+ public static final String COMMAND_KEYGUARD_GOING_AWAY =
+ "android.wallpaper.keyguardgoingaway";
+
+ /**
* Command for {@link #sendWallpaperCommand}: reported by System UI when the device is going to
* sleep. The x and y arguments are a location (possibly very roughly) corresponding to the
* action that caused the device to go to sleep. For example, if the power button was pressed,
@@ -648,15 +658,8 @@
return currentWallpaper;
}
}
- if (returnDefault) {
- Bitmap defaultWallpaper = mDefaultWallpaper;
- if (defaultWallpaper == null || defaultWallpaper.isRecycled()) {
- defaultWallpaper = getDefaultWallpaper(context, which);
- synchronized (this) {
- mDefaultWallpaper = defaultWallpaper;
- }
- }
- return defaultWallpaper;
+ if (returnDefault || (which == FLAG_LOCK && isStaticWallpaper(FLAG_LOCK))) {
+ return getDefaultWallpaper(context, which);
}
return null;
}
@@ -695,7 +698,7 @@
}
// If user wallpaper is unavailable, may be the default one instead.
if ((dimensions == null || dimensions.width() == 0 || dimensions.height() == 0)
- && returnDefault) {
+ && (returnDefault || (which == FLAG_LOCK && isStaticWallpaper(FLAG_LOCK)))) {
InputStream is = openDefaultWallpaper(context, which);
if (is != null) {
try {
@@ -759,18 +762,39 @@
}
private Bitmap getDefaultWallpaper(Context context, @SetWallpaperFlags int which) {
- InputStream is = openDefaultWallpaper(context, which);
- if (is != null) {
- try {
- BitmapFactory.Options options = new BitmapFactory.Options();
- return BitmapFactory.decodeStream(is, null, options);
- } catch (OutOfMemoryError e) {
+ Bitmap defaultWallpaper = mDefaultWallpaper;
+ if (defaultWallpaper == null || defaultWallpaper.isRecycled()) {
+ defaultWallpaper = null;
+ try (InputStream is = openDefaultWallpaper(context, which)) {
+ if (is != null) {
+ BitmapFactory.Options options = new BitmapFactory.Options();
+ defaultWallpaper = BitmapFactory.decodeStream(is, null, options);
+ }
+ } catch (OutOfMemoryError | IOException e) {
Log.w(TAG, "Can't decode stream", e);
- } finally {
- IoUtils.closeQuietly(is);
}
}
- return null;
+ synchronized (this) {
+ mDefaultWallpaper = defaultWallpaper;
+ }
+ return defaultWallpaper;
+ }
+
+ /**
+ * Return true if there is a static wallpaper on the specified screen.
+ * With {@code which=}{@link #FLAG_LOCK}, always return false if the lockscreen doesn't run
+ * its own wallpaper engine.
+ */
+ private boolean isStaticWallpaper(@SetWallpaperFlags int which) {
+ if (mService == null) {
+ Log.w(TAG, "WallpaperService not running");
+ throw new RuntimeException(new DeadSystemException());
+ }
+ try {
+ return mService.isStaticWallpaper(which);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
}
}
@@ -872,21 +896,14 @@
* <li> Apps with {@link android.Manifest.permission#MANAGE_EXTERNAL_STORAGE}
* can still access the real wallpaper on all versions. </li>
* </ul>
- * <br>
*
- * Retrieve the current system wallpaper; if
- * no wallpaper is set, the system built-in static wallpaper is returned.
- * This is returned as an
- * abstract Drawable that you can install in a View to display whatever
- * wallpaper the user has currently set.
* <p>
- * This method can return null if there is no system wallpaper available, if
- * wallpapers are not supported in the current user, or if the calling app is not
- * permitted to access the system wallpaper.
+ * Equivalent to {@link #getDrawable(int)} with {@code which=}{@link #FLAG_SYSTEM}.
+ * </p>
*
- * @return Returns a Drawable object that will draw the system wallpaper,
- * or {@code null} if no system wallpaper exists or if the calling application
- * is not able to access the wallpaper.
+ * @return A Drawable object for the requested wallpaper.
+ *
+ * @see #getDrawable(int)
*
* @throws SecurityException as described in the note
*/
@@ -909,23 +926,29 @@
* <li> Apps with {@link android.Manifest.permission#MANAGE_EXTERNAL_STORAGE}
* can still access the real wallpaper on all versions. </li>
* </ul>
- * <br>
*
- * Retrieve the requested wallpaper; if
- * no wallpaper is set, the requested built-in static wallpaper is returned.
- * This is returned as an
- * abstract Drawable that you can install in a View to display whatever
- * wallpaper the user has currently set.
* <p>
- * This method can return null if the requested wallpaper is not available, if
- * wallpapers are not supported in the current user, or if the calling app is not
- * permitted to access the requested wallpaper.
+ * Retrieve the requested wallpaper for the specified wallpaper type if the wallpaper is not
+ * a live wallpaper. This method should not be used to display the user wallpaper on an app:
+ * {@link android.view.WindowManager.LayoutParams#FLAG_SHOW_WALLPAPER} should be used instead.
+ * </p>
+ * <p>
+ * When called with {@code which=}{@link #FLAG_SYSTEM},
+ * if there is a live wallpaper on home screen, the built-in default wallpaper is returned.
+ * </p>
+ * <p>
+ * When called with {@code which=}{@link #FLAG_LOCK}, if there is a live wallpaper
+ * on lock screen, or if the lock screen and home screen share the same wallpaper engine,
+ * {@code null} is returned.
+ * </p>
+ * <p>
+ * {@link #getWallpaperInfo(int)} can be used to determine whether there is a live wallpaper
+ * on a specified screen type.
+ * </p>
*
- * @param which The {@code FLAG_*} identifier of a valid wallpaper type. Throws
+ * @param which The {@code FLAG_*} identifier of a valid wallpaper type. Throws
* IllegalArgumentException if an invalid wallpaper is requested.
- * @return Returns a Drawable object that will draw the requested wallpaper,
- * or {@code null} if the requested wallpaper does not exist or if the calling application
- * is not able to access the wallpaper.
+ * @return A Drawable object for the requested wallpaper.
*
* @throws SecurityException as described in the note
*/
@@ -933,7 +956,8 @@
@RequiresPermission(anyOf = {MANAGE_EXTERNAL_STORAGE, READ_WALLPAPER_INTERNAL})
public Drawable getDrawable(@SetWallpaperFlags int which) {
final ColorManagementProxy cmProxy = getColorManagementProxy();
- Bitmap bm = sGlobals.peekWallpaperBitmap(mContext, true, which, cmProxy);
+ boolean returnDefault = which != FLAG_LOCK;
+ Bitmap bm = sGlobals.peekWallpaperBitmap(mContext, returnDefault, which, cmProxy);
if (bm != null) {
Drawable dr = new BitmapDrawable(mContext.getResources(), bm);
dr.setDither(false);
@@ -1165,15 +1189,14 @@
* <li> Apps with {@link android.Manifest.permission#MANAGE_EXTERNAL_STORAGE}
* can still access the real wallpaper on all versions. </li>
* </ul>
- * <br>
*
- * Retrieve the current system wallpaper; if there is no wallpaper set,
- * a null pointer is returned. This is returned as an
- * abstract Drawable that you can install in a View to display whatever
- * wallpaper the user has currently set.
+ * <p>
+ * Equivalent to {@link #getDrawable()}.
+ * </p>
*
- * @return Returns a Drawable object that will draw the wallpaper or a
- * null pointer if wallpaper is unset.
+ * @return A Drawable object for the requested wallpaper.
+ *
+ * @see #getDrawable()
*
* @throws SecurityException as described in the note
*/
@@ -1196,31 +1219,23 @@
* <li> Apps with {@link android.Manifest.permission#MANAGE_EXTERNAL_STORAGE}
* can still access the real wallpaper on all versions. </li>
* </ul>
- * <br>
*
- * Retrieve the requested wallpaper; if there is no wallpaper set,
- * a null pointer is returned. This is returned as an
- * abstract Drawable that you can install in a View to display whatever
- * wallpaper the user has currently set.
+ * <p>
+ * Equivalent to {@link #getDrawable(int)}.
+ * </p>
*
- * @param which The {@code FLAG_*} identifier of a valid wallpaper type. Throws
+ * @param which The {@code FLAG_*} identifier of a valid wallpaper type. Throws
* IllegalArgumentException if an invalid wallpaper is requested.
- * @return Returns a Drawable object that will draw the wallpaper or a null pointer if
- * wallpaper is unset.
+ * @return A Drawable object for the requested wallpaper.
+ *
+ * @see #getDrawable(int)
*
* @throws SecurityException as described in the note
*/
@Nullable
@RequiresPermission(anyOf = {MANAGE_EXTERNAL_STORAGE, READ_WALLPAPER_INTERNAL})
public Drawable peekDrawable(@SetWallpaperFlags int which) {
- final ColorManagementProxy cmProxy = getColorManagementProxy();
- Bitmap bm = sGlobals.peekWallpaperBitmap(mContext, true, which, cmProxy);
- if (bm != null) {
- Drawable dr = new BitmapDrawable(mContext.getResources(), bm);
- dr.setDither(false);
- return dr;
- }
- return null;
+ return getDrawable(which);
}
/**
@@ -1236,19 +1251,14 @@
* <li> Apps with {@link android.Manifest.permission#MANAGE_EXTERNAL_STORAGE}
* can still access the real wallpaper on all versions. </li>
* </ul>
- * <br>
*
- * Like {@link #getDrawable()}, but the returned Drawable has a number
- * of limitations to reduce its overhead as much as possible. It will
- * never scale the wallpaper (only centering it if the requested bounds
- * do match the bitmap bounds, which should not be typical), doesn't
- * allow setting an alpha, color filter, or other attributes, etc. The
- * bounds of the returned drawable will be initialized to the same bounds
- * as the wallpaper, so normally you will not need to touch it. The
- * drawable also assumes that it will be used in a context running in
- * the same density as the screen (not in density compatibility mode).
+ * <p>
+ * Equivalent to {@link #getFastDrawable(int)} with {@code which=}{@link #FLAG_SYSTEM}.
+ * </p>
*
- * @return Returns a Drawable object that will draw the wallpaper.
+ * @return A Drawable object for the requested wallpaper.
+ *
+ * @see #getFastDrawable(int)
*
* @throws SecurityException as described in the note
*/
@@ -1285,7 +1295,8 @@
*
* @param which The {@code FLAG_*} identifier of a valid wallpaper type. Throws
* IllegalArgumentException if an invalid wallpaper is requested.
- * @return Returns a Drawable object that will draw the wallpaper.
+ * @return An optimized Drawable object for the requested wallpaper, or {@code null}
+ * in some cases as specified in {@link #getDrawable(int)}.
*
* @throws SecurityException as described in the note
*/
@@ -1293,7 +1304,8 @@
@RequiresPermission(anyOf = {MANAGE_EXTERNAL_STORAGE, READ_WALLPAPER_INTERNAL})
public Drawable getFastDrawable(@SetWallpaperFlags int which) {
final ColorManagementProxy cmProxy = getColorManagementProxy();
- Bitmap bm = sGlobals.peekWallpaperBitmap(mContext, true, which, cmProxy);
+ boolean returnDefault = which != FLAG_LOCK;
+ Bitmap bm = sGlobals.peekWallpaperBitmap(mContext, returnDefault, which, cmProxy);
if (bm != null) {
return new FastBitmapDrawable(bm);
}
@@ -1313,13 +1325,14 @@
* <li> Apps with {@link android.Manifest.permission#MANAGE_EXTERNAL_STORAGE}
* can still access the real wallpaper on all versions. </li>
* </ul>
- * <br>
*
- * Like {@link #getFastDrawable()}, but if there is no wallpaper set,
- * a null pointer is returned.
+ * <p>
+ * Equivalent to {@link #getFastDrawable()}.
+ * </p>
*
- * @return Returns an optimized Drawable object that will draw the
- * wallpaper or a null pointer if these is none.
+ * @return An optimized Drawable object for the requested wallpaper.
+ *
+ * @see #getFastDrawable()
*
* @throws SecurityException as described in the note
*/
@@ -1342,31 +1355,29 @@
* <li> Apps with {@link android.Manifest.permission#MANAGE_EXTERNAL_STORAGE}
* can still access the real wallpaper on all versions. </li>
* </ul>
- * <br>
*
- * Like {@link #getFastDrawable()}, but if there is no wallpaper set,
- * a null pointer is returned.
+ * <p>
+ * Equivalent to {@link #getFastDrawable(int)}.
+ * </p>
*
* @param which The {@code FLAG_*} identifier of a valid wallpaper type. Throws
* IllegalArgumentException if an invalid wallpaper is requested.
- * @return Returns an optimized Drawable object that will draw the
- * wallpaper or a null pointer if these is none.
+ * @return An optimized Drawable object for the requested wallpaper.
*
* @throws SecurityException as described in the note
*/
@Nullable
@RequiresPermission(anyOf = {MANAGE_EXTERNAL_STORAGE, READ_WALLPAPER_INTERNAL})
public Drawable peekFastDrawable(@SetWallpaperFlags int which) {
- final ColorManagementProxy cmProxy = getColorManagementProxy();
- Bitmap bm = sGlobals.peekWallpaperBitmap(mContext, true, which, cmProxy);
- if (bm != null) {
- return new FastBitmapDrawable(bm);
- }
- return null;
+ return getFastDrawable(which);
}
/**
- * Whether the wallpaper supports Wide Color Gamut or not.
+ * Whether the wallpaper supports Wide Color Gamut or not. This is only meant to be used by
+ * ImageWallpaper, and will always return false if the wallpaper for the specified screen
+ * is not an ImageWallpaper. This will also return false when called with {@link #FLAG_LOCK} if
+ * the lock and home screen share the same wallpaper engine.
+ *
* @param which The wallpaper whose image file is to be retrieved. Must be a single
* defined kind of wallpaper, either {@link #FLAG_SYSTEM} or {@link #FLAG_LOCK}.
* @return true when supported.
@@ -1412,7 +1423,7 @@
}
/**
- * Like {@link #getDrawable()} but returns a Bitmap.
+ * Like {@link #getDrawable(int)} but returns a Bitmap.
*
* @param hardware Asks for a hardware backed bitmap.
* @param which Specifies home or lock screen
@@ -1435,7 +1446,7 @@
}
/**
- * Like {@link #getDrawable()} but returns a Bitmap for the provided user.
+ * Like {@link #getDrawable(int)} but returns a Bitmap for the provided user.
*
* @param which Specifies home or lock screen
* @hide
@@ -1443,12 +1454,29 @@
@TestApi
@Nullable
public Bitmap getBitmapAsUser(int userId, boolean hardware, @SetWallpaperFlags int which) {
+ boolean returnDefault = which != FLAG_LOCK;
+ return getBitmapAsUser(userId, hardware, which, returnDefault);
+ }
+
+ /**
+ * Overload of {@link #getBitmapAsUser(int, boolean, int)} with a returnDefault argument.
+ *
+ * @param returnDefault If true, return the default static wallpaper if no custom static
+ * wallpaper is set on the specified screen.
+ * If false, return {@code null} in that case.
+ * @hide
+ */
+ @Nullable
+ public Bitmap getBitmapAsUser(int userId, boolean hardware,
+ @SetWallpaperFlags int which, boolean returnDefault) {
final ColorManagementProxy cmProxy = getColorManagementProxy();
- return sGlobals.peekWallpaperBitmap(mContext, true, which, userId, hardware, cmProxy);
+ return sGlobals.peekWallpaperBitmap(mContext, returnDefault,
+ which, userId, hardware, cmProxy);
}
/**
* Peek the dimensions of system wallpaper of the user without decoding it.
+ * Equivalent to {@link #peekBitmapDimensions(int)} with {@code which=}{@link #FLAG_SYSTEM}.
*
* @return the dimensions of system wallpaper
* @hide
@@ -1462,16 +1490,45 @@
/**
* Peek the dimensions of given wallpaper of the user without decoding it.
*
- * @param which Wallpaper type. Must be either {@link #FLAG_SYSTEM} or
- * {@link #FLAG_LOCK}.
- * @return the dimensions of system wallpaper
+ * <p>
+ * When called with {@code which=}{@link #FLAG_SYSTEM}, if there is a live wallpaper on
+ * home screen, the built-in default wallpaper dimensions are returned.
+ * </p>
+ * <p>
+ * When called with {@code which=}{@link #FLAG_LOCK}, if there is a live wallpaper
+ * on lock screen, or if the lock screen and home screen share the same wallpaper engine,
+ * {@code null} is returned.
+ * </p>
+ * <p>
+ * {@link #getWallpaperInfo(int)} can be used to determine whether there is a live wallpaper
+ * on a specified screen type.
+ * </p>
+ *
+ * @param which Wallpaper type. Must be either {@link #FLAG_SYSTEM} or {@link #FLAG_LOCK}.
+ * @return the dimensions of specified wallpaper
* @hide
*/
@TestApi
@Nullable
public Rect peekBitmapDimensions(@SetWallpaperFlags int which) {
+ boolean returnDefault = which != FLAG_LOCK;
+ return peekBitmapDimensions(which, returnDefault);
+ }
+
+ /**
+ * Overload of {@link #peekBitmapDimensions(int)} with a returnDefault argument.
+ *
+ * @param which Wallpaper type. Must be either {@link #FLAG_SYSTEM} or {@link #FLAG_LOCK}.
+ * @param returnDefault If true, always return the default static wallpaper dimensions
+ * if no custom static wallpaper is set on the specified screen.
+ * If false, always return {@code null} in that case.
+ * @return the dimensions of specified wallpaper
+ * @hide
+ */
+ @Nullable
+ public Rect peekBitmapDimensions(@SetWallpaperFlags int which, boolean returnDefault) {
checkExactlyOneWallpaperFlagSet(which);
- return sGlobals.peekWallpaperDimensions(mContext, true /* returnDefault */, which,
+ return sGlobals.peekWallpaperDimensions(mContext, returnDefault, which,
mContext.getUserId());
}
@@ -2855,22 +2912,63 @@
}
}
- // Check if the package exists
- if (cn != null) {
- try {
- final PackageManager packageManager = context.getPackageManager();
- packageManager.getPackageInfo(cn.getPackageName(),
- PackageManager.MATCH_DIRECT_BOOT_AWARE
- | PackageManager.MATCH_DIRECT_BOOT_UNAWARE);
- } catch (PackageManager.NameNotFoundException e) {
- cn = null;
- }
+ if (!isComponentExist(context, cn)) {
+ cn = null;
}
return cn;
}
/**
+ * Return {@link ComponentName} of the CMF default wallpaper, or
+ * {@link #getDefaultWallpaperComponent(Context)} if none is defined.
+ *
+ * @hide
+ */
+ public static ComponentName getCmfDefaultWallpaperComponent(Context context) {
+ ComponentName cn = null;
+ String[] cmfWallpaperMap = context.getResources().getStringArray(
+ com.android.internal.R.array.cmf_default_wallpaper_component);
+ if (cmfWallpaperMap == null || cmfWallpaperMap.length == 0) {
+ Log.d(TAG, "No CMF wallpaper config");
+ return getDefaultWallpaperComponent(context);
+ }
+
+ for (String entry : cmfWallpaperMap) {
+ String[] cmfWallpaper;
+ if (!TextUtils.isEmpty(entry)) {
+ cmfWallpaper = entry.split(",");
+ if (cmfWallpaper != null && cmfWallpaper.length == 2 && VALUE_CMF_COLOR.equals(
+ cmfWallpaper[0]) && !TextUtils.isEmpty(cmfWallpaper[1])) {
+ cn = ComponentName.unflattenFromString(cmfWallpaper[1]);
+ break;
+ }
+ }
+ }
+
+ if (!isComponentExist(context, cn)) {
+ cn = null;
+ }
+
+ return cn;
+ }
+
+ private static boolean isComponentExist(Context context, ComponentName cn) {
+ if (cn == null) {
+ return false;
+ }
+ try {
+ final PackageManager packageManager = context.getPackageManager();
+ packageManager.getPackageInfo(cn.getPackageName(),
+ PackageManager.MATCH_DIRECT_BOOT_AWARE
+ | PackageManager.MATCH_DIRECT_BOOT_UNAWARE);
+ } catch (PackageManager.NameNotFoundException e) {
+ return false;
+ }
+ return true;
+ }
+
+ /**
* Register a callback for lock wallpaper observation. Only the OS may use this.
*
* @return true on success; false on error.
diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java
index e59901b..e9fb811 100644
--- a/core/java/android/app/admin/DevicePolicyManager.java
+++ b/core/java/android/app/admin/DevicePolicyManager.java
@@ -4040,8 +4040,7 @@
public static @interface MtePolicy {}
/**
- * Called by a device owner, profile owner of an organization-owned device, or holder of the
- * {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_MTE} permission to set the Memory
+ * Called by a device owner, profile owner of an organization-owned device, to set the Memory
* Tagging Extension (MTE) policy. MTE is a CPU extension that allows to protect against certain
* classes of security problems at a small runtime performance cost overhead.
*
@@ -4067,8 +4066,7 @@
}
/**
- * Called by a device owner, profile owner of an organization-owned device, or a holder of the
- * {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_MTE} permission to
+ * Called by a device owner, profile owner of an organization-owned device to
* get the Memory Tagging Extension (MTE) policy
*
* <a href="https://source.android.com/docs/security/test/memory-safety/arm-mte">
@@ -5278,9 +5276,7 @@
}
/**
- * Called by a device admin or holder of the
- * {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_LOCK_CREDENTIALS} permission to set
- * the password expiration timeout. Calling this method will
+ * Called by a device admin to set the password expiration timeout. Calling this method will
* restart the countdown for password expiration for the given admin, as will changing the
* device password (for all admins).
* <p>
@@ -5309,10 +5305,7 @@
* @param timeout The limit (in ms) that a password can remain in effect. A value of 0 means
* there is no restriction (unlimited).
* @throws SecurityException if {@code admin} is not an active administrator or {@code admin}
- * does not use {@link DeviceAdminInfo#USES_POLICY_EXPIRE_PASSWORD} and the caller
- * does not hold the
- * {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_LOCK_CREDENTIALS}
- * permission
+ * does not use {@link DeviceAdminInfo#USES_POLICY_EXPIRE_PASSWORD}
*/
@RequiresFeature(PackageManager.FEATURE_SECURE_LOCK_SCREEN)
@RequiresPermission(value = MANAGE_DEVICE_POLICY_LOCK_CREDENTIALS, conditional = true)
@@ -5476,8 +5469,7 @@
*
* @return {@code true} if the password meets the policy requirements, {@code false} otherwise
* @throws SecurityException if the calling application isn't an active admin that uses
- * {@link DeviceAdminInfo#USES_POLICY_LIMIT_PASSWORD} and does not hold the
- * {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_LOCK_CREDENTIALS} permission
+ * {@link DeviceAdminInfo#USES_POLICY_LIMIT_PASSWORD}
* @throws IllegalStateException if the user isn't unlocked
*/
@RequiresPermission(value = MANAGE_DEVICE_POLICY_LOCK_CREDENTIALS, conditional = true)
@@ -5545,8 +5537,7 @@
* <p>Note that when called from a profile which uses an unified challenge with its parent, the
* screen lock complexity of the parent will be returned.
*
- * <p>Apps need the {@link permission#REQUEST_PASSWORD_COMPLEXITY} or
- * {@link permission#MANAGE_DEVICE_POLICY_LOCK_CREDENTIALS} permissions to call this
+ * <p>Apps need the {@link permission#REQUEST_PASSWORD_COMPLEXITY} permission to call this
* method. On Android {@link android.os.Build.VERSION_CODES#S} and above, the calling
* application does not need this permission if it is a device owner or a profile owner.
*
@@ -5556,9 +5547,8 @@
*
* @throws IllegalStateException if the user is not unlocked.
* @throws SecurityException if the calling application does not have the permission
- * {@link permission#REQUEST_PASSWORD_COMPLEXITY} or
- * {@link permission#MANAGE_DEVICE_POLICY_LOCK_CREDENTIALS}, and
- * is not a device owner or a profile owner.
+ * {@link permission#REQUEST_PASSWORD_COMPLEXITY}, and is not a
+ * device owner or a profile owner.
*/
@PasswordComplexity
@RequiresPermission(anyOf={MANAGE_DEVICE_POLICY_LOCK_CREDENTIALS, REQUEST_PASSWORD_COMPLEXITY}, conditional = true)
@@ -5595,9 +5585,8 @@
* with {@link #PASSWORD_QUALITY_UNSPECIFIED} on that instance prior to setting complexity
* requirement for the managed profile.
*
- * @throws SecurityException if the calling application is not a device owner, a profile
- * owner, or a holder of the
- * {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_LOCK_CREDENTIALS} permission.
+ * @throws SecurityException if the calling application is not a device owner or a profile
+ * owner.
* @throws IllegalArgumentException if the complexity level is not one of the four above.
* @throws IllegalStateException if the caller is trying to set password complexity while there
* are password requirements specified using {@link #setPasswordQuality(ComponentName, int)}
@@ -5631,8 +5620,7 @@
* restrictions on the parent profile.
*
* @throws SecurityException if the calling application is not a device owner or a profile
- * owner and does not hold the
- * {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_LOCK_CREDENTIALS} permission.
+ * owner.
*/
@PasswordComplexity
@RequiresPermission(value = MANAGE_DEVICE_POLICY_LOCK_CREDENTIALS, conditional = true)
@@ -5744,8 +5732,7 @@
* @return The number of times user has entered an incorrect password since the last correct
* password entry.
* @throws SecurityException if the calling application does not own an active administrator
- * that uses {@link DeviceAdminInfo#USES_POLICY_WATCH_LOGIN} and does not hold the
- * @link android.Manifest.permission#MANAGE_DEVICE_POLICY_LOCK_CREDENTIALS} permission.
+ * that uses {@link DeviceAdminInfo#USES_POLICY_WATCH_LOGIN}
*/
@RequiresFeature(PackageManager.FEATURE_SECURE_LOCK_SCREEN)
@RequiresPermission(value = MANAGE_DEVICE_POLICY_LOCK_CREDENTIALS, conditional = true)
@@ -5816,9 +5803,6 @@
* profile.
* <p>On devices not supporting {@link PackageManager#FEATURE_SECURE_LOCK_SCREEN} feature, the
* password is always empty and this method has no effect - i.e. the policy is not set.
- * <p>
- * This policy can be set by holders of the
- * {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_WIPE_DATA} permission.
*
* @param admin Which {@link DeviceAdminReceiver} this request is associated with. Null if the
* caller is not a device admin.
@@ -5991,11 +5975,9 @@
}
/**
- * Called by a profile owner, device owner or a holder of the permission
- * {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_RESET_PASSWORD} to provision a token
- * which can later be used to reset the device lockscreen password (if called by on the main or
- * system user), or managed profile challenge (if called on a managed profile), via
- * {@link #resetPasswordWithToken}.
+ * Called by a profile or device owner to provision a token which can later be used to reset the
+ * device lockscreen password (if called by device owner), or managed profile challenge (if
+ * called by profile owner), via {@link #resetPasswordWithToken}.
* <p>
* If the user currently has a lockscreen password, the provisioned token will not be
* immediately usable; it only becomes active after the user performs a confirm credential
@@ -6023,9 +6005,7 @@
* @param token a secure token a least 32-byte long, which must be generated by a
* cryptographically strong random number generator.
* @return true if the operation is successful, false otherwise.
- * @throws SecurityException if admin is not a device or profile owner and the caller does
- * not hold the permission
- * {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_RESET_PASSWORD}.
+ * @throws SecurityException if admin is not a device or profile owner.
* @throws IllegalArgumentException if the supplied token is invalid.
*/
@RequiresFeature(PackageManager.FEATURE_SECURE_LOCK_SCREEN)
@@ -6101,10 +6081,8 @@
}
/**
- * Called by device owner, profile owner or a holder of the permission
- * {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_RESET_PASSWORD}to force set a new
- * device unlock password or a managed profile challenge on current user. This takes effect
- * immediately.
+ * Called by device or profile owner to force set a new device unlock password or a managed
+ * profile challenge on current user. This takes effect immediately.
* <p>
* Unlike {@link #resetPassword}, this API can change the password even before the user or
* device is unlocked or decrypted. The supplied token must have been previously provisioned via
@@ -6131,8 +6109,7 @@
* {@link #RESET_PASSWORD_DO_NOT_ASK_CREDENTIALS_ON_BOOT}.
* @return Returns true if the password was applied, or false if it is not acceptable for the
* current constraints.
- * @throws SecurityException if admin is not a device or profile owner and the caller does not
- * hold the permission {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_RESET_PASSWORD}.
+ * @throws SecurityException if admin is not a device or profile owner.
* @throws IllegalStateException if the provided token is not valid.
*/
@RequiresFeature(PackageManager.FEATURE_SECURE_LOCK_SCREEN)
@@ -6168,8 +6145,7 @@
* @param timeMs The new desired maximum time to lock in milliseconds. A value of 0 means there
* is no restriction.
* @throws SecurityException if {@code admin} is not an active administrator or it does not use
- * {@link DeviceAdminInfo#USES_POLICY_FORCE_LOCK} and the caller does not hold the
- * {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_LOCK} permission
+ * {@link DeviceAdminInfo#USES_POLICY_FORCE_LOCK}
*/
@RequiresPermission(value = MANAGE_DEVICE_POLICY_LOCK, conditional = true)
public void setMaximumTimeToLock(@Nullable ComponentName admin, long timeMs) {
@@ -6214,9 +6190,7 @@
}
/**
- * Called by a device owner, profile owner, or holder of the
- * {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_LOCK_CREDENTIALS} permission to set
- * the timeout after which unlocking with secondary, non
+ * Called by a device/profile owner to set the timeout after which unlocking with secondary, non
* strong auth (e.g. fingerprint, face, trust agents) times out, i.e. the user has to use a
* strong authentication method like password, pin or pattern.
*
@@ -6247,8 +6221,7 @@
* auth at all times using {@link #KEYGUARD_DISABLE_FINGERPRINT} and/or
* {@link #KEYGUARD_DISABLE_TRUST_AGENTS}.
*
- * @throws SecurityException if {@code admin} is not permitted to set this policy.
- *
+ * @throws SecurityException if {@code admin} is not a device or profile owner.
*/
@RequiresFeature(PackageManager.FEATURE_SECURE_LOCK_SCREEN)
@RequiresPermission(value = MANAGE_DEVICE_POLICY_LOCK_CREDENTIALS, conditional = true)
@@ -6325,8 +6298,7 @@
* <p>
* This method secures the device in response to an urgent situation, such as a lost or stolen
* device. After this method is called, the device must be unlocked using strong authentication
- * (PIN, pattern, or password). This API is for use only by device admins and holders of the
- * {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_LOCK} permission.
+ * (PIN, pattern, or password). This API is intended for use only by device admins.
* <p>
* From version {@link android.os.Build.VERSION_CODES#R} onwards, the caller must either have
* the LOCK_DEVICE permission or the device must have the device admin feature; if neither is
@@ -6350,8 +6322,7 @@
* Equivalent to calling {@link #lockNow(int)} with no flags.
*
* @throws SecurityException if the calling application does not own an active administrator
- * that uses {@link DeviceAdminInfo#USES_POLICY_FORCE_LOCK} and does not hold the
- * {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_LOCK} permission
+ * that uses {@link DeviceAdminInfo#USES_POLICY_FORCE_LOCK}
*/
@RequiresPermission(value = MANAGE_DEVICE_POLICY_LOCK, conditional = true)
public void lockNow() {
@@ -6563,8 +6534,7 @@
}
/**
- * Callable by device owner, profile owner of an organization-owned device, or a holder of the
- * {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_FACTORY_RESET} permission to set a
+ * Callable by device owner or profile owner of an organization-owned device, to set a
* factory reset protection (FRP) policy. When a new policy is set, the system
* notifies the FRP management agent of a policy change by broadcasting
* {@code ACTION_RESET_PROTECTION_POLICY_CHANGED}.
@@ -6572,9 +6542,8 @@
* @param admin Which {@link DeviceAdminReceiver} this request is associated with. Null if the
* caller is not a device admin
* @param policy the new FRP policy, or {@code null} to clear the current policy.
- * @throws SecurityException if {@code admin} is not a device owner, profile owner of
- * an organization-owned device, or holder of the
- * {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_FACTORY_RESET} permission
+ * @throws SecurityException if {@code admin} is not a device owner or a profile owner of
+ * an organization-owned device.
* @throws UnsupportedOperationException if factory reset protection is not
* supported on the device.
*/
@@ -6592,10 +6561,9 @@
}
/**
- * Callable by device owner, profile owner of an organization-owned device, or
- * holder of the {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_FACTORY_RESET}
- * permission to retrieve the current factory reset protection (FRP)
- * policy set previously by {@link #setFactoryResetProtectionPolicy}.
+ * Callable by device owner or profile owner of an organization-owned device, to retrieve
+ * the current factory reset protection (FRP) policy set previously by
+ * {@link #setFactoryResetProtectionPolicy}.
* <p>
* This method can also be called by the FRP management agent on device or with the permission
* {@link android.Manifest.permission#MASTER_CLEAR}, in which case, it can pass {@code null}
@@ -6605,9 +6573,7 @@
* {@code null} if the caller is not a device admin
* @return The current FRP policy object or {@code null} if no policy is set.
* @throws SecurityException if {@code admin} is not a device owner, a profile owner of
- * an organization-owned device, a holder of the
- * {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_FACTORY_RESET}
- * permission, or the FRP management agent.
+ * an organization-owned device or the FRP management agent.
* @throws UnsupportedOperationException if factory reset protection is not
* supported on the device.
*/
@@ -7541,8 +7507,6 @@
* <li>Profile owner</li>
* <li>Delegated certificate installer</li>
* <li>Credential management app</li>
- * <li>An app that holds the
- * {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_CERTIFICATES} permission</li>
* </ul>
*
* <p>From Android {@link android.os.Build.VERSION_CODES#S}, the credential management app
@@ -7553,10 +7517,9 @@
* {@code null} if the caller is not a device admin.
* @param alias The private key alias under which the certificate is installed.
* @return {@code true} if the private key alias no longer exists, {@code false} otherwise.
- * @throws SecurityException if {@code admin} is not {@code null} and not a device owner or
- * profile owner, or {@code admin} is null but the calling application is not a
- * delegated certificate installer, credential management app and does not have the
- * {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_CERTIFICATES} permission.
+ * @throws SecurityException if {@code admin} is not {@code null} and not a device or profile
+ * owner, or {@code admin} is null but the calling application is not a delegated
+ * certificate installer or credential management app.
* @see #setDelegatedScopes
* @see #DELEGATION_CERT_INSTALL
*/
@@ -7643,23 +7606,19 @@
* supports these features, refer to {@link #isDeviceIdAttestationSupported()} and
* {@link #isUniqueDeviceAttestationSupported()}.
*
- * <p>Device owner, profile owner, their delegated certificate installer, the credential
- * management app or an app that holds the
- * {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_CERTIFICATES} permission can use
- * {@link #ID_TYPE_BASE_INFO} to request inclusion of the general device information including
- * manufacturer, model, brand, device and product in the attestation record.
- * Only device owner, profile owner on an organization-owned device or affiliated user, their
- * delegated certificate installers or an app that holds the
- * {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_CERTIFICATES} permission can use
- * {@link #ID_TYPE_SERIAL}, {@link #ID_TYPE_IMEI} and {@link #ID_TYPE_MEID} to request unique
- * device identifiers to be attested (the serial number, IMEI and MEID correspondingly),
- * if supported by the device (see {@link #isDeviceIdAttestationSupported()}).
- * Additionally, device owner, profile owner on an organization-owned device, their delegated
- * certificate installers and an app that holds the
- * {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_CERTIFICATES} permission can also
- * request the attestation record to be signed using an individual attestation certificate by
- * specifying the {@link #ID_TYPE_INDIVIDUAL_ATTESTATION} flag (if supported by the device,
- * see {@link #isUniqueDeviceAttestationSupported()}).
+ * <p>Device owner, profile owner, their delegated certificate installer and the credential
+ * management app can use {@link #ID_TYPE_BASE_INFO} to request inclusion of the general device
+ * information including manufacturer, model, brand, device and product in the attestation
+ * record.
+ * Only device owner, profile owner on an organization-owned device or affiliated user, and
+ * their delegated certificate installers can use {@link #ID_TYPE_SERIAL}, {@link #ID_TYPE_IMEI}
+ * and {@link #ID_TYPE_MEID} to request unique device identifiers to be attested (the serial
+ * number, IMEI and MEID correspondingly), if supported by the device
+ * (see {@link #isDeviceIdAttestationSupported()}).
+ * Additionally, device owner, profile owner on an organization-owned device and their delegated
+ * certificate installers can also request the attestation record to be signed using an
+ * individual attestation certificate by specifying the {@link #ID_TYPE_INDIVIDUAL_ATTESTATION}
+ * flag (if supported by the device, see {@link #isUniqueDeviceAttestationSupported()}).
* <p>
* If any of {@link #ID_TYPE_SERIAL}, {@link #ID_TYPE_IMEI} and {@link #ID_TYPE_MEID}
* is set, it is implicitly assumed that {@link #ID_TYPE_BASE_INFO} is also set.
@@ -7684,14 +7643,12 @@
* If any flag is specified, then an attestation challenge must be included in the
* {@code keySpec}.
* @return A non-null {@code AttestedKeyPair} if the key generation succeeded, null otherwise.
- * @throws SecurityException if {@code admin} is not {@code null} and not a device owner or
- * profile owner, or {@code admin} is null but the calling application is not a
- * delegated certificate installer, credential management app and does not have the
- * {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_CERTIFICATES} permission.
- * If Device ID attestation is requested (using {@link #ID_TYPE_SERIAL},
- * {@link #ID_TYPE_IMEI} or {@link #ID_TYPE_MEID}), the caller must be the Device Owner,
- * the Certificate Installer delegate or have the
- * {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_CERTIFICATES} permission.
+ * @throws SecurityException if {@code admin} is not {@code null} and not a device or profile
+ * owner, or {@code admin} is null but the calling application is not a delegated
+ * certificate installer or credential management app. If Device ID attestation is
+ * requested (using {@link #ID_TYPE_SERIAL}, {@link #ID_TYPE_IMEI} or
+ * {@link #ID_TYPE_MEID}), the caller must be the Device Owner or the Certificate
+ * Installer delegate.
* @throws IllegalArgumentException in the following cases:
* <p>
* <ul>
@@ -7974,8 +7931,6 @@
* <li>Profile owner</li>
* <li>Delegated certificate installer</li>
* <li>Credential management app</li>
- * <li>An app that holds the
- * {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_CERTIFICATES} permission</li>
* </ul>
*
* <p>From Android {@link android.os.Build.VERSION_CODES#S}, the credential management app
@@ -7996,10 +7951,9 @@
* {@link android.app.admin.DeviceAdminReceiver#onChoosePrivateKeyAlias}.
* @return {@code true} if the provided {@code alias} exists and the certificates has been
* successfully associated with it, {@code false} otherwise.
- * @throws SecurityException if {@code admin} is not {@code null} and not a device owner or
- * profile owner, or {@code admin} is null but the calling application is not a
- * delegated certificate installer, credential management app and does not have the
- * {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_CERTIFICATES} permission.
+ * @throws SecurityException if {@code admin} is not {@code null} and not a device or profile
+ * owner, or {@code admin} is null but the calling application is not a delegated
+ * certificate installer or credential management app.
*/
@RequiresPermission(value = MANAGE_DEVICE_POLICY_CERTIFICATES, conditional = true)
public boolean setKeyPairCertificate(@Nullable ComponentName admin,
@@ -8387,7 +8341,7 @@
* <p>
* This method can be called on the {@link DevicePolicyManager} instance,
* returned by {@link #getParentProfileInstance(ComponentName)}, where the caller must be
- * the profile owner of an organization-owned managed profile
+ * the profile owner of an organization-owned managed profile.
* <p>
* If the caller is device owner, then the restriction will be applied to all users. If
* called on the parent instance, then the restriction will be applied on the personal profile.
@@ -8430,9 +8384,7 @@
* <p>
* This method can be called on the {@link DevicePolicyManager} instance,
* returned by {@link #getParentProfileInstance(ComponentName)}, where the caller must be
- * the profile owner of an organization-owned managed profile or the caller has been granted
- * the permission {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_CAMERA} and the
- * cross-user permission {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS}.
+ * the profile owner of an organization-owned managed profile.
*
* @param admin The name of the admin component to check, or {@code null} to check whether any
* admins have disabled the camera
@@ -8483,11 +8435,9 @@
}
/**
- * Called by a device owner, profile owner, or holder of the
- * {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_SCREEN_CAPTURE} permission to set
- * whether the screen capture is disabled. Disabling screen capture also prevents the
- * content from being shown on display devices that do not have a secure video output.
- * See {@link android.view.Display#FLAG_SECURE} for more details about
+ * Called by a device/profile owner to set whether the screen capture is disabled. Disabling
+ * screen capture also prevents the content from being shown on display devices that do not have
+ * a secure video output. See {@link android.view.Display#FLAG_SECURE} for more details about
* secure surfaces and secure displays.
* <p>
* This method can be called on the {@link DevicePolicyManager} instance, returned by
@@ -8696,10 +8646,8 @@
}
/**
- * Called by a device owner, a profile owner for the primary user, a profile
- * owner of an organization-owned managed profile or, starting from Android
- * {@link android.os.Build.VERSION_CODES#UPSIDE_DOWN_CAKE}, holders of the permission
- * {@link android.Manifest.permission#SET_TIME} to turn auto time on and off.
+ * Called by a device owner, a profile owner for the primary user or a profile
+ * owner of an organization-owned managed profile to turn auto time on and off.
* Callers are recommended to use {@link UserManager#DISALLOW_CONFIG_DATE_TIME}
* to prevent the user from changing this setting.
* <p>
@@ -8711,8 +8659,7 @@
* caller is not a device admin.
* @param enabled Whether time should be obtained automatically from the network or not.
* @throws SecurityException if caller is not a device owner, a profile owner for the
- * primary user, or a profile owner of an organization-owned managed profile or a holder of the
- * permission {@link android.Manifest.permission#SET_TIME}.
+ * primary user, or a profile owner of an organization-owned managed profile.
*/
@RequiresPermission(value = SET_TIME, conditional = true)
public void setAutoTimeEnabled(@Nullable ComponentName admin, boolean enabled) {
@@ -8729,19 +8676,15 @@
/**
* Returns true if auto time is enabled on the device.
*
- * <p> Starting from Android {@link android.os.Build.VERSION_CODES#UPSIDE_DOWN_CAKE}, callers
- * are also able to call this method if they hold the permission
- *{@link android.Manifest.permission#SET_TIME}.
- *
* @param admin Which {@link DeviceAdminReceiver} this request is associated with. Null if the
* caller is not a device admin.
* @return true if auto time is enabled on the device.
- * @throws SecurityException if the caller is not a device owner, a profile
- * owner for the primary user, or a profile owner of an organization-owned managed profile or a
- * holder of the permission {@link android.Manifest.permission#SET_TIME}.
+ * @throws SecurityException if caller is not a device owner, a profile owner for the
+ * primary user, or a profile owner of an organization-owned managed profile.
*/
@RequiresPermission(anyOf = {SET_TIME, QUERY_ADMIN_POLICY}, conditional = true)
public boolean getAutoTimeEnabled(@Nullable ComponentName admin) {
+ throwIfParentInstance("getAutoTimeEnabled");
if (mService != null) {
try {
return mService.getAutoTimeEnabled(admin, mContext.getPackageName());
@@ -8753,10 +8696,8 @@
}
/**
- * Called by a device owner, a profile owner for the primary user, a profile
- * owner of an organization-owned managed profile or, starting from Android
- * {@link android.os.Build.VERSION_CODES#UPSIDE_DOWN_CAKE}, holders of the permission
- * {@link android.Manifest.permission#SET_TIME} to turn auto time zone on and off.
+ * Called by a device owner, a profile owner for the primary user or a profile
+ * owner of an organization-owned managed profile to turn auto time zone on and off.
* Callers are recommended to use {@link UserManager#DISALLOW_CONFIG_DATE_TIME}
* to prevent the user from changing this setting.
* <p>
@@ -8768,8 +8709,7 @@
* caller is not a device admin.
* @param enabled Whether time zone should be obtained automatically from the network or not.
* @throws SecurityException if caller is not a device owner, a profile owner for the
- * primary user, or a profile owner of an organization-owned managed profile or a holder of the
- * permission {@link android.Manifest.permission#SET_TIME_ZONE}.
+ * primary user, or a profile owner of an organization-owned managed profile.
*/
@SupportsCoexistence
@RequiresPermission(value = SET_TIME_ZONE, conditional = true)
@@ -8787,16 +8727,11 @@
/**
* Returns true if auto time zone is enabled on the device.
*
- * <p> Starting from Android {@link android.os.Build.VERSION_CODES#UPSIDE_DOWN_CAKE}, callers
- * are also able to call this method if they hold the permission
- *{@link android.Manifest.permission#SET_TIME}.
- *
* @param admin Which {@link DeviceAdminReceiver} this request is associated with. Null if the
* caller is not a device admin.
* @return true if auto time zone is enabled on the device.
- * @throws SecurityException if the caller is not a device owner, a profile
- * owner for the primary user, or a profile owner of an organization-owned managed profile or a
- * holder of the permission {@link android.Manifest.permission#SET_TIME_ZONE}.
+ * @throws SecurityException if caller is not a device owner, a profile owner for the
+ * primary user, or a profile owner of an organization-owned managed profile.
*/
@RequiresPermission(anyOf = {SET_TIME_ZONE, QUERY_ADMIN_POLICY}, conditional = true)
public boolean getAutoTimeZoneEnabled(@Nullable ComponentName admin) {
@@ -8906,8 +8841,7 @@
* {@link #KEYGUARD_DISABLE_IRIS},
* {@link #KEYGUARD_DISABLE_SHORTCUTS_ALL}.
* @throws SecurityException if {@code admin} is not an active administrator or does not use
- * {@link DeviceAdminInfo#USES_POLICY_DISABLE_KEYGUARD_FEATURES} and does not hold
- * the {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_KEYGUARD} permission
+ * {@link DeviceAdminInfo#USES_POLICY_DISABLE_KEYGUARD_FEATURES}
*/
@RequiresPermission(value = MANAGE_DEVICE_POLICY_KEYGUARD, conditional = true)
public void setKeyguardDisabledFeatures(@Nullable ComponentName admin, int which) {
@@ -9524,12 +9458,9 @@
}
/**
- * Called by device or profile owners or holders of the permission
- * {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_PACKAGE_STATE}.
- * to suspend packages for this user. This function can be
- * called by a device owner, profile owner, by a delegate given the
- * {@link #DELEGATION_PACKAGE_ACCESS} scope via {@link #setDelegatedScopes} or by holders of the
- * permission {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_PACKAGE_STATE}.
+ * Called by device or profile owners to suspend packages for this user. This function can be
+ * called by a device owner, profile owner, or by a delegate given the
+ * {@link #DELEGATION_PACKAGE_ACCESS} scope via {@link #setDelegatedScopes}.
* <p>
* A suspended package will not be able to start activities. Its notifications will be hidden,
* it will not show up in recents, will not be able to show toasts or dialogs or ring the
@@ -9550,9 +9481,7 @@
* {@code false} the packages will be unsuspended.
* @return an array of package names for which the suspended status is not set as requested in
* this method.
- * @throws SecurityException if {@code admin} is not a device or profile owner or has not been
- * granted the permission
- * {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_PACKAGE_STATE}.
+ * @throws SecurityException if {@code admin} is not a device or profile owner.
* @see #setDelegatedScopes
* @see #DELEGATION_PACKAGE_ACCESS
*/
@@ -9912,9 +9841,7 @@
/**
* Must be called by a device owner or a profile owner of an organization-owned managed profile
- * or holder of the permission
- * {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_DEFAULT_SMS} to set the default SMS
- * application.
+ * to set the default SMS application.
* <p>
* This method can be called on the {@link DevicePolicyManager} instance, returned by
* {@link #getParentProfileInstance(ComponentName)}, where the caller must be the profile owner
@@ -9930,11 +9857,9 @@
* @param admin Which {@link DeviceAdminReceiver} this request is associated with. Null if the
* caller is not a device admin.
* @param packageName The name of the package to set as the default SMS application.
- * @throws SecurityException if {@code admin} is not a device or profile owner or if
- * called on the parent profile and the {@code admin} is not a
- * profile owner of an organization-owned managed profile and
- * if the caller has not been granted the permission
- * {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_DEFAULT_SMS}.
+ * @throws SecurityException if {@code admin} is not a device or profile owner or if
+ * called on the parent profile and the {@code admin} is not a
+ * profile owner of an organization-owned managed profile.
* @throws IllegalArgumentException if called on the parent profile and the package
* provided is not a pre-installed system package.
*/
@@ -10157,8 +10082,7 @@
* documentation of the specific trust agent to determine the interpretation of this
* bundle.
* @throws SecurityException if {@code admin} is not an active administrator or does not use
- * {@link DeviceAdminInfo#USES_POLICY_DISABLE_KEYGUARD_FEATURES} and does not have
- * the {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_KEYGUARD} permission
+ * {@link DeviceAdminInfo#USES_POLICY_DISABLE_KEYGUARD_FEATURES}
*/
@RequiresFeature(PackageManager.FEATURE_SECURE_LOCK_SCREEN)
@RequiresPermission(value = MANAGE_DEVICE_POLICY_KEYGUARD, conditional = true)
@@ -10693,20 +10617,16 @@
}
/**
- * Called by the profile owner of a managed profile or a holder of the permission
- * {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_PROFILE_INTERACTION}. so that some
- * intents sent in the managed profile can also be resolved in the parent, or vice versa.
- * Only activity intents are supported.
+ * Called by the profile owner of a managed profile so that some intents sent in the managed
+ * profile can also be resolved in the parent, or vice versa. Only activity intents are
+ * supported.
*
- * @param admin Which {@link DeviceAdminReceiver} this request is associated with. Null if the
- * caller is not a device admin.
+ * @param admin Which {@link DeviceAdminReceiver} this request is associated with.
* @param filter The {@link IntentFilter} the intent has to match to be also resolved in the
* other profile
* @param flags {@link DevicePolicyManager#FLAG_MANAGED_CAN_ACCESS_PARENT} and
* {@link DevicePolicyManager#FLAG_PARENT_CAN_ACCESS_MANAGED} are supported.
- * @throws SecurityException if {@code admin} is not a device or profile owner and is not a
- * holder of the permission
- * {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_PROFILE_INTERACTION}.
+ * @throws SecurityException if {@code admin} is not a device or profile owner.
*/
@RequiresPermission(value = MANAGE_DEVICE_POLICY_PROFILE_INTERACTION, conditional = true)
public void addCrossProfileIntentFilter(@Nullable ComponentName admin, IntentFilter filter,
@@ -10723,10 +10643,9 @@
}
/**
- * Called by a profile owner of a managed profile or a holder of the permission
- * {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_PROFILE_INTERACTION} to remove the
- * cross-profile intent filters that go from the managed profile to the parent, or from the
- * parent to the managed profile. Only removes those that have been set by the profile owner.
+ * Called by a profile owner of a managed profile to remove the cross-profile intent filters
+ * that go from the managed profile to the parent, or from the parent to the managed profile.
+ * Only removes those that have been set by the profile owner.
* <p>
* <em>Note</em>: A list of default cross profile intent filters are set up by the system when
* the profile is created, some of them ensure the proper functioning of the profile, while
@@ -10735,11 +10654,8 @@
* profile data sharing is not desired, they can be disabled with
* {@link UserManager#DISALLOW_SHARE_INTO_MANAGED_PROFILE}.
*
- * @param admin Which {@link DeviceAdminReceiver} this request is associated with. Null if the
- * caller is not a device admin.
- * @throws SecurityException if {@code admin} is not a profile owner and is not a
- * holder of the permission
- * @link android.Manifest.permission#MANAGE_DEVICE_POLICY_PROFILE_INTERACTION}.
+ * @param admin Which {@link DeviceAdminReceiver} this request is associated with.
+ * @throws SecurityException if {@code admin} is not a profile owner.
*/
@RequiresPermission(value = MANAGE_DEVICE_POLICY_PROFILE_INTERACTION, conditional = true)
public void clearCrossProfileIntentFilters(@Nullable ComponentName admin) {
@@ -10933,10 +10849,9 @@
* @param admin Which {@link DeviceAdminReceiver} this request is associated with. Null if the
* caller is not a device admin
* @return List of input method package names.
- * @throws SecurityException if {@code admin} is not a device or profile owner and does not
- * hold the {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_INPUT_METHODS}
- * permission or if called on the parent profile and the {@code admin}
- * is not a profile owner of an organization-owned managed profile.
+ * @throws SecurityException if {@code admin} is not a device, profile owner or if called on
+ * the parent profile and the {@code admin} is not a profile owner
+ * of an organization-owned managed profile.
*/
@RequiresPermission(value = MANAGE_DEVICE_POLICY_INPUT_METHODS, conditional = true)
public @Nullable List<String> getPermittedInputMethods(@Nullable ComponentName admin) {
@@ -11766,10 +11681,9 @@
/**
* Hide or unhide packages. When a package is hidden it is unavailable for use, but the data and
- * actual package file remain. This function can be called by a device owner, profile owner,
- * delegate given the {@link #DELEGATION_PACKAGE_ACCESS} scope via
- * {@link #setDelegatedScopes}, or a holder of the
- * {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_PACKAGE_STATE} permission.
+ * actual package file remain. This function can be called by a device owner, profile owner, or
+ * by a delegate given the {@link #DELEGATION_PACKAGE_ACCESS} scope via
+ * {@link #setDelegatedScopes}.
* <p>
* This method can be called on the {@link DevicePolicyManager} instance, returned by
* {@link #getParentProfileInstance(ComponentName)}, where the caller must be the profile owner
@@ -11806,9 +11720,8 @@
/**
* Determine if a package is hidden. This function can be called by a device owner, profile
- * owner, delegate given the {@link #DELEGATION_PACKAGE_ACCESS} scope via
- * {@link #setDelegatedScopes}, or a holder of the
- * {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_PACKAGE_STATE} permission.
+ * owner, or by a delegate given the {@link #DELEGATION_PACKAGE_ACCESS} scope via
+ * {@link #setDelegatedScopes}.
* <p>
* This method can be called on the {@link DevicePolicyManager} instance, returned by
* {@link #getParentProfileInstance(ComponentName)}, where the caller must be the profile owner
@@ -11922,9 +11835,8 @@
}
/**
- * Called by a device owner, profile owner or a holder of the permission
- * {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_ACCOUNT_MANAGEMENT}
- * to disable account management for a specific type of account.
+ * Called by a device owner or profile owner to disable account management for a specific type
+ * of account.
* <p>
* The calling device admin must be a device owner or profile owner. If it is not, a security
* exception will be thrown.
@@ -11946,9 +11858,7 @@
* @param accountType For which account management is disabled or enabled.
* @param disabled The boolean indicating that account management will be disabled (true) or
* enabled (false).
- * @throws SecurityException if {@code admin} is not a device or profile owner or has not been
- * granted the permission
- * {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_ACCOUNT_MANAGEMENT}.
+ * @throws SecurityException if {@code admin} is not a device or profile owner.
*/
@RequiresPermission(value = MANAGE_DEVICE_POLICY_ACCOUNT_MANAGEMENT, conditional = true)
public void setAccountManagementDisabled(@Nullable ComponentName admin, String accountType,
@@ -11986,10 +11896,6 @@
* @see #getAccountTypesWithManagementDisabled()
* Note that calling this method on the parent profile instance will return the same
* value as calling it on the main {@code DevicePolicyManager} instance.
- *
- * @throws SecurityException if the userId is different to the caller's and the caller has not
- * been granted {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_ACCOUNT_MANAGEMENT} and
- * {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_ACROSS_USERS}.
* @hide
*/
@RequiresPermission(value = MANAGE_DEVICE_POLICY_ACCOUNT_MANAGEMENT, conditional = true)
@@ -12415,8 +12321,7 @@
}
/**
- * Called by a device owner, profile owner of an organization-owned managed profile, or holder
- * of the {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_WIFI} permission to
+ * Called by a device owner or a profile owner of an organization-owned managed profile to
* control whether the user can change networks configured by the admin. When this lockdown is
* enabled, the user can still configure and connect to other Wi-Fi networks, or use other Wi-Fi
* capabilities such as tethering.
@@ -12431,7 +12336,8 @@
* with. Null if the caller is not a device admin.
* @param lockdown Whether the admin configured networks should be unmodifiable by the
* user.
- * @throws SecurityException if caller is not permitted to modify this policy
+ * @throws SecurityException if caller is not a device owner or a profile owner of an
+ * organization-owned managed profile.
*/
@RequiresPermission(value = MANAGE_DEVICE_POLICY_WIFI, conditional = true)
public void setConfiguredNetworksLockdownState(
@@ -12448,16 +12354,13 @@
}
/**
- * Called by a device owner, profile owner of an organization-owned managed profile, or holder
- * of the {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_WIFI} permission to
+ * Called by a device owner or a profile owner of an organization-owned managed profile to
* determine whether the user is prevented from modifying networks configured by the admin.
*
* @param admin admin Which {@link DeviceAdminReceiver} this request is associated
- * with. Null if the caller is not a device admin.
- * @throws SecurityException if caller is not a device owner, a profile owner of an
- * organization-owned managed profile, or holder of the
- * {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_WIFI}
- * permission.
+ * with.
+ * @throws SecurityException if caller is not a device owner or a profile owner of an
+ * organization-owned managed profile.
*/
@RequiresPermission(value = MANAGE_DEVICE_POLICY_WIFI, conditional = true)
public boolean hasLockdownAdminConfiguredNetworks(@Nullable ComponentName admin) {
@@ -12473,20 +12376,17 @@
}
/**
- * Called by a device owner, a profile owner of an organization-owned managed
- * profile or, starting from Android {@link android.os.Build.VERSION_CODES#UPSIDE_DOWN_CAKE},
- * holders of the permission {@link android.Manifest.permission#SET_TIME} to set the system wall
- * clock time. This only takes effect if called when
- * {@link android.provider.Settings.Global#AUTO_TIME} is 0, otherwise {@code false} will be
- * returned.
+ * Called by a device owner or a profile owner of an organization-owned managed
+ * profile to set the system wall clock time. This only takes effect if called when
+ * {@link android.provider.Settings.Global#AUTO_TIME} is 0, otherwise {@code false}
+ * will be returned.
*
* @param admin Which {@link DeviceAdminReceiver} this request is associated with. Null if the
* caller is not a device admin.
* @param millis time in milliseconds since the Epoch
* @return {@code true} if set time succeeded, {@code false} otherwise.
* @throws SecurityException if {@code admin} is not a device owner or a profile owner
- * of an organization-owned managed profile or a holder of the permission
- * {@link android.Manifest.permission#SET_TIME}.
+ * of an organization-owned managed profile.
*/
@RequiresPermission(value = SET_TIME, conditional = true)
public boolean setTime(@Nullable ComponentName admin, long millis) {
@@ -12502,12 +12402,10 @@
}
/**
- * Called by a device owner, a profile owner of an organization-owned managed
- * profile or, starting from Android {@link android.os.Build.VERSION_CODES#UPSIDE_DOWN_CAKE},
- * holders of the permission {@link android.Manifest.permission#SET_TIME_ZONE} to set the
- * system's persistent default time zone. This only take effect if called when
- * {@link android.provider.Settings.Global#AUTO_TIME_ZONE} is 0, otherwise {@code false} will be
- * returned.
+ * Called by a device owner or a profile owner of an organization-owned managed
+ * profile to set the system's persistent default time zone. This only takes
+ * effect if called when {@link android.provider.Settings.Global#AUTO_TIME_ZONE}
+ * is 0, otherwise {@code false} will be returned.
*
* @see android.app.AlarmManager#setTimeZone(String)
* @param admin Which {@link DeviceAdminReceiver} this request is associated with. Null if the
@@ -12516,8 +12414,7 @@
* {@link java.util.TimeZone#getAvailableIDs}
* @return {@code true} if set timezone succeeded, {@code false} otherwise.
* @throws SecurityException if {@code admin} is not a device owner or a profile owner
- * of an organization-owned managed profile or a holder of the permissions
- * {@link android.Manifest.permission#SET_TIME_ZONE}.
+ * of an organization-owned managed profile.
*/
@RequiresPermission(value = SET_TIME_ZONE, conditional = true)
public boolean setTimeZone(@Nullable ComponentName admin, String timeZone) {
@@ -12722,9 +12619,7 @@
* @param packageName package to check.
* @return true if uninstallation is blocked and the given package is visible to you, false
* otherwise if uninstallation isn't blocked or the given package isn't visible to you.
- * @throws SecurityException if {@code admin} is not a device or profile owner. Starting
- * from {@link android.os.Build.VERSION_CODES#UPSIDE_DOWN_CAKE} there will not be a security
- * check at all.
+ * @throws SecurityException if {@code admin} is not a device or profile owner.
*/
public boolean isUninstallBlocked(@Nullable ComponentName admin, String packageName) {
throwIfParentInstance("isUninstallBlocked");
@@ -12853,9 +12748,8 @@
}
/**
- * Called by a device owner, profile owners of an organization-owned managed profile, or a
- * holder of the {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_SYSTEM_UPDATES}
- * permission to set a local system update policy. When a new policy is set,
+ * Called by device owners or profile owners of an organization-owned managed profile to to set
+ * a local system update policy. When a new policy is set,
* {@link #ACTION_SYSTEM_UPDATE_POLICY_CHANGED} is broadcast.
* <p>
* If the supplied system update policy has freeze periods set but the freeze periods do not
@@ -12961,10 +12855,9 @@
}
/**
- * Called by device owner, profile owner of secondary users that is affiliated with the
- * device or a holder of the permission
- * {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_STATUS_BAR} to disable the status
- * bar. Disabling the status bar blocks notifications and quick settings.
+ * Called by device owner or profile owner of secondary users that is affiliated with the
+ * device to disable the status bar. Disabling the status bar blocks notifications and quick
+ * settings.
* <p>
* <strong>Note:</strong> This method has no effect for LockTask mode. The behavior of the
* status bar in LockTask mode can be configured with
@@ -12979,9 +12872,8 @@
* caller is not a device admin.
* @param disabled {@code true} disables the status bar, {@code false} reenables it.
* @return {@code false} if attempting to disable the status bar failed. {@code true} otherwise.
- * @throws SecurityException if {@code admin} is not the device owner, a profile owner of
- * secondary user that is affiliated with the device or if the caller is not a holder of
- * the permission {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_STATUS_BAR}.
+ * @throws SecurityException if {@code admin} is not the device owner, or a profile owner of
+ * secondary user that is affiliated with the device.
* @see #isAffiliatedUser
* @see #getSecondaryUsers
*/
@@ -13155,8 +13047,7 @@
* cannot manage it through the UI, and {@link #PERMISSION_GRANT_STATE_GRANTED granted} in which
* the permission is granted and the user cannot manage it through the UI. This method can only
* be called by a profile owner, device owner, or a delegate given the
- * {@link #DELEGATION_PERMISSION_GRANT} scope via {@link #setDelegatedScopes} or holders of the
- * permission {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_RUNTIME_PERMISSIONS} .
+ * {@link #DELEGATION_PERMISSION_GRANT} scope via {@link #setDelegatedScopes}.
* <p/>
* Note that user cannot manage other permissions in the affected group through the UI
* either and their granted state will be kept as the current value. Thus, it's recommended that
@@ -13227,8 +13118,7 @@
* {@link #PERMISSION_GRANT_STATE_DENIED}, {@link #PERMISSION_GRANT_STATE_DEFAULT},
* {@link #PERMISSION_GRANT_STATE_GRANTED},
* @return whether the permission was successfully granted or revoked.
- * @throws SecurityException if {@code admin} is not a device or profile owner or holder of the
- * permission {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_RUNTIME_PERMISSIONS}.
+ * @throws SecurityException if {@code admin} is not a device or profile owner.
* @see #PERMISSION_GRANT_STATE_DENIED
* @see #PERMISSION_GRANT_STATE_DEFAULT
* @see #PERMISSION_GRANT_STATE_GRANTED
@@ -13278,8 +13168,7 @@
* be one of {@link #PERMISSION_GRANT_STATE_DENIED} or
* {@link #PERMISSION_GRANT_STATE_GRANTED}, which indicates if the permission is
* currently denied or granted.
- * @throws SecurityException if {@code admin} is not a device or profile owner or holder of the
- * permission {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_RUNTIME_PERMISSIONS}.
+ * @throws SecurityException if {@code admin} is not a device or profile owner.
* @see #setPermissionGrantState(ComponentName, String, String, int)
* @see PackageManager#checkPermission(String, String)
* @see #setDelegatedScopes
@@ -13400,12 +13289,11 @@
}
/**
- * Called by a device admin or holder of the permission
- * {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_SUPPORT_MESSAGE} to set the short
- * support message. This will be displayed to the user in settings screens where functionality
- * has been disabled by the admin. The message should be limited to a short statement such as
- * "This setting is disabled by your administrator. Contact someone@example.com for support."
- * If the message is longer than 200 characters it may be truncated.
+ * Called by a device admin to set the short support message. This will be displayed to the user
+ * in settings screens where functionality has been disabled by the admin. The message should be
+ * limited to a short statement such as "This setting is disabled by your administrator. Contact
+ * someone@example.com for support." If the message is longer than 200 characters it may be
+ * truncated.
* <p>
* If the short support message needs to be localized, it is the responsibility of the
* {@link DeviceAdminReceiver} to listen to the {@link Intent#ACTION_LOCALE_CHANGED} broadcast
@@ -13416,9 +13304,7 @@
* caller is not a device admin.
* @param message Short message to be displayed to the user in settings or null to clear the
* existing message.
- * @throws SecurityException if {@code admin} is not an active administrator and is not a
- * holder of the permission
- * {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_SUPPORT_MESSAGE}.
+ * @throws SecurityException if {@code admin} is not an active administrator.
*/
@RequiresPermission(value = MANAGE_DEVICE_POLICY_SUPPORT_MESSAGE, conditional = true)
public void setShortSupportMessage(@Nullable ComponentName admin,
@@ -13628,9 +13514,8 @@
}
/**
- * Called by a device owner, profile owner of an organization-owned managed profile, or holder
- * of the {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_SECURITY_LOGGING} permission
- * to control the security logging feature.
+ * Called by device owner or a profile owner of an organization-owned managed profile to
+ * control the security logging feature.
*
* <p> Security logs contain various information intended for security auditing purposes.
* When security logging is enabled by any app other than the device owner, certain security
@@ -13667,10 +13552,8 @@
/**
* Return whether security logging is enabled or not by the admin.
*
- * <p>Can only be called by a device owner, a profile owner of an organization-owned
- * managed profile, or a holder of the
- * {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_SECURITY_LOGGING} permission
- * otherwise a {@link SecurityException} will be thrown.
+ * <p>Can only be called by the device owner or a profile owner of an organization-owned
+ * managed profile, otherwise a {@link SecurityException} will be thrown.
*
* @param admin Which device admin this request is associated with. Null if the caller is not
* a device admin
@@ -13688,10 +13571,8 @@
}
/**
- * Called by a device owner, profile owner of an organization-owned managed profile, or holder
- * of the {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_SECURITY_LOGGING} permission
- * to retrieve all new security logging entries since the last call to this API after device
- * boots.
+ * Called by device owner or profile owner of an organization-owned managed profile to retrieve
+ * all new security logging entries since the last call to this API after device boots.
*
* <p> Access to the logs is rate limited and it will only return new logs after the admin has
* been notified via {@link DeviceAdminReceiver#onSecurityLogsAvailable}.
@@ -13845,9 +13726,8 @@
}
/**
- * Called by a device owner, profile owner of an organization-owned managed profile, or holder
- * of the {@link android.Manfiest.permission#MANAGE_DEVICE_POLICY_SECURITY_LOGGING} permission
- * to retrieve device logs from before the device's last reboot.
+ * Called by device owner or profile owner of an organization-owned managed profile to retrieve
+ * device logs from before the device's last reboot.
* <p>
* <strong> This API is not supported on all devices. Calling this API on unsupported devices
* will result in {@code null} being returned. The device logs are retrieved from a RAM region
@@ -13977,9 +13857,8 @@
}
/**
- * Called by the device owner (since API 26) or profile owner (since API 24) or holders of the
- * permission {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_ORGANIZATION_IDENTITY} to
- * set the name of the organization under management.
+ * Called by the device owner (since API 26) or profile owner (since API 24) to set the name of
+ * the organization under management.
*
* <p>If the organization name needs to be localized, it is the responsibility of the caller
* to listen to the {@link Intent#ACTION_LOCALE_CHANGED} broadcast and set a new version of this
@@ -13988,8 +13867,7 @@
* @param admin Which {@link DeviceAdminReceiver} this request is associated with. Null if the
* caller is not a device admin.
* @param title The organization name or {@code null} to clear a previously set name.
- * @throws SecurityException if {@code admin} is not a device or profile owner or holder of the
- * permission {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_ORGANIZATION_IDENTITY}.
+ * @throws SecurityException if {@code admin} is not a device or profile owner.
*/
@RequiresPermission(value = MANAGE_DEVICE_POLICY_ORGANIZATION_IDENTITY, conditional = true)
public void setOrganizationName(@Nullable ComponentName admin, @Nullable CharSequence title) {
@@ -15248,9 +15126,8 @@
}
/**
- * Called by a device owner, profile owner of an organization-owned managed profile, or a holder
- * of the {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_SYSTEM_UPDATES} permission to
- * install a system update from the given file. The device will be
+ * Called by device owner or profile owner of an organization-owned managed profile to install
+ * a system update from the given file. The device will be
* rebooted in order to finish installing the update. Note that if the device is rebooted, this
* doesn't necessarily mean that the update has been applied successfully. The caller should
* additionally check the system version with {@link android.os.Build#FINGERPRINT} or {@link
@@ -15890,9 +15767,7 @@
}
/**
- * Called by device owner or profile owner of an organization-owned managed profile or
- * holders of the permission
- * {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_COMMON_CRITERIA_MODE} to toggle
+ * Called by device owner or profile owner of an organization-owned managed profile to toggle
* Common Criteria mode for the device. When the device is in Common Criteria mode,
* certain device functionalities are tuned to meet the higher
* security level required by Common Criteria certification. For example:
@@ -16435,10 +16310,9 @@
}
/**
- * Called by a device owner, profile owner of an organization-owned managed profile, or holder
- * of the {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_USB_DATA_SIGNALLING}
- * permission to enable or disable USB data signaling for the device. When disabled, USB data
- * connections (except from charging functions) are prohibited.
+ * Called by a device owner or profile owner of an organization-owned managed profile to enable
+ * or disable USB data signaling for the device. When disabled, USB data connections
+ * (except from charging functions) are prohibited.
*
* <p> This API is not supported on all devices, the caller should call
* {@link #canUsbDataSignalingBeDisabled()} to check whether enabling or disabling USB data
@@ -16584,8 +16458,7 @@
}
/**
- * Called by a device owner, profile owner of an organization-owned managed profile, or holder
- * of the {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_WIFI} permission to
+ * Called by device owner or profile owner of an organization-owned managed profile to
* specify the minimum security level required for Wi-Fi networks.
* The device may not connect to networks that do not meet the minimum security level.
* If the current network does not meet the minimum security level set, it will be disconnected.
@@ -16629,8 +16502,7 @@
}
/**
- * Called by device owner, profile owner of an organization-owned managed profile, or holder of
- * the {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_WIFI} permission to
+ * Called by device owner or profile owner of an organization-owned managed profile to
* specify the Wi-Fi SSID policy ({@link WifiSsidPolicy}).
* Wi-Fi SSID policy specifies the SSID restriction the network must satisfy
* in order to be eligible for a connection. Providing a null policy results in the
@@ -16658,7 +16530,8 @@
* If the policy has not been set, it will return NULL.
*
* @see #setWifiSsidPolicy(WifiSsidPolicy)
- * @throws SecurityException if the caller is not permitted to manage wifi policy
+ * @throws SecurityException if the caller is not a device owner or a profile owner on
+ * an organization-owned managed profile.
*/
@RequiresPermission(value = MANAGE_DEVICE_POLICY_WIFI, conditional = true)
@Nullable
diff --git a/core/java/android/app/admin/DevicePolicyResources.java b/core/java/android/app/admin/DevicePolicyResources.java
index 77ba560..f4dc6ba 100644
--- a/core/java/android/app/admin/DevicePolicyResources.java
+++ b/core/java/android/app/admin/DevicePolicyResources.java
@@ -1857,6 +1857,13 @@
public static final String MINIRESOLVER_OPEN_IN_PERSONAL =
PREFIX + "MINIRESOLVER_OPEN_IN_PERSONAL";
+ /**
+ * Title for a dialog shown when the user has no apps capable of handling an intent
+ * in the personal profile, and must choose whether to open the intent in a
+ * cross-profile app in the work profile, or cancel. Accepts the app name as a param.
+ */
+ public static final String MINIRESOLVER_OPEN_WORK = PREFIX + "MINIRESOLVER_OPEN_WORK";
+
public static final String MINIRESOLVER_USE_WORK_BROWSER =
PREFIX + "MINIRESOLVER_OPEN_IN_PERSONAL";
diff --git a/core/java/android/content/pm/LauncherApps.java b/core/java/android/content/pm/LauncherApps.java
index 27270d9..d6592d5 100644
--- a/core/java/android/content/pm/LauncherApps.java
+++ b/core/java/android/content/pm/LauncherApps.java
@@ -765,10 +765,6 @@
@Nullable
public PendingIntent getMainActivityLaunchIntent(@NonNull ComponentName component,
@Nullable Bundle startActivityOptions, @NonNull UserHandle user) {
- if (mContext.checkSelfPermission(android.Manifest.permission.START_TASKS_FROM_RECENTS)
- != PackageManager.PERMISSION_GRANTED) {
- Log.w(TAG, "Only allowed for recents.");
- }
logErrorForInvalidProfileAccess(user);
if (DEBUG) {
Log.i(TAG, "GetMainActivityLaunchIntent " + component + " " + user);
diff --git a/core/java/android/content/pm/PackageInfo.java b/core/java/android/content/pm/PackageInfo.java
index a89d17b..50be5c4 100644
--- a/core/java/android/content/pm/PackageInfo.java
+++ b/core/java/android/content/pm/PackageInfo.java
@@ -91,7 +91,7 @@
/**
* The version name of this package, as specified by the <manifest>
* tag's {@link android.R.styleable#AndroidManifest_versionName versionName}
- * attribute.
+ * attribute, or null if there was none.
*/
public String versionName;
diff --git a/core/java/android/content/pm/PackageInstaller.java b/core/java/android/content/pm/PackageInstaller.java
index 56f6f82..afe375c 100644
--- a/core/java/android/content/pm/PackageInstaller.java
+++ b/core/java/android/content/pm/PackageInstaller.java
@@ -981,6 +981,15 @@
*
* The result is returned by a callback because some constraints might take a long time
* to evaluate.
+ *
+ * @param packageNames a list of package names to check the constraints for installation
+ * @param constraints the constraints for installation.
+ * @param executor the {@link Executor} on which to invoke the callback
+ * @param callback called when the {@link InstallConstraintsResult} is ready
+ *
+ * @throws SecurityException if the given packages' installer of record doesn't match the
+ * caller's own package name or the installerPackageName set by the caller doesn't
+ * match the caller's own package name.
*/
public void checkInstallConstraints(@NonNull List<String> packageNames,
@NonNull InstallConstraints constraints,
@@ -1008,6 +1017,8 @@
* Note: the device idle constraint might take a long time to evaluate. The system will
* ensure the constraint is evaluated completely before handling timeout.
*
+ * @param packageNames a list of package names to check the constraints for installation
+ * @param constraints the constraints for installation.
* @param callback Called when the constraints are satisfied or after timeout.
* Intents sent to this callback contain:
* {@link Intent#EXTRA_PACKAGES} for the input package names,
@@ -1017,6 +1028,9 @@
* satisfied. Valid range is from 0 to one week. {@code 0} means the
* callback will be invoked immediately no matter constraints are
* satisfied or not.
+ * @throws SecurityException if the given packages' installer of record doesn't match the
+ * caller's own package name or the installerPackageName set by the caller doesn't
+ * match the caller's own package name.
*/
public void waitForInstallConstraints(@NonNull List<String> packageNames,
@NonNull InstallConstraints constraints,
@@ -1039,6 +1053,7 @@
* may be performed on the session. In the case of timeout, you may commit the
* session again using this method or {@link Session#commit(IntentSender)} for retries.
*
+ * @param sessionId the session ID to commit when all constraints are satisfied.
* @param statusReceiver Called when the state of the session changes. Intents
* sent to this receiver contain {@link #EXTRA_STATUS}.
* Refer to the individual status codes on how to handle them.
@@ -2565,9 +2580,9 @@
* Sets the state of permissions for the package at installation.
* <p/>
* Granting any runtime permissions require the
- * {@link android.Manifest.permission#INSTALL_GRANT_RUNTIME_PERMISSIONS} permission to be
- * held by the caller. Revoking runtime permissions is not allowed, even during app update
- * sessions.
+ * {@link android.Manifest.permission#INSTALL_GRANT_RUNTIME_PERMISSIONS
+ * INSTALL_GRANT_RUNTIME_PERMISSIONS} permission to be held by the caller. Revoking runtime
+ * permissions is not allowed, even during app update sessions.
* <p/>
* Holders without the permission are allowed to change the following special permissions:
* <p/>
diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java
index eb3d37d..7f19897 100644
--- a/core/java/android/content/pm/PackageManager.java
+++ b/core/java/android/content/pm/PackageManager.java
@@ -764,6 +764,7 @@
MATCH_DISABLED_UNTIL_USED_COMPONENTS,
MATCH_SYSTEM_ONLY,
MATCH_FACTORY_ONLY,
+ MATCH_ANY_USER,
MATCH_DEBUG_TRIAGED_MISSING,
MATCH_INSTANT,
MATCH_APEX,
diff --git a/core/java/android/credentials/CredentialManager.java b/core/java/android/credentials/CredentialManager.java
index 9140d02..c2a0062 100644
--- a/core/java/android/credentials/CredentialManager.java
+++ b/core/java/android/credentials/CredentialManager.java
@@ -355,7 +355,11 @@
* Sets a list of all user configurable credential providers registered on the system. This API
* is intended for settings apps.
*
- * @param providers the list of enabled providers
+ * @param primaryProviders the primary providers that user selected for saving credentials. In
+ * the most case, there should be only one primary provider, However,
+ * if there are more than one CredentialProviderService in the same APK,
+ * they should be passed in altogether.
+ * @param providers the list of enabled providers.
* @param userId the user ID to configure credential manager for
* @param executor the callback will take place on this {@link Executor}
* @param callback the callback invoked when the request succeeds or fails
@@ -363,6 +367,7 @@
*/
@RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS)
public void setEnabledProviders(
+ @NonNull List<String> primaryProviders,
@NonNull List<String> providers,
int userId,
@CallbackExecutor @NonNull Executor executor,
@@ -370,9 +375,11 @@
requireNonNull(executor, "executor must not be null");
requireNonNull(callback, "callback must not be null");
requireNonNull(providers, "providers must not be null");
+ requireNonNull(primaryProviders, "primaryProviders must not be null");
try {
mService.setEnabledProviders(
+ primaryProviders,
providers, userId, new SetEnabledProvidersTransport(executor, callback));
} catch (RemoteException e) {
e.rethrowFromSystemServer();
diff --git a/core/java/android/credentials/CredentialProviderInfo.java b/core/java/android/credentials/CredentialProviderInfo.java
index c224f01..d66b8f0 100644
--- a/core/java/android/credentials/CredentialProviderInfo.java
+++ b/core/java/android/credentials/CredentialProviderInfo.java
@@ -46,6 +46,7 @@
@Nullable private CharSequence mSettingsSubtitle = null;
private final boolean mIsSystemProvider;
private final boolean mIsEnabled;
+ private final boolean mIsPrimary;
/**
* Constructs an information instance of the credential provider.
@@ -58,6 +59,7 @@
mIsSystemProvider = builder.mIsSystemProvider;
mSettingsSubtitle = builder.mSettingsSubtitle;
mIsEnabled = builder.mIsEnabled;
+ mIsPrimary = builder.mIsPrimary;
mOverrideLabel = builder.mOverrideLabel;
}
@@ -108,6 +110,15 @@
return mIsEnabled;
}
+ /**
+ * Returns whether the provider is set as primary by the user.
+ *
+ * @hide
+ */
+ public boolean isPrimary() {
+ return mIsPrimary;
+ }
+
/** Returns the settings subtitle. */
@Nullable
public CharSequence getSettingsSubtitle() {
@@ -125,6 +136,7 @@
dest.writeTypedObject(mServiceInfo, flags);
dest.writeBoolean(mIsSystemProvider);
dest.writeBoolean(mIsEnabled);
+ dest.writeBoolean(mIsPrimary);
TextUtils.writeToParcel(mOverrideLabel, dest, flags);
TextUtils.writeToParcel(mSettingsSubtitle, dest, flags);
@@ -149,6 +161,9 @@
+ "isEnabled="
+ mIsEnabled
+ ", "
+ + "isPrimary="
+ + mIsPrimary
+ + ", "
+ "overrideLabel="
+ mOverrideLabel
+ ", "
@@ -164,6 +179,7 @@
mServiceInfo = in.readTypedObject(ServiceInfo.CREATOR);
mIsSystemProvider = in.readBoolean();
mIsEnabled = in.readBoolean();
+ mIsPrimary = in.readBoolean();
mOverrideLabel = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in);
mSettingsSubtitle = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in);
@@ -193,6 +209,7 @@
private boolean mIsSystemProvider = false;
@Nullable private CharSequence mSettingsSubtitle = null;
private boolean mIsEnabled = false;
+ private boolean mIsPrimary = false;
@Nullable private CharSequence mOverrideLabel = null;
/**
@@ -248,6 +265,20 @@
return this;
}
+ /**
+ * Sets whether it is set as primary by the user.
+ *
+ * <p>Primary provider will be used for saving credentials by default. In most cases, there
+ * should only one primary provider exist. However, if there are multiple credential
+ * providers exist in the same package, all of them will be marked as primary.
+ *
+ * @hide
+ */
+ public @NonNull Builder setPrimary(boolean isPrimary) {
+ mIsPrimary = isPrimary;
+ return this;
+ }
+
/** Builds a new {@link CredentialProviderInfo} instance. */
public @NonNull CredentialProviderInfo build() {
return new CredentialProviderInfo(this);
diff --git a/core/java/android/credentials/ICredentialManager.aidl b/core/java/android/credentials/ICredentialManager.aidl
index b779c56..dec729f 100644
--- a/core/java/android/credentials/ICredentialManager.aidl
+++ b/core/java/android/credentials/ICredentialManager.aidl
@@ -47,7 +47,7 @@
@nullable ICancellationSignal clearCredentialState(in ClearCredentialStateRequest request, in IClearCredentialStateCallback callback, String callingPackage);
- void setEnabledProviders(in List<String> providers, in int userId, in ISetEnabledProvidersCallback callback);
+ void setEnabledProviders(in List<String> primaryProviders, in List<String> providers, in int userId, in ISetEnabledProvidersCallback callback);
void registerCredentialDescription(in RegisterCredentialDescriptionRequest request, String callingPackage);
diff --git a/core/java/android/credentials/ui/CreateCredentialProviderData.java b/core/java/android/credentials/ui/CreateCredentialProviderData.java
index 629d578..2508d8e 100644
--- a/core/java/android/credentials/ui/CreateCredentialProviderData.java
+++ b/core/java/android/credentials/ui/CreateCredentialProviderData.java
@@ -19,7 +19,6 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.TestApi;
-import android.content.pm.ParceledListSlice;
import android.os.Parcel;
import android.os.Parcelable;
@@ -36,7 +35,7 @@
@TestApi
public final class CreateCredentialProviderData extends ProviderData implements Parcelable {
@NonNull
- private final ParceledListSlice<Entry> mSaveEntries;
+ private final List<Entry> mSaveEntries;
@Nullable
private final Entry mRemoteEntry;
@@ -44,13 +43,13 @@
@NonNull String providerFlattenedComponentName, @NonNull List<Entry> saveEntries,
@Nullable Entry remoteEntry) {
super(providerFlattenedComponentName);
- mSaveEntries = new ParceledListSlice<>(saveEntries);
+ mSaveEntries = new ArrayList<>(saveEntries);
mRemoteEntry = remoteEntry;
}
@NonNull
public List<Entry> getSaveEntries() {
- return mSaveEntries.getList();
+ return mSaveEntries;
}
@Nullable
@@ -61,7 +60,9 @@
private CreateCredentialProviderData(@NonNull Parcel in) {
super(in);
- mSaveEntries = in.readParcelable(null, android.content.pm.ParceledListSlice.class);
+ List<Entry> credentialEntries = new ArrayList<>();
+ in.readTypedList(credentialEntries, Entry.CREATOR);
+ mSaveEntries = credentialEntries;
AnnotationValidations.validate(NonNull.class, null, mSaveEntries);
Entry remoteEntry = in.readTypedObject(Entry.CREATOR);
@@ -71,7 +72,7 @@
@Override
public void writeToParcel(@NonNull Parcel dest, int flags) {
super.writeToParcel(dest, flags);
- dest.writeParcelable(mSaveEntries, flags);
+ dest.writeTypedList(mSaveEntries);
dest.writeTypedObject(mRemoteEntry, flags);
}
diff --git a/core/java/android/credentials/ui/GetCredentialProviderData.java b/core/java/android/credentials/ui/GetCredentialProviderData.java
index 773dee9..181475c 100644
--- a/core/java/android/credentials/ui/GetCredentialProviderData.java
+++ b/core/java/android/credentials/ui/GetCredentialProviderData.java
@@ -19,7 +19,6 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.TestApi;
-import android.content.pm.ParceledListSlice;
import android.os.Parcel;
import android.os.Parcelable;
@@ -36,11 +35,11 @@
@TestApi
public final class GetCredentialProviderData extends ProviderData implements Parcelable {
@NonNull
- private final ParceledListSlice<Entry> mCredentialEntries;
+ private final List<Entry> mCredentialEntries;
@NonNull
- private final ParceledListSlice<Entry> mActionChips;
+ private final List<Entry> mActionChips;
@NonNull
- private final ParceledListSlice<AuthenticationEntry> mAuthenticationEntries;
+ private final List<AuthenticationEntry> mAuthenticationEntries;
@Nullable
private final Entry mRemoteEntry;
@@ -50,25 +49,25 @@
@NonNull List<AuthenticationEntry> authenticationEntries,
@Nullable Entry remoteEntry) {
super(providerFlattenedComponentName);
- mCredentialEntries = new ParceledListSlice<>(credentialEntries);
- mActionChips = new ParceledListSlice<>(actionChips);
- mAuthenticationEntries = new ParceledListSlice<>(authenticationEntries);
+ mCredentialEntries = new ArrayList<>(credentialEntries);
+ mActionChips = new ArrayList<>(actionChips);
+ mAuthenticationEntries = new ArrayList<>(authenticationEntries);
mRemoteEntry = remoteEntry;
}
@NonNull
public List<Entry> getCredentialEntries() {
- return mCredentialEntries.getList();
+ return mCredentialEntries;
}
@NonNull
public List<Entry> getActionChips() {
- return mActionChips.getList();
+ return mActionChips;
}
@NonNull
public List<AuthenticationEntry> getAuthenticationEntries() {
- return mAuthenticationEntries.getList();
+ return mAuthenticationEntries;
}
@Nullable
@@ -78,16 +77,20 @@
private GetCredentialProviderData(@NonNull Parcel in) {
super(in);
- mCredentialEntries = in.readParcelable(null,
- android.content.pm.ParceledListSlice.class);
+
+ List<Entry> credentialEntries = new ArrayList<>();
+ in.readTypedList(credentialEntries, Entry.CREATOR);
+ mCredentialEntries = credentialEntries;
AnnotationValidations.validate(NonNull.class, null, mCredentialEntries);
- mActionChips = in.readParcelable(null,
- android.content.pm.ParceledListSlice.class);
+ List<Entry> actionChips = new ArrayList<>();
+ in.readTypedList(actionChips, Entry.CREATOR);
+ mActionChips = actionChips;
AnnotationValidations.validate(NonNull.class, null, mActionChips);
- mAuthenticationEntries = in.readParcelable(null,
- android.content.pm.ParceledListSlice.class);
+ List<AuthenticationEntry> authenticationEntries = new ArrayList<>();
+ in.readTypedList(authenticationEntries, AuthenticationEntry.CREATOR);
+ mAuthenticationEntries = authenticationEntries;
AnnotationValidations.validate(NonNull.class, null, mAuthenticationEntries);
Entry remoteEntry = in.readTypedObject(Entry.CREATOR);
@@ -97,9 +100,9 @@
@Override
public void writeToParcel(@NonNull Parcel dest, int flags) {
super.writeToParcel(dest, flags);
- dest.writeParcelable(mCredentialEntries, flags);
- dest.writeParcelable(mActionChips, flags);
- dest.writeParcelable(mAuthenticationEntries, flags);
+ dest.writeTypedList(mCredentialEntries);
+ dest.writeTypedList(mActionChips);
+ dest.writeTypedList(mAuthenticationEntries);
dest.writeTypedObject(mRemoteEntry, flags);
}
diff --git a/core/java/android/credentials/ui/RequestInfo.java b/core/java/android/credentials/ui/RequestInfo.java
index 9ebb058..3fc3be5 100644
--- a/core/java/android/credentials/ui/RequestInfo.java
+++ b/core/java/android/credentials/ui/RequestInfo.java
@@ -52,6 +52,12 @@
@NonNull public static final String TYPE_UNDEFINED = "android.credentials.ui.TYPE_UNDEFINED";
/** Type value for a getCredential request. */
@NonNull public static final String TYPE_GET = "android.credentials.ui.TYPE_GET";
+ /** Type value for a getCredential request that utilizes the credential registry.
+ *
+ * @hide
+ **/
+ @NonNull public static final String TYPE_GET_VIA_REGISTRY =
+ "android.credentials.ui.TYPE_GET_VIA_REGISTRY";
/** Type value for a createCredential request. */
@NonNull public static final String TYPE_CREATE = "android.credentials.ui.TYPE_CREATE";
diff --git a/core/java/android/database/sqlite/SQLiteConnectionPool.java b/core/java/android/database/sqlite/SQLiteConnectionPool.java
index 069c264..dcf1a47 100644
--- a/core/java/android/database/sqlite/SQLiteConnectionPool.java
+++ b/core/java/android/database/sqlite/SQLiteConnectionPool.java
@@ -1136,7 +1136,10 @@
Printer indentedPrinter = PrefixPrinter.create(printer, " ");
synchronized (mLock) {
if (directories != null) {
- directories.add(new File(mConfiguration.path).getParent());
+ String parent = new File(mConfiguration.path).getParent();
+ if (parent != null) {
+ directories.add(parent);
+ }
}
boolean isCompatibilityWalEnabled = mConfiguration.isLegacyCompatibilityWalEnabled();
printer.println("Connection pool for " + mConfiguration.path + ":");
diff --git a/core/java/android/hardware/camera2/CameraExtensionCharacteristics.java b/core/java/android/hardware/camera2/CameraExtensionCharacteristics.java
index 1bf004a..d48e20e 100644
--- a/core/java/android/hardware/camera2/CameraExtensionCharacteristics.java
+++ b/core/java/android/hardware/camera2/CameraExtensionCharacteristics.java
@@ -30,6 +30,7 @@
import android.hardware.camera2.extension.IPreviewExtenderImpl;
import android.hardware.camera2.extension.LatencyRange;
import android.hardware.camera2.extension.SizeList;
+import android.hardware.camera2.impl.CameraExtensionUtils;
import android.hardware.camera2.impl.CameraMetadataNative;
import android.hardware.camera2.params.ExtensionSessionConfiguration;
import android.hardware.camera2.params.StreamConfigurationMap;
@@ -47,8 +48,10 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
+import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.concurrent.Future;
@@ -161,16 +164,19 @@
private final Context mContext;
private final String mCameraId;
- private final CameraCharacteristics mChars;
+ private final Map<String, CameraCharacteristics> mCharacteristicsMap;
+ private final Map<String, CameraMetadataNative> mCharacteristicsMapNative;
/**
* @hide
*/
public CameraExtensionCharacteristics(Context context, String cameraId,
- CameraCharacteristics chars) {
+ Map<String, CameraCharacteristics> characteristicsMap) {
mContext = context;
mCameraId = cameraId;
- mChars = chars;
+ mCharacteristicsMap = characteristicsMap;
+ mCharacteristicsMapNative =
+ CameraExtensionUtils.getCharacteristicsMapNative(characteristicsMap);
}
private static ArrayList<Size> getSupportedSizes(List<SizeList> sizesList,
@@ -468,11 +474,11 @@
* @hide
*/
public static boolean isExtensionSupported(String cameraId, int extensionType,
- CameraCharacteristics chars) {
+ Map<String, CameraMetadataNative> characteristicsMap) {
if (areAdvancedExtensionsSupported()) {
try {
IAdvancedExtenderImpl extender = initializeAdvancedExtension(extensionType);
- return extender.isExtensionAvailable(cameraId);
+ return extender.isExtensionAvailable(cameraId, characteristicsMap);
} catch (RemoteException e) {
Log.e(TAG, "Failed to query extension availability! Extension service does not"
+ " respond!");
@@ -487,8 +493,10 @@
}
try {
- return extenders.first.isExtensionAvailable(cameraId, chars.getNativeMetadata()) &&
- extenders.second.isExtensionAvailable(cameraId, chars.getNativeMetadata());
+ return extenders.first.isExtensionAvailable(cameraId,
+ characteristicsMap.get(cameraId))
+ && extenders.second.isExtensionAvailable(cameraId,
+ characteristicsMap.get(cameraId));
} catch (RemoteException e) {
Log.e(TAG, "Failed to query extension availability! Extension service does not"
+ " respond!");
@@ -563,7 +571,7 @@
try {
for (int extensionType : EXTENSION_LIST) {
- if (isExtensionSupported(mCameraId, extensionType, mChars)) {
+ if (isExtensionSupported(mCameraId, extensionType, mCharacteristicsMapNative)) {
ret.add(extensionType);
}
}
@@ -597,18 +605,18 @@
}
try {
- if (!isExtensionSupported(mCameraId, extension, mChars)) {
+ if (!isExtensionSupported(mCameraId, extension, mCharacteristicsMapNative)) {
throw new IllegalArgumentException("Unsupported extension");
}
if (areAdvancedExtensionsSupported()) {
IAdvancedExtenderImpl extender = initializeAdvancedExtension(extension);
- extender.init(mCameraId);
+ extender.init(mCameraId, mCharacteristicsMapNative);
return extender.isPostviewAvailable();
} else {
Pair<IPreviewExtenderImpl, IImageCaptureExtenderImpl> extenders =
initializeExtension(extension);
- extenders.second.init(mCameraId, mChars.getNativeMetadata());
+ extenders.second.init(mCameraId, mCharacteristicsMapNative.get(mCameraId));
return extenders.second.isPostviewAvailable();
}
} catch (RemoteException e) {
@@ -655,7 +663,7 @@
}
try {
- if (!isExtensionSupported(mCameraId, extension, mChars)) {
+ if (!isExtensionSupported(mCameraId, extension, mCharacteristicsMapNative)) {
throw new IllegalArgumentException("Unsupported extension");
}
@@ -664,7 +672,7 @@
sz.width = captureSize.getWidth();
sz.height = captureSize.getHeight();
- StreamConfigurationMap streamMap = mChars.get(
+ StreamConfigurationMap streamMap = mCharacteristicsMap.get(mCameraId).get(
CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
if (areAdvancedExtensionsSupported()) {
@@ -676,13 +684,13 @@
throw new IllegalArgumentException("Unsupported format: " + format);
}
IAdvancedExtenderImpl extender = initializeAdvancedExtension(extension);
- extender.init(mCameraId);
+ extender.init(mCameraId, mCharacteristicsMapNative);
return generateSupportedSizes(extender.getSupportedPostviewResolutions(
sz), format, streamMap);
} else {
Pair<IPreviewExtenderImpl, IImageCaptureExtenderImpl> extenders =
initializeExtension(extension);
- extenders.second.init(mCameraId, mChars.getNativeMetadata());
+ extenders.second.init(mCameraId, mCharacteristicsMapNative.get(mCameraId));
if ((extenders.second.getCaptureProcessor() == null) ||
!isPostviewAvailable(extension)) {
// Extensions that don't implement any capture processor
@@ -754,22 +762,23 @@
}
try {
- if (!isExtensionSupported(mCameraId, extension, mChars)) {
+ if (!isExtensionSupported(mCameraId, extension, mCharacteristicsMapNative)) {
throw new IllegalArgumentException("Unsupported extension");
}
- StreamConfigurationMap streamMap = mChars.get(
+ StreamConfigurationMap streamMap = mCharacteristicsMap.get(mCameraId).get(
CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
if (areAdvancedExtensionsSupported()) {
IAdvancedExtenderImpl extender = initializeAdvancedExtension(extension);
- extender.init(mCameraId);
+ extender.init(mCameraId, mCharacteristicsMapNative);
return generateSupportedSizes(
extender.getSupportedPreviewOutputResolutions(mCameraId),
ImageFormat.PRIVATE, streamMap);
} else {
Pair<IPreviewExtenderImpl, IImageCaptureExtenderImpl> extenders =
initializeExtension(extension);
- extenders.first.init(mCameraId, mChars.getNativeMetadata());
+ extenders.first.init(mCameraId,
+ mCharacteristicsMapNative.get(mCameraId));
return generateSupportedSizes(extenders.first.getSupportedResolutions(),
ImageFormat.PRIVATE, streamMap);
}
@@ -811,11 +820,11 @@
}
try {
- if (!isExtensionSupported(mCameraId, extension, mChars)) {
+ if (!isExtensionSupported(mCameraId, extension, mCharacteristicsMapNative)) {
throw new IllegalArgumentException("Unsupported extension");
}
- StreamConfigurationMap streamMap = mChars.get(
+ StreamConfigurationMap streamMap = mCharacteristicsMap.get(mCameraId).get(
CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
if (areAdvancedExtensionsSupported()) {
switch(format) {
@@ -826,14 +835,14 @@
throw new IllegalArgumentException("Unsupported format: " + format);
}
IAdvancedExtenderImpl extender = initializeAdvancedExtension(extension);
- extender.init(mCameraId);
+ extender.init(mCameraId, mCharacteristicsMapNative);
return generateSupportedSizes(extender.getSupportedCaptureOutputResolutions(
mCameraId), format, streamMap);
} else {
if (format == ImageFormat.YUV_420_888) {
Pair<IPreviewExtenderImpl, IImageCaptureExtenderImpl> extenders =
initializeExtension(extension);
- extenders.second.init(mCameraId, mChars.getNativeMetadata());
+ extenders.second.init(mCameraId, mCharacteristicsMapNative.get(mCameraId));
if (extenders.second.getCaptureProcessor() == null) {
// Extensions that don't implement any capture processor are limited to
// JPEG only!
@@ -844,7 +853,7 @@
} else if (format == ImageFormat.JPEG) {
Pair<IPreviewExtenderImpl, IImageCaptureExtenderImpl> extenders =
initializeExtension(extension);
- extenders.second.init(mCameraId, mChars.getNativeMetadata());
+ extenders.second.init(mCameraId, mCharacteristicsMapNative.get(mCameraId));
if (extenders.second.getCaptureProcessor() != null) {
// The framework will perform the additional encoding pass on the
// processed YUV_420 buffers.
@@ -900,7 +909,7 @@
}
try {
- if (!isExtensionSupported(mCameraId, extension, mChars)) {
+ if (!isExtensionSupported(mCameraId, extension, mCharacteristicsMapNative)) {
throw new IllegalArgumentException("Unsupported extension");
}
@@ -910,7 +919,7 @@
sz.height = captureOutputSize.getHeight();
if (areAdvancedExtensionsSupported()) {
IAdvancedExtenderImpl extender = initializeAdvancedExtension(extension);
- extender.init(mCameraId);
+ extender.init(mCameraId, mCharacteristicsMapNative);
LatencyRange latencyRange = extender.getEstimatedCaptureLatencyRange(mCameraId,
sz, format);
if (latencyRange != null) {
@@ -919,7 +928,7 @@
} else {
Pair<IPreviewExtenderImpl, IImageCaptureExtenderImpl> extenders =
initializeExtension(extension);
- extenders.second.init(mCameraId, mChars.getNativeMetadata());
+ extenders.second.init(mCameraId, mCharacteristicsMapNative.get(mCameraId));
if ((format == ImageFormat.YUV_420_888) &&
(extenders.second.getCaptureProcessor() == null) ){
// Extensions that don't implement any capture processor are limited to
@@ -965,18 +974,18 @@
}
try {
- if (!isExtensionSupported(mCameraId, extension, mChars)) {
+ if (!isExtensionSupported(mCameraId, extension, mCharacteristicsMapNative)) {
throw new IllegalArgumentException("Unsupported extension");
}
if (areAdvancedExtensionsSupported()) {
IAdvancedExtenderImpl extender = initializeAdvancedExtension(extension);
- extender.init(mCameraId);
+ extender.init(mCameraId, mCharacteristicsMapNative);
return extender.isCaptureProcessProgressAvailable();
} else {
Pair<IPreviewExtenderImpl, IImageCaptureExtenderImpl> extenders =
initializeExtension(extension);
- extenders.second.init(mCameraId, mChars.getNativeMetadata());
+ extenders.second.init(mCameraId, mCharacteristicsMapNative.get(mCameraId));
return extenders.second.isCaptureProcessProgressAvailable();
}
} catch (RemoteException e) {
@@ -1012,20 +1021,20 @@
HashSet<CaptureRequest.Key> ret = new HashSet<>();
try {
- if (!isExtensionSupported(mCameraId, extension, mChars)) {
+ if (!isExtensionSupported(mCameraId, extension, mCharacteristicsMapNative)) {
throw new IllegalArgumentException("Unsupported extension");
}
CameraMetadataNative captureRequestMeta = null;
if (areAdvancedExtensionsSupported()) {
IAdvancedExtenderImpl extender = initializeAdvancedExtension(extension);
- extender.init(mCameraId);
+ extender.init(mCameraId, mCharacteristicsMapNative);
captureRequestMeta = extender.getAvailableCaptureRequestKeys(mCameraId);
} else {
Pair<IPreviewExtenderImpl, IImageCaptureExtenderImpl> extenders =
initializeExtension(extension);
- extenders.second.onInit(mCameraId, mChars.getNativeMetadata());
- extenders.second.init(mCameraId, mChars.getNativeMetadata());
+ extenders.second.onInit(mCameraId, mCharacteristicsMapNative.get(mCameraId));
+ extenders.second.init(mCameraId, mCharacteristicsMapNative.get(mCameraId));
captureRequestMeta = extenders.second.getAvailableCaptureRequestKeys();
extenders.second.onDeInit();
}
@@ -1090,20 +1099,20 @@
HashSet<CaptureResult.Key> ret = new HashSet<>();
try {
- if (!isExtensionSupported(mCameraId, extension, mChars)) {
+ if (!isExtensionSupported(mCameraId, extension, mCharacteristicsMapNative)) {
throw new IllegalArgumentException("Unsupported extension");
}
CameraMetadataNative captureResultMeta = null;
if (areAdvancedExtensionsSupported()) {
IAdvancedExtenderImpl extender = initializeAdvancedExtension(extension);
- extender.init(mCameraId);
+ extender.init(mCameraId, mCharacteristicsMapNative);
captureResultMeta = extender.getAvailableCaptureResultKeys(mCameraId);
} else {
Pair<IPreviewExtenderImpl, IImageCaptureExtenderImpl> extenders =
initializeExtension(extension);
- extenders.second.onInit(mCameraId, mChars.getNativeMetadata());
- extenders.second.init(mCameraId, mChars.getNativeMetadata());
+ extenders.second.onInit(mCameraId, mCharacteristicsMapNative.get(mCameraId));
+ extenders.second.init(mCameraId, mCharacteristicsMapNative.get(mCameraId));
captureResultMeta = extenders.second.getAvailableCaptureResultKeys();
extenders.second.onDeInit();
}
diff --git a/core/java/android/hardware/camera2/CameraManager.java b/core/java/android/hardware/camera2/CameraManager.java
index 73dd509..c6fc69e 100644
--- a/core/java/android/hardware/camera2/CameraManager.java
+++ b/core/java/android/hardware/camera2/CameraManager.java
@@ -694,7 +694,10 @@
public CameraExtensionCharacteristics getCameraExtensionCharacteristics(
@NonNull String cameraId) throws CameraAccessException {
CameraCharacteristics chars = getCameraCharacteristics(cameraId);
- return new CameraExtensionCharacteristics(mContext, cameraId, chars);
+ Map<String, CameraCharacteristics> characteristicsMap = getPhysicalIdToCharsMap(chars);
+ characteristicsMap.put(cameraId, chars);
+
+ return new CameraExtensionCharacteristics(mContext, cameraId, characteristicsMap);
}
private Map<String, CameraCharacteristics> getPhysicalIdToCharsMap(
diff --git a/core/java/android/hardware/camera2/extension/IAdvancedExtenderImpl.aidl b/core/java/android/hardware/camera2/extension/IAdvancedExtenderImpl.aidl
index c9b7ea1..101442f 100644
--- a/core/java/android/hardware/camera2/extension/IAdvancedExtenderImpl.aidl
+++ b/core/java/android/hardware/camera2/extension/IAdvancedExtenderImpl.aidl
@@ -15,6 +15,8 @@
*/
package android.hardware.camera2.extension;
+import android.hardware.camera2.impl.CameraMetadataNative;
+
import android.hardware.camera2.extension.ISessionProcessorImpl;
import android.hardware.camera2.extension.LatencyRange;
import android.hardware.camera2.extension.Size;
@@ -24,8 +26,8 @@
/** @hide */
interface IAdvancedExtenderImpl
{
- boolean isExtensionAvailable(in String cameraId);
- void init(in String cameraId);
+ boolean isExtensionAvailable(in String cameraId, in Map<String, CameraMetadataNative> charsMap);
+ void init(in String cameraId, in Map<String, CameraMetadataNative> charsMap);
LatencyRange getEstimatedCaptureLatencyRange(in String cameraId, in Size outputSize,
int format);
@nullable List<SizeList> getSupportedPreviewOutputResolutions(in String cameraId);
diff --git a/core/java/android/hardware/camera2/extension/ISessionProcessorImpl.aidl b/core/java/android/hardware/camera2/extension/ISessionProcessorImpl.aidl
index 2af1df9..13b93a8 100644
--- a/core/java/android/hardware/camera2/extension/ISessionProcessorImpl.aidl
+++ b/core/java/android/hardware/camera2/extension/ISessionProcessorImpl.aidl
@@ -15,6 +15,8 @@
*/
package android.hardware.camera2.extension;
+import android.hardware.camera2.impl.CameraMetadataNative;
+
import android.hardware.camera2.CaptureRequest;
import android.hardware.camera2.extension.CameraSessionConfig;
import android.hardware.camera2.extension.ICaptureCallback;
@@ -26,7 +28,8 @@
/** @hide */
interface ISessionProcessorImpl
{
- CameraSessionConfig initSession(in String cameraId, in OutputSurface previewSurface,
+ CameraSessionConfig initSession(in String cameraId,
+ in Map<String, CameraMetadataNative> charsMap, in OutputSurface previewSurface,
in OutputSurface imageCaptureSurface, in OutputSurface postviewSurface);
void deInitSession();
void onCaptureSessionStart(IRequestProcessorImpl requestProcessor);
diff --git a/core/java/android/hardware/camera2/impl/CameraAdvancedExtensionSessionImpl.java b/core/java/android/hardware/camera2/impl/CameraAdvancedExtensionSessionImpl.java
index cfade55..e787779 100644
--- a/core/java/android/hardware/camera2/impl/CameraAdvancedExtensionSessionImpl.java
+++ b/core/java/android/hardware/camera2/impl/CameraAdvancedExtensionSessionImpl.java
@@ -29,7 +29,6 @@
import android.hardware.camera2.CameraDevice;
import android.hardware.camera2.CameraExtensionCharacteristics;
import android.hardware.camera2.CameraExtensionSession;
-import android.hardware.camera2.CameraManager;
import android.hardware.camera2.CaptureFailure;
import android.hardware.camera2.CaptureRequest;
import android.hardware.camera2.CaptureResult;
@@ -78,6 +77,7 @@
private final Executor mExecutor;
private final CameraDevice mCameraDevice;
+ private final Map<String, CameraMetadataNative> mCharacteristicsMap;
private final long mExtensionClientId;
private final Handler mHandler;
private final HandlerThread mHandlerThread;
@@ -109,6 +109,7 @@
@RequiresPermission(android.Manifest.permission.CAMERA)
public static CameraAdvancedExtensionSessionImpl createCameraAdvancedExtensionSession(
@NonNull android.hardware.camera2.impl.CameraDeviceImpl cameraDevice,
+ @NonNull Map<String, CameraCharacteristics> characteristicsMap,
@NonNull Context ctx, @NonNull ExtensionSessionConfiguration config, int sessionId)
throws CameraAccessException, RemoteException {
long clientId = CameraExtensionCharacteristics.registerClient(ctx);
@@ -117,13 +118,13 @@
}
String cameraId = cameraDevice.getId();
- CameraManager manager = ctx.getSystemService(CameraManager.class);
- CameraCharacteristics chars = manager.getCameraCharacteristics(cameraId);
CameraExtensionCharacteristics extensionChars = new CameraExtensionCharacteristics(ctx,
- cameraId, chars);
+ cameraId, characteristicsMap);
+ Map<String, CameraMetadataNative> characteristicsMapNative =
+ CameraExtensionUtils.getCharacteristicsMapNative(characteristicsMap);
if (!CameraExtensionCharacteristics.isExtensionSupported(cameraDevice.getId(),
- config.getExtension(), chars)) {
+ config.getExtension(), characteristicsMapNative)) {
throw new UnsupportedOperationException("Unsupported extension type: " +
config.getExtension());
}
@@ -198,11 +199,12 @@
IAdvancedExtenderImpl extender = CameraExtensionCharacteristics.initializeAdvancedExtension(
config.getExtension());
- extender.init(cameraId);
+ extender.init(cameraId, characteristicsMapNative);
CameraAdvancedExtensionSessionImpl ret = new CameraAdvancedExtensionSessionImpl(clientId,
- extender, cameraDevice, repeatingRequestSurface, burstCaptureSurface,
- postviewSurface, config.getStateCallback(), config.getExecutor(), sessionId);
+ extender, cameraDevice, characteristicsMapNative, repeatingRequestSurface,
+ burstCaptureSurface, postviewSurface, config.getStateCallback(),
+ config.getExecutor(), sessionId);
ret.initialize();
return ret;
@@ -210,14 +212,16 @@
private CameraAdvancedExtensionSessionImpl(long extensionClientId,
@NonNull IAdvancedExtenderImpl extender,
- @NonNull android.hardware.camera2.impl.CameraDeviceImpl cameraDevice,
+ @NonNull CameraDeviceImpl cameraDevice,
+ Map<String, CameraMetadataNative> characteristicsMap,
@Nullable Surface repeatingRequestSurface, @Nullable Surface burstCaptureSurface,
@Nullable Surface postviewSurface,
- @NonNull CameraExtensionSession.StateCallback callback, @NonNull Executor executor,
+ @NonNull StateCallback callback, @NonNull Executor executor,
int sessionId) {
mExtensionClientId = extensionClientId;
mAdvancedExtender = extender;
mCameraDevice = cameraDevice;
+ mCharacteristicsMap = characteristicsMap;
mCallbacks = callback;
mExecutor = executor;
mClientRepeatingRequestSurface = repeatingRequestSurface;
@@ -247,7 +251,7 @@
mSessionProcessor = mAdvancedExtender.getSessionProcessor();
CameraSessionConfig sessionConfig = mSessionProcessor.initSession(mCameraDevice.getId(),
- previewSurface, captureSurface, postviewSurface);
+ mCharacteristicsMap, previewSurface, captureSurface, postviewSurface);
List<CameraOutputConfig> outputConfigs = sessionConfig.outputConfigs;
ArrayList<OutputConfiguration> outputList = new ArrayList<>();
for (CameraOutputConfig output : outputConfigs) {
@@ -542,7 +546,7 @@
if (mExtensionClientId >= 0) {
CameraExtensionCharacteristics.unregisterClient(mExtensionClientId);
- if (mInitialized) {
+ if (mInitialized || (mCaptureSession != null)) {
notifyClose = true;
CameraExtensionCharacteristics.releaseSession();
}
diff --git a/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java b/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java
index 693b5e0..bf4a20d 100644
--- a/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java
+++ b/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java
@@ -2517,14 +2517,19 @@
@Override
public void createExtensionSession(ExtensionSessionConfiguration extensionConfiguration)
throws CameraAccessException {
+ HashMap<String, CameraCharacteristics> characteristicsMap = new HashMap<>(
+ mPhysicalIdsToChars);
+ characteristicsMap.put(mCameraId, mCharacteristics);
try {
if (CameraExtensionCharacteristics.areAdvancedExtensionsSupported()) {
mCurrentAdvancedExtensionSession =
CameraAdvancedExtensionSessionImpl.createCameraAdvancedExtensionSession(
- this, mContext, extensionConfiguration, mNextSessionId++);
+ this, characteristicsMap, mContext, extensionConfiguration,
+ mNextSessionId++);
} else {
mCurrentExtensionSession = CameraExtensionSessionImpl.createCameraExtensionSession(
- this, mContext, extensionConfiguration, mNextSessionId++);
+ this, characteristicsMap, mContext, extensionConfiguration,
+ mNextSessionId++);
}
} catch (RemoteException e) {
throw new CameraAccessException(CameraAccessException.CAMERA_ERROR);
diff --git a/core/java/android/hardware/camera2/impl/CameraExtensionSessionImpl.java b/core/java/android/hardware/camera2/impl/CameraExtensionSessionImpl.java
index 9c878c7..8e7c7e0 100644
--- a/core/java/android/hardware/camera2/impl/CameraExtensionSessionImpl.java
+++ b/core/java/android/hardware/camera2/impl/CameraExtensionSessionImpl.java
@@ -129,6 +129,7 @@
@RequiresPermission(android.Manifest.permission.CAMERA)
public static CameraExtensionSessionImpl createCameraExtensionSession(
@NonNull android.hardware.camera2.impl.CameraDeviceImpl cameraDevice,
+ @NonNull Map<String, CameraCharacteristics> characteristicsMap,
@NonNull Context ctx,
@NonNull ExtensionSessionConfiguration config,
int sessionId)
@@ -139,13 +140,12 @@
}
String cameraId = cameraDevice.getId();
- CameraManager manager = ctx.getSystemService(CameraManager.class);
- CameraCharacteristics chars = manager.getCameraCharacteristics(cameraId);
CameraExtensionCharacteristics extensionChars = new CameraExtensionCharacteristics(ctx,
- cameraId, chars);
+ cameraId, characteristicsMap);
if (!CameraExtensionCharacteristics.isExtensionSupported(cameraDevice.getId(),
- config.getExtension(), chars)) {
+ config.getExtension(),
+ CameraExtensionUtils.getCharacteristicsMapNative(characteristicsMap))) {
throw new UnsupportedOperationException("Unsupported extension type: " +
config.getExtension());
}
@@ -222,10 +222,10 @@
}
}
- extenders.first.init(cameraId, chars.getNativeMetadata());
- extenders.first.onInit(cameraId, chars.getNativeMetadata());
- extenders.second.init(cameraId, chars.getNativeMetadata());
- extenders.second.onInit(cameraId, chars.getNativeMetadata());
+ extenders.first.init(cameraId, characteristicsMap.get(cameraId).getNativeMetadata());
+ extenders.first.onInit(cameraId, characteristicsMap.get(cameraId).getNativeMetadata());
+ extenders.second.init(cameraId, characteristicsMap.get(cameraId).getNativeMetadata());
+ extenders.second.onInit(cameraId, characteristicsMap.get(cameraId).getNativeMetadata());
CameraExtensionSessionImpl session = new CameraExtensionSessionImpl(
extenders.second,
@@ -840,7 +840,7 @@
if (mExtensionClientId >= 0) {
CameraExtensionCharacteristics.unregisterClient(mExtensionClientId);
- if (mInitialized) {
+ if (mInitialized || (mCaptureSession != null)) {
notifyClose = true;
CameraExtensionCharacteristics.releaseSession();
}
diff --git a/core/java/android/hardware/camera2/impl/CameraExtensionUtils.java b/core/java/android/hardware/camera2/impl/CameraExtensionUtils.java
index 08111c5..f4fc472 100644
--- a/core/java/android/hardware/camera2/impl/CameraExtensionUtils.java
+++ b/core/java/android/hardware/camera2/impl/CameraExtensionUtils.java
@@ -21,6 +21,7 @@
import android.graphics.ImageFormat;
import android.graphics.PixelFormat;
import android.hardware.HardwareBuffer;
+import android.hardware.camera2.CameraCharacteristics;
import android.hardware.camera2.CameraExtensionCharacteristics;
import android.hardware.camera2.params.OutputConfiguration;
import android.hardware.camera2.params.StreamConfigurationMap;
@@ -34,6 +35,7 @@
import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.concurrent.Executor;
import java.util.concurrent.RejectedExecutionException;
@@ -169,4 +171,13 @@
return null;
}
+
+ public static Map<String, CameraMetadataNative> getCharacteristicsMapNative(
+ Map<String, CameraCharacteristics> charsMap) {
+ HashMap<String, CameraMetadataNative> ret = new HashMap<>();
+ for (Map.Entry<String, CameraCharacteristics> entry : charsMap.entrySet()) {
+ ret.put(entry.getKey(), entry.getValue().getNativeMetadata());
+ }
+ return ret;
+ }
}
diff --git a/core/java/android/hardware/input/InputSettings.java b/core/java/android/hardware/input/InputSettings.java
index 6cd32ff..17bbe14 100644
--- a/core/java/android/hardware/input/InputSettings.java
+++ b/core/java/android/hardware/input/InputSettings.java
@@ -233,7 +233,7 @@
*/
public static boolean useTouchpadNaturalScrolling(@NonNull Context context) {
return Settings.System.getIntForUser(context.getContentResolver(),
- Settings.System.TOUCHPAD_NATURAL_SCROLLING, 0, UserHandle.USER_CURRENT) == 1;
+ Settings.System.TOUCHPAD_NATURAL_SCROLLING, 1, UserHandle.USER_CURRENT) == 1;
}
/**
diff --git a/core/java/android/hardware/radio/TunerCallbackAdapter.java b/core/java/android/hardware/radio/TunerCallbackAdapter.java
index 22f5902..f9a2dbb 100644
--- a/core/java/android/hardware/radio/TunerCallbackAdapter.java
+++ b/core/java/android/hardware/radio/TunerCallbackAdapter.java
@@ -144,6 +144,9 @@
int errorCode;
switch (status) {
+ case RadioTuner.TUNER_RESULT_CANCELED:
+ errorCode = RadioTuner.ERROR_CANCELLED;
+ break;
case RadioManager.STATUS_PERMISSION_DENIED:
case RadioManager.STATUS_DEAD_OBJECT:
errorCode = RadioTuner.ERROR_SERVER_DIED;
@@ -152,10 +155,16 @@
case RadioManager.STATUS_NO_INIT:
case RadioManager.STATUS_BAD_VALUE:
case RadioManager.STATUS_INVALID_OPERATION:
+ case RadioTuner.TUNER_RESULT_INTERNAL_ERROR:
+ case RadioTuner.TUNER_RESULT_INVALID_ARGUMENTS:
+ case RadioTuner.TUNER_RESULT_INVALID_STATE:
+ case RadioTuner.TUNER_RESULT_NOT_SUPPORTED:
+ case RadioTuner.TUNER_RESULT_UNKNOWN_ERROR:
Log.i(TAG, "Got an error with no mapping to the legacy API (" + status
+ "), doing a best-effort conversion to ERROR_SCAN_TIMEOUT");
// fall through
case RadioManager.STATUS_TIMED_OUT:
+ case RadioTuner.TUNER_RESULT_TIMEOUT:
default:
errorCode = RadioTuner.ERROR_SCAN_TIMEOUT;
}
diff --git a/core/java/android/hardware/soundtrigger/ConversionUtil.java b/core/java/android/hardware/soundtrigger/ConversionUtil.java
index 21fe686..5c07fa4 100644
--- a/core/java/android/hardware/soundtrigger/ConversionUtil.java
+++ b/core/java/android/hardware/soundtrigger/ConversionUtil.java
@@ -232,7 +232,8 @@
recognitionEvent.captureAvailable, captureSession, recognitionEvent.captureDelayMs,
recognitionEvent.capturePreambleMs, recognitionEvent.triggerInData, audioFormat,
recognitionEvent.data,
- recognitionEvent.recognitionStillActive, aidlEvent.halEventReceivedMillis);
+ recognitionEvent.recognitionStillActive, aidlEvent.halEventReceivedMillis,
+ aidlEvent.token);
}
public static SoundTrigger.RecognitionEvent aidl2apiPhraseRecognitionEvent(
@@ -254,7 +255,8 @@
recognitionEvent.common.captureDelayMs,
recognitionEvent.common.capturePreambleMs, recognitionEvent.common.triggerInData,
audioFormat,
- recognitionEvent.common.data, apiExtras, aidlEvent.halEventReceivedMillis);
+ recognitionEvent.common.data, apiExtras, aidlEvent.halEventReceivedMillis,
+ aidlEvent.token);
}
// In case of a null input returns a non-null valid output.
diff --git a/core/java/android/hardware/soundtrigger/SoundTrigger.java b/core/java/android/hardware/soundtrigger/SoundTrigger.java
index 6d43ddf..bfff4db 100644
--- a/core/java/android/hardware/soundtrigger/SoundTrigger.java
+++ b/core/java/android/hardware/soundtrigger/SoundTrigger.java
@@ -63,6 +63,7 @@
import java.util.Arrays;
import java.util.Collection;
import java.util.Locale;
+import java.util.Objects;
import java.util.UUID;
/**
@@ -1226,6 +1227,14 @@
@ElapsedRealtimeLong
public final long halEventReceivedMillis;
+ /**
+ * Binder token returned by {@link SoundTriggerModule#startRecognitionWithToken(
+ * int soundModelHandle, SoundTrigger.RecognitionConfig config)}
+ * @hide
+ */
+ public final IBinder token;
+
+
/** @hide */
@TestApi
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
@@ -1235,14 +1244,16 @@
@ElapsedRealtimeLong long halEventReceivedMillis) {
this(status, soundModelHandle, captureAvailable,
captureSession, captureDelayMs, capturePreambleMs, triggerInData, captureFormat,
- data, status == RECOGNITION_STATUS_GET_STATE_RESPONSE, halEventReceivedMillis);
+ data, status == RECOGNITION_STATUS_GET_STATE_RESPONSE, halEventReceivedMillis,
+ null);
}
/** @hide */
public RecognitionEvent(int status, int soundModelHandle, boolean captureAvailable,
int captureSession, int captureDelayMs, int capturePreambleMs,
boolean triggerInData, @NonNull AudioFormat captureFormat, @Nullable byte[] data,
- boolean recognitionStillActive, @ElapsedRealtimeLong long halEventReceivedMillis) {
+ boolean recognitionStillActive, @ElapsedRealtimeLong long halEventReceivedMillis,
+ IBinder token) {
this.status = status;
this.soundModelHandle = soundModelHandle;
this.captureAvailable = captureAvailable;
@@ -1254,6 +1265,7 @@
this.data = data != null ? data : new byte[0];
this.recognitionStillActive = recognitionStillActive;
this.halEventReceivedMillis = halEventReceivedMillis;
+ this.token = token;
}
/**
@@ -1311,6 +1323,16 @@
return halEventReceivedMillis;
}
+ /**
+ * Get token associated with this recognition session returned by
+ *{@link SoundTriggerModule#startRecognitionWithToken(
+ * int soundModelHandle, SoundTrigger.RecognitionConfig config)}
+ * @hide
+ */
+ public IBinder getToken() {
+ return token;
+ }
+
/** @hide */
public static final @android.annotation.NonNull Parcelable.Creator<RecognitionEvent> CREATOR
= new Parcelable.Creator<RecognitionEvent>() {
@@ -1346,9 +1368,10 @@
byte[] data = in.readBlob();
boolean recognitionStillActive = in.readBoolean();
long halEventReceivedMillis = in.readLong();
+ IBinder token = in.readStrongBinder();
return new RecognitionEvent(status, soundModelHandle, captureAvailable, captureSession,
captureDelayMs, capturePreambleMs, triggerInData, captureFormat, data,
- recognitionStillActive, halEventReceivedMillis);
+ recognitionStillActive, halEventReceivedMillis, token);
}
/** @hide */
@@ -1376,6 +1399,7 @@
dest.writeBlob(data);
dest.writeBoolean(recognitionStillActive);
dest.writeLong(halEventReceivedMillis);
+ dest.writeStrongBinder(token);
}
@Override
public int hashCode() {
@@ -1396,6 +1420,7 @@
result = prime * result + status;
result = result + (recognitionStillActive ? 1289 : 1291);
result = prime * result + Long.hashCode(halEventReceivedMillis);
+ result = prime * result + Objects.hashCode(token);
return result;
}
@@ -1425,6 +1450,9 @@
if (halEventReceivedMillis != other.halEventReceivedMillis) {
return false;
}
+ if (!Objects.equals(token, other.token)) {
+ return false;
+ }
if (status != other.status)
return false;
if (triggerInData != other.triggerInData)
@@ -1462,8 +1490,8 @@
+ ", data=" + (data == null ? 0 : data.length)
+ ", recognitionStillActive=" + recognitionStillActive
+ ", halEventReceivedMillis=" + halEventReceivedMillis
- + "]";
- }
+ + ", token=" + token
+ + "]"; }
}
/**
@@ -1886,10 +1914,12 @@
int captureSession, int captureDelayMs, int capturePreambleMs,
boolean triggerInData, @NonNull AudioFormat captureFormat, @Nullable byte[] data,
@Nullable KeyphraseRecognitionExtra[] keyphraseExtras,
- @ElapsedRealtimeLong long halEventReceivedMillis) {
+ @ElapsedRealtimeLong long halEventReceivedMillis,
+ IBinder token) {
this(status, soundModelHandle, captureAvailable, captureSession, captureDelayMs,
capturePreambleMs, triggerInData, captureFormat, data, keyphraseExtras,
- status == RECOGNITION_STATUS_GET_STATE_RESPONSE, halEventReceivedMillis);
+ status == RECOGNITION_STATUS_GET_STATE_RESPONSE, halEventReceivedMillis,
+ token);
}
public KeyphraseRecognitionEvent(int status, int soundModelHandle,
@@ -1897,10 +1927,11 @@
int captureSession, int captureDelayMs, int capturePreambleMs,
boolean triggerInData, @NonNull AudioFormat captureFormat, @Nullable byte[] data,
@Nullable KeyphraseRecognitionExtra[] keyphraseExtras,
- boolean recognitionStillActive, @ElapsedRealtimeLong long halEventReceivedMillis) {
+ boolean recognitionStillActive, @ElapsedRealtimeLong long halEventReceivedMillis,
+ IBinder token) {
super(status, soundModelHandle, captureAvailable,
captureSession, captureDelayMs, capturePreambleMs, triggerInData, captureFormat,
- data, recognitionStillActive, halEventReceivedMillis);
+ data, recognitionStillActive, halEventReceivedMillis, token);
this.keyphraseExtras =
keyphraseExtras != null ? keyphraseExtras : new KeyphraseRecognitionExtra[0];
}
@@ -1938,12 +1969,13 @@
byte[] data = in.readBlob();
boolean recognitionStillActive = in.readBoolean();
long halEventReceivedMillis = in.readLong();
+ IBinder token = in.readStrongBinder();
KeyphraseRecognitionExtra[] keyphraseExtras =
in.createTypedArray(KeyphraseRecognitionExtra.CREATOR);
return new KeyphraseRecognitionEvent(status, soundModelHandle,
captureAvailable, captureSession, captureDelayMs, capturePreambleMs,
triggerInData, captureFormat, data, keyphraseExtras, recognitionStillActive,
- halEventReceivedMillis);
+ halEventReceivedMillis, token);
}
@Override
@@ -1966,6 +1998,7 @@
dest.writeBlob(data);
dest.writeBoolean(recognitionStillActive);
dest.writeLong(halEventReceivedMillis);
+ dest.writeStrongBinder(token);
dest.writeTypedArray(keyphraseExtras, flags);
}
@@ -2015,6 +2048,7 @@
+ ", data=" + (data == null ? 0 : data.length)
+ ", recognitionStillActive=" + recognitionStillActive
+ ", halEventReceivedMillis=" + halEventReceivedMillis
+ + ", token=" + token
+ "]";
}
}
@@ -2030,20 +2064,23 @@
public GenericRecognitionEvent(int status, int soundModelHandle, boolean captureAvailable,
int captureSession, int captureDelayMs, int capturePreambleMs,
boolean triggerInData, @NonNull AudioFormat captureFormat, @Nullable byte[] data,
- @ElapsedRealtimeLong long halEventReceivedMillis) {
+ @ElapsedRealtimeLong long halEventReceivedMillis,
+ IBinder token) {
this(status, soundModelHandle, captureAvailable,
captureSession, captureDelayMs,
capturePreambleMs, triggerInData, captureFormat, data,
- status == RECOGNITION_STATUS_GET_STATE_RESPONSE, halEventReceivedMillis);
+ status == RECOGNITION_STATUS_GET_STATE_RESPONSE,
+ halEventReceivedMillis, token);
}
public GenericRecognitionEvent(int status, int soundModelHandle, boolean captureAvailable,
int captureSession, int captureDelayMs, int capturePreambleMs,
boolean triggerInData, @NonNull AudioFormat captureFormat, @Nullable byte[] data,
- boolean recognitionStillActive, @ElapsedRealtimeLong long halEventReceivedMillis) {
+ boolean recognitionStillActive, @ElapsedRealtimeLong long halEventReceivedMillis,
+ IBinder token) {
super(status, soundModelHandle, captureAvailable,
captureSession, captureDelayMs, capturePreambleMs, triggerInData, captureFormat,
- data, recognitionStillActive, halEventReceivedMillis);
+ data, recognitionStillActive, halEventReceivedMillis, token);
}
public static final @android.annotation.NonNull Parcelable.Creator<GenericRecognitionEvent> CREATOR
@@ -2062,7 +2099,7 @@
return new GenericRecognitionEvent(event.status, event.soundModelHandle,
event.captureAvailable, event.captureSession, event.captureDelayMs,
event.capturePreambleMs, event.triggerInData, event.captureFormat, event.data,
- event.recognitionStillActive, event.halEventReceivedMillis);
+ event.recognitionStillActive, event.halEventReceivedMillis, event.token);
}
@Override
@@ -2092,7 +2129,7 @@
*
* @hide
*/
- static int handleException(Exception e) {
+ public static int handleException(Exception e) {
Log.w(TAG, "Exception caught", e);
if (e instanceof RemoteException) {
return STATUS_DEAD_OBJECT;
@@ -2269,7 +2306,7 @@
Looper looper = handler != null ? handler.getLooper() : Looper.getMainLooper();
try {
return new SoundTriggerModule(getService(), moduleId, listener, looper,
- middlemanIdentity, originatorIdentity);
+ middlemanIdentity, originatorIdentity, false);
} catch (Exception e) {
Log.e(TAG, "", e);
return null;
diff --git a/core/java/android/hardware/soundtrigger/SoundTriggerModule.java b/core/java/android/hardware/soundtrigger/SoundTriggerModule.java
index 5cdbe23..8813a17 100644
--- a/core/java/android/hardware/soundtrigger/SoundTriggerModule.java
+++ b/core/java/android/hardware/soundtrigger/SoundTriggerModule.java
@@ -83,7 +83,8 @@
*/
public SoundTriggerModule(@NonNull ISoundTriggerMiddlewareService service,
int moduleId, @NonNull SoundTrigger.StatusListener listener, @NonNull Looper looper,
- @NonNull Identity middlemanIdentity, @NonNull Identity originatorIdentity) {
+ @NonNull Identity middlemanIdentity, @NonNull Identity originatorIdentity,
+ boolean isTrusted) {
mId = moduleId;
mEventHandlerDelegate = new EventHandlerDelegate(listener, looper);
@@ -91,7 +92,8 @@
try (SafeCloseable ignored = ClearCallingIdentityContext.create()) {
mService = service.attachAsMiddleman(moduleId, middlemanIdentity,
originatorIdentity,
- mEventHandlerDelegate);
+ mEventHandlerDelegate,
+ isTrusted);
}
mService.asBinder().linkToDeath(mEventHandlerDelegate, 0);
} catch (RemoteException e) {
@@ -247,6 +249,16 @@
}
/**
+ * Same as above, but return a binder token associated with the session.
+ * @hide
+ */
+ public synchronized IBinder startRecognitionWithToken(int soundModelHandle,
+ SoundTrigger.RecognitionConfig config) throws RemoteException {
+ return mService.startRecognition(soundModelHandle,
+ ConversionUtil.api2aidlRecognitionConfig(config));
+ }
+
+ /**
* Stop listening to all key phrases in a {@link SoundTrigger.SoundModel}
* @param soundModelHandle The sound model handle to stop listening to
* @return - {@link SoundTrigger#STATUS_OK} in case of success
diff --git a/core/java/android/nfc/NfcAntennaInfo.java b/core/java/android/nfc/NfcAntennaInfo.java
index d54fcd2..b002ca2 100644
--- a/core/java/android/nfc/NfcAntennaInfo.java
+++ b/core/java/android/nfc/NfcAntennaInfo.java
@@ -85,8 +85,8 @@
this.mDeviceHeight = in.readInt();
this.mDeviceFoldable = in.readByte() != 0;
this.mAvailableNfcAntennas = new ArrayList<>();
- in.readParcelableList(this.mAvailableNfcAntennas,
- AvailableNfcAntenna.class.getClassLoader());
+ in.readTypedList(this.mAvailableNfcAntennas,
+ AvailableNfcAntenna.CREATOR);
}
public static final @NonNull Parcelable.Creator<NfcAntennaInfo> CREATOR =
diff --git a/core/java/android/os/GraphicsEnvironment.java b/core/java/android/os/GraphicsEnvironment.java
index 2c31e32..94971b8 100644
--- a/core/java/android/os/GraphicsEnvironment.java
+++ b/core/java/android/os/GraphicsEnvironment.java
@@ -107,42 +107,22 @@
private static final int UPDATABLE_DRIVER_GLOBAL_OPT_IN_PRERELEASE_DRIVER = 2;
private static final int UPDATABLE_DRIVER_GLOBAL_OPT_IN_OFF = 3;
- // System properties related to ANGLE and legacy GLES graphics drivers.
- private static final String PROPERTY_EGL_SYSTEM_DRIVER = "ro.hardware.egl";
- // TODO (b/224558229): Properly add this to the list of system properties for a device:
- private static final String PROPERTY_EGL_LEGACY_DRIVER = "ro.hardware.egl_legacy";
-
// Values for ANGLE_GL_DRIVER_ALL_ANGLE
private static final int ANGLE_GL_DRIVER_ALL_ANGLE_ON = 1;
private static final int ANGLE_GL_DRIVER_ALL_ANGLE_OFF = 0;
- private static final int ANGLE_GL_DRIVER_ALL_LEGACY = -1;
// Values for ANGLE_GL_DRIVER_SELECTION_VALUES
private static final String ANGLE_GL_DRIVER_CHOICE_DEFAULT = "default";
private static final String ANGLE_GL_DRIVER_CHOICE_ANGLE = "angle";
- private static final String ANGLE_GL_DRIVER_CHOICE_LEGACY = "legacy";
- // The following value is a deprecated choice for "legacy"
private static final String ANGLE_GL_DRIVER_CHOICE_NATIVE = "native";
- // Values returned by getDriverForPackage() and getDefaultDriverToUse() (avoid returning
- // strings for performance reasons)
- private static final int ANGLE_GL_DRIVER_TO_USE_LEGACY = 0;
- private static final int ANGLE_GL_DRIVER_TO_USE_ANGLE = 1;
-
private ClassLoader mClassLoader;
private String mLibrarySearchPaths;
private String mLibraryPermittedPaths;
private GameManager mGameManager;
- private boolean mAngleIsSystemDriver = false;
- private boolean mNoLegacyDriver = false;
- // When ANGLE is the system driver, this is the name of the legacy driver.
- //
- // TODO (b/224558229): This is temporarily set to a value that works for testing, until
- // PROPERTY_EGL_LEGACY_DRIVER has been properly plumbed and this becomes broadly available.
- private String mEglLegacyDriver = "mali";
-
private int mAngleOptInIndex = -1;
+ private boolean mEnabledByGameMode = false;
/**
* Set up GraphicsEnvironment
@@ -159,24 +139,6 @@
setupGpuLayers(context, coreSettings, pm, packageName, appInfoWithMetaData);
Trace.traceEnd(Trace.TRACE_TAG_GRAPHICS);
- // Determine if ANGLE is the system driver, as this will determine other logic
- final String eglSystemDriver = SystemProperties.get(PROPERTY_EGL_SYSTEM_DRIVER);
- Log.v(TAG, "GLES system driver is '" + eglSystemDriver + "'");
- mAngleIsSystemDriver = eglSystemDriver.equals(ANGLE_DRIVER_NAME);
- if (mAngleIsSystemDriver) {
- // Lookup the legacy driver, to send down to the EGL loader
- final String eglLegacyDriver = SystemProperties.get(PROPERTY_EGL_LEGACY_DRIVER);
- if (eglLegacyDriver.isEmpty()) {
- mNoLegacyDriver = true;
- // TBD/TODO: Do we need this?:
- mEglLegacyDriver = eglSystemDriver;
- }
- } else {
- // TBD/TODO: Do we need this?:
- mEglLegacyDriver = eglSystemDriver;
- }
- Log.v(TAG, "Legacy GLES driver is '" + mEglLegacyDriver + "'");
-
// Setup ANGLE and pass down ANGLE details to the C++ code
Trace.traceBegin(Trace.TRACE_TAG_GRAPHICS, "setupAngle");
boolean useAngle = false;
@@ -185,10 +147,6 @@
useAngle = true;
setGpuStats(ANGLE_DRIVER_NAME, ANGLE_DRIVER_VERSION_NAME, ANGLE_DRIVER_VERSION_CODE,
0, packageName, getVulkanVersion(pm));
- } else if (mNoLegacyDriver) {
- // TBD: The following should never happen--does it?
- Log.e(TAG, "Unexpected problem with the ANGLE for use with: '" + packageName + "'");
- useAngle = true;
}
}
Trace.traceEnd(Trace.TRACE_TAG_GRAPHICS);
@@ -242,12 +200,10 @@
private boolean shouldUseAngle(Context context, Bundle coreSettings, String packageName) {
if (TextUtils.isEmpty(packageName)) {
Log.v(TAG, "No package name specified; use the system driver");
- return mAngleIsSystemDriver ? true : false;
+ return false;
}
- final int driverToUse = getDriverForPackage(context, coreSettings, packageName);
- boolean yesOrNo = driverToUse == ANGLE_GL_DRIVER_TO_USE_ANGLE;
- return yesOrNo;
+ return shouldUseAngleInternal(context, coreSettings, packageName);
}
private int getVulkanVersion(PackageManager pm) {
@@ -455,43 +411,25 @@
return ai;
}
- /**
- * Return the appropriate "default" driver, unless overridden by isAngleEnabledByGameMode().
- */
- private int getDefaultDriverToUse(Context context, String packageName) {
- if (mAngleIsSystemDriver || isAngleEnabledByGameMode(context, packageName)) {
- return ANGLE_GL_DRIVER_TO_USE_ANGLE;
- } else {
- return ANGLE_GL_DRIVER_TO_USE_LEGACY;
- }
- }
-
/*
* Determine which GLES "driver" should be used for the package, taking into account the
* following factors (in priority order):
*
* 1) The semi-global switch (i.e. Settings.Global.ANGLE_GL_DRIVER_ALL_ANGLE; which is set by
* the "angle_gl_driver_all_angle" setting; which forces a driver for all processes that
- * start after the Java run time is up), if it forces a choice; otherwise ...
+ * start after the Java run time is up), if it forces a choice;
* 2) The per-application switch (i.e. Settings.Global.ANGLE_GL_DRIVER_SELECTION_PKGS and
* Settings.Global.ANGLE_GL_DRIVER_SELECTION_VALUES; which corresponds to the
* “angle_gl_driver_selection_pkgs” and “angle_gl_driver_selection_values” settings); if it
* forces a choice;
- * - Workaround Note: ANGLE and Vulkan currently have issues with applications that use YUV
- * target functionality. The ANGLE broadcast receiver code will apply a "deferlist" at
- * the first boot of a newly-flashed device. However, there is a gap in time between
- * when applications can start and when the deferlist is applied. For now, assume that
- * if ANGLE is the system driver and Settings.Global.ANGLE_DEFERLIST is empty, that the
- * deferlist has not yet been applied. In this case, select the Legacy driver.
- * otherwise ...
- * 3) Use ANGLE if isAngleEnabledByGameMode() returns true; otherwise ...
- * 4) The global switch (i.e. use the system driver, whether ANGLE or legacy;
- * a.k.a. mAngleIsSystemDriver, which is set by the device’s “ro.hardware.egl” property)
- *
- * Factors 1 and 2 are decided by this method. Factors 3 and 4 are decided by
- * getDefaultDriverToUse().
+ * 3) Use ANGLE if isAngleEnabledByGameMode() returns true;
*/
- private int getDriverForPackage(Context context, Bundle bundle, String packageName) {
+ private boolean shouldUseAngleInternal(Context context, Bundle bundle, String packageName) {
+ // Make sure we have a good package name
+ if (TextUtils.isEmpty(packageName)) {
+ return false;
+ }
+
// Check the semi-global switch (i.e. once system has booted enough) for whether ANGLE
// should be forced on or off for "all appplications"
final int allUseAngle;
@@ -504,16 +442,7 @@
}
if (allUseAngle == ANGLE_GL_DRIVER_ALL_ANGLE_ON) {
Log.v(TAG, "Turn on ANGLE for all applications.");
- return ANGLE_GL_DRIVER_TO_USE_ANGLE;
- }
- if (allUseAngle == ANGLE_GL_DRIVER_ALL_LEGACY) {
- Log.v(TAG, "Disable ANGLE for all applications.");
- return ANGLE_GL_DRIVER_TO_USE_LEGACY;
- }
-
- // Make sure we have a good package name
- if (TextUtils.isEmpty(packageName)) {
- return getDefaultDriverToUse(context, packageName);
+ return true;
}
// Get the per-application settings lists
@@ -522,61 +451,46 @@
contentResolver, bundle, Settings.Global.ANGLE_GL_DRIVER_SELECTION_PKGS);
final List<String> optInValues = getGlobalSettingsString(
contentResolver, bundle, Settings.Global.ANGLE_GL_DRIVER_SELECTION_VALUES);
- final List<String> angleDeferlist = getGlobalSettingsString(
- contentResolver, bundle, Settings.Global.ANGLE_DEFERLIST);
Log.v(TAG, "Currently set values for:");
- Log.v(TAG, " angle_gl_driver_selection_pkgs =" + optInPackages);
- Log.v(TAG, " angle_gl_driver_selection_values =" + optInValues);
+ Log.v(TAG, " angle_gl_driver_selection_pkgs=" + optInPackages);
+ Log.v(TAG, " angle_gl_driver_selection_values=" + optInValues);
- // If ANGLE is the system driver AND the deferlist has not yet been applied, select the
- // Legacy driver
- if (mAngleIsSystemDriver && angleDeferlist.size() == 0) {
- Log.v(TAG, "ANGLE deferlist (" + Settings.Global.ANGLE_DEFERLIST + ") has not been "
- + "applied, defaulting to legacy driver");
- return ANGLE_GL_DRIVER_TO_USE_LEGACY;
- }
+ mEnabledByGameMode = isAngleEnabledByGameMode(context, packageName);
// Make sure we have good settings to use
if (optInPackages.size() != optInValues.size()) {
- Log.w(TAG,
+ Log.v(TAG,
"Global.Settings values are invalid: "
+ "number of packages: "
+ optInPackages.size() + ", "
+ "number of values: "
+ optInValues.size());
- return getDefaultDriverToUse(context, packageName);
+ return mEnabledByGameMode;
}
- // See if this application is listed in the per-application settings lists
+ // See if this application is listed in the per-application settings list
final int pkgIndex = getPackageIndex(packageName, optInPackages);
if (pkgIndex < 0) {
- // The application is NOT listed in the per-application settings lists; and so use the
- // system driver (i.e. either ANGLE or the Legacy driver)
- Log.v(TAG, "getDriverForPackage(): No per-application setting");
- return getDefaultDriverToUse(context, packageName);
+ Log.v(TAG, packageName + " is not listed in per-application setting");
+ return mEnabledByGameMode;
}
mAngleOptInIndex = pkgIndex;
- Log.v(TAG,
- "getDriverForPackage(): using per-application switch: "
- + optInValues.get(pkgIndex));
- // The application IS listed in the per-application settings lists; and so use the
- // setting--choosing the current system driver if the setting is "default" (i.e. either
- // ANGLE or the Legacy driver)
- String rtnValue = optInValues.get(pkgIndex);
+ // The application IS listed in the per-application settings list; and so use the
+ // setting--choosing the current system driver if the setting is "default"
+ String optInValue = optInValues.get(pkgIndex);
Log.v(TAG,
"ANGLE Developer option for '" + packageName + "' "
- + "set to: '" + rtnValue + "'");
- if (rtnValue.equals(ANGLE_GL_DRIVER_CHOICE_ANGLE)) {
- return ANGLE_GL_DRIVER_TO_USE_ANGLE;
- } else if (rtnValue.equals(ANGLE_GL_DRIVER_CHOICE_NATIVE)
- || rtnValue.equals(ANGLE_GL_DRIVER_CHOICE_LEGACY)) {
- return ANGLE_GL_DRIVER_TO_USE_LEGACY;
+ + "set to: '" + optInValue + "'");
+ if (optInValue.equals(ANGLE_GL_DRIVER_CHOICE_ANGLE)) {
+ return true;
+ } else if (optInValue.equals(ANGLE_GL_DRIVER_CHOICE_NATIVE)) {
+ return false;
} else {
// The user either chose default or an invalid value; go with the default driver or what
- // the game dashboard indicates
- return getDefaultDriverToUse(context, packageName);
+ // the game mode indicates
+ return mEnabledByGameMode;
}
}
@@ -631,9 +545,7 @@
* the C++ GraphicsEnv class.
*
* If ANGLE will be used, GraphicsEnv::setAngleInfo() will be called to enable ANGLE to be
- * properly used. Otherwise, GraphicsEnv::setLegacyDriverInfo() will be called to
- * enable the legacy GLES driver (e.g. when ANGLE is the system driver) to be identified and
- * used.
+ * properly used.
*
* @param context
* @param bundle
@@ -646,7 +558,6 @@
String packageName) {
if (!shouldUseAngle(context, bundle, packageName)) {
- setLegacyDriverInfo(packageName, mAngleIsSystemDriver, mEglLegacyDriver);
return false;
}
@@ -655,13 +566,13 @@
// If the developer has specified a debug package over ADB, attempt to find it
String anglePkgName = getAngleDebugPackage(context, bundle);
if (!anglePkgName.isEmpty()) {
- Log.i(TAG, "ANGLE debug package enabled: " + anglePkgName);
+ Log.v(TAG, "ANGLE debug package enabled: " + anglePkgName);
try {
// Note the debug package does not have to be pre-installed
angleInfo = pm.getApplicationInfo(anglePkgName, 0);
} catch (PackageManager.NameNotFoundException e) {
- Log.w(TAG, "ANGLE debug package '" + anglePkgName + "' not installed");
- setLegacyDriverInfo(packageName, mAngleIsSystemDriver, mEglLegacyDriver);
+ // If the debug package is specified but not found, abort.
+ Log.v(TAG, "ANGLE debug package '" + anglePkgName + "' not installed");
return false;
}
}
@@ -670,8 +581,7 @@
if (angleInfo == null) {
anglePkgName = getAnglePackageName(pm);
if (TextUtils.isEmpty(anglePkgName)) {
- Log.w(TAG, "Failed to find ANGLE package.");
- setLegacyDriverInfo(packageName, mAngleIsSystemDriver, mEglLegacyDriver);
+ Log.v(TAG, "Failed to find ANGLE package.");
return false;
}
@@ -681,8 +591,7 @@
angleInfo = pm.getApplicationInfo(anglePkgName,
PackageManager.MATCH_SYSTEM_ONLY);
} catch (PackageManager.NameNotFoundException e) {
- Log.w(TAG, "ANGLE package '" + anglePkgName + "' not installed");
- setLegacyDriverInfo(packageName, mAngleIsSystemDriver, mEglLegacyDriver);
+ Log.v(TAG, "ANGLE package '" + anglePkgName + "' not installed");
return false;
}
}
@@ -697,14 +606,13 @@
+ abi;
if (DEBUG) {
- Log.v(TAG, "ANGLE package libs: " + paths);
+ Log.d(TAG, "ANGLE package libs: " + paths);
}
// If we make it to here, ANGLE will be used. Call setAngleInfo() with the package name,
// and features to use.
final String[] features = getAngleEglFeatures(context, bundle);
- setAngleInfo(
- paths, packageName, mAngleIsSystemDriver, ANGLE_GL_DRIVER_CHOICE_ANGLE, features);
+ setAngleInfo(paths, packageName, ANGLE_GL_DRIVER_CHOICE_ANGLE, features);
return true;
}
@@ -994,9 +902,7 @@
private static native void setGpuStats(String driverPackageName, String driverVersionName,
long driverVersionCode, long driverBuildTime, String appPackageName, int vulkanVersion);
private static native void setAngleInfo(String path, String appPackage,
- boolean angleIsSystemDriver, String devOptIn, String[] features);
- private static native void setLegacyDriverInfo(
- String appPackage, boolean angleIsSystemDriver, String legacyDriverName);
+ String devOptIn, String[] features);
private static native boolean getShouldUseAngle(String packageName);
private static native boolean setInjectLayersPrSetDumpable();
private static native void nativeToggleAngleAsSystemDriver(boolean enabled);
diff --git a/core/java/android/os/Process.java b/core/java/android/os/Process.java
index bf3d52d..04525e8 100644
--- a/core/java/android/os/Process.java
+++ b/core/java/android/os/Process.java
@@ -1359,7 +1359,7 @@
String formatSize = MemoryProperties.memory_ddr_size().orElse("0KB");
long memSize = FileUtils.parseSize(formatSize);
- if (memSize == Long.MIN_VALUE) {
+ if (memSize <= 0) {
return FileUtils.roundStorageSize(getTotalMemory());
}
diff --git a/core/java/android/os/UserHandle.java b/core/java/android/os/UserHandle.java
index 4ce9184..ef39010 100644
--- a/core/java/android/os/UserHandle.java
+++ b/core/java/android/os/UserHandle.java
@@ -56,6 +56,7 @@
/** @hide A user id to indicate the currently active user */
@UnsupportedAppUsage
+ @TestApi
public static final @UserIdInt int USER_CURRENT = -2;
/** @hide A user handle to indicate the current user of the device */
diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java
index 5bcbaa1..8606687 100644
--- a/core/java/android/os/UserManager.java
+++ b/core/java/android/os/UserManager.java
@@ -4224,7 +4224,8 @@
android.Manifest.permission.MANAGE_USERS,
android.Manifest.permission.CREATE_USERS
})
- public List<UserInfo> getUsers() {
+ @TestApi
+ public @NonNull List<UserInfo> getUsers() {
return getUsers(/*excludePartial= */ true, /* excludeDying= */ false,
/* excludePreCreated= */ true);
}
@@ -4245,6 +4246,7 @@
android.Manifest.permission.MANAGE_USERS,
android.Manifest.permission.CREATE_USERS
})
+ @TestApi
public @NonNull List<UserInfo> getAliveUsers() {
return getUsers(/*excludePartial= */ true, /* excludeDying= */ true,
/* excludePreCreated= */ true);
@@ -4271,8 +4273,7 @@
* Returns information for all users on this device, based on the filtering parameters.
*
* @deprecated Pre-created users are deprecated and no longer supported.
- * Use {@link #getUsers()}, {@link #getUsers(boolean)}, or {@link #getAliveUsers()}
- * instead.
+ * Use {@link #getUsers()}, or {@link #getAliveUsers()} instead.
* @hide
*/
@Deprecated
diff --git a/core/java/android/provider/CallLog.java b/core/java/android/provider/CallLog.java
index 77c0067..ac6b2b2 100644
--- a/core/java/android/provider/CallLog.java
+++ b/core/java/android/provider/CallLog.java
@@ -1293,7 +1293,8 @@
USER_MISSED_NO_VIBRATE,
USER_MISSED_CALL_SCREENING_SERVICE_SILENCED,
USER_MISSED_CALL_FILTERS_TIMEOUT,
- USER_MISSED_NEVER_RANG
+ USER_MISSED_NEVER_RANG,
+ USER_MISSED_NOT_RUNNING
})
@Retention(RetentionPolicy.SOURCE)
public @interface MissedReason {}
@@ -1391,6 +1392,13 @@
public static final long USER_MISSED_NEVER_RANG = 1 << 23;
/**
+ * When {@link CallLog.Calls#TYPE} is {@link CallLog.Calls#MISSED_TYPE}, set this bit when
+ * the user receiving the call is not running (i.e. work profile paused).
+ * @hide
+ */
+ public static final long USER_MISSED_NOT_RUNNING = 1 << 24;
+
+ /**
* Where the {@link CallLog.Calls#TYPE} is {@link CallLog.Calls#MISSED_TYPE},
* indicates factors which may have lead the user to miss the call.
* <P>Type: INTEGER</P>
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 8cdb568..867dafe 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -3036,9 +3036,7 @@
public void destroy() {
try {
- // If this process is the system server process, mArray is the same object as
- // the memory int array kept inside SettingsProvider, so skipping the close()
- if (!Settings.isInSystemServer() && !mArray.isClosed()) {
+ if (!mArray.isClosed()) {
mArray.close();
}
} catch (IOException e) {
@@ -3218,8 +3216,9 @@
@UnsupportedAppUsage
public String getStringForUser(ContentResolver cr, String name, final int userHandle) {
final boolean isSelf = (userHandle == UserHandle.myUserId());
+ final boolean useCache = isSelf && !isInSystemServer();
boolean needsGenerationTracker = false;
- if (isSelf) {
+ if (useCache) {
synchronized (NameValueCache.this) {
final GenerationTracker generationTracker = mGenerationTrackers.get(name);
if (generationTracker != null) {
@@ -3365,9 +3364,12 @@
}
}
} else {
- if (LOCAL_LOGV) Log.i(TAG, "call-query of user " + userHandle
- + " by " + UserHandle.myUserId()
- + " so not updating cache");
+ if (DEBUG || LOCAL_LOGV) {
+ Log.i(TAG, "call-query of user " + userHandle
+ + " by " + UserHandle.myUserId()
+ + (isInSystemServer() ? " in system_server" : "")
+ + " so not updating cache");
+ }
}
return value;
}
@@ -5451,6 +5453,14 @@
public static final String SHOW_TOUCHES = "show_touches";
/**
+ * Show key presses and other events dispatched to focused windows on the screen.
+ * 0 = no
+ * 1 = yes
+ * @hide
+ */
+ public static final String SHOW_KEY_PRESSES = "show_key_presses";
+
+ /**
* Log raw orientation data from
* {@link com.android.server.policy.WindowOrientationListener} for use with the
* orientationplot.py tool.
@@ -5840,6 +5850,7 @@
PRIVATE_SETTINGS.add(NOTIFICATION_LIGHT_PULSE);
PRIVATE_SETTINGS.add(POINTER_LOCATION);
PRIVATE_SETTINGS.add(SHOW_TOUCHES);
+ PRIVATE_SETTINGS.add(SHOW_KEY_PRESSES);
PRIVATE_SETTINGS.add(WINDOW_ORIENTATION_LISTENER_LOG);
PRIVATE_SETTINGS.add(POWER_SOUNDS_ENABLED);
PRIVATE_SETTINGS.add(DOCK_SOUNDS_ENABLED);
diff --git a/core/java/android/service/autofill/FillRequest.java b/core/java/android/service/autofill/FillRequest.java
index 8afae74..7ec1483 100644
--- a/core/java/android/service/autofill/FillRequest.java
+++ b/core/java/android/service/autofill/FillRequest.java
@@ -121,6 +121,12 @@
*/
public static final @RequestFlags int FLAG_PCC_DETECTION = 0x200;
+ /**
+ * Indicate whether the screen has credman field
+ * @hide
+ */
+ public static final @RequestFlags int FLAG_SCREEN_HAS_CREDMAN_FIELD = 0x400;
+
/** @hide */
public static final int INVALID_REQUEST_ID = Integer.MIN_VALUE;
@@ -234,7 +240,8 @@
FLAG_SUPPORTS_FILL_DIALOG,
FLAG_IME_SHOWING,
FLAG_RESET_FILL_DIALOG_STATE,
- FLAG_PCC_DETECTION
+ FLAG_PCC_DETECTION,
+ FLAG_SCREEN_HAS_CREDMAN_FIELD
})
@Retention(RetentionPolicy.SOURCE)
@DataClass.Generated.Member
@@ -266,6 +273,8 @@
return "FLAG_RESET_FILL_DIALOG_STATE";
case FLAG_PCC_DETECTION:
return "FLAG_PCC_DETECTION";
+ case FLAG_SCREEN_HAS_CREDMAN_FIELD:
+ return "FLAG_SCREEN_HAS_CREDMAN_FIELD";
default: return Integer.toHexString(value);
}
}
@@ -282,10 +291,15 @@
* include contexts from requests whose {@link SaveInfo} had the
* {@link SaveInfo#FLAG_DELAY_SAVE} flag.
* @param hints
- * Autofill Provider should return data for the autofill hints requested here,
+ * Sends a list of datatypes for the Autofill Provider.
+ *
+ * If this is populated, Autofill Provider should return data
+ * for the autofill hints requested here,
* even though the Autofill Provider may not have detected these types.
* The hints would be part of HintConstants:
* https://developer.android.com/reference/androidx/autofill/HintConstants
+ *
+ * This is populated if the platform's field detection is enabled.
* @param clientState
* Gets the latest client state bundle set by the service in a
* {@link FillResponse.Builder#setClientState(Bundle) fill response}.
@@ -353,7 +367,8 @@
| FLAG_SUPPORTS_FILL_DIALOG
| FLAG_IME_SHOWING
| FLAG_RESET_FILL_DIALOG_STATE
- | FLAG_PCC_DETECTION);
+ | FLAG_PCC_DETECTION
+ | FLAG_SCREEN_HAS_CREDMAN_FIELD);
this.mInlineSuggestionsRequest = inlineSuggestionsRequest;
this.mDelayedFillIntentSender = delayedFillIntentSender;
@@ -381,10 +396,15 @@
}
/**
- * Autofill Provider should return data for the autofill hints requested here,
+ * Sends a list of datatypes for the Autofill Provider.
+ *
+ * If this is populated, Autofill Provider should return data
+ * for the autofill hints requested here,
* even though the Autofill Provider may not have detected these types.
* The hints would be part of HintConstants:
* https://developer.android.com/reference/androidx/autofill/HintConstants
+ *
+ * This is populated if the platform's field detection is enabled.
*/
@DataClass.Generated.Member
public @NonNull List<String> getHints() {
@@ -534,7 +554,8 @@
| FLAG_SUPPORTS_FILL_DIALOG
| FLAG_IME_SHOWING
| FLAG_RESET_FILL_DIALOG_STATE
- | FLAG_PCC_DETECTION);
+ | FLAG_PCC_DETECTION
+ | FLAG_SCREEN_HAS_CREDMAN_FIELD);
this.mInlineSuggestionsRequest = inlineSuggestionsRequest;
this.mDelayedFillIntentSender = delayedFillIntentSender;
@@ -556,10 +577,10 @@
};
@DataClass.Generated(
- time = 1675711417112L,
+ time = 1682097266850L,
codegenVersion = "1.0.23",
sourceFile = "frameworks/base/core/java/android/service/autofill/FillRequest.java",
- inputSignatures = "public static final @android.service.autofill.FillRequest.RequestFlags int FLAG_MANUAL_REQUEST\npublic static final @android.service.autofill.FillRequest.RequestFlags int FLAG_COMPATIBILITY_MODE_REQUEST\npublic static final @android.service.autofill.FillRequest.RequestFlags int FLAG_PASSWORD_INPUT_TYPE\npublic static final @android.service.autofill.FillRequest.RequestFlags int FLAG_VIEW_NOT_FOCUSED\npublic static final @android.service.autofill.FillRequest.RequestFlags int FLAG_SUPPORTS_FILL_DIALOG\npublic static final @android.service.autofill.FillRequest.RequestFlags int FLAG_IME_SHOWING\npublic static final @android.service.autofill.FillRequest.RequestFlags int FLAG_RESET_FILL_DIALOG_STATE\npublic static final @android.service.autofill.FillRequest.RequestFlags int FLAG_PCC_DETECTION\npublic static final int INVALID_REQUEST_ID\nprivate final int mId\nprivate final @android.annotation.NonNull java.util.List<android.service.autofill.FillContext> mFillContexts\nprivate final @android.annotation.NonNull java.util.List<java.lang.String> mHints\nprivate final @android.annotation.Nullable android.os.Bundle mClientState\nprivate final @android.service.autofill.FillRequest.RequestFlags int mFlags\nprivate final @android.annotation.Nullable android.view.inputmethod.InlineSuggestionsRequest mInlineSuggestionsRequest\nprivate final @android.annotation.Nullable android.content.IntentSender mDelayedFillIntentSender\nprivate void onConstructed()\nclass FillRequest extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genToString=true, genHiddenConstructor=true, genHiddenConstDefs=true)")
+ inputSignatures = "public static final @android.service.autofill.FillRequest.RequestFlags int FLAG_MANUAL_REQUEST\npublic static final @android.service.autofill.FillRequest.RequestFlags int FLAG_COMPATIBILITY_MODE_REQUEST\npublic static final @android.service.autofill.FillRequest.RequestFlags int FLAG_PASSWORD_INPUT_TYPE\npublic static final @android.service.autofill.FillRequest.RequestFlags int FLAG_VIEW_NOT_FOCUSED\npublic static final @android.service.autofill.FillRequest.RequestFlags int FLAG_SUPPORTS_FILL_DIALOG\npublic static final @android.service.autofill.FillRequest.RequestFlags int FLAG_IME_SHOWING\npublic static final @android.service.autofill.FillRequest.RequestFlags int FLAG_RESET_FILL_DIALOG_STATE\npublic static final @android.service.autofill.FillRequest.RequestFlags int FLAG_PCC_DETECTION\npublic static final @android.service.autofill.FillRequest.RequestFlags int FLAG_SCREEN_HAS_CREDMAN_FIELD\npublic static final int INVALID_REQUEST_ID\nprivate final int mId\nprivate final @android.annotation.NonNull java.util.List<android.service.autofill.FillContext> mFillContexts\nprivate final @android.annotation.NonNull java.util.List<java.lang.String> mHints\nprivate final @android.annotation.Nullable android.os.Bundle mClientState\nprivate final @android.service.autofill.FillRequest.RequestFlags int mFlags\nprivate final @android.annotation.Nullable android.view.inputmethod.InlineSuggestionsRequest mInlineSuggestionsRequest\nprivate final @android.annotation.Nullable android.content.IntentSender mDelayedFillIntentSender\nprivate void onConstructed()\nclass FillRequest extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genToString=true, genHiddenConstructor=true, genHiddenConstDefs=true)")
@Deprecated
private void __metadata() {}
diff --git a/core/java/android/service/credentials/CredentialProviderInfoFactory.java b/core/java/android/service/credentials/CredentialProviderInfoFactory.java
index 751c675..b196b06 100644
--- a/core/java/android/service/credentials/CredentialProviderInfoFactory.java
+++ b/core/java/android/service/credentials/CredentialProviderInfoFactory.java
@@ -75,13 +75,12 @@
/**
* Constructs an information instance of the credential provider.
*
- * @param context the context object
+ * @param context the context object
* @param serviceComponent the serviceComponent of the provider service
- * @param userId the android userId for which the current process is running
+ * @param userId the android userId for which the current process is running
* @param isSystemProvider whether this provider is a system provider
* @throws PackageManager.NameNotFoundException If provider service is not found
- * @throws SecurityException If provider does not require the relevant
- * permission
+ * @throws SecurityException If provider does not require the relevant permission
*/
public static CredentialProviderInfo create(
@NonNull Context context,
@@ -94,21 +93,20 @@
getServiceInfoOrThrow(serviceComponent, userId),
isSystemProvider,
/* disableSystemAppVerificationForTests= */ false,
- /* isEnabled= */ false);
+ /* isEnabled= */ false,
+ /* isPrimary= */ false);
}
/**
* Constructs an information instance of the credential provider.
*
- * @param context the context object
- * @param serviceInfo the service info for the provider app. This must
- * be retrieved from the
- * {@code PackageManager}
- * @param isSystemProvider whether the provider app is a system provider
+ * @param context the context object
+ * @param serviceInfo the service info for the provider app. This must be retrieved from the
+ * {@code PackageManager}
+ * @param isSystemProvider whether the provider app is a system provider
* @param disableSystemAppVerificationForTests whether to disable system app permission
- * verification so that tests can install system
- * providers
- * @param isEnabled whether the user enabled this provider
+ * verification so that tests can install system providers
+ * @param isEnabled whether the user enabled this provider
* @throws SecurityException If provider does not require the relevant permission
*/
public static CredentialProviderInfo create(
@@ -116,7 +114,8 @@
@NonNull ServiceInfo serviceInfo,
boolean isSystemProvider,
boolean disableSystemAppVerificationForTests,
- boolean isEnabled)
+ boolean isEnabled,
+ boolean isPrimary)
throws SecurityException {
verifyProviderPermission(serviceInfo);
if (isSystemProvider) {
@@ -131,6 +130,7 @@
return populateMetadata(context, serviceInfo)
.setSystemProvider(isSystemProvider)
.setEnabled(isEnabled)
+ .setPrimary(isPrimary)
.build();
}
@@ -168,7 +168,9 @@
Slog.w(TAG, "Context is null in isSystemProviderWithValidPermission");
return false;
}
- return PermissionUtils.hasPermission(context, serviceInfo.packageName,
+ return PermissionUtils.hasPermission(
+ context,
+ serviceInfo.packageName,
Manifest.permission.PROVIDE_DEFAULT_ENABLED_CREDENTIAL_SERVICE);
}
@@ -181,8 +183,11 @@
if (disableSystemAppVerificationForTests) {
Bundle metadata = serviceInfo.metaData;
if (metadata == null) {
- Slog.w(TAG, "metadata is null while reading "
- + "TEST_SYSTEM_PROVIDER_META_DATA_KEY: " + serviceInfo);
+ Slog.w(
+ TAG,
+ "metadata is null while reading "
+ + "TEST_SYSTEM_PROVIDER_META_DATA_KEY: "
+ + serviceInfo);
return false;
}
return metadata.getBoolean(
@@ -215,8 +220,10 @@
// 3. Stop if we are missing data.
if (resources == null) {
- Slog.w(TAG, "Resources are null for the serviceInfo being processed: "
- + serviceInfo.getComponentName());
+ Slog.w(
+ TAG,
+ "Resources are null for the serviceInfo being processed: "
+ + serviceInfo.getComponentName());
return builder;
}
@@ -408,7 +415,7 @@
si,
/* isSystemProvider= */ true,
disableSystemAppVerificationForTests,
- enabledServices.contains(si.getComponentName()));
+ enabledServices.contains(si.getComponentName()), false);
if (cpi.isSystemProvider()) {
providerInfos.add(cpi);
} else {
@@ -446,7 +453,8 @@
@NonNull Context context,
int userId,
int providerFilter,
- Set<ComponentName> enabledServices) {
+ Set<ComponentName> enabledServices,
+ Set<String> primaryServices) {
requireNonNull(context, "context must not be null");
// Get the device policy.
@@ -459,7 +467,11 @@
context, pp, disableSystemAppVerificationForTests, providerFilter);
generator.addUserProviders(
getUserProviders(
- context, userId, disableSystemAppVerificationForTests, enabledServices));
+ context,
+ userId,
+ disableSystemAppVerificationForTests,
+ enabledServices,
+ primaryServices));
generator.addSystemProviders(
getAvailableSystemServices(
context, userId, disableSystemAppVerificationForTests, enabledServices));
@@ -475,7 +487,8 @@
@NonNull Context context,
int userId,
int providerFilter,
- Set<ComponentName> enabledServices) {
+ Set<ComponentName> enabledServices,
+ Set<String> primaryServices) {
requireNonNull(context, "context must not be null");
// Get the device policy.
@@ -488,7 +501,11 @@
context, pp, disableSystemAppVerificationForTests, providerFilter);
generator.addUserProviders(
getUserProviders(
- context, userId, disableSystemAppVerificationForTests, enabledServices));
+ context,
+ userId,
+ disableSystemAppVerificationForTests,
+ enabledServices,
+ primaryServices));
generator.addSystemProviders(
getAvailableSystemServices(
context, userId, disableSystemAppVerificationForTests, enabledServices));
@@ -581,7 +598,8 @@
@NonNull Context context,
@UserIdInt int userId,
boolean disableSystemAppVerificationForTests,
- Set<ComponentName> enabledServices) {
+ Set<ComponentName> enabledServices,
+ Set<String> primaryServices) {
final List<CredentialProviderInfo> services = new ArrayList<>();
final List<ResolveInfo> resolveInfos =
context.getPackageManager()
@@ -603,7 +621,9 @@
serviceInfo,
/* isSystemProvider= */ false,
disableSystemAppVerificationForTests,
- enabledServices.contains(serviceInfo.getComponentName()));
+ enabledServices.contains(serviceInfo.getComponentName()),
+ primaryServices.contains(
+ serviceInfo.getComponentName().flattenToString()));
if (!cpi.isSystemProvider()) {
services.add(cpi);
}
diff --git a/core/java/android/service/voice/AlwaysOnHotwordDetector.java b/core/java/android/service/voice/AlwaysOnHotwordDetector.java
index 17d54b9..14f050d 100644
--- a/core/java/android/service/voice/AlwaysOnHotwordDetector.java
+++ b/core/java/android/service/voice/AlwaysOnHotwordDetector.java
@@ -984,7 +984,8 @@
new KeyphraseRecognitionEvent(status, soundModelHandle, captureAvailable,
captureSession, captureDelayMs, capturePreambleMs, triggerInData,
captureFormat, data, keyphraseRecognitionExtras.toArray(
- new KeyphraseRecognitionExtra[0]), halEventReceivedMillis),
+ new KeyphraseRecognitionExtra[0]), halEventReceivedMillis,
+ new Binder()),
mInternalCallback);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
diff --git a/core/java/android/service/voice/VoiceInteractionService.java b/core/java/android/service/voice/VoiceInteractionService.java
index 90e8ced..4b761c1 100644
--- a/core/java/android/service/voice/VoiceInteractionService.java
+++ b/core/java/android/service/voice/VoiceInteractionService.java
@@ -389,7 +389,7 @@
// It's still guaranteed to have been stopped.
// This helps with cases where the voice interaction implementation is changed
// by the user.
- safelyShutdownAllHotwordDetectors();
+ safelyShutdownAllHotwordDetectors(true);
}
/**
@@ -715,7 +715,7 @@
synchronized (mLock) {
if (!CompatChanges.isChangeEnabled(MULTIPLE_ACTIVE_HOTWORD_DETECTORS)) {
// Allow only one concurrent recognition via the APIs.
- safelyShutdownAllHotwordDetectors();
+ safelyShutdownAllHotwordDetectors(false);
} else {
for (HotwordDetector detector : mActiveDetectors) {
if (detector.isUsingSandboxedDetectionService()
@@ -878,7 +878,7 @@
synchronized (mLock) {
if (!CompatChanges.isChangeEnabled(MULTIPLE_ACTIVE_HOTWORD_DETECTORS)) {
// Allow only one concurrent recognition via the APIs.
- safelyShutdownAllHotwordDetectors();
+ safelyShutdownAllHotwordDetectors(false);
} else {
for (HotwordDetector detector : mActiveDetectors) {
if (!detector.isUsingSandboxedDetectionService()) {
@@ -1062,11 +1062,14 @@
return mKeyphraseEnrollmentInfo.getKeyphraseMetadata(keyphrase, locale) != null;
}
- private void safelyShutdownAllHotwordDetectors() {
+ private void safelyShutdownAllHotwordDetectors(boolean shouldShutDownVisualQueryDetector) {
synchronized (mLock) {
mActiveDetectors.forEach(detector -> {
try {
- detector.destroy();
+ if (detector != mActiveVisualQueryDetector.getInitializationDelegate()
+ || shouldShutDownVisualQueryDetector) {
+ detector.destroy();
+ }
} catch (Exception ex) {
Log.i(TAG, "exception destroying HotwordDetector", ex);
}
@@ -1116,6 +1119,8 @@
pw.println();
});
}
+ pw.println("Available Model Enrollment Applications:");
+ pw.println(" " + mKeyphraseEnrollmentInfo);
}
}
}
diff --git a/core/java/android/service/wallpaper/WallpaperService.java b/core/java/android/service/wallpaper/WallpaperService.java
index 8d84e44..230f511 100644
--- a/core/java/android/service/wallpaper/WallpaperService.java
+++ b/core/java/android/service/wallpaper/WallpaperService.java
@@ -184,6 +184,7 @@
private static final long DIMMING_ANIMATION_DURATION_MS = 300L;
+ @GuardedBy("itself")
private final ArrayMap<IBinder, IWallpaperEngineWrapper> mActiveEngines = new ArrayMap<>();
private Handler mBackgroundHandler;
@@ -2514,10 +2515,12 @@
// if they are visible, so we need to toggle the state to get their attention.
if (!mEngine.mDestroyed) {
mEngine.detach();
- for (IWallpaperEngineWrapper engineWrapper : mActiveEngines.values()) {
- if (engineWrapper.mEngine != null && engineWrapper.mEngine.mVisible) {
- engineWrapper.mEngine.doVisibilityChanged(false);
- engineWrapper.mEngine.doVisibilityChanged(true);
+ synchronized (mActiveEngines) {
+ for (IWallpaperEngineWrapper engineWrapper : mActiveEngines.values()) {
+ if (engineWrapper.mEngine != null && engineWrapper.mEngine.mVisible) {
+ engineWrapper.mEngine.doVisibilityChanged(false);
+ engineWrapper.mEngine.doVisibilityChanged(true);
+ }
}
}
}
@@ -2699,7 +2702,9 @@
IWallpaperEngineWrapper engineWrapper =
new IWallpaperEngineWrapper(mTarget, conn, windowToken, windowType,
isPreview, reqWidth, reqHeight, padding, displayId, which);
- mActiveEngines.put(windowToken, engineWrapper);
+ synchronized (mActiveEngines) {
+ mActiveEngines.put(windowToken, engineWrapper);
+ }
if (DEBUG) {
Slog.v(TAG, "IWallpaperServiceWrapper Attaching window token " + windowToken);
}
@@ -2708,7 +2713,10 @@
@Override
public void detach(IBinder windowToken) {
- IWallpaperEngineWrapper engineWrapper = mActiveEngines.remove(windowToken);
+ IWallpaperEngineWrapper engineWrapper;
+ synchronized (mActiveEngines) {
+ engineWrapper = mActiveEngines.remove(windowToken);
+ }
if (engineWrapper == null) {
Log.w(TAG, "Engine for window token " + windowToken + " already detached");
return;
@@ -2734,10 +2742,12 @@
public void onDestroy() {
Trace.beginSection("WPMS.onDestroy");
super.onDestroy();
- for (IWallpaperEngineWrapper engineWrapper : mActiveEngines.values()) {
- engineWrapper.destroy();
+ synchronized (mActiveEngines) {
+ for (IWallpaperEngineWrapper engineWrapper : mActiveEngines.values()) {
+ engineWrapper.destroy();
+ }
+ mActiveEngines.clear();
}
- mActiveEngines.clear();
if (mBackgroundThread != null) {
// onDestroy might be called without a previous onCreate if WallpaperService was
// instantiated manually. While this is a misuse of the API, some things break
@@ -2768,14 +2778,18 @@
@Override
protected void dump(FileDescriptor fd, PrintWriter out, String[] args) {
out.print("State of wallpaper "); out.print(this); out.println(":");
- for (IWallpaperEngineWrapper engineWrapper : mActiveEngines.values()) {
- Engine engine = engineWrapper.mEngine;
- if (engine == null) {
- Slog.w(TAG, "Engine for wrapper " + engineWrapper + " not attached");
- continue;
+ synchronized (mActiveEngines) {
+ for (IWallpaperEngineWrapper engineWrapper : mActiveEngines.values()) {
+ Engine engine = engineWrapper.mEngine;
+ if (engine == null) {
+ Slog.w(TAG, "Engine for wrapper " + engineWrapper + " not attached");
+ continue;
+ }
+ out.print(" Engine ");
+ out.print(engine);
+ out.println(":");
+ engine.dump(" ", fd, out, args);
}
- out.print(" Engine "); out.print(engine); out.println(":");
- engine.dump(" ", fd, out, args);
}
}
}
diff --git a/core/java/android/speech/tts/TextToSpeech.java b/core/java/android/speech/tts/TextToSpeech.java
index 21b14f4..428a07f 100644
--- a/core/java/android/speech/tts/TextToSpeech.java
+++ b/core/java/android/speech/tts/TextToSpeech.java
@@ -15,12 +15,17 @@
*/
package android.speech.tts;
+import static android.content.Context.DEVICE_ID_DEFAULT;
+import static android.media.AudioManager.AUDIO_SESSION_ID_GENERATE;
+
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.RawRes;
import android.annotation.SdkConstant;
import android.annotation.SdkConstant.SdkConstantType;
+import android.companion.virtual.VirtualDevice;
+import android.companion.virtual.VirtualDeviceManager;
import android.compat.annotation.UnsupportedAppUsage;
import android.content.ComponentName;
import android.content.ContentResolver;
@@ -791,9 +796,48 @@
mIsSystem = isSystem;
+ addDeviceSpecificSessionIdToParams(mContext, mParams);
initTts();
}
+ /**
+ * Add {@link VirtualDevice} specific playback audio session associated with context to
+ * parameters {@link Bundle} if applicable.
+ *
+ * @param context - {@link Context} context instance to extract the device specific audio
+ * session id from.
+ * @param params - {@link Bundle} to add the device specific audio session id to.
+ */
+ private static void addDeviceSpecificSessionIdToParams(
+ @NonNull Context context, @NonNull Bundle params) {
+ int audioSessionId = getDeviceSpecificPlaybackSessionId(context);
+ if (audioSessionId != AUDIO_SESSION_ID_GENERATE) {
+ params.putInt(Engine.KEY_PARAM_SESSION_ID, audioSessionId);
+ }
+ }
+
+ /**
+ * Helper method to fetch {@link VirtualDevice} specific playback audio session id for given
+ * {@link Context} instance.
+ *
+ * @param context - {@link Context} to fetch the audio sesion id for.
+ * @return audio session id corresponding to {@link VirtualDevice} in case the context is
+ * associated with {@link VirtualDevice} configured with specific audio session id,
+ * {@link AudioManager#AUDIO_SESSION_ID_GENERATE} otherwise.
+ * @see android.companion.virtual.VirtualDeviceManager#getAudioPlaybackSessionId(int)
+ */
+ private static int getDeviceSpecificPlaybackSessionId(@NonNull Context context) {
+ int deviceId = context.getDeviceId();
+ if (deviceId == DEVICE_ID_DEFAULT) {
+ return AUDIO_SESSION_ID_GENERATE;
+ }
+ VirtualDeviceManager vdm = context.getSystemService(VirtualDeviceManager.class);
+ if (vdm == null) {
+ return AUDIO_SESSION_ID_GENERATE;
+ }
+ return vdm.getAudioPlaybackSessionId(deviceId);
+ }
+
private <R> R runActionNoReconnect(Action<R> action, R errorResult, String method,
boolean onlyEstablishedConnection) {
return runAction(action, errorResult, method, false, onlyEstablishedConnection);
diff --git a/core/java/android/text/DynamicLayout.java b/core/java/android/text/DynamicLayout.java
index 196bac2..cd76754 100644
--- a/core/java/android/text/DynamicLayout.java
+++ b/core/java/android/text/DynamicLayout.java
@@ -1106,6 +1106,16 @@
mTransformedTextUpdate.before = before;
mTransformedTextUpdate.after = after;
}
+ // When there is a transformed text, we have to reflow the DynamicLayout based on
+ // the transformed indices instead of the range in base text.
+ // For example,
+ // base text: abcd > abce
+ // updated range: where = 3, before = 1, after = 1
+ // transformed text: abxxcd > abxxce
+ // updated range: where = 5, before = 1, after = 1
+ //
+ // Because the transformedText is udapted simultaneously with the base text,
+ // the range must be transformed before the base text changes.
transformedText.originalToTransformed(mTransformedTextUpdate);
}
}
@@ -1113,9 +1123,20 @@
public void onTextChanged(CharSequence s, int where, int before, int after) {
final DynamicLayout dynamicLayout = mLayout.get();
if (dynamicLayout != null && dynamicLayout.mDisplay instanceof OffsetMapping) {
- where = mTransformedTextUpdate.where;
- before = mTransformedTextUpdate.before;
- after = mTransformedTextUpdate.after;
+ if (mTransformedTextUpdate != null && mTransformedTextUpdate.where >= 0) {
+ where = mTransformedTextUpdate.where;
+ before = mTransformedTextUpdate.before;
+ after = mTransformedTextUpdate.after;
+ // Set where to -1 so that we know if beforeTextChanged is called.
+ mTransformedTextUpdate.where = -1;
+ } else {
+ // onTextChanged is called without beforeTextChanged. Reflow the entire text.
+ where = 0;
+ // We can't get the before length from the text, use the line end of the
+ // last line instead.
+ before = dynamicLayout.getLineEnd(dynamicLayout.getLineCount() - 1);
+ after = dynamicLayout.mDisplay.length();
+ }
}
reflow(s, where, before, after);
}
diff --git a/core/java/android/text/method/BaseKeyListener.java b/core/java/android/text/method/BaseKeyListener.java
index 9a120d5..e427908 100644
--- a/core/java/android/text/method/BaseKeyListener.java
+++ b/core/java/android/text/method/BaseKeyListener.java
@@ -345,7 +345,7 @@
}
// Alt+Backspace or Alt+ForwardDelete deletes the current line, if possible.
- if (isAltActive && deleteLine(view, content)) {
+ if (isAltActive && deleteLineFromCursor(view, content, isForwardDelete)) {
return true;
}
@@ -438,18 +438,34 @@
return false;
}
- private boolean deleteLine(View view, Editable content) {
+ private boolean deleteLineFromCursor(View view, Editable content, boolean forward) {
if (view instanceof TextView) {
+ final int selectionStart = Selection.getSelectionStart(content);
+ final int selectionEnd = Selection.getSelectionEnd(content);
+ final int selectionMin;
+ final int selectionMax;
+ if (selectionStart < selectionEnd) {
+ selectionMin = selectionStart;
+ selectionMax = selectionEnd;
+ } else {
+ selectionMin = selectionEnd;
+ selectionMax = selectionStart;
+ }
+
final TextView textView = (TextView) view;
final Layout layout = textView.getLayout();
if (layout != null && !textView.isOffsetMappingAvailable()) {
final int line = layout.getLineForOffset(Selection.getSelectionStart(content));
final int start = layout.getLineStart(line);
final int end = layout.getLineEnd(line);
- if (end != start) {
- content.delete(start, end);
- return true;
+
+ if (forward) {
+ content.delete(selectionMin, end);
+ } else {
+ content.delete(start, selectionMax);
}
+
+ return true;
}
}
return false;
diff --git a/core/java/android/text/method/InsertModeTransformationMethod.java b/core/java/android/text/method/InsertModeTransformationMethod.java
index 0c933d9..59b80f3 100644
--- a/core/java/android/text/method/InsertModeTransformationMethod.java
+++ b/core/java/android/text/method/InsertModeTransformationMethod.java
@@ -37,6 +37,8 @@
import com.android.internal.util.ArrayUtils;
import com.android.internal.util.Preconditions;
+import java.lang.reflect.Array;
+
/**
* The transformation method used by handwriting insert mode.
* This transformation will insert a placeholder string to the original text at the given
@@ -309,26 +311,51 @@
return ArrayUtils.emptyArray(type);
}
- final T[] spansOriginal;
+ T[] spansOriginal = null;
if (mSpannedOriginal != null) {
final int originalStart =
transformedToOriginal(start, OffsetMapping.MAP_STRATEGY_CURSOR);
final int originalEnd =
transformedToOriginal(end, OffsetMapping.MAP_STRATEGY_CURSOR);
+ // We can't simply call SpannedString.getSpans(originalStart, originalEnd) here.
+ // When start == end SpannedString.getSpans returns spans whose spanEnd == start.
+ // For example,
+ // text: abcd span: [1, 3)
+ // getSpan(3, 3) will return the span [1, 3) but getSpan(3, 4) returns no span.
+ //
+ // This creates some special cases when originalStart == originalEnd.
+ // For example:
+ // original text: abcd span1: [1, 3) span2: [3, 4) span3: [3, 3)
+ // transformed text: abc\n\nd span1: [1, 3) span2: [5, 6) span3: [3, 3)
+ // Case 1:
+ // When start = 3 and end = 4, transformedText#getSpan(3, 4) should return span3.
+ // However, because originalStart == originalEnd == 3, originalText#getSpan(3, 3)
+ // returns span1, span2 and span3.
+ //
+ // Case 2:
+ // When start == end == 4, transformedText#getSpan(4, 4) should return nothing.
+ // However, because originalStart == originalEnd == 3, originalText#getSpan(3, 3)
+ // return span1, span2 and span3.
+ //
+ // Case 3:
+ // When start == end == 5, transformedText#getSpan(5, 5) should return span2.
+ // However, because originalStart == originalEnd == 3, originalText#getSpan(3, 3)
+ // return span1, span2 and span3.
+ //
+ // To handle the issue, we need to filter out the invalid spans.
spansOriginal = mSpannedOriginal.getSpans(originalStart, originalEnd, type);
- } else {
- spansOriginal = null;
+ spansOriginal = ArrayUtils.filter(spansOriginal,
+ size -> (T[]) Array.newInstance(type, size),
+ span -> intersect(getSpanStart(span), getSpanEnd(span), start, end));
}
- final T[] spansPlaceholder;
+ T[] spansPlaceholder = null;
if (mSpannedPlaceholder != null
&& intersect(start, end, mEnd, mEnd + mPlaceholder.length())) {
- final int placeholderStart = Math.max(start - mEnd, 0);
- final int placeholderEnd = Math.min(end - mEnd, mPlaceholder.length());
+ int placeholderStart = Math.max(start - mEnd, 0);
+ int placeholderEnd = Math.min(end - mEnd, mPlaceholder.length());
spansPlaceholder =
mSpannedPlaceholder.getSpans(placeholderStart, placeholderEnd, type);
- } else {
- spansPlaceholder = null;
}
// TODO: sort the spans based on their priority.
@@ -340,7 +367,10 @@
if (mSpannedOriginal != null) {
final int index = mSpannedOriginal.getSpanStart(tag);
if (index >= 0) {
- if (index < mEnd) {
+ // When originalSpanStart == originalSpanEnd == mEnd, the span should be
+ // considered "before" the placeholder text. So we return the originalSpanStart.
+ if (index < mEnd
+ || (index == mEnd && mSpannedOriginal.getSpanEnd(tag) == index)) {
return index;
}
return index + mPlaceholder.length();
diff --git a/core/java/android/view/DisplayInfo.java b/core/java/android/view/DisplayInfo.java
index d8fa533..512f4f2 100644
--- a/core/java/android/view/DisplayInfo.java
+++ b/core/java/android/view/DisplayInfo.java
@@ -647,7 +647,9 @@
if (refreshRateOverride > 0) {
return refreshRateOverride;
}
-
+ if (supportedModes.length == 0) {
+ return 0;
+ }
return getMode().getRefreshRate();
}
@@ -665,7 +667,9 @@
return supportedModes[i];
}
}
- throw new IllegalStateException("Unable to locate mode " + id);
+ throw new IllegalStateException(
+ "Unable to locate mode id=" + id + ",supportedModes=" + Arrays.toString(
+ supportedModes));
}
/**
diff --git a/core/java/android/view/HandwritingInitiator.java b/core/java/android/view/HandwritingInitiator.java
index dd4f964..ab58306b 100644
--- a/core/java/android/view/HandwritingInitiator.java
+++ b/core/java/android/view/HandwritingInitiator.java
@@ -85,7 +85,21 @@
* to {@link #findBestCandidateView(float, float)}.
*/
@Nullable
- private View mCachedHoverTarget = null;
+ private WeakReference<View> mCachedHoverTarget = null;
+
+ /**
+ * Whether to show the hover icon for the current connected view.
+ * Hover icon should be hidden for the current connected view after handwriting is initiated
+ * for it until one of the following events happens:
+ * a) user performs a click or long click. In other words, if it receives a series of motion
+ * events that don't trigger handwriting, show hover icon again.
+ * b) the stylus hovers on another editor that supports handwriting (or a handwriting delegate).
+ * c) the current connected editor lost focus.
+ *
+ * If the stylus is hovering on an unconnected editor that supports handwriting, we always show
+ * the hover icon.
+ */
+ private boolean mShowHoverIconForConnectedView = true;
@VisibleForTesting
public HandwritingInitiator(@NonNull ViewConfiguration viewConfiguration,
@@ -142,6 +156,12 @@
// check whether the stylus we are tracking goes up.
if (mState != null) {
mState.mShouldInitHandwriting = false;
+ if (!mState.mHasInitiatedHandwriting
+ && !mState.mHasPreparedHandwritingDelegation) {
+ // The user just did a click, long click or another stylus gesture,
+ // show hover icon again for the connected view.
+ mShowHoverIconForConnectedView = true;
+ }
}
return false;
case MotionEvent.ACTION_MOVE:
@@ -214,7 +234,11 @@
*/
public void onDelegateViewFocused(@NonNull View view) {
if (view == getConnectedView()) {
- tryAcceptStylusHandwritingDelegation(view);
+ if (tryAcceptStylusHandwritingDelegation(view)) {
+ // A handwriting delegate view is accepted and handwriting starts; hide the
+ // hover icon.
+ mShowHoverIconForConnectedView = false;
+ }
}
}
@@ -237,7 +261,12 @@
} else {
mConnectedView = new WeakReference<>(view);
mConnectionCount = 1;
+ // A new view just gain focus. By default, we should show hover icon for it.
+ mShowHoverIconForConnectedView = true;
if (view.isHandwritingDelegate() && tryAcceptStylusHandwritingDelegation(view)) {
+ // A handwriting delegate view is accepted and handwriting starts; hide the
+ // hover icon.
+ mShowHoverIconForConnectedView = false;
return;
}
if (mState != null && mState.mShouldInitHandwriting) {
@@ -306,6 +335,7 @@
mImm.startStylusHandwriting(view);
mState.mHasInitiatedHandwriting = true;
mState.mShouldInitHandwriting = false;
+ mShowHoverIconForConnectedView = false;
if (view instanceof TextView) {
((TextView) view).hideHint();
}
@@ -361,15 +391,35 @@
* handwrite-able area.
*/
public PointerIcon onResolvePointerIcon(Context context, MotionEvent event) {
- if (shouldShowHandwritingPointerIcon(event)) {
+ final View hoverView = findHoverView(event);
+ if (hoverView == null) {
+ return null;
+ }
+
+ if (mShowHoverIconForConnectedView) {
+ return PointerIcon.getSystemIcon(context, PointerIcon.TYPE_HANDWRITING);
+ }
+
+ if (hoverView != getConnectedView()) {
+ // The stylus is hovering on another view that supports handwriting. We should show
+ // hover icon. Also reset the mShowHoverIconForConnectedView so that hover
+ // icon is displayed again next time when the stylus hovers on connected view.
+ mShowHoverIconForConnectedView = true;
return PointerIcon.getSystemIcon(context, PointerIcon.TYPE_HANDWRITING);
}
return null;
}
- private boolean shouldShowHandwritingPointerIcon(MotionEvent event) {
+ private View getCachedHoverTarget() {
+ if (mCachedHoverTarget == null) {
+ return null;
+ }
+ return mCachedHoverTarget.get();
+ }
+
+ private View findHoverView(MotionEvent event) {
if (!event.isStylusPointer() || !event.isHoverEvent()) {
- return false;
+ return null;
}
if (event.getActionMasked() == MotionEvent.ACTION_HOVER_ENTER
@@ -377,24 +427,25 @@
final float hoverX = event.getX(event.getActionIndex());
final float hoverY = event.getY(event.getActionIndex());
- if (mCachedHoverTarget != null) {
- final Rect handwritingArea = getViewHandwritingArea(mCachedHoverTarget);
- if (isInHandwritingArea(handwritingArea, hoverX, hoverY, mCachedHoverTarget)
- && shouldTriggerStylusHandwritingForView(mCachedHoverTarget)) {
- return true;
+ final View cachedHoverTarget = getCachedHoverTarget();
+ if (cachedHoverTarget != null) {
+ final Rect handwritingArea = getViewHandwritingArea(cachedHoverTarget);
+ if (isInHandwritingArea(handwritingArea, hoverX, hoverY, cachedHoverTarget)
+ && shouldTriggerStylusHandwritingForView(cachedHoverTarget)) {
+ return cachedHoverTarget;
}
}
final View candidateView = findBestCandidateView(hoverX, hoverY);
if (candidateView != null) {
- mCachedHoverTarget = candidateView;
- return true;
+ mCachedHoverTarget = new WeakReference<>(candidateView);
+ return candidateView;
}
}
mCachedHoverTarget = null;
- return false;
+ return null;
}
private static void requestFocusWithoutReveal(View view) {
diff --git a/core/java/android/view/MotionEvent.java b/core/java/android/view/MotionEvent.java
index 3902989..1af8ca2 100644
--- a/core/java/android/view/MotionEvent.java
+++ b/core/java/android/view/MotionEvent.java
@@ -4167,6 +4167,40 @@
}
/**
+ * Get the x coordinate of the location where the pointer should be dispatched.
+ *
+ * This is required because a mouse event, such as from a touchpad, may contain multiple
+ * pointers that should all be dispatched to the cursor position.
+ * @hide
+ */
+ public float getXDispatchLocation(int pointerIndex) {
+ if (isFromSource(InputDevice.SOURCE_MOUSE)) {
+ final float xCursorPosition = getXCursorPosition();
+ if (xCursorPosition != INVALID_CURSOR_POSITION) {
+ return xCursorPosition;
+ }
+ }
+ return getX(pointerIndex);
+ }
+
+ /**
+ * Get the y coordinate of the location where the pointer should be dispatched.
+ *
+ * This is required because a mouse event, such as from a touchpad, may contain multiple
+ * pointers that should all be dispatched to the cursor position.
+ * @hide
+ */
+ public float getYDispatchLocation(int pointerIndex) {
+ if (isFromSource(InputDevice.SOURCE_MOUSE)) {
+ final float yCursorPosition = getYCursorPosition();
+ if (yCursorPosition != INVALID_CURSOR_POSITION) {
+ return yCursorPosition;
+ }
+ }
+ return getY(pointerIndex);
+ }
+
+ /**
* Transfer object for pointer coordinates.
*
* Objects of this type can be used to specify the pointer coordinates when
diff --git a/core/java/android/view/SurfaceControl.java b/core/java/android/view/SurfaceControl.java
index 99deac4..62fdfae 100644
--- a/core/java/android/view/SurfaceControl.java
+++ b/core/java/android/view/SurfaceControl.java
@@ -280,7 +280,7 @@
private static native int nativeGetLayerId(long nativeObject);
private static native void nativeAddTransactionCommittedListener(long nativeObject,
TransactionCommittedListener listener);
- private static native void nativeSanitize(long transactionObject);
+ private static native void nativeSanitize(long transactionObject, int pid, int uid);
private static native void nativeSetDestinationFrame(long transactionObj, long nativeObject,
int l, int t, int r, int b);
private static native void nativeSetDefaultApplyToken(IBinder token);
@@ -3960,8 +3960,8 @@
/**
* @hide
*/
- public void sanitize() {
- nativeSanitize(mNativeObject);
+ public void sanitize(int pid, int uid) {
+ nativeSanitize(mNativeObject, pid, uid);
}
/**
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 003307d..6af160c 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -9845,10 +9845,11 @@
*
* <p><b>Note:</b> Setting the mode as {@link #IMPORTANT_FOR_AUTOFILL_NO} or
* {@link #IMPORTANT_FOR_AUTOFILL_NO_EXCLUDE_DESCENDANTS} does not guarantee the view (and its
- * children) will be always be considered not important; for example, when the user explicitly
- * makes an autofill request, all views are considered important. See
- * {@link #isImportantForAutofill()} for more details about how the View's importance for
- * autofill is used.
+ * children) will not be used for autofill purpose; for example, when the user explicitly
+ * makes an autofill request, all views are included in the ViewStructure, and starting in
+ * {@link android.os.Build.VERSION_CODES#UPSIDE_DOWN_CAKE} the system uses other factors along
+ * with importance to determine the autofill behavior. See {@link #isImportantForAutofill()}
+ * for more details about how the View's importance for autofill is used.
*
* @param mode {@link #IMPORTANT_FOR_AUTOFILL_AUTO}, {@link #IMPORTANT_FOR_AUTOFILL_YES},
* {@link #IMPORTANT_FOR_AUTOFILL_NO}, {@link #IMPORTANT_FOR_AUTOFILL_YES_EXCLUDE_DESCENDANTS},
@@ -9894,21 +9895,36 @@
* <li>otherwise, it returns {@code false}.
* </ol>
*
- * <p>When a view is considered important for autofill:
- * <ul>
- * <li>The view might automatically trigger an autofill request when focused on.
- * <li>The contents of the view are included in the {@link ViewStructure} used in an autofill
- * request.
- * </ul>
- *
- * <p>On the other hand, when a view is considered not important for autofill:
- * <ul>
- * <li>The view never automatically triggers autofill requests, but it can trigger a manual
- * request through {@link AutofillManager#requestAutofill(View)}.
- * <li>The contents of the view are not included in the {@link ViewStructure} used in an
- * autofill request, unless the request has the
- * {@link #AUTOFILL_FLAG_INCLUDE_NOT_IMPORTANT_VIEWS} flag.
- * </ul>
+ * <p> The behavior of importances depends on Android version:
+ * <ol>
+ * <li>For {@link android.os.Build.VERSION_CODES#TIRAMISU} and below:
+ * <ol>
+ * <li>When a view is considered important for autofill:
+ * <ol>
+ * <li>The view might automatically trigger an autofill request when focused on.
+ * <li>The contents of the view are included in the {@link ViewStructure} used in an
+ * autofill request.
+ * </ol>
+ * <li>On the other hand, when a view is considered not important for autofill:
+ * <ol>
+ * <li>The view never automatically triggers autofill requests, but it can trigger a
+ * manual request through {@link AutofillManager#requestAutofill(View)}.
+ * <li>The contents of the view are not included in the {@link ViewStructure} used in
+ * an autofill request, unless the request has the
+ * {@link #AUTOFILL_FLAG_INCLUDE_NOT_IMPORTANT_VIEWS} flag.
+ * </ol>
+ * </ol>
+ * <li>For {@link android.os.Build.VERSION_CODES#UPSIDE_DOWN_CAKE} and above:
+ * <ol>
+ * <li>The system uses importance, along with other view properties and other optimization
+ * factors, to determine if a view should trigger autofill on focus.
+ * <li>The contents of {@link #IMPORTANT_FOR_AUTOFILL_AUTO},
+ * {@link #IMPORTANT_FOR_AUTOFILL_YES}, {@link #IMPORTANT_FOR_AUTOFILL_NO},
+ * {@link #IMPORTANT_FOR_AUTOFILL_YES_EXCLUDE_DESCENDANTS}, and
+ * {@link #IMPORTANT_FOR_AUTOFILL_NO_EXCLUDE_DESCENDANTS} views will be included in the
+ * {@link ViewStructure} used in an autofill request.
+ * </ol>
+ * </ol>
*
* @return whether the view is considered important for autofill.
*
@@ -10380,11 +10396,6 @@
return false;
}
- // Disable triggering autofill if the view is integrated with CredentialManager.
- if (afm.shouldIgnoreCredentialViews() && isCredential()) {
- return false;
- }
-
// Check whether view is not part of an activity. If it's not, return false.
if (getAutofillViewId() <= LAST_APP_AUTOFILL_ID) {
return false;
@@ -25079,7 +25090,7 @@
int viewStateIndex = 0;
if ((privateFlags & PFLAG_PRESSED) != 0) viewStateIndex |= StateSet.VIEW_STATE_PRESSED;
if ((mViewFlags & ENABLED_MASK) == ENABLED) viewStateIndex |= StateSet.VIEW_STATE_ENABLED;
- if (isFocused() && hasWindowFocus()) viewStateIndex |= StateSet.VIEW_STATE_FOCUSED;
+ if (isFocused()) viewStateIndex |= StateSet.VIEW_STATE_FOCUSED;
if ((privateFlags & PFLAG_SELECTED) != 0) viewStateIndex |= StateSet.VIEW_STATE_SELECTED;
if (hasWindowFocus()) viewStateIndex |= StateSet.VIEW_STATE_WINDOW_FOCUSED;
if ((privateFlags & PFLAG_ACTIVATED) != 0) viewStateIndex |= StateSet.VIEW_STATE_ACTIVATED;
diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java
index f5e4da8..d457847 100644
--- a/core/java/android/view/ViewGroup.java
+++ b/core/java/android/view/ViewGroup.java
@@ -2040,8 +2040,8 @@
@Override
public PointerIcon onResolvePointerIcon(MotionEvent event, int pointerIndex) {
- final float x = event.getX(pointerIndex);
- final float y = event.getY(pointerIndex);
+ final float x = event.getXDispatchLocation(pointerIndex);
+ final float y = event.getYDispatchLocation(pointerIndex);
if (isOnScrollbarThumb(x, y) || isDraggingScrollBar()) {
return PointerIcon.getSystemIcon(mContext, PointerIcon.TYPE_ARROW);
}
@@ -2125,8 +2125,8 @@
HoverTarget firstOldHoverTarget = mFirstHoverTarget;
mFirstHoverTarget = null;
if (!interceptHover && action != MotionEvent.ACTION_HOVER_EXIT) {
- final float x = event.getX();
- final float y = event.getY();
+ final float x = event.getXDispatchLocation(0);
+ final float y = event.getYDispatchLocation(0);
final int childrenCount = mChildrenCount;
if (childrenCount != 0) {
final ArrayList<View> preorderedList = buildOrderedChildList();
@@ -2347,8 +2347,8 @@
// Check what the child under the pointer says about the tooltip.
final int childrenCount = mChildrenCount;
if (childrenCount != 0) {
- final float x = event.getX();
- final float y = event.getY();
+ final float x = event.getXDispatchLocation(0);
+ final float y = event.getYDispatchLocation(0);
final ArrayList<View> preorderedList = buildOrderedChildList();
final boolean customOrder = preorderedList == null
@@ -2443,8 +2443,8 @@
@Override
protected boolean pointInHoveredChild(MotionEvent event) {
if (mFirstHoverTarget != null) {
- return isTransformedTouchPointInView(event.getX(), event.getY(),
- mFirstHoverTarget.child, null);
+ return isTransformedTouchPointInView(event.getXDispatchLocation(0),
+ event.getYDispatchLocation(0), mFirstHoverTarget.child, null);
}
return false;
}
@@ -2513,8 +2513,8 @@
public boolean onInterceptHoverEvent(MotionEvent event) {
if (event.isFromSource(InputDevice.SOURCE_MOUSE)) {
final int action = event.getAction();
- final float x = event.getX();
- final float y = event.getY();
+ final float x = event.getXDispatchLocation(0);
+ final float y = event.getYDispatchLocation(0);
if ((action == MotionEvent.ACTION_HOVER_MOVE
|| action == MotionEvent.ACTION_HOVER_ENTER) && isOnScrollbar(x, y)) {
return true;
@@ -2535,8 +2535,8 @@
// Send the event to the child under the pointer.
final int childrenCount = mChildrenCount;
if (childrenCount != 0) {
- final float x = event.getX();
- final float y = event.getY();
+ final float x = event.getXDispatchLocation(0);
+ final float y = event.getXDispatchLocation(0);
final ArrayList<View> preorderedList = buildOrderedChildList();
final boolean customOrder = preorderedList == null
@@ -2700,10 +2700,8 @@
final int childrenCount = mChildrenCount;
if (newTouchTarget == null && childrenCount != 0) {
- final float x =
- isMouseEvent ? ev.getXCursorPosition() : ev.getX(actionIndex);
- final float y =
- isMouseEvent ? ev.getYCursorPosition() : ev.getY(actionIndex);
+ final float x = ev.getXDispatchLocation(actionIndex);
+ final float y = ev.getYDispatchLocation(actionIndex);
// Find a child that can receive the event.
// Scan children from front to back.
final ArrayList<View> preorderedList = buildTouchDispatchChildList();
@@ -2757,8 +2755,8 @@
} else {
mLastTouchDownIndex = childIndex;
}
- mLastTouchDownX = ev.getX();
- mLastTouchDownY = ev.getY();
+ mLastTouchDownX = x;
+ mLastTouchDownY = y;
newTouchTarget = addTouchTarget(child, idBitsToAssign);
alreadyDispatchedToNewTouchTarget = true;
break;
@@ -3287,7 +3285,7 @@
if (ev.isFromSource(InputDevice.SOURCE_MOUSE)
&& ev.getAction() == MotionEvent.ACTION_DOWN
&& ev.isButtonPressed(MotionEvent.BUTTON_PRIMARY)
- && isOnScrollbarThumb(ev.getX(), ev.getY())) {
+ && isOnScrollbarThumb(ev.getXDispatchLocation(0), ev.getYDispatchLocation(0))) {
return true;
}
return false;
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index 153bfde..f662c73 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -200,8 +200,10 @@
import android.view.inputmethod.ImeTracker;
import android.view.inputmethod.InputMethodManager;
import android.widget.Scroller;
+import android.window.BackEvent;
import android.window.ClientWindowFrames;
import android.window.CompatOnBackInvokedCallback;
+import android.window.OnBackAnimationCallback;
import android.window.OnBackInvokedCallback;
import android.window.OnBackInvokedDispatcher;
import android.window.ScreenCapture;
@@ -301,6 +303,14 @@
SystemProperties.getBoolean("persist.wm.debug.caption_on_shell", true);
/**
+ * Whether the client (system UI) is handling the transient gesture and the corresponding
+ * animation.
+ * @hide
+ */
+ public static final boolean CLIENT_TRANSIENT =
+ SystemProperties.getBoolean("persist.wm.debug.client_transient", false);
+
+ /**
* Whether the client should compute the window frame on its own.
* @hide
*/
@@ -3772,6 +3782,16 @@
createSyncIfNeeded();
notifyDrawStarted(isInWMSRequestedSync());
mDrewOnceForSync = true;
+
+ // If the active SSG is also requesting to sync a buffer, the following needs to happen
+ // 1. Ensure we keep track of the number of active syncs to know when to disable RT
+ // RT animations that conflict with syncing a buffer.
+ // 2. Add a safeguard SSG to prevent multiple SSG that sync buffers from being submitted
+ // out of order.
+ if (mActiveSurfaceSyncGroup != null && mSyncBuffer) {
+ updateSyncInProgressCount(mActiveSurfaceSyncGroup);
+ safeguardOverlappingSyncs(mActiveSurfaceSyncGroup);
+ }
}
if (!isViewVisible) {
@@ -3836,14 +3856,11 @@
mWmsRequestSyncGroupState = WMS_SYNC_MERGED;
reportDrawFinished(t, seqId);
});
- Trace.traceBegin(Trace.TRACE_TAG_VIEW,
- "create WMS Sync group=" + mWmsRequestSyncGroup.getName());
if (DEBUG_BLAST) {
Log.d(mTag, "Setup new sync=" + mWmsRequestSyncGroup.getName());
}
mWmsRequestSyncGroup.add(this, null /* runnable */);
- Trace.traceEnd(Trace.TRACE_TAG_VIEW);
}
private void notifyContentCaptureEvents() {
@@ -4504,6 +4521,9 @@
Log.d(mTag, "reportDrawFinished");
}
+ if (Trace.isTagEnabled(Trace.TRACE_TAG_VIEW)) {
+ Trace.instant(Trace.TRACE_TAG_VIEW, "reportDrawFinished " + mTag + " seqId=" + seqId);
+ }
try {
mWindowSession.finishDrawing(mWindow, t, seqId);
} catch (RemoteException e) {
@@ -6508,6 +6528,7 @@
*/
final class NativePreImeInputStage extends AsyncInputStage
implements InputQueue.FinishedInputEventCallback {
+
public NativePreImeInputStage(InputStage next, String traceCounter) {
super(next, traceCounter);
}
@@ -6515,32 +6536,62 @@
@Override
protected int onProcess(QueuedInputEvent q) {
if (q.mEvent instanceof KeyEvent) {
- final KeyEvent event = (KeyEvent) q.mEvent;
+ final KeyEvent keyEvent = (KeyEvent) q.mEvent;
// If the new back dispatch is enabled, intercept KEYCODE_BACK before it reaches the
// view tree or IME, and invoke the appropriate {@link OnBackInvokedCallback}.
- if (isBack(event)
+ if (isBack(keyEvent)
&& mContext != null
&& mOnBackInvokedDispatcher.isOnBackInvokedCallbackEnabled()) {
- OnBackInvokedCallback topCallback =
- getOnBackInvokedDispatcher().getTopCallback();
- if (event.getAction() == KeyEvent.ACTION_UP) {
- if (topCallback != null) {
+ return doOnBackKeyEvent(keyEvent);
+ }
+
+ if (mInputQueue != null) {
+ mInputQueue.sendInputEvent(q.mEvent, q, true, this);
+ return DEFER;
+ }
+ }
+ return FORWARD;
+ }
+
+ private int doOnBackKeyEvent(KeyEvent keyEvent) {
+ OnBackInvokedCallback topCallback = getOnBackInvokedDispatcher().getTopCallback();
+ if (topCallback instanceof OnBackAnimationCallback) {
+ final OnBackAnimationCallback animationCallback =
+ (OnBackAnimationCallback) topCallback;
+ switch (keyEvent.getAction()) {
+ case KeyEvent.ACTION_DOWN:
+ // ACTION_DOWN is emitted twice: once when the user presses the button,
+ // and again a few milliseconds later.
+ // Based on the result of `keyEvent.getRepeatCount()` we have:
+ // - 0 means the button was pressed.
+ // - 1 means the button continues to be pressed (long press).
+ if (keyEvent.getRepeatCount() == 0) {
+ animationCallback.onBackStarted(
+ new BackEvent(0, 0, 0f, BackEvent.EDGE_LEFT));
+ }
+ break;
+ case KeyEvent.ACTION_UP:
+ if (keyEvent.isCanceled()) {
+ animationCallback.onBackCancelled();
+ } else {
topCallback.onBackInvoked();
return FINISH_HANDLED;
}
+ break;
+ }
+ } else if (topCallback != null) {
+ if (keyEvent.getAction() == KeyEvent.ACTION_UP) {
+ if (!keyEvent.isCanceled()) {
+ topCallback.onBackInvoked();
+ return FINISH_HANDLED;
} else {
- // Drop other actions such as {@link KeyEvent.ACTION_DOWN}.
- return FINISH_NOT_HANDLED;
+ Log.d(mTag, "Skip onBackInvoked(), reason: keyEvent.isCanceled=true");
}
}
}
- if (mInputQueue != null && q.mEvent instanceof KeyEvent) {
- mInputQueue.sendInputEvent(q.mEvent, q, true, this);
- return DEFER;
- }
- return FORWARD;
+ return FINISH_NOT_HANDLED;
}
@Override
@@ -11387,7 +11438,7 @@
* ensure the latter SSG always waits for the former SSG's transaction to get to SF.
*/
private void safeguardOverlappingSyncs(SurfaceSyncGroup activeSurfaceSyncGroup) {
- SurfaceSyncGroup safeguardSsg = new SurfaceSyncGroup("VRI-Safeguard");
+ SurfaceSyncGroup safeguardSsg = new SurfaceSyncGroup("Safeguard-" + mTag);
// Always disable timeout on the safeguard sync
safeguardSsg.toggleTimeout(false /* enable */);
synchronized (mPreviousSyncSafeguardLock) {
@@ -11446,8 +11497,6 @@
mHandler.post(runnable);
}
});
- safeguardOverlappingSyncs(mActiveSurfaceSyncGroup);
- updateSyncInProgressCount(mActiveSurfaceSyncGroup);
newSyncGroup = true;
}
diff --git a/core/java/android/view/autofill/AutofillClientController.java b/core/java/android/view/autofill/AutofillClientController.java
index 3a8e802..2f7adaa 100644
--- a/core/java/android/view/autofill/AutofillClientController.java
+++ b/core/java/android/view/autofill/AutofillClientController.java
@@ -19,6 +19,7 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.Activity;
+import android.app.ActivityOptions;
import android.app.Application;
import android.content.ComponentName;
import android.content.Intent;
@@ -486,8 +487,11 @@
public void autofillClientAuthenticate(int authenticationId, IntentSender intent,
Intent fillInIntent, boolean authenticateInline) {
try {
+ ActivityOptions activityOptions = ActivityOptions.makeBasic()
+ .setPendingIntentBackgroundActivityStartMode(
+ ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED);
mActivity.startIntentSenderForResult(intent, AUTO_FILL_AUTH_WHO_PREFIX,
- authenticationId, fillInIntent, 0, 0, null);
+ authenticationId, fillInIntent, 0, 0, activityOptions.toBundle());
} catch (IntentSender.SendIntentException e) {
Log.e(TAG, "authenticate() failed for intent:" + intent, e);
}
diff --git a/core/java/android/view/autofill/AutofillFeatureFlags.java b/core/java/android/view/autofill/AutofillFeatureFlags.java
index 951eecc..b67969e 100644
--- a/core/java/android/view/autofill/AutofillFeatureFlags.java
+++ b/core/java/android/view/autofill/AutofillFeatureFlags.java
@@ -99,39 +99,34 @@
"autofill_dialog_hints";
// START CREDENTIAL MANAGER FLAGS //
-
/**
- * Indicates whether credential manager tagged views should be ignored from autofill structures.
- * This flag is further gated by {@link #DEVICE_CONFIG_AUTOFILL_CREDENTIAL_MANAGER_ENABLED}
+ * (deprecated) Indicates whether credential manager tagged views should be ignored from
+ * autofill structures.This flag is further gated by
+ * {@link #DEVICE_CONFIG_AUTOFILL_CREDENTIAL_MANAGER_ENABLED}
+ *
+ * TODO(b/280661772): Remove this flag once API change is allowed
*/
public static final String DEVICE_CONFIG_AUTOFILL_CREDENTIAL_MANAGER_IGNORE_VIEWS =
"autofill_credential_manager_ignore_views";
/**
- * Indicates CredentialManager feature enabled or not.
+ * (deprecated) Indicates CredentialManager feature enabled or not.
* This is the overall feature flag. Individual behavior of credential manager may be controlled
* via a different flag, but gated by this flag.
+ *
+ * TODO(b/280661772): Remove this flag once API change is allowed
*/
public static final String DEVICE_CONFIG_AUTOFILL_CREDENTIAL_MANAGER_ENABLED =
"autofill_credential_manager_enabled";
/**
- * Indicates whether credential manager tagged views should suppress fill dialog.
+ * Indicates whether credential manager tagged views should suppress fill and save dialog.
* This flag is further gated by {@link #DEVICE_CONFIG_AUTOFILL_CREDENTIAL_MANAGER_ENABLED}
*
* @hide
*/
- public static final String DEVICE_CONFIG_AUTOFILL_CREDENTIAL_MANAGER_SUPPRESS_FILL_DIALOG =
- "autofill_credential_manager_suppress_fill_dialog";
-
- /**
- * Indicates whether credential manager tagged views should suppress save dialog.
- * This flag is further gated by {@link #DEVICE_CONFIG_AUTOFILL_CREDENTIAL_MANAGER_ENABLED}
- *
- * @hide
- */
- public static final String DEVICE_CONFIG_AUTOFILL_CREDENTIAL_MANAGER_SUPPRESS_SAVE_DIALOG =
- "autofill_credential_manager_suppress_save_dialog";
+ public static final String DEVICE_CONFIG_AUTOFILL_CREDENTIAL_MANAGER_SUPPRESS_FILL_AND_SAVE_DIALOG =
+ "autofill_credential_manager_suppress_fill_and_save_dialog";
// END CREDENTIAL MANAGER FLAGS //
// START AUTOFILL FOR ALL APPS FLAGS //
@@ -270,11 +265,7 @@
// CREDENTIAL MANAGER DEFAULTS
- // Credential manager is enabled by default so as to allow testing by app developers
- private static final boolean DEFAULT_CREDENTIAL_MANAGER_ENABLED = true;
- private static final boolean DEFAULT_CREDENTIAL_MANAGER_IGNORE_VIEWS = true;
- private static final boolean DEFAULT_CREDENTIAL_MANAGER_SUPPRESS_FILL_DIALOG = false;
- private static final boolean DEFAULT_CREDENTIAL_MANAGER_SUPPRESS_SAVE_DIALOG = false;
+ private static final boolean DEFAULT_CREDENTIAL_MANAGER_SUPPRESS_FILL_AND_SAVE_DIALOG = true;
// END CREDENTIAL MANAGER DEFAULTS
@@ -317,43 +308,19 @@
(str) -> !TextUtils.isEmpty(str));
}
- /**
- * Whether the Credential Manager feature is enabled or not
- *
- * @hide
- */
- public static boolean isCredentialManagerEnabled() {
- return DeviceConfig.getBoolean(
- DeviceConfig.NAMESPACE_AUTOFILL,
- DEVICE_CONFIG_AUTOFILL_CREDENTIAL_MANAGER_ENABLED,
- DEFAULT_CREDENTIAL_MANAGER_ENABLED);
- }
-
- /**
- * Whether credential manager tagged views should be ignored for autofill structure.
- *
- * @hide
- */
- public static boolean shouldIgnoreCredentialViews() {
- return isCredentialManagerEnabled()
- && DeviceConfig.getBoolean(
- DeviceConfig.NAMESPACE_AUTOFILL,
- DEVICE_CONFIG_AUTOFILL_CREDENTIAL_MANAGER_IGNORE_VIEWS,
- DEFAULT_CREDENTIAL_MANAGER_IGNORE_VIEWS);
- }
-
+ /* starts credman flag getter function */
/**
* Whether credential manager tagged views should not trigger fill dialog requests.
*
* @hide
*/
- public static boolean isFillDialogDisabledForCredentialManager() {
- return isCredentialManagerEnabled()
- && DeviceConfig.getBoolean(
- DeviceConfig.NAMESPACE_AUTOFILL,
- DEVICE_CONFIG_AUTOFILL_CREDENTIAL_MANAGER_SUPPRESS_FILL_DIALOG,
- DEFAULT_CREDENTIAL_MANAGER_SUPPRESS_FILL_DIALOG);
+ public static boolean isFillAndSaveDialogDisabledForCredentialManager() {
+ return DeviceConfig.getBoolean(
+ DeviceConfig.NAMESPACE_AUTOFILL,
+ DEVICE_CONFIG_AUTOFILL_CREDENTIAL_MANAGER_SUPPRESS_FILL_AND_SAVE_DIALOG,
+ DEFAULT_CREDENTIAL_MANAGER_SUPPRESS_FILL_AND_SAVE_DIALOG);
}
+ /* ends credman flag getter function */
/**
* Whether triggering fill request on unimportant view is enabled.
diff --git a/core/java/android/view/autofill/AutofillManager.java b/core/java/android/view/autofill/AutofillManager.java
index 6ff4b74..5d121ad 100644
--- a/core/java/android/view/autofill/AutofillManager.java
+++ b/core/java/android/view/autofill/AutofillManager.java
@@ -21,6 +21,7 @@
import static android.service.autofill.FillRequest.FLAG_PASSWORD_INPUT_TYPE;
import static android.service.autofill.FillRequest.FLAG_PCC_DETECTION;
import static android.service.autofill.FillRequest.FLAG_RESET_FILL_DIALOG_STATE;
+import static android.service.autofill.FillRequest.FLAG_SCREEN_HAS_CREDMAN_FIELD;
import static android.service.autofill.FillRequest.FLAG_SUPPORTS_FILL_DIALOG;
import static android.service.autofill.FillRequest.FLAG_VIEW_NOT_FOCUSED;
import static android.view.ContentInfo.SOURCE_AUTOFILL;
@@ -33,7 +34,6 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.RequiresFeature;
-import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
import android.annotation.SystemService;
import android.annotation.TestApi;
@@ -109,7 +109,6 @@
import java.util.List;
import java.util.Objects;
import java.util.Set;
-import java.util.concurrent.Executor;
import java.util.concurrent.atomic.AtomicBoolean;
import sun.misc.Cleaner;
@@ -638,6 +637,8 @@
@GuardedBy("mLock")
private boolean mEnabledForAugmentedAutofillOnly;
+ private boolean mHasCredentialField;
+
/**
* Indicates whether there is already a field to do a fill request after
* the activity started.
@@ -653,6 +654,8 @@
private final boolean mIsFillDialogEnabled;
+ private final boolean mIsFillAndSaveDialogDisabledForCredentialManager;
+
// Indicate whether trigger fill request on unimportant views is enabled
private boolean mIsTriggerFillRequestOnUnimportantViewEnabled = false;
@@ -699,9 +702,6 @@
// Indicates whether called the showAutofillDialog() method.
private boolean mShowAutofillDialogCalled = false;
- // Cached autofill feature flag
- private boolean mShouldIgnoreCredentialViews = false;
-
private final String[] mFillDialogEnabledHints;
// Tracked all views that have appeared, including views that there are no
@@ -849,7 +849,10 @@
mIsFillDialogEnabled = AutofillFeatureFlags.isFillDialogEnabled();
mFillDialogEnabledHints = AutofillFeatureFlags.getFillDialogEnabledHints();
- mShouldIgnoreCredentialViews = AutofillFeatureFlags.shouldIgnoreCredentialViews();
+
+ mIsFillAndSaveDialogDisabledForCredentialManager =
+ AutofillFeatureFlags.isFillAndSaveDialogDisabledForCredentialManager();
+
if (sDebug) {
Log.d(TAG, "Fill dialog is enabled:" + mIsFillDialogEnabled
+ ", hints=" + Arrays.toString(mFillDialogEnabledHints));
@@ -1092,7 +1095,8 @@
// or if other functions need to call it.
if (view.getAutofillType() == View.AUTOFILL_TYPE_NONE) return false;
- if (isActivityDeniedForAutofill()) {
+ // denylist only applies to not important views
+ if (!view.isImportantForAutofill() && isActivityDeniedForAutofill()) {
Log.d(TAG, "view is not autofillable - activity denied for autofill");
return false;
}
@@ -1415,12 +1419,12 @@
if (infos.size() == 0) {
throw new IllegalArgumentException("No VirtualViewInfo found");
}
- if (AutofillFeatureFlags.isFillDialogDisabledForCredentialManager()
- && view.isCredential()) {
+ if (view.isCredential() && mIsFillAndSaveDialogDisabledForCredentialManager) {
if (sDebug) {
Log.d(TAG, "Ignoring Fill Dialog request since important for credMan:"
+ view.getAutofillId().toString());
}
+ mHasCredentialField = true;
return;
}
for (int i = 0; i < infos.size(); i++) {
@@ -1442,12 +1446,13 @@
if (sDebug) {
Log.d(TAG, "notifyViewEnteredForFillDialog:" + v.getAutofillId());
}
- if (AutofillFeatureFlags.isFillDialogDisabledForCredentialManager()
- && v.isCredential()) {
+ if (v.isCredential()
+ && mIsFillAndSaveDialogDisabledForCredentialManager) {
if (sDebug) {
Log.d(TAG, "Ignoring Fill Dialog request since important for credMan:"
- + v.getAutofillId().toString());
+ + v.getAutofillId());
}
+ mHasCredentialField = true;
return;
}
notifyViewReadyInner(v.getAutofillId(), v.getAutofillHints());
@@ -1459,6 +1464,13 @@
}
synchronized (mLock) {
+ if (mAllTrackedViews.contains(id)) {
+ // The id is tracked and will not trigger pre-fill request again.
+ return;
+ }
+
+ // Add the id as tracked to avoid triggering fill request again and again.
+ mAllTrackedViews.add(id);
if (mTrackedViews != null) {
// To support the fill dialog can show for the autofillable Views in
// different pages but in the same Activity. We need to reset the
@@ -1500,7 +1512,7 @@
if (mIsFillDialogEnabled
|| ArrayUtils.containsAny(autofillHints, mFillDialogEnabledHints)) {
if (sDebug) {
- Log.d(TAG, "Trigger fill request when the view is ready.");
+ Log.d(TAG, "Triggering pre-emptive request for fill dialog.");
}
int flags = FLAG_SUPPORTS_FILL_DIALOG;
@@ -1737,6 +1749,15 @@
flags |= FLAG_PASSWORD_INPUT_TYPE;
}
+ // Update session when screen has credman field
+ if (AutofillFeatureFlags.isFillAndSaveDialogDisabledForCredentialManager()
+ && mHasCredentialField) {
+ flags |= FLAG_SCREEN_HAS_CREDMAN_FIELD;
+ if (sVerbose) {
+ Log.v(TAG, "updating session with flag screen has credman view");
+ }
+ }
+
flags |= getImeStateFlag(view);
if (!isActiveLocked()) {
@@ -2240,11 +2261,6 @@
}
/** @hide */
- public boolean shouldIgnoreCredentialViews() {
- return mShouldIgnoreCredentialViews;
- }
-
- /** @hide */
public void onAuthenticationResult(int authenticationId, Intent data, View focusView) {
if (!hasAutofillFeature()) {
return;
@@ -2449,6 +2465,7 @@
mIsFillRequested.set(false);
mShowAutofillDialogCalled = false;
mFillDialogTriggerIds = null;
+ mHasCredentialField = false;
mAllTrackedViews.clear();
if (resetEnteredIds) {
mEnteredIds = null;
@@ -3540,7 +3557,8 @@
private boolean shouldShowAutofillDialog(View view, AutofillId id) {
if (!hasFillDialogUiFeature()
|| mShowAutofillDialogCalled
- || mFillDialogTriggerIds == null) {
+ || mFillDialogTriggerIds == null
+ || mHasCredentialField) {
return false;
}
@@ -4053,11 +4071,6 @@
}
void checkViewState(AutofillId id) {
- if (mAllTrackedViews.contains(id)) {
- return;
- }
- // Add the id as tracked to avoid triggering fill request again and again.
- mAllTrackedViews.add(id);
if (mHasNewTrackedView) {
return;
}
diff --git a/core/java/android/view/inputmethod/BaseInputConnection.java b/core/java/android/view/inputmethod/BaseInputConnection.java
index 537822e..05aff64 100644
--- a/core/java/android/view/inputmethod/BaseInputConnection.java
+++ b/core/java/android/view/inputmethod/BaseInputConnection.java
@@ -622,15 +622,11 @@
if (b < 0) {
b = 0;
}
-
- if (b + length > content.length()) {
- length = content.length() - b;
- }
-
+ int end = (int) Math.min((long) b + length, content.length());
if ((flags&GET_TEXT_WITH_STYLES) != 0) {
- return content.subSequence(b, b + length);
+ return content.subSequence(b, end);
}
- return TextUtils.substring(content, b, b + length);
+ return TextUtils.substring(content, b, end);
}
/**
@@ -666,13 +662,9 @@
selEnd = tmp;
}
- int contentLength = content.length();
- int startPos = selStart - beforeLength;
- int endPos = selEnd + afterLength;
-
// Guards the start and end pos within range [0, contentLength].
- startPos = Math.max(0, startPos);
- endPos = Math.min(contentLength, endPos);
+ int startPos = Math.max(0, selStart - beforeLength);
+ int endPos = (int) Math.min((long) selEnd + afterLength, content.length());
CharSequence surroundingText;
if ((flags & GET_TEXT_WITH_STYLES) != 0) {
diff --git a/core/java/android/view/inputmethod/InputConnectionWrapper.java b/core/java/android/view/inputmethod/InputConnectionWrapper.java
index 62f3c90..9c3067c 100644
--- a/core/java/android/view/inputmethod/InputConnectionWrapper.java
+++ b/core/java/android/view/inputmethod/InputConnectionWrapper.java
@@ -440,4 +440,18 @@
public TextSnapshot takeSnapshot() {
return mTarget.takeSnapshot();
}
+
+ /**
+ * {@inheritDoc}
+ * @throws NullPointerException if the target is {@code null}.
+ */
+ @Override
+ public boolean replaceText(
+ @IntRange(from = 0) int start,
+ @IntRange(from = 0) int end,
+ @NonNull CharSequence text,
+ int newCursorPosition,
+ @Nullable TextAttribute textAttribute) {
+ return mTarget.replaceText(start, end, text, newCursorPosition, textAttribute);
+ }
}
diff --git a/core/java/android/widget/RemoteViews.java b/core/java/android/widget/RemoteViews.java
index 3165654..c289506 100644
--- a/core/java/android/widget/RemoteViews.java
+++ b/core/java/android/widget/RemoteViews.java
@@ -726,6 +726,12 @@
mActions.get(i).visitUris(visitor);
}
}
+ if (mLandscape != null) {
+ mLandscape.visitUris(visitor);
+ }
+ if (mPortrait != null) {
+ mPortrait.visitUris(visitor);
+ }
}
private static void visitIconUri(Icon icon, @NonNull Consumer<Uri> visitor) {
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index 34fe935..db7d484 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -6228,7 +6228,8 @@
}
private void setLineHeightPx(@Px @FloatRange(from = 0) float lineHeight) {
- Preconditions.checkArgumentNonnegative((int) lineHeight);
+ Preconditions.checkArgumentNonNegative(lineHeight,
+ "Expecting non-negative lineHeight while the input is " + lineHeight);
final int fontHeight = getPaint().getFontMetricsInt(null);
// Make sure we don't setLineSpacing if it's not needed to avoid unnecessary redraw.
@@ -11808,8 +11809,17 @@
public boolean hasSelection() {
final int selectionStart = getSelectionStart();
final int selectionEnd = getSelectionEnd();
+ final int selectionMin;
+ final int selectionMax;
+ if (selectionStart < selectionEnd) {
+ selectionMin = selectionStart;
+ selectionMax = selectionEnd;
+ } else {
+ selectionMin = selectionEnd;
+ selectionMax = selectionStart;
+ }
- return selectionStart >= 0 && selectionEnd > 0 && selectionStart != selectionEnd;
+ return selectionMin >= 0 && selectionMax > 0 && selectionMin != selectionMax;
}
String getSelectedText() {
diff --git a/core/java/android/window/SurfaceSyncGroup.java b/core/java/android/window/SurfaceSyncGroup.java
index 1840567..dfdff9e 100644
--- a/core/java/android/window/SurfaceSyncGroup.java
+++ b/core/java/android/window/SurfaceSyncGroup.java
@@ -53,7 +53,6 @@
* This will also allow synchronization of surfaces across multiple processes. The caller can add
* SurfaceControlViewHosts from another process to the SurfaceSyncGroup in a different process
* and this clas will ensure all the surfaces are ready before applying everything together.
- * </p>
* see the <a href="https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/window/SurfaceSyncGroup.md">SurfaceSyncGroup documentation</a>
* </p>
*/
@@ -136,6 +135,7 @@
@GuardedBy("mLock")
private boolean mTimeoutDisabled;
+ private final String mTrackName;
private static boolean isLocalBinder(IBinder binder) {
return !(binder instanceof BinderProxy);
@@ -192,6 +192,7 @@
}
mName = name + "#" + sCounter.getAndIncrement();
+ mTrackName = "SurfaceSyncGroup " + name;
mTransactionReadyConsumer = (transaction) -> {
if (DEBUG && transaction != null) {
@@ -199,9 +200,10 @@
+ mName);
}
if (Trace.isTagEnabled(Trace.TRACE_TAG_VIEW)) {
- Trace.instant(Trace.TRACE_TAG_VIEW,
- "Final TransactionCallback with " + transaction + " for " + mName);
+ Trace.instantForTrack(Trace.TRACE_TAG_VIEW, mTrackName,
+ "Final TransactionCallback with " + transaction);
}
+ Trace.asyncTraceForTrackEnd(Trace.TRACE_TAG_VIEW, mTrackName, hashCode());
transactionReadyConsumer.accept(transaction);
synchronized (mLock) {
// If there's a registered listener with WMS, that means we aren't actually complete
@@ -213,7 +215,7 @@
};
if (Trace.isTagEnabled(Trace.TRACE_TAG_VIEW)) {
- Trace.instant(Trace.TRACE_TAG_VIEW, "new SurfaceSyncGroup " + mName);
+ Trace.asyncTraceForTrackBegin(Trace.TRACE_TAG_VIEW, mTrackName, mName, hashCode());
}
if (DEBUG) {
@@ -257,7 +259,7 @@
Log.d(TAG, "markSyncReady " + mName);
}
if (Trace.isTagEnabled(Trace.TRACE_TAG_VIEW)) {
- Trace.traceBegin(Trace.TRACE_TAG_VIEW, "markSyncReady " + mName);
+ Trace.instantForTrack(Trace.TRACE_TAG_VIEW, mTrackName, "markSyncReady");
}
synchronized (mLock) {
if (mHasWMSync) {
@@ -269,9 +271,6 @@
mSyncReady = true;
checkIfSyncIsComplete();
}
- if (Trace.isTagEnabled(Trace.TRACE_TAG_VIEW)) {
- Trace.traceEnd(Trace.TRACE_TAG_VIEW);
- }
}
/**
@@ -399,14 +398,14 @@
public boolean add(ISurfaceSyncGroup surfaceSyncGroup, boolean parentSyncGroupMerge,
@Nullable Runnable runnable) {
if (Trace.isTagEnabled(Trace.TRACE_TAG_VIEW)) {
- Trace.traceBegin(Trace.TRACE_TAG_VIEW,
- "addToSync token=" + mToken.hashCode() + " parent=" + mName);
+ Trace.asyncTraceForTrackBegin(Trace.TRACE_TAG_VIEW, mTrackName,
+ "addToSync token=" + mToken.hashCode(), hashCode());
}
synchronized (mLock) {
if (mSyncReady) {
Log.w(TAG, "Trying to add to sync when already marked as ready " + mName);
if (Trace.isTagEnabled(Trace.TRACE_TAG_VIEW)) {
- Trace.traceEnd(Trace.TRACE_TAG_VIEW);
+ Trace.asyncTraceForTrackEnd(Trace.TRACE_TAG_VIEW, mTrackName, hashCode());
}
return false;
}
@@ -419,7 +418,7 @@
if (isLocalBinder(surfaceSyncGroup.asBinder())) {
boolean didAddLocalSync = addLocalSync(surfaceSyncGroup, parentSyncGroupMerge);
if (Trace.isTagEnabled(Trace.TRACE_TAG_VIEW)) {
- Trace.traceEnd(Trace.TRACE_TAG_VIEW);
+ Trace.asyncTraceForTrackEnd(Trace.TRACE_TAG_VIEW, mTrackName, hashCode());
}
return didAddLocalSync;
}
@@ -447,7 +446,7 @@
mSurfaceSyncGroupCompletedListener)) {
mSurfaceSyncGroupCompletedListener = null;
if (Trace.isTagEnabled(Trace.TRACE_TAG_VIEW)) {
- Trace.traceEnd(Trace.TRACE_TAG_VIEW);
+ Trace.asyncTraceForTrackEnd(Trace.TRACE_TAG_VIEW, mTrackName, hashCode());
}
return false;
}
@@ -459,13 +458,13 @@
surfaceSyncGroup.onAddedToSyncGroup(mToken, parentSyncGroupMerge);
} catch (RemoteException e) {
if (Trace.isTagEnabled(Trace.TRACE_TAG_VIEW)) {
- Trace.traceEnd(Trace.TRACE_TAG_VIEW);
+ Trace.asyncTraceForTrackEnd(Trace.TRACE_TAG_VIEW, mTrackName, hashCode());
}
return false;
}
if (Trace.isTagEnabled(Trace.TRACE_TAG_VIEW)) {
- Trace.traceEnd(Trace.TRACE_TAG_VIEW);
+ Trace.asyncTraceForTrackEnd(Trace.TRACE_TAG_VIEW, mTrackName, hashCode());
}
return true;
}
@@ -510,15 +509,15 @@
+ ". Setting up Sync in WindowManager.");
}
if (Trace.isTagEnabled(Trace.TRACE_TAG_VIEW)) {
- Trace.traceBegin(Trace.TRACE_TAG_VIEW,
- "addSyncToWm=" + token.hashCode() + " group=" + mName);
+ Trace.asyncTraceForTrackBegin(Trace.TRACE_TAG_VIEW, mTrackName,
+ "addSyncToWm=" + token.hashCode(), hashCode());
}
AddToSurfaceSyncGroupResult addToSyncGroupResult = new AddToSurfaceSyncGroupResult();
if (!WindowManagerGlobal.getWindowManagerService().addToSurfaceSyncGroup(token,
parentSyncGroupMerge, surfaceSyncGroupCompletedListener,
addToSyncGroupResult)) {
if (Trace.isTagEnabled(Trace.TRACE_TAG_VIEW)) {
- Trace.traceEnd(Trace.TRACE_TAG_VIEW);
+ Trace.asyncTraceForTrackEnd(Trace.TRACE_TAG_VIEW, mTrackName, hashCode());
}
return false;
}
@@ -527,12 +526,12 @@
addToSyncGroupResult.mTransactionReadyCallback);
} catch (RemoteException e) {
if (Trace.isTagEnabled(Trace.TRACE_TAG_VIEW)) {
- Trace.traceEnd(Trace.TRACE_TAG_VIEW);
+ Trace.asyncTraceForTrackEnd(Trace.TRACE_TAG_VIEW, mTrackName, hashCode());
}
return false;
}
if (Trace.isTagEnabled(Trace.TRACE_TAG_VIEW)) {
- Trace.traceEnd(Trace.TRACE_TAG_VIEW);
+ Trace.asyncTraceForTrackEnd(Trace.TRACE_TAG_VIEW, mTrackName, hashCode());
}
return true;
}
@@ -550,8 +549,8 @@
}
if (Trace.isTagEnabled(Trace.TRACE_TAG_VIEW)) {
- Trace.traceBegin(Trace.TRACE_TAG_VIEW,
- "addLocalSync=" + childSurfaceSyncGroup.mName + " parent=" + mName);
+ Trace.asyncTraceForTrackBegin(Trace.TRACE_TAG_VIEW, mTrackName,
+ "addLocalSync=" + childSurfaceSyncGroup.mName, hashCode());
}
ITransactionReadyCallback callback =
createTransactionReadyCallback(parentSyncGroupMerge);
@@ -562,7 +561,7 @@
childSurfaceSyncGroup.setTransactionCallbackFromParent(mISurfaceSyncGroup, callback);
if (Trace.isTagEnabled(Trace.TRACE_TAG_VIEW)) {
- Trace.traceEnd(Trace.TRACE_TAG_VIEW);
+ Trace.asyncTraceForTrackEnd(Trace.TRACE_TAG_VIEW, mTrackName, hashCode());
}
return true;
}
@@ -574,9 +573,9 @@
}
if (Trace.isTagEnabled(Trace.TRACE_TAG_VIEW)) {
- Trace.traceBegin(Trace.TRACE_TAG_VIEW,
+ Trace.asyncTraceForTrackBegin(Trace.TRACE_TAG_VIEW, mTrackName,
"setTransactionCallbackFromParent " + mName + " callback="
- + transactionReadyCallback.hashCode());
+ + transactionReadyCallback.hashCode(), hashCode());
}
// Start the timeout when this SurfaceSyncGroup has been added to a parent SurfaceSyncGroup.
@@ -617,9 +616,9 @@
mParentSyncGroup = parentSyncGroup;
mTransactionReadyConsumer = (transaction) -> {
if (Trace.isTagEnabled(Trace.TRACE_TAG_VIEW)) {
- Trace.traceBegin(Trace.TRACE_TAG_VIEW,
- "transactionReadyCallback " + mName + " callback="
- + transactionReadyCallback.hashCode());
+ Trace.asyncTraceForTrackBegin(Trace.TRACE_TAG_VIEW, mTrackName,
+ "Invoke transactionReadyCallback="
+ + transactionReadyCallback.hashCode(), hashCode());
}
lastCallback.accept(null);
@@ -629,7 +628,7 @@
transaction.apply();
}
if (Trace.isTagEnabled(Trace.TRACE_TAG_VIEW)) {
- Trace.traceEnd(Trace.TRACE_TAG_VIEW);
+ Trace.asyncTraceForTrackEnd(Trace.TRACE_TAG_VIEW, mTrackName, hashCode());
}
};
addedToSyncListener = mAddedToSyncListener;
@@ -647,7 +646,7 @@
addedToSyncListener.run();
}
if (Trace.isTagEnabled(Trace.TRACE_TAG_VIEW)) {
- Trace.traceEnd(Trace.TRACE_TAG_VIEW);
+ Trace.asyncTraceForTrackEnd(Trace.TRACE_TAG_VIEW, mTrackName, hashCode());
}
}
@@ -669,8 +668,8 @@
}
if (Trace.isTagEnabled(Trace.TRACE_TAG_VIEW)) {
- Trace.instant(Trace.TRACE_TAG_VIEW,
- "checkIfSyncIsComplete " + mName + " mSyncReady=" + mSyncReady
+ Trace.instantForTrack(Trace.TRACE_TAG_VIEW, mTrackName,
+ "checkIfSyncIsComplete mSyncReady=" + mSyncReady
+ " mPendingSyncs=" + mPendingSyncs.size());
}
@@ -715,6 +714,7 @@
public void onTransactionReady(Transaction t) {
synchronized (mLock) {
if (t != null) {
+ t.sanitize(Binder.getCallingPid(), Binder.getCallingUid());
// When an older parent sync group is added due to a child syncGroup
// getting added to multiple groups, we need to maintain merge order
// so the older parentSyncGroup transactions are overwritten by
@@ -726,9 +726,8 @@
}
mPendingSyncs.remove(this);
if (Trace.isTagEnabled(Trace.TRACE_TAG_VIEW)) {
- Trace.instant(Trace.TRACE_TAG_VIEW,
- "onTransactionReady group=" + mName + " callback="
- + hashCode());
+ Trace.instantForTrack(Trace.TRACE_TAG_VIEW, mTrackName,
+ "onTransactionReady callback=" + hashCode());
}
checkIfSyncIsComplete();
}
@@ -743,8 +742,8 @@
}
mPendingSyncs.add(transactionReadyCallback);
if (Trace.isTagEnabled(Trace.TRACE_TAG_VIEW)) {
- Trace.instant(Trace.TRACE_TAG_VIEW,
- "createTransactionReadyCallback " + mName + " mPendingSyncs="
+ Trace.instantForTrack(Trace.TRACE_TAG_VIEW, mTrackName,
+ "createTransactionReadyCallback mPendingSyncs="
+ mPendingSyncs.size() + " transactionReady="
+ transactionReadyCallback.hashCode());
}
@@ -764,13 +763,12 @@
public boolean onAddedToSyncGroup(IBinder parentSyncGroupToken,
boolean parentSyncGroupMerge) {
if (Trace.isTagEnabled(Trace.TRACE_TAG_VIEW)) {
- Trace.traceBegin(Trace.TRACE_TAG_VIEW,
- "onAddedToSyncGroup token=" + parentSyncGroupToken.hashCode() + " child="
- + mName);
+ Trace.asyncTraceForTrackBegin(Trace.TRACE_TAG_VIEW, mTrackName,
+ "onAddedToSyncGroup token=" + parentSyncGroupToken.hashCode(), hashCode());
}
boolean didAdd = addSyncToWm(parentSyncGroupToken, parentSyncGroupMerge, null);
if (Trace.isTagEnabled(Trace.TRACE_TAG_VIEW)) {
- Trace.traceEnd(Trace.TRACE_TAG_VIEW);
+ Trace.asyncTraceForTrackEnd(Trace.TRACE_TAG_VIEW, mTrackName, hashCode());
}
return didAdd;
}
diff --git a/core/java/com/android/internal/accessibility/util/AccessibilityStatsLogUtils.java b/core/java/com/android/internal/accessibility/util/AccessibilityStatsLogUtils.java
index 6bc7ac6..1f7640d 100644
--- a/core/java/com/android/internal/accessibility/util/AccessibilityStatsLogUtils.java
+++ b/core/java/com/android/internal/accessibility/util/AccessibilityStatsLogUtils.java
@@ -149,11 +149,13 @@
*
* @param mode The activated magnification mode.
* @param duration The duration in milliseconds during the magnification is activated.
+ * @param scale The last magnification scale for the activation
*/
- public static void logMagnificationUsageState(int mode, long duration) {
+ public static void logMagnificationUsageState(int mode, long duration, float scale) {
FrameworkStatsLog.write(FrameworkStatsLog.MAGNIFICATION_USAGE_REPORTED,
convertToLoggingMagnificationMode(mode),
- duration);
+ duration,
+ convertToLoggingMagnificationScale(scale));
}
/**
@@ -254,4 +256,8 @@
return MAGNIFICATION_USAGE_REPORTED__ACTIVATED_MODE__MAGNIFICATION_UNKNOWN_MODE;
}
}
+
+ private static int convertToLoggingMagnificationScale(float scale) {
+ return (int) (scale * 100);
+ }
}
diff --git a/core/java/com/android/internal/app/AppLocaleCollector.java b/core/java/com/android/internal/app/AppLocaleCollector.java
index 7fe1e3a..7cf428a 100644
--- a/core/java/com/android/internal/app/AppLocaleCollector.java
+++ b/core/java/com/android/internal/app/AppLocaleCollector.java
@@ -154,12 +154,16 @@
}
/**
- * Get the locales that system activates.
- * @return A set which includes all the locales that system activates.
+ * Get a list of system locale that removes all extensions except for the numbering system.
*/
@VisibleForTesting
- public List<LocaleStore.LocaleInfo> getSystemCurrentLocale() {
- return LocaleStore.getSystemCurrentLocaleInfo();
+ public List<LocaleStore.LocaleInfo> getSystemCurrentLocales() {
+ List<LocaleStore.LocaleInfo> sysLocales = LocaleStore.getSystemCurrentLocales();
+ return sysLocales.stream().filter(
+ // For the locale to be added into the suggestion area, its country could not be
+ // empty.
+ info -> info.getLocale().getCountry().length() > 0).collect(
+ Collectors.toList());
}
@Override
@@ -220,12 +224,15 @@
// Add current system language into suggestion list
if (!isForCountryMode) {
- boolean isCurrentLocale, isInAppOrIme;
- for (LocaleStore.LocaleInfo localeInfo : getSystemCurrentLocale()) {
+ boolean isCurrentLocale, existsInApp, existsInIme;
+ for (LocaleStore.LocaleInfo localeInfo : getSystemCurrentLocales()) {
isCurrentLocale = mAppCurrentLocale != null
&& localeInfo.getLocale().equals(mAppCurrentLocale.getLocale());
- isInAppOrIme = existsInAppOrIme(localeInfo.getLocale());
- if (!isCurrentLocale && !isInAppOrIme) {
+ // Add the system suggestion flag if the localeInfo exists in mAllAppActiveLocales
+ // and mImeLocales.
+ existsInApp = addSystemSuggestionFlag(localeInfo, mAllAppActiveLocales);
+ existsInIme = addSystemSuggestionFlag(localeInfo, mImeLocales);
+ if (!isCurrentLocale && !existsInApp && !existsInIme) {
appLocaleList.add(localeInfo);
}
}
@@ -248,6 +255,8 @@
// Filter out the locale with the same language and country
// like zh-TW vs zh-Hant-TW.
localeSet = filterSameLanguageAndCountry(localeSet, suggestedSet);
+ // Add IME suggestion flag if the locale is supported by IME.
+ localeSet = addImeSuggestionFlag(localeSet);
}
appLocaleList.addAll(localeSet);
suggestedSet.addAll(localeSet);
@@ -284,6 +293,31 @@
Collectors.toSet());
}
+ private boolean addSystemSuggestionFlag(LocaleStore.LocaleInfo localeInfo,
+ Set<LocaleStore.LocaleInfo> appLocaleSet) {
+ for (LocaleStore.LocaleInfo info : appLocaleSet) {
+ if (info.getLocale().equals(localeInfo.getLocale())) {
+ info.extendSuggestionOfType(
+ LocaleStore.LocaleInfo.SUGGESTION_TYPE_SYSTEM_AVAILABLE_LANGUAGE);
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private Set<LocaleStore.LocaleInfo> addImeSuggestionFlag(
+ Set<LocaleStore.LocaleInfo> localeSet) {
+ for (LocaleStore.LocaleInfo localeInfo : localeSet) {
+ for (LocaleStore.LocaleInfo imeLocale : mImeLocales) {
+ if (imeLocale.getLocale().equals(localeInfo.getLocale())) {
+ localeInfo.extendSuggestionOfType(
+ LocaleStore.LocaleInfo.SUGGESTION_TYPE_IME_LANGUAGE);
+ }
+ }
+ }
+ return localeSet;
+ }
+
private Set<LocaleStore.LocaleInfo> filterSameLanguageAndCountry(
Set<LocaleStore.LocaleInfo> newLocaleList,
Set<LocaleStore.LocaleInfo> existingLocaleList) {
@@ -306,17 +340,6 @@
return result;
}
- private boolean existsInAppOrIme(Locale locale) {
- boolean existInApp = mAllAppActiveLocales.stream().anyMatch(
- localeInfo -> localeInfo.getLocale().equals(locale));
- if (existInApp) {
- return true;
- } else {
- return mImeLocales.stream().anyMatch(
- localeInfo -> localeInfo.getLocale().equals(locale));
- }
- }
-
private Set<LocaleStore.LocaleInfo> filterSupportedLocales(
Set<LocaleStore.LocaleInfo> suggestedLocales,
HashSet<Locale> appSupportedLocales) {
diff --git a/core/java/com/android/internal/app/ISoundTriggerService.aidl b/core/java/com/android/internal/app/ISoundTriggerService.aidl
index ed751cb..512ff48 100644
--- a/core/java/com/android/internal/app/ISoundTriggerService.aidl
+++ b/core/java/com/android/internal/app/ISoundTriggerService.aidl
@@ -79,4 +79,10 @@
* Attach an HAL injection interface.
*/
void attachInjection(ISoundTriggerInjection injection);
+
+ /**
+ * Test API to override the phone call state.
+ */
+ void setInPhoneCallState(boolean isInPhoneCall);
+
}
diff --git a/core/java/com/android/internal/app/IntentForwarderActivity.java b/core/java/com/android/internal/app/IntentForwarderActivity.java
index 44d517a..904fb66 100644
--- a/core/java/com/android/internal/app/IntentForwarderActivity.java
+++ b/core/java/com/android/internal/app/IntentForwarderActivity.java
@@ -19,7 +19,7 @@
import static android.Manifest.permission.INTERACT_ACROSS_USERS;
import static android.app.admin.DevicePolicyResources.Strings.Core.FORWARD_INTENT_TO_PERSONAL;
import static android.app.admin.DevicePolicyResources.Strings.Core.FORWARD_INTENT_TO_WORK;
-import static android.app.admin.DevicePolicyResources.Strings.Core.MINIRESOLVER_OPEN_IN_WORK;
+import static android.app.admin.DevicePolicyResources.Strings.Core.MINIRESOLVER_OPEN_WORK;
import static android.content.pm.PackageManager.MATCH_DEFAULT_ONLY;
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
@@ -227,8 +227,8 @@
private String getOpenInWorkMessage(CharSequence targetLabel) {
return getSystemService(DevicePolicyManager.class).getResources().getString(
- MINIRESOLVER_OPEN_IN_WORK,
- () -> getString(R.string.miniresolver_open_in_work, targetLabel),
+ MINIRESOLVER_OPEN_WORK,
+ () -> getString(R.string.miniresolver_open_work, targetLabel),
targetLabel);
}
diff --git a/core/java/com/android/internal/app/LocalePickerWithRegion.java b/core/java/com/android/internal/app/LocalePickerWithRegion.java
index 5dfc0ea..27eebbe 100644
--- a/core/java/com/android/internal/app/LocalePickerWithRegion.java
+++ b/core/java/com/android/internal/app/LocalePickerWithRegion.java
@@ -270,6 +270,10 @@
boolean mayHaveDifferentNumberingSystem = locale.hasNumberingSystems();
if (isSystemLocale
+ // The suggeseted locale would contain the country code except an edge case for
+ // SUGGESTION_TYPE_CURRENT where the application itself set the preferred locale.
+ // In this case, onLocaleSelected() will still set the app locale.
+ || locale.isSuggested()
|| (isRegionLocale && !mayHaveDifferentNumberingSystem)
|| mIsNumberingSystem) {
if (mListener != null) {
diff --git a/core/java/com/android/internal/app/LocaleStore.java b/core/java/com/android/internal/app/LocaleStore.java
index d07058d..f4b858f 100644
--- a/core/java/com/android/internal/app/LocaleStore.java
+++ b/core/java/com/android/internal/app/LocaleStore.java
@@ -16,6 +16,7 @@
package com.android.internal.app;
+import android.annotation.IntDef;
import android.app.LocaleManager;
import android.compat.annotation.UnsupportedAppUsage;
import android.content.Context;
@@ -29,6 +30,8 @@
import com.android.internal.annotations.VisibleForTesting;
import java.io.Serializable;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
@@ -47,15 +50,42 @@
private static boolean sFullyInitialized = false;
public static class LocaleInfo implements Serializable {
- @VisibleForTesting static final int SUGGESTION_TYPE_NONE = 0;
- @VisibleForTesting static final int SUGGESTION_TYPE_SIM = 1 << 0;
- @VisibleForTesting static final int SUGGESTION_TYPE_CFG = 1 << 1;
+ public static final int SUGGESTION_TYPE_NONE = 0;
+ // A mask used to identify the suggested locale is from SIM.
+ public static final int SUGGESTION_TYPE_SIM = 1 << 0;
+ // A mask used to identify the suggested locale is from the config.
+ public static final int SUGGESTION_TYPE_CFG = 1 << 1;
// Only for per-app language picker
- @VisibleForTesting static final int SUGGESTION_TYPE_CURRENT = 1 << 2;
+ // A mask used to identify the suggested locale is from the same application's current
+ // configured locale.
+ public static final int SUGGESTION_TYPE_CURRENT = 1 << 2;
// Only for per-app language picker
- @VisibleForTesting static final int SUGGESTION_TYPE_SYSTEM_LANGUAGE = 1 << 3;
+ // A mask used to identify the suggested locale is the system default language.
+ public static final int SUGGESTION_TYPE_SYSTEM_LANGUAGE = 1 << 3;
// Only for per-app language picker
- @VisibleForTesting static final int SUGGESTION_TYPE_OTHER_APP_LANGUAGE = 1 << 4;
+ // A mask used to identify the suggested locale is from other applications' configured
+ // locales.
+ public static final int SUGGESTION_TYPE_OTHER_APP_LANGUAGE = 1 << 4;
+ // Only for per-app language picker
+ // A mask used to identify the suggested locale is what the active IME supports.
+ public static final int SUGGESTION_TYPE_IME_LANGUAGE = 1 << 5;
+ // Only for per-app language picker
+ // A mask used to identify the suggested locale is in the current system languages.
+ public static final int SUGGESTION_TYPE_SYSTEM_AVAILABLE_LANGUAGE = 1 << 6;
+ /** @hide */
+ @IntDef(prefix = { "SUGGESTION_TYPE_" }, value = {
+ SUGGESTION_TYPE_NONE,
+ SUGGESTION_TYPE_SIM,
+ SUGGESTION_TYPE_CFG,
+ SUGGESTION_TYPE_CURRENT,
+ SUGGESTION_TYPE_SYSTEM_LANGUAGE,
+ SUGGESTION_TYPE_OTHER_APP_LANGUAGE,
+ SUGGESTION_TYPE_IME_LANGUAGE,
+ SUGGESTION_TYPE_SYSTEM_AVAILABLE_LANGUAGE
+ })
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface SuggestionType {}
+
private final Locale mLocale;
private final Locale mParent;
private final String mId;
@@ -88,6 +118,17 @@
this(Locale.forLanguageTag(localeId));
}
+ private LocaleInfo(LocaleInfo localeInfo) {
+ this.mLocale = localeInfo.getLocale();
+ this.mId = localeInfo.getId();
+ this.mParent = localeInfo.getParent();
+ this.mHasNumberingSystems = localeInfo.mHasNumberingSystems;
+ this.mIsChecked = localeInfo.getChecked();
+ this.mSuggestionFlags = localeInfo.mSuggestionFlags;
+ this.mIsTranslated = localeInfo.isTranslated();
+ this.mIsPseudo = localeInfo.mIsPseudo;
+ }
+
private static Locale getParent(Locale locale) {
if (locale.getCountry().isEmpty()) {
return null;
@@ -142,13 +183,31 @@
return mSuggestionFlags != SUGGESTION_TYPE_NONE;
}
- private boolean isSuggestionOfType(int suggestionMask) {
+ /**
+ * Check whether the LocaleInfo is suggested by a specific mask
+ *
+ * @param suggestionMask The mask which is used to identify the suggestion flag.
+ * @return true if the locale is suggested by a specific suggestion flag. Otherwise, false.
+ */
+ public boolean isSuggestionOfType(int suggestionMask) {
if (!mIsTranslated) { // Never suggest an untranslated locale
return false;
}
return (mSuggestionFlags & suggestionMask) == suggestionMask;
}
+ /**
+ * Extend the locale's suggestion type
+ *
+ * @param suggestionMask The mask to extend the suggestion flag
+ */
+ public void extendSuggestionOfType(@SuggestionType int suggestionMask) {
+ if (!mIsTranslated) { // Never suggest an untranslated locale
+ return;
+ }
+ mSuggestionFlags |= suggestionMask;
+ }
+
@UnsupportedAppUsage
public String getFullNameNative() {
if (mFullNameNative == null) {
@@ -186,14 +245,14 @@
private String getLangScriptKey() {
if (mLangScriptKey == null) {
Locale baseLocale = new Locale.Builder()
- .setLocale(mLocale)
- .setExtension(Locale.UNICODE_LOCALE_EXTENSION, "")
- .build();
+ .setLocale(mLocale)
+ .setExtension(Locale.UNICODE_LOCALE_EXTENSION, "")
+ .build();
Locale parentWithScript = getParent(LocaleHelper.addLikelySubtags(baseLocale));
mLangScriptKey =
(parentWithScript == null)
- ? mLocale.toLanguageTag()
- : parentWithScript.toLanguageTag();
+ ? mLocale.toLanguageTag()
+ : parentWithScript.toLanguageTag();
}
return mLangScriptKey;
}
@@ -233,6 +292,10 @@
public boolean isSystemLocale() {
return (mSuggestionFlags & SUGGESTION_TYPE_SYSTEM_LANGUAGE) > 0;
}
+
+ public boolean isInCurrentSystemLocales() {
+ return (mSuggestionFlags & SUGGESTION_TYPE_SYSTEM_AVAILABLE_LANGUAGE) > 0;
+ }
}
private static Set<String> getSimCountries(Context context) {
@@ -304,13 +367,13 @@
Locale locale = localeList == null ? null : localeList.get(0);
if (locale != null) {
- LocaleInfo localeInfo = new LocaleInfo(locale);
+ LocaleInfo cacheInfo = getLocaleInfo(locale, sLocaleCache);
+ LocaleInfo localeInfo = new LocaleInfo(cacheInfo);
if (isAppSelected) {
localeInfo.mSuggestionFlags |= LocaleInfo.SUGGESTION_TYPE_CURRENT;
} else {
localeInfo.mSuggestionFlags |= LocaleInfo.SUGGESTION_TYPE_OTHER_APP_LANGUAGE;
}
- localeInfo.mIsTranslated = true;
return localeInfo;
}
} catch (IllegalArgumentException e) {
@@ -329,26 +392,27 @@
List<InputMethodSubtype> list) {
Set<LocaleInfo> imeLocales = new HashSet<>();
for (InputMethodSubtype subtype : list) {
- LocaleInfo localeInfo = new LocaleInfo(subtype.getLanguageTag());
- localeInfo.mSuggestionFlags |= LocaleInfo.SUGGESTION_TYPE_OTHER_APP_LANGUAGE;
- localeInfo.mIsTranslated = true;
+ Locale locale = Locale.forLanguageTag(subtype.getLanguageTag());
+ LocaleInfo cacheInfo = getLocaleInfo(locale, sLocaleCache);
+ LocaleInfo localeInfo = new LocaleInfo(cacheInfo);
+ localeInfo.mSuggestionFlags |= LocaleInfo.SUGGESTION_TYPE_IME_LANGUAGE;
imeLocales.add(localeInfo);
}
return imeLocales;
}
/**
- * Returns a list of system languages with LocaleInfo
+ * Returns a list of system locale that removes all extensions except for the numbering system.
*/
- public static List<LocaleInfo> getSystemCurrentLocaleInfo() {
+ public static List<LocaleInfo> getSystemCurrentLocales() {
List<LocaleInfo> localeList = new ArrayList<>();
-
LocaleList systemLangList = LocaleList.getDefault();
for(int i = 0; i < systemLangList.size(); i++) {
- LocaleInfo systemLocaleInfo = new LocaleInfo(systemLangList.get(i));
- systemLocaleInfo.mSuggestionFlags |= LocaleInfo.SUGGESTION_TYPE_SIM;
- systemLocaleInfo.mIsTranslated = true;
- localeList.add(systemLocaleInfo);
+ Locale sysLocale = getLocaleWithOnlyNumberingSystem(systemLangList.get(i));
+ LocaleInfo cacheInfo = getLocaleInfo(sysLocale, sLocaleCache);
+ LocaleInfo localeInfo = new LocaleInfo(cacheInfo);
+ localeInfo.mSuggestionFlags |= LocaleInfo.SUGGESTION_TYPE_SYSTEM_AVAILABLE_LANGUAGE;
+ localeList.add(localeInfo);
}
return localeList;
}
@@ -542,12 +606,12 @@
Set<String> ignorables,
LocaleInfo parent,
boolean translatedOnly,
- HashMap<String, LocaleInfo> supportedLcoaleInfos) {
+ HashMap<String, LocaleInfo> supportedLocaleInfos) {
boolean hasTargetParent = parent != null;
String parentId = hasTargetParent ? parent.getId() : null;
HashSet<LocaleInfo> result = new HashSet<>();
- for (LocaleStore.LocaleInfo li : supportedLcoaleInfos.values()) {
+ for (LocaleStore.LocaleInfo li : supportedLocaleInfos.values()) {
if (isShallIgnore(ignorables, li, translatedOnly)) {
continue;
}
@@ -556,13 +620,18 @@
if (li.isSuggestionOfType(LocaleInfo.SUGGESTION_TYPE_SIM)) {
result.add(li);
} else {
- result.add(getLocaleInfo(li.getParent(), supportedLcoaleInfos));
+ Locale locale = li.getParent();
+ LocaleInfo localeInfo = getLocaleInfo(locale, supportedLocaleInfos);
+ addLocaleInfoToMap(locale, localeInfo, supportedLocaleInfos);
+ result.add(localeInfo);
}
break;
case TIER_REGION:
if (parentId.equals(li.getParent().toLanguageTag())) {
- result.add(getLocaleInfo(
- li.getLocale().stripExtensions(), supportedLcoaleInfos));
+ Locale locale = li.getLocale().stripExtensions();
+ LocaleInfo localeInfo = getLocaleInfo(locale, supportedLocaleInfos);
+ addLocaleInfoToMap(locale, localeInfo, supportedLocaleInfos);
+ result.add(localeInfo);
}
break;
case TIER_NUMBERING:
@@ -636,7 +705,9 @@
@UnsupportedAppUsage
public static LocaleInfo getLocaleInfo(Locale locale) {
- return getLocaleInfo(locale, sLocaleCache);
+ LocaleInfo localeInfo = getLocaleInfo(locale, sLocaleCache);
+ addLocaleInfoToMap(locale, localeInfo, sLocaleCache);
+ return localeInfo;
}
private static LocaleInfo getLocaleInfo(
@@ -646,10 +717,7 @@
if (!localeInfos.containsKey(id)) {
// Locale preferences can modify the language tag to current system languages, so we
// need to check the input locale without extra u extension except numbering system.
- Locale filteredLocale = new Locale.Builder()
- .setLocale(locale.stripExtensions())
- .setUnicodeLocaleKeyword("nu", locale.getUnicodeLocaleType("nu"))
- .build();
+ Locale filteredLocale = getLocaleWithOnlyNumberingSystem(locale);
if (localeInfos.containsKey(filteredLocale.toLanguageTag())) {
result = new LocaleInfo(locale);
LocaleInfo localeInfo = localeInfos.get(filteredLocale.toLanguageTag());
@@ -662,13 +730,29 @@
return result;
}
result = new LocaleInfo(locale);
- localeInfos.put(id, result);
} else {
result = localeInfos.get(id);
}
return result;
}
+ private static Locale getLocaleWithOnlyNumberingSystem(Locale locale) {
+ return new Locale.Builder()
+ .setLocale(locale.stripExtensions())
+ .setUnicodeLocaleKeyword("nu", locale.getUnicodeLocaleType("nu"))
+ .build();
+ }
+
+ private static void addLocaleInfoToMap(Locale locale, LocaleInfo localeInfo,
+ HashMap<String, LocaleInfo> map) {
+ if (!map.containsKey(locale.toLanguageTag())) {
+ Locale localeWithNumberingSystem = getLocaleWithOnlyNumberingSystem(locale);
+ if (!map.containsKey(localeWithNumberingSystem.toLanguageTag())) {
+ map.put(locale.toLanguageTag(), localeInfo);
+ }
+ }
+ }
+
/**
* API for testing.
*/
diff --git a/core/java/com/android/internal/jank/InteractionJankMonitor.java b/core/java/com/android/internal/jank/InteractionJankMonitor.java
index c769fb9..2b9db70 100644
--- a/core/java/com/android/internal/jank/InteractionJankMonitor.java
+++ b/core/java/com/android/internal/jank/InteractionJankMonitor.java
@@ -259,86 +259,88 @@
public static final int CUJ_LOCKSCREEN_CLOCK_MOVE_ANIMATION = 70;
public static final int CUJ_LAUNCHER_OPEN_SEARCH_RESULT = 71;
+ private static final int LAST_CUJ = CUJ_LAUNCHER_OPEN_SEARCH_RESULT;
private static final int NO_STATSD_LOGGING = -1;
// Used to convert CujType to InteractionType enum value for statsd logging.
// Use NO_STATSD_LOGGING in case the measurement for a given CUJ should not be logged to statsd.
@VisibleForTesting
- public static final int[] CUJ_TO_STATSD_INTERACTION_TYPE = {
- // This should be mapping to CUJ_NOTIFICATION_SHADE_EXPAND_COLLAPSE.
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__NOTIFICATION_SHADE_SWIPE,
- NO_STATSD_LOGGING, // This is deprecated.
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_SCROLL_FLING,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_ROW_EXPAND,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_ROW_SWIPE,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_QS_EXPAND_COLLAPSE,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_QS_SCROLL_SWIPE,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LAUNCHER_APP_LAUNCH_FROM_RECENTS,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LAUNCHER_APP_LAUNCH_FROM_ICON,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LAUNCHER_APP_CLOSE_TO_HOME,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LAUNCHER_APP_CLOSE_TO_PIP,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LAUNCHER_QUICK_SWITCH,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_HEADS_UP_APPEAR,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_HEADS_UP_DISAPPEAR,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_NOTIFICATION_ADD,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_NOTIFICATION_REMOVE,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_APP_LAUNCH,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_PASSWORD_APPEAR,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_PATTERN_APPEAR,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_PIN_APPEAR,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_PASSWORD_DISAPPEAR,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_PATTERN_DISAPPEAR,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_PIN_DISAPPEAR,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_TRANSITION_FROM_AOD,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_TRANSITION_TO_AOD,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LAUNCHER_OPEN_ALL_APPS,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LAUNCHER_ALL_APPS_SCROLL,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LAUNCHER_APP_LAUNCH_FROM_WIDGET,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SETTINGS_PAGE_SCROLL,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_UNLOCK_ANIMATION,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_APP_LAUNCH_FROM_HISTORY_BUTTON,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_APP_LAUNCH_FROM_MEDIA_PLAYER,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_APP_LAUNCH_FROM_QS_TILE,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_APP_LAUNCH_FROM_SETTINGS_BUTTON,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__STATUS_BAR_APP_LAUNCH_FROM_CALL_CHIP,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__PIP_TRANSITION,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__WALLPAPER_TRANSITION,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__USER_SWITCH,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SPLASHSCREEN_AVD,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SPLASHSCREEN_EXIT_ANIM,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SCREEN_OFF,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SCREEN_OFF_SHOW_AOD,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__ONE_HANDED_ENTER_TRANSITION,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__ONE_HANDED_EXIT_TRANSITION,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__UNFOLD_ANIM,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SUW_LOADING_TO_SHOW_INFO_WITH_ACTIONS,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SUW_SHOW_FUNCTION_SCREEN_WITH_ACTIONS,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SUW_LOADING_TO_NEXT_FLOW,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SUW_LOADING_SCREEN_FOR_STATUS,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SPLIT_SCREEN_ENTER,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SPLIT_SCREEN_EXIT,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_LAUNCH_CAMERA,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SPLIT_SCREEN_RESIZE,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SETTINGS_SLIDER,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__TAKE_SCREENSHOT,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__VOLUME_CONTROL,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__BIOMETRIC_PROMPT_TRANSITION,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SETTINGS_TOGGLE,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_DIALOG_OPEN,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__USER_DIALOG_OPEN,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__TASKBAR_EXPAND,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__TASKBAR_COLLAPSE,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_CLEAR_ALL,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LAUNCHER_UNLOCK_ENTRANCE_ANIMATION,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_OCCLUSION,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__RECENTS_SCROLLING,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LAUNCHER_APP_SWIPE_TO_RECENTS,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LAUNCHER_CLOSE_ALL_APPS_SWIPE,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LAUNCHER_CLOSE_ALL_APPS_TO_HOME,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__IME_INSETS_ANIMATION,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_CLOCK_MOVE_ANIMATION,
- UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LAUNCHER_OPEN_SEARCH_RESULT,
- };
+ public static final int[] CUJ_TO_STATSD_INTERACTION_TYPE = new int[LAST_CUJ + 1];
+
+ static {
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_NOTIFICATION_SHADE_EXPAND_COLLAPSE] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__NOTIFICATION_SHADE_SWIPE;
+ CUJ_TO_STATSD_INTERACTION_TYPE[1] = NO_STATSD_LOGGING; // This is deprecated.
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_NOTIFICATION_SHADE_SCROLL_FLING] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_SCROLL_FLING;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_NOTIFICATION_SHADE_ROW_EXPAND] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_ROW_EXPAND;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_NOTIFICATION_SHADE_ROW_SWIPE] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_ROW_SWIPE;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_NOTIFICATION_SHADE_QS_EXPAND_COLLAPSE] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_QS_EXPAND_COLLAPSE;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_NOTIFICATION_SHADE_QS_SCROLL_SWIPE] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_QS_SCROLL_SWIPE;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_LAUNCHER_APP_LAUNCH_FROM_RECENTS] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LAUNCHER_APP_LAUNCH_FROM_RECENTS;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_LAUNCHER_APP_LAUNCH_FROM_ICON] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LAUNCHER_APP_LAUNCH_FROM_ICON;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_LAUNCHER_APP_CLOSE_TO_HOME] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LAUNCHER_APP_CLOSE_TO_HOME;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_LAUNCHER_APP_CLOSE_TO_PIP] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LAUNCHER_APP_CLOSE_TO_PIP;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_LAUNCHER_QUICK_SWITCH] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LAUNCHER_QUICK_SWITCH;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_NOTIFICATION_HEADS_UP_APPEAR] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_HEADS_UP_APPEAR;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_NOTIFICATION_HEADS_UP_DISAPPEAR] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_HEADS_UP_DISAPPEAR;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_NOTIFICATION_ADD] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_NOTIFICATION_ADD;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_NOTIFICATION_REMOVE] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_NOTIFICATION_REMOVE;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_NOTIFICATION_APP_START] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_APP_LAUNCH;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_LOCKSCREEN_PASSWORD_APPEAR] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_PASSWORD_APPEAR;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_LOCKSCREEN_PATTERN_APPEAR] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_PATTERN_APPEAR;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_LOCKSCREEN_PIN_APPEAR] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_PIN_APPEAR;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_LOCKSCREEN_PASSWORD_DISAPPEAR] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_PASSWORD_DISAPPEAR;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_LOCKSCREEN_PATTERN_DISAPPEAR] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_PATTERN_DISAPPEAR;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_LOCKSCREEN_PIN_DISAPPEAR] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_PIN_DISAPPEAR;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_LOCKSCREEN_TRANSITION_FROM_AOD] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_TRANSITION_FROM_AOD;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_LOCKSCREEN_TRANSITION_TO_AOD] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_TRANSITION_TO_AOD;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_LAUNCHER_OPEN_ALL_APPS] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LAUNCHER_OPEN_ALL_APPS;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_LAUNCHER_ALL_APPS_SCROLL] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LAUNCHER_ALL_APPS_SCROLL;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_LAUNCHER_APP_LAUNCH_FROM_WIDGET] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LAUNCHER_APP_LAUNCH_FROM_WIDGET;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_SETTINGS_PAGE_SCROLL] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SETTINGS_PAGE_SCROLL;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_LOCKSCREEN_UNLOCK_ANIMATION] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_UNLOCK_ANIMATION;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_SHADE_APP_LAUNCH_FROM_HISTORY_BUTTON] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_APP_LAUNCH_FROM_HISTORY_BUTTON;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_SHADE_APP_LAUNCH_FROM_MEDIA_PLAYER] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_APP_LAUNCH_FROM_MEDIA_PLAYER;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_SHADE_APP_LAUNCH_FROM_QS_TILE] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_APP_LAUNCH_FROM_QS_TILE;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_SHADE_APP_LAUNCH_FROM_SETTINGS_BUTTON] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_APP_LAUNCH_FROM_SETTINGS_BUTTON;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_STATUS_BAR_APP_LAUNCH_FROM_CALL_CHIP] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__STATUS_BAR_APP_LAUNCH_FROM_CALL_CHIP;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_PIP_TRANSITION] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__PIP_TRANSITION;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_WALLPAPER_TRANSITION] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__WALLPAPER_TRANSITION;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_USER_SWITCH] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__USER_SWITCH;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_SPLASHSCREEN_AVD] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SPLASHSCREEN_AVD;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_SPLASHSCREEN_EXIT_ANIM] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SPLASHSCREEN_EXIT_ANIM;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_SCREEN_OFF] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SCREEN_OFF;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_SCREEN_OFF_SHOW_AOD] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SCREEN_OFF_SHOW_AOD;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_ONE_HANDED_ENTER_TRANSITION] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__ONE_HANDED_ENTER_TRANSITION;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_ONE_HANDED_EXIT_TRANSITION] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__ONE_HANDED_EXIT_TRANSITION;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_UNFOLD_ANIM] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__UNFOLD_ANIM;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_SUW_LOADING_TO_SHOW_INFO_WITH_ACTIONS] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SUW_LOADING_TO_SHOW_INFO_WITH_ACTIONS;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_SUW_SHOW_FUNCTION_SCREEN_WITH_ACTIONS] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SUW_SHOW_FUNCTION_SCREEN_WITH_ACTIONS;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_SUW_LOADING_TO_NEXT_FLOW] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SUW_LOADING_TO_NEXT_FLOW;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_SUW_LOADING_SCREEN_FOR_STATUS] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SUW_LOADING_SCREEN_FOR_STATUS;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_SPLIT_SCREEN_ENTER] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SPLIT_SCREEN_ENTER;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_SPLIT_SCREEN_EXIT] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SPLIT_SCREEN_EXIT;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_LOCKSCREEN_LAUNCH_CAMERA] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_LAUNCH_CAMERA;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_SPLIT_SCREEN_RESIZE] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SPLIT_SCREEN_RESIZE;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_SETTINGS_SLIDER] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SETTINGS_SLIDER;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_TAKE_SCREENSHOT] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__TAKE_SCREENSHOT;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_VOLUME_CONTROL] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__VOLUME_CONTROL;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_BIOMETRIC_PROMPT_TRANSITION] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__BIOMETRIC_PROMPT_TRANSITION;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_SETTINGS_TOGGLE] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SETTINGS_TOGGLE;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_SHADE_DIALOG_OPEN] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_DIALOG_OPEN;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_USER_DIALOG_OPEN] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__USER_DIALOG_OPEN;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_TASKBAR_EXPAND] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__TASKBAR_EXPAND;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_TASKBAR_COLLAPSE] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__TASKBAR_COLLAPSE;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_SHADE_CLEAR_ALL] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_CLEAR_ALL;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_LAUNCHER_UNLOCK_ENTRANCE_ANIMATION] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LAUNCHER_UNLOCK_ENTRANCE_ANIMATION;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_LOCKSCREEN_OCCLUSION] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_OCCLUSION;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_RECENTS_SCROLLING] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__RECENTS_SCROLLING;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_LAUNCHER_APP_SWIPE_TO_RECENTS] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LAUNCHER_APP_SWIPE_TO_RECENTS;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_LAUNCHER_CLOSE_ALL_APPS_SWIPE] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LAUNCHER_CLOSE_ALL_APPS_SWIPE;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_LAUNCHER_CLOSE_ALL_APPS_TO_HOME] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LAUNCHER_CLOSE_ALL_APPS_TO_HOME;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_IME_INSETS_ANIMATION] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__IME_INSETS_ANIMATION;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_LOCKSCREEN_CLOCK_MOVE_ANIMATION] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_CLOCK_MOVE_ANIMATION;
+ CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_LAUNCHER_OPEN_SEARCH_RESULT] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LAUNCHER_OPEN_SEARCH_RESULT;
+ }
private static class InstanceHolder {
public static final InteractionJankMonitor INSTANCE =
diff --git a/core/java/com/android/internal/os/BatteryStatsHistory.java b/core/java/com/android/internal/os/BatteryStatsHistory.java
index 617519b..fdcb87f 100644
--- a/core/java/com/android/internal/os/BatteryStatsHistory.java
+++ b/core/java/com/android/internal/os/BatteryStatsHistory.java
@@ -1468,6 +1468,11 @@
mHistoryLastLastWritten.setTo(mHistoryLastWritten);
final boolean hasTags = mHistoryLastWritten.tagsFirstOccurrence || cur.tagsFirstOccurrence;
mHistoryLastWritten.setTo(mHistoryBaseTimeMs + elapsedRealtimeMs, cmd, cur);
+ if (mHistoryLastWritten.time < mHistoryLastLastWritten.time - 60000) {
+ Slog.wtf(TAG, "Significantly earlier event written to battery history:"
+ + " time=" + mHistoryLastWritten.time
+ + " previous=" + mHistoryLastLastWritten.time);
+ }
mHistoryLastWritten.tagsFirstOccurrence = hasTags;
writeHistoryDelta(mHistoryBuffer, mHistoryLastWritten, mHistoryLastLastWritten);
mLastHistoryElapsedRealtimeMs = elapsedRealtimeMs;
@@ -1908,12 +1913,6 @@
in.setDataPosition(curPos + bufSize);
}
- if (DEBUG) {
- StringBuilder sb = new StringBuilder(128);
- sb.append("****************** OLD mHistoryBaseTimeMs: ");
- TimeUtils.formatDuration(mHistoryBaseTimeMs, sb);
- Slog.i(TAG, sb.toString());
- }
mHistoryBaseTimeMs = historyBaseTime;
if (DEBUG) {
StringBuilder sb = new StringBuilder(128);
@@ -1922,11 +1921,10 @@
Slog.i(TAG, sb.toString());
}
- // We are just arbitrarily going to insert 1 minute from the sample of
- // the last run until samples in this run.
if (mHistoryBaseTimeMs > 0) {
- long oldnow = mClock.elapsedRealtime();
- mHistoryBaseTimeMs = mHistoryBaseTimeMs - oldnow + 1;
+ long elapsedRealtimeMs = mClock.elapsedRealtime();
+ mLastHistoryElapsedRealtimeMs = elapsedRealtimeMs;
+ mHistoryBaseTimeMs = mHistoryBaseTimeMs - elapsedRealtimeMs + 1;
if (DEBUG) {
StringBuilder sb = new StringBuilder(128);
sb.append("****************** ADJUSTED mHistoryBaseTimeMs: ");
diff --git a/core/java/com/android/internal/util/LatencyTracker.java b/core/java/com/android/internal/util/LatencyTracker.java
index c144503..f277635 100644
--- a/core/java/com/android/internal/util/LatencyTracker.java
+++ b/core/java/com/android/internal/util/LatencyTracker.java
@@ -305,10 +305,17 @@
private final SparseArray<ActionProperties> mActionPropertiesMap = new SparseArray<>();
@GuardedBy("mLock")
private boolean mEnabled;
+ private final DeviceConfig.OnPropertiesChangedListener mOnPropertiesChangedListener =
+ this::updateProperties;
// Wrapping this in a holder class achieves lazy loading behavior
private static final class SLatencyTrackerHolder {
- private static final LatencyTracker sLatencyTracker = new LatencyTracker();
+ private static final LatencyTracker sLatencyTracker;
+
+ static {
+ sLatencyTracker = new LatencyTracker();
+ sLatencyTracker.startListeningForLatencyTrackerConfigChanges();
+ }
}
public static LatencyTracker getInstance(Context context) {
@@ -319,31 +326,16 @@
* Constructor for LatencyTracker
*
* <p>This constructor is only visible for test classes to inject their own consumer callbacks
+ *
+ * @param startListeningForPropertyChanges If set, constructor will register for device config
+ * property updates prior to returning. If not set,
+ * {@link #startListeningForLatencyTrackerConfigChanges} must be called
+ * to start listening.
*/
@RequiresPermission(Manifest.permission.READ_DEVICE_CONFIG)
@VisibleForTesting
public LatencyTracker() {
mEnabled = DEFAULT_ENABLED;
-
- final Context context = ActivityThread.currentApplication();
- if (context != null
- && context.checkCallingOrSelfPermission(READ_DEVICE_CONFIG) == PERMISSION_GRANTED) {
- // Post initialization to the background in case we're running on the main thread.
- BackgroundThread.getHandler().post(() -> this.updateProperties(
- DeviceConfig.getProperties(NAMESPACE_LATENCY_TRACKER)));
- DeviceConfig.addOnPropertiesChangedListener(NAMESPACE_LATENCY_TRACKER,
- BackgroundThread.getExecutor(), this::updateProperties);
- } else {
- if (DEBUG) {
- if (context == null) {
- Log.d(TAG, "No application for " + ActivityThread.currentActivityThread());
- } else {
- Log.d(TAG, "Initialized the LatencyTracker."
- + " (No READ_DEVICE_CONFIG permission to change configs)"
- + " enabled=" + mEnabled + ", package=" + context.getPackageName());
- }
- }
- }
}
private void updateProperties(DeviceConfig.Properties properties) {
@@ -366,6 +358,54 @@
}
/**
+ * Test method to start listening to {@link DeviceConfig} properties changes.
+ *
+ * <p>During testing, a {@link LatencyTracker} it is desired to stop and start listening for
+ * config updates.
+ *
+ * <p>This is not used for production usages of this class outside of testing as we are
+ * using a single static object.
+ */
+ @VisibleForTesting
+ public void startListeningForLatencyTrackerConfigChanges() {
+ final Context context = ActivityThread.currentApplication();
+ if (context != null
+ && context.checkCallingOrSelfPermission(READ_DEVICE_CONFIG) == PERMISSION_GRANTED) {
+ // Post initialization to the background in case we're running on the main thread.
+ BackgroundThread.getHandler().post(() -> this.updateProperties(
+ DeviceConfig.getProperties(NAMESPACE_LATENCY_TRACKER)));
+ DeviceConfig.addOnPropertiesChangedListener(NAMESPACE_LATENCY_TRACKER,
+ BackgroundThread.getExecutor(), mOnPropertiesChangedListener);
+ } else {
+ if (DEBUG) {
+ if (context == null) {
+ Log.d(TAG, "No application for " + ActivityThread.currentActivityThread());
+ } else {
+ synchronized (mLock) {
+ Log.d(TAG, "Initialized the LatencyTracker."
+ + " (No READ_DEVICE_CONFIG permission to change configs)"
+ + " enabled=" + mEnabled + ", package=" + context.getPackageName());
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Test method to stop listening to {@link DeviceConfig} properties changes.
+ *
+ * <p>During testing, a {@link LatencyTracker} it is desired to stop and start listening for
+ * config updates.
+ *
+ * <p>This is not used for production usages of this class outside of testing as we are
+ * using a single static object.
+ */
+ @VisibleForTesting
+ public void stopListeningForLatencyTrackerConfigChanges() {
+ DeviceConfig.removeOnPropertiesChangedListener(mOnPropertiesChangedListener);
+ }
+
+ /**
* A helper method to translate action type to name.
*
* @param atomsProtoAction the action type defined in AtomsProto.java
diff --git a/core/java/com/android/internal/view/RecyclerViewCaptureHelper.java b/core/java/com/android/internal/view/RecyclerViewCaptureHelper.java
index 8192ffd..f4e9e30 100644
--- a/core/java/com/android/internal/view/RecyclerViewCaptureHelper.java
+++ b/core/java/com/android/internal/view/RecyclerViewCaptureHelper.java
@@ -105,6 +105,13 @@
}
if (recyclerView.requestChildRectangleOnScreen(anchor, input, true)) {
+ if (anchor.getParent() == null) {
+ // BUG(b/239050369): Check if the tracked anchor view is still attached.
+ Log.w(TAG, "Bug: anchor view " + anchor + " is detached after scrolling");
+ resultConsumer.accept(result); // empty result
+ return;
+ }
+
int scrolled = prevAnchorTop - anchor.getTop(); // inverse of movement
mScrollDelta += scrolled; // view.top-- is equivalent to parent.scrollY++
result.scrollDelta = mScrollDelta;
diff --git a/core/jni/android_os_GraphicsEnvironment.cpp b/core/jni/android_os_GraphicsEnvironment.cpp
index d9152d6..01dbceb 100644
--- a/core/jni/android_os_GraphicsEnvironment.cpp
+++ b/core/jni/android_os_GraphicsEnvironment.cpp
@@ -50,7 +50,7 @@
}
void setAngleInfo_native(JNIEnv* env, jobject clazz, jstring path, jstring appName,
- jboolean angleIsSystemDriver, jstring devOptIn, jobjectArray featuresObj) {
+ jstring devOptIn, jobjectArray featuresObj) {
ScopedUtfChars pathChars(env, path);
ScopedUtfChars appNameChars(env, appName);
ScopedUtfChars devOptInChars(env, devOptIn);
@@ -74,18 +74,7 @@
}
android::GraphicsEnv::getInstance().setAngleInfo(pathChars.c_str(), appNameChars.c_str(),
- angleIsSystemDriver, devOptInChars.c_str(),
- features);
-}
-
-void setLegacyDriverInfo_native(JNIEnv* env, jobject clazz, jstring appName,
- jboolean angleIsSystemDriver, jstring legacyDriverName) {
- ScopedUtfChars appNameChars(env, appName);
- ScopedUtfChars legacyDriverNameChars(env, legacyDriverName);
-
- android::GraphicsEnv::getInstance().setLegacyDriverInfo(appNameChars.c_str(),
- angleIsSystemDriver,
- legacyDriverNameChars.c_str());
+ devOptInChars.c_str(), features);
}
bool shouldUseAngle_native(JNIEnv* env, jobject clazz, jstring appName) {
@@ -135,10 +124,8 @@
{"setInjectLayersPrSetDumpable", "()Z",
reinterpret_cast<void*>(setInjectLayersPrSetDumpable_native)},
{"setAngleInfo",
- "(Ljava/lang/String;Ljava/lang/String;ZLjava/lang/String;[Ljava/lang/String;)V",
+ "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)V",
reinterpret_cast<void*>(setAngleInfo_native)},
- {"setLegacyDriverInfo", "(Ljava/lang/String;ZLjava/lang/String;)V",
- reinterpret_cast<void*>(setLegacyDriverInfo_native)},
{"getShouldUseAngle", "(Ljava/lang/String;)Z",
reinterpret_cast<void*>(shouldUseAngle_native)},
{"setLayerPaths", "(Ljava/lang/ClassLoader;Ljava/lang/String;)V",
diff --git a/core/jni/android_view_SurfaceControl.cpp b/core/jni/android_view_SurfaceControl.cpp
index 193099b..4249253 100644
--- a/core/jni/android_view_SurfaceControl.cpp
+++ b/core/jni/android_view_SurfaceControl.cpp
@@ -972,9 +972,9 @@
SurfaceComposerClient::Transaction::sendSurfaceFlushJankDataTransaction(ctrl);
}
-static void nativeSanitize(JNIEnv* env, jclass clazz, jlong transactionObj) {
+static void nativeSanitize(JNIEnv* env, jclass clazz, jlong transactionObj, jint pid, jint uid) {
auto transaction = reinterpret_cast<SurfaceComposerClient::Transaction*>(transactionObj);
- transaction->sanitize();
+ transaction->sanitize(pid, uid);
}
static void nativeSetDestinationFrame(JNIEnv* env, jclass clazz, jlong transactionObj,
@@ -2268,7 +2268,7 @@
(void*) nativeSetTrustedPresentationCallback },
{"nativeClearTrustedPresentationCallback", "(JJ)V",
(void*) nativeClearTrustedPresentationCallback },
- {"nativeSanitize", "(J)V",
+ {"nativeSanitize", "(JII)V",
(void*) nativeSanitize },
{"nativeSetDestinationFrame", "(JJIIII)V",
(void*)nativeSetDestinationFrame },
diff --git a/core/jni/android_window_WindowInfosListener.cpp b/core/jni/android_window_WindowInfosListener.cpp
index 850755a..55995df 100644
--- a/core/jni/android_window_WindowInfosListener.cpp
+++ b/core/jni/android_window_WindowInfosListener.cpp
@@ -21,6 +21,7 @@
#include <android_runtime/Log.h>
#include <gui/DisplayInfo.h>
#include <gui/SurfaceComposerClient.h>
+#include <gui/WindowInfosUpdate.h>
#include <nativehelper/JNIHelp.h>
#include <nativehelper/ScopedLocalFrame.h>
#include <utils/Log.h>
@@ -91,8 +92,7 @@
WindowInfosListener(JNIEnv* env, jobject listener)
: mListener(env->NewWeakGlobalRef(listener)) {}
- void onWindowInfosChanged(const std::vector<WindowInfo>& windowInfos,
- const std::vector<DisplayInfo>& displayInfos) override {
+ void onWindowInfosChanged(const gui::WindowInfosUpdate& update) override {
JNIEnv* env = AndroidRuntime::getJNIEnv();
LOG_ALWAYS_FATAL_IF(env == nullptr, "Unable to retrieve JNIEnv in onWindowInfoChanged.");
@@ -103,8 +103,10 @@
return;
}
- ScopedLocalRef<jobjectArray> jWindowHandlesArray(env, fromWindowInfos(env, windowInfos));
- ScopedLocalRef<jobjectArray> jDisplayInfoArray(env, fromDisplayInfos(env, displayInfos));
+ ScopedLocalRef<jobjectArray> jWindowHandlesArray(env,
+ fromWindowInfos(env, update.windowInfos));
+ ScopedLocalRef<jobjectArray> jDisplayInfoArray(env,
+ fromDisplayInfos(env, update.displayInfos));
env->CallVoidMethod(listener, gListenerClassInfo.onWindowInfosChanged,
jWindowHandlesArray.get(), jDisplayInfoArray.get());
diff --git a/core/proto/android/providers/settings/system.proto b/core/proto/android/providers/settings/system.proto
index 7503dde4..48243f2 100644
--- a/core/proto/android/providers/settings/system.proto
+++ b/core/proto/android/providers/settings/system.proto
@@ -68,6 +68,7 @@
// orientationplot.py tool.
// 0 = no, 1 = yes
optional SettingProto window_orientation_listener_log = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto show_key_presses = 4 [ (android.privacy).dest = DEST_AUTOMATIC ];
}
optional DevOptions developer_options = 7;
diff --git a/core/proto/android/server/windowmanagertransitiontrace.proto b/core/proto/android/server/windowmanagertransitiontrace.proto
index a776bd2..a950a79 100644
--- a/core/proto/android/server/windowmanagertransitiontrace.proto
+++ b/core/proto/android/server/windowmanagertransitiontrace.proto
@@ -23,7 +23,7 @@
option java_multiple_files = true;
/* Represents a file full of transition entries.
- Encoded, it should start with 0x09 0x54 0x52 0x4E 0x54 0x52 0x41 0x43 0x45 (TRNTRACE), such
+ Encoded, it should start with 0x09 0x54 0x52 0x4E 0x54 0x52 0x41 0x43 0x45 (.TRNTRACE), such
that it can be easily identified. */
message TransitionTraceProto {
@@ -38,28 +38,24 @@
// Must be the first field, set to value in MagicNumber
required fixed64 magic_number = 1;
- // Transitions that don't have a finish time are considered aborted
- repeated Transition finished_transitions = 2;
-
- // Additional debugging info only collected and dumped when explicitly requested to trace
- repeated TransitionState transition_states = 3;
- repeated TransitionInfo transition_info = 4;
+ repeated Transition transitions = 2;
/* offset between real-time clock and elapsed time clock in nanoseconds.
Calculated as: 1000000 * System.currentTimeMillis() - SystemClock.elapsedRealtimeNanos() */
- optional fixed64 real_to_elapsed_time_offset_nanos = 5;
+ optional fixed64 real_to_elapsed_time_offset_nanos = 3;
}
message Transition {
- optional int32 id = 1; // Not dumped in always on tracing
- required uint64 start_transaction_id = 2;
- required uint64 finish_transaction_id = 3;
- required int64 create_time_ns = 4;
- required int64 send_time_ns = 5;
- optional int64 finish_time_ns = 6; // consider aborted if not provided
- required int32 type = 7;
+ required int32 id = 1;
+ optional uint64 start_transaction_id = 2;
+ optional uint64 finish_transaction_id = 3;
+ optional int64 create_time_ns = 4;
+ optional int64 send_time_ns = 5;
+ optional int64 finish_time_ns = 6;
+ optional int32 type = 7;
repeated Target targets = 8;
optional int32 flags = 9;
+ optional int64 abort_time_ns = 10;
}
message Target {
@@ -68,40 +64,3 @@
optional int32 window_id = 3; // Not dumped in always on tracing
optional int32 flags = 4;
}
-
-message TransitionState {
- enum State {
- COLLECTING = 0;
- PENDING = -1;
- STARTED = 1;
- PLAYING = 2;
- ABORT = 3;
- FINISHED = 4;
- }
-
- required int64 time_ns = 1;
- required int32 transition_id = 2;
- required int32 transition_type = 3;
- required State state = 4;
- required int32 flags = 5;
- repeated ChangeInfo change = 6;
- repeated com.android.server.wm.IdentifierProto participants = 7;
-}
-
-message ChangeInfo {
- required com.android.server.wm.IdentifierProto window_identifier = 1;
- required int32 transit_mode = 2;
- required bool has_changed = 3;
- required int32 change_flags = 4;
- required int32 windowing_mode = 5;
-}
-
-message TransitionInfo {
- required int32 transition_id = 1;
- repeated TransitionInfoChange change = 2;
-}
-
-message TransitionInfoChange {
- required int32 layer_id = 1;
- required int32 mode = 2;
-}
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index fefa79f..7e0a36d 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -4976,11 +4976,11 @@
android:protectionLevel="signature" />
<!-- Allows an application to subscribe to keyguard locked (i.e., showing) state.
- <p>Protection level: internal|role
- <p>Intended for use by ROLE_ASSISTANT only.
+ <p>Protection level: signature|role
+ <p>Intended for use by ROLE_ASSISTANT and signature apps only.
-->
<permission android:name="android.permission.SUBSCRIBE_TO_KEYGUARD_LOCKED_STATE"
- android:protectionLevel="internal|role"/>
+ android:protectionLevel="signature|role"/>
<!-- Must be required by a {@link android.service.autofill.AutofillService},
to ensure that only the system can bind to it.
diff --git a/core/res/res/drawable-hdpi/pointer_handwriting.png b/core/res/res/drawable-hdpi/pointer_handwriting.png
new file mode 100644
index 0000000..6d7c59c
--- /dev/null
+++ b/core/res/res/drawable-hdpi/pointer_handwriting.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/pointer_handwriting.png b/core/res/res/drawable-mdpi/pointer_handwriting.png
new file mode 100644
index 0000000..b36241b
--- /dev/null
+++ b/core/res/res/drawable-mdpi/pointer_handwriting.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/pointer_handwriting.png b/core/res/res/drawable-xhdpi/pointer_handwriting.png
new file mode 100644
index 0000000..dea1972
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/pointer_handwriting.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/pointer_handwriting.png b/core/res/res/drawable-xxhdpi/pointer_handwriting.png
new file mode 100644
index 0000000..870c402
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/pointer_handwriting.png
Binary files differ
diff --git a/core/res/res/drawable/focus_event_pressed_key_background.xml b/core/res/res/drawable/focus_event_pressed_key_background.xml
new file mode 100644
index 0000000..e069f0b
--- /dev/null
+++ b/core/res/res/drawable/focus_event_pressed_key_background.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 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.
+-->
+
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+ android:name="focus_event_pressed_key_background"
+ android:shape="rectangle">
+
+ <!-- View background color -->
+ <solid
+ android:color="#AA000000" >
+ </solid>
+
+ <!-- View border color and width -->
+ <stroke
+ android:width="2dp"
+ android:color="@android:color/white">
+ </stroke>
+
+ <!-- The radius makes the corners rounded -->
+ <corners
+ android:radius="8dp">
+ </corners>
+
+</shape>
\ No newline at end of file
diff --git a/core/res/res/drawable/pointer_handwriting_icon.xml b/core/res/res/drawable/pointer_handwriting_icon.xml
index cdbf693..bba4e6e 100644
--- a/core/res/res/drawable/pointer_handwriting_icon.xml
+++ b/core/res/res/drawable/pointer_handwriting_icon.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<pointer-icon xmlns:android="http://schemas.android.com/apk/res/android"
- android:bitmap="@drawable/pointer_crosshair"
- android:hotSpotX="12dp"
- android:hotSpotY="12dp" />
\ No newline at end of file
+ android:bitmap="@drawable/pointer_handwriting"
+ android:hotSpotX="8.25dp"
+ android:hotSpotY="23.75dp" />
\ No newline at end of file
diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml
index 2b778b2..0b3a288 100644
--- a/core/res/res/values-af/strings.xml
+++ b/core/res/res/values-af/strings.xml
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Android-stelsel"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Skakel oor na persoonlike profiel"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"Skakel oor na werkprofiel"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"Skakel oor na persoonlike <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"Skakel oor na werk-<xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Kontakte"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"in te gaan by jou kontakte"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Ligging"</string>
@@ -503,8 +505,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"Laat die program toe om die vibrator te beheer."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"Stel die program in staat om toegang tot die vibreerderstand te kry."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"skakel foonnommers direk"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"Laat die app toe om foonnommers sonder jou insae te bel. Dit kan onvoorsiene heffings of oproepe tot gevolg hê. Neem kennis dat dit nie die app toelaat om noodnommers te bel nie. Kwaadwillige apps kan jou geld kos deur oproepe te maak sonder jou bevestiging of diensverskafferkodes te bel wat veroorsaak dat inkomende oproepe outomaties na ’n ander nommer aangestuur word."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"toegang tot kitsboodskapoproepdiens"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Laat die program toe om die kitsboodskapdiens te gebruik om oproepe sonder jou ingryping te maak."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"lees foonstatus en identiteit"</string>
@@ -701,7 +702,7 @@
<skip />
<string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Kan nie jou gesigmodel skep nie. Probeer weer."</string>
<string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Donkerbril bespeur. Jou gesig moet heeltemal sigbaar wees."</string>
- <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Gesigbedekking bespeur. Jou gesig moet heeltemal sigbaar wees."</string>
+ <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Gesigbedekking bespeur. Gesig moet heel sigbaar wees."</string>
<string-array name="face_acquired_vendor">
</string-array>
<string name="face_error_hw_not_available" msgid="5085202213036026288">"Kan nie gesig verifieer nie. Hardeware nie beskikbaar nie."</string>
@@ -2159,10 +2160,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Hierdie inhoud kan nie met werkprogramme oopgemaak word nie"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Hierdie inhoud kan nie met persoonlike programme gedeel word nie"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Hierdie inhoud kan nie met persoonlike programme oopgemaak word nie"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Werkapps is onderbreek"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"Hervat"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Geen werkprogramme nie"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Geen persoonlike programme nie"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"Maak persoonlike <xliff:g id="APP">%s</xliff:g> oop"</string>
diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml
index 7c99b8a..1ce1b25 100644
--- a/core/res/res/values-am/strings.xml
+++ b/core/res/res/values-am/strings.xml
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Android ስርዓት"</string>
<string name="user_owner_label" msgid="8628726904184471211">"ወደ የግል መገለጫ ቀይር"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"ወደ የስራ መገለጫ ቀይር"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"ወደ የግል <xliff:g id="APP_NAME">%1$s</xliff:g> ቀይር"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"ወደ የሥራ <xliff:g id="APP_NAME">%1$s</xliff:g> ቀይር"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"ዕውቂያዎች"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"የእርስዎ እውቂያዎች ላይ ይድረሱባቸው"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"መገኛ አካባቢ"</string>
@@ -503,8 +505,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"ነዛሪውን ለመቆጣጠር ለመተግበሪያው ይፈቅዳሉ።"</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"መተግበሪያው የንዝረት ሁኔታውን እንዲደርስ ያስችለዋል።"</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"በቀጥታ ስልክ ቁጥሮች ደውል"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"መተግበሪያው ያለእርስዎ ጣልቃ ገብነት ወደ ስልክ ቁጥሮች እንዲደውል ያስችለዋል። ይህ ያልተጠበቁ ክፍያዎችን ወይም ጥሪዎችን ሊያስከትል ይችላል። ይሄ መተግበሪያው ወደ የአደጋ ጊዜ ቁጥሮች እንዲደውል የማይፈቅድለት መሆኑን ያስታወሱ። ተንኮል-አዘል መተግበሪያዎች ያለእርስዎ ማረጋገጫ ጥሪዎችን በማድረግ ገንዘብ ሊያስወጡዎት ወይም ገቢ ጥሪዎችን ወደ ሌላ ቁጥር በራስ-ሰር እንዲተላለፉ ወደሚያደርጉት የአገልግሎት አቅራቢ ኮዶች ሊደውሉ ይችላሉ።"</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"የአይኤምኤስ ጥሪ አገልግሎትን ይደርሳል"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"መተግበሪያው ያለእርስዎ ጣልቃ ገብነት ጥሪዎችን ለማድረግ የአይኤምኤስ አገልግሎቱን እንዲጠቀም ያስችለዋል።"</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"የስልክ ሁኔታና ማንነት አንብብ"</string>
@@ -2159,10 +2160,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"ይህ ይዘት በሥራ መተግበሪያዎች መከፈት አይችልም"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"ይህ ይዘት በግል መተግበሪያዎች መጋራት አይችልም"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"ይህ ይዘት በግል መተግበሪያዎች መከፈት አይችልም"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"የሥራ መተግበሪያዎች ባሉበት ቆመዋል"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"ከቆመበት ቀጥል"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"ምንም የሥራ መተግበሪያዎች የሉም"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"ምንም የግል መተግበሪያዎች የሉም"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"የግል <xliff:g id="APP">%s</xliff:g> ይክፈቱ"</string>
diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml
index 90513b2..f245825 100644
--- a/core/res/res/values-ar/strings.xml
+++ b/core/res/res/values-ar/strings.xml
@@ -302,6 +302,8 @@
<string name="android_system_label" msgid="5974767339591067210">"نظام Android"</string>
<string name="user_owner_label" msgid="8628726904184471211">"التبديل إلى الملف الشخصي"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"التبديل إلى الملف الشخصي للعمل"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"التبديل إلى تطبيق \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" في الملف الشخصي"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"التبديل إلى تطبيق \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" في الملف الشخصي للعمل"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"جهات الاتصال"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"الوصول إلى جهات اتصالك"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"الموقع الجغرافي"</string>
@@ -507,8 +509,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"للسماح للتطبيق بالتحكم في الهزّاز."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"يسمح هذا الإذن للتطبيق بالوصول إلى حالة الهزّاز."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"اتصال مباشر بأرقام الهواتف"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"يسمح هذا الإذن للتطبيق بالاتصال بأرقام الهواتف بدون تدخل منك. وقد يؤدي ذلك إلى تحصيل رسوم غير متوقّعة أو إجراء مكالمات غير متوقّعة. يُرجى العلم أنّ هذا الإذن لا يسمح للتطبيق بالاتصال بأرقام الطوارئ. قد يؤدي منح الإذن للتطبيقات الضارة إلى تحصيل رسوم منك عن طريق إجراء مكالمات بدون الحصول على موافقتك أو الاتصال برموز مشغّل شبكة الجوال والتي تتسبّب في إعادة توجيه المكالمات الواردة تلقائيًا إلى رقم آخر."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"الوصول إلى خدمة الاتصال عبر الرسائل الفورية"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"للسماح للتطبيق باستخدام خدمة الرسائل الفورية لإجراء المكالمات بدون تدخل منك."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"قراءة حالة الهاتف والهوية"</string>
@@ -638,7 +639,7 @@
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"الصورة ساطعة للغاية."</string>
<string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"تم رصد الضغط على زر التشغيل."</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"حاوِل تعديل بصمة الإصبع."</string>
- <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"غيِّر موضع إصبعك قليلاً في كل مرة."</string>
+ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"غيِّر موضع إصبعك قليلاً في كل مرة"</string>
<string-array name="fingerprint_acquired_vendor">
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"لم يتمّ التعرّف على البصمة."</string>
@@ -681,23 +682,23 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"يُرجى التواصل مع مقدِّم خدمات إصلاح."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"يتعذّر إنشاء نموذج الوجه. يُرجى إعادة المحاولة."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"ساطع للغاية. تجربة مستوى سطوع أقلّ."</string>
- <string name="face_acquired_too_dark" msgid="8539853432479385326">"الإضاءة غير كافية."</string>
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"الإضاءة غير كافية"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"يُرجى إبعاد الهاتف عنك."</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"يُرجى تقريب الهاتف منك."</string>
- <string name="face_acquired_too_high" msgid="8278815780046368576">"يُرجى رفع الهاتف للأعلى."</string>
- <string name="face_acquired_too_low" msgid="4075391872960840081">"يُرجى خفض الهاتف للأسفل."</string>
+ <string name="face_acquired_too_high" msgid="8278815780046368576">"يُرجى رفع الهاتف للأعلى"</string>
+ <string name="face_acquired_too_low" msgid="4075391872960840081">"يُرجى خفض الهاتف للأسفل"</string>
<string name="face_acquired_too_right" msgid="6245286514593540859">"يُرجى تحريك الهاتف جهة اليسار."</string>
- <string name="face_acquired_too_left" msgid="9201762240918405486">"يُرجى تحريك الهاتف جهة اليمين."</string>
+ <string name="face_acquired_too_left" msgid="9201762240918405486">"يُرجى تحريك الهاتف لجهة اليمين"</string>
<string name="face_acquired_poor_gaze" msgid="4427153558773628020">"يُرجى النظر إلى جهازك مباشرة أكثر."</string>
<string name="face_acquired_not_detected" msgid="1057966913397548150">"تتعذّر رؤية وجهك. ارفع هاتفك إلى مستوى العينَين."</string>
<string name="face_acquired_too_much_motion" msgid="8199691445085189528">"حركة أكثر من اللازم يُرجى حمل بدون حركة."</string>
<string name="face_acquired_recalibrate" msgid="8724013080976469746">"يُرجى إعادة تسجيل وجهك."</string>
<string name="face_acquired_too_different" msgid="2520389515612972889">"يتعذّر التعرّف على الوجه. يُرجى إعادة المحاولة."</string>
<string name="face_acquired_too_similar" msgid="8882920552674125694">"غيِّر موضع رأسك قليلاً."</string>
- <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"يُرجى النظر إلى هاتفك مباشرةً."</string>
- <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"يُرجى النظر إلى هاتفك مباشرةً."</string>
- <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"يُرجى النظر إلى هاتفك مباشرةً."</string>
- <string name="face_acquired_obscured" msgid="4917643294953326639">"عليك بإزالة أي شيء يُخفي وجهك."</string>
+ <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"يُرجى النظر إلى هاتفك مباشرةً"</string>
+ <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"يُرجى النظر إلى هاتفك مباشرةً"</string>
+ <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"يُرجى النظر إلى هاتفك مباشرةً"</string>
+ <string name="face_acquired_obscured" msgid="4917643294953326639">"يجب إزالة أي شيء يُخفي وجهك"</string>
<string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"يُرجى تنظيف الجزء العلوي من الشاشة، بما في ذلك الشريط الأسود."</string>
<!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
<skip />
@@ -705,7 +706,7 @@
<skip />
<string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"يتعذّر إنشاء نموذج الوجه. يُرجى إعادة المحاولة."</string>
<string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"تمّ رصد نظارة شمسية. يجب أن يكون وجهك ظاهرًا بالكامل."</string>
- <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"تمّ رصد قناع على الوجه. يجب أن يكون وجهك ظاهرًا بالكامل."</string>
+ <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"تمّ رصد قناع على الوجه في حين يجب ظهور وجهك بالكامل"</string>
<string-array name="face_acquired_vendor">
</string-array>
<string name="face_error_hw_not_available" msgid="5085202213036026288">"يتعذّر التحقُّق من الوجه. الجهاز غير مُتاح."</string>
@@ -714,8 +715,7 @@
<string name="face_error_canceled" msgid="2164434737103802131">"تمّ إلغاء عملية مصادقة الوجه."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"ألغى المستخدم ميزة \"فتح الجهاز بالتعرف على الوجه\"."</string>
<string name="face_error_lockout" msgid="7864408714994529437">"تمّ إجراء محاولات كثيرة. أعِد المحاولة لاحقًا."</string>
- <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
- <skip />
+ <string name="face_error_lockout_permanent" msgid="8533257333130473422">"أجريت محاولات كثيرة جدًا. ميزة \"فتح الجهاز بالتعرف على الوجه\" غير متاحة."</string>
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"تم إجراء عدد كبير جدًا من المحاولات. أدخِل قفل الشاشة بدلاً من ذلك."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"يتعذّر التحقق من الوجه. حاول مرة أخرى."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"لم يسبق لك إعداد ميزة \"فتح الجهاز بالتعرف على الوجه\"."</string>
@@ -1260,7 +1260,7 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"بدء التطبيقات."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"جارٍ إعادة التشغيل."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"ضغطت على زر التشغيل، يؤدي هذا عادةً إلى إيقاف الشاشة.\n\nجرِّب النقر بخفة أثناء إعداد بصمتك."</string>
- <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"لإنهاء عملية الإعداد، أوقِف الشاشة."</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"لإيقاف عملية الإعداد، أغلِق الشاشة."</string>
<string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"إيقاف"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"هل تريد مواصلة تأكيد بصمة إصبعك؟"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"ضغطت على زر التشغيل، يؤدي هذا عادةً إلى إيقاف الشاشة.\n\nجرِّب النقر بخفة لتأكيد بصمة إصبعك."</string>
@@ -1396,7 +1396,7 @@
<string name="share_remote_bugreport_action" msgid="7630880678785123682">"مشاركة"</string>
<string name="decline_remote_bugreport_action" msgid="4040894777519784346">"رفض"</string>
<string name="select_input_method" msgid="3971267998568587025">"اختيار أسلوب الإدخال"</string>
- <string name="show_ime" msgid="6406112007347443383">"استمرار عرضها على الشاشة أثناء نشاط لوحة المفاتيح الفعلية"</string>
+ <string name="show_ime" msgid="6406112007347443383">"استمرار عرضها على الشاشة عندما تكون لوحة المفاتيح الخارجية متصلة"</string>
<string name="hardware" msgid="1800597768237606953">"إظهار لوحة المفاتيح الافتراضية"</string>
<string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"إعداد <xliff:g id="DEVICE_NAME">%s</xliff:g>"</string>
<string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"إعداد لوحات المفاتيح الخارجية"</string>
@@ -1706,7 +1706,7 @@
<string name="accessibility_service_screen_control_title" msgid="190017412626919776">"قراءة محتوى الشاشة والتحكم به"</string>
<string name="accessibility_service_screen_control_description" msgid="6946315917771791525">"يمكنها قراءة كل المحتوى على الشاشة وعرض المحتوى فوق تطبيقات أخرى."</string>
<string name="accessibility_service_action_perform_title" msgid="779670378951658160">"عرض الإجراءات وتنفيذها"</string>
- <string name="accessibility_service_action_perform_description" msgid="2718852014003170558">"يمكنها تتبّع تفاعلاتك مع تطبيق أو جهاز استشعار والتفاعل مع التطبيقات نيابةً عنك."</string>
+ <string name="accessibility_service_action_perform_description" msgid="2718852014003170558">"قد يؤدي ذلك إلى السماح للميزة بتتبّع تفاعلاتك مع تطبيق أو جهاز استشعار والتفاعل مع التطبيقات نيابةً عنك."</string>
<string name="accessibility_dialog_button_allow" msgid="2092558122987144530">"سماح"</string>
<string name="accessibility_dialog_button_deny" msgid="4129575637812472671">"رفض"</string>
<string name="accessibility_select_shortcut_menu_title" msgid="6002726538854613272">"انقر على ميزة لبدء استخدامها:"</string>
@@ -2164,16 +2164,12 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"لا يمكن فتح هذا المحتوى باستخدام تطبيقات العمل."</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"لا يمكن مشاركة هذا المحتوى مع التطبيقات الشخصية."</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"لا يمكن فتح هذا المحتوى باستخدام التطبيقات الشخصية."</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"تطبيقات العمل متوقفة مؤقتًا."</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"إلغاء الإيقاف المؤقت"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"ما مِن تطبيقات عمل."</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"ما مِن تطبيقات شخصية."</string>
- <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
- <skip />
+ <string name="miniresolver_open_in_personal" msgid="6499100403307136696">"فتح تطبيق \"<xliff:g id="APP">%s</xliff:g>\" في الملف الشخصي"</string>
+ <string name="miniresolver_open_in_work" msgid="7138659785478630639">"فتح تطبيق \"<xliff:g id="APP">%s</xliff:g>\" في ملف العمل"</string>
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"استخدام المتصفّح الشخصي"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"استخدام متصفّح العمل"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"رقم التعريف الشخصي لإلغاء قفل شبكة شريحة SIM"</string>
diff --git a/core/res/res/values-as/strings.xml b/core/res/res/values-as/strings.xml
index 6132b94..78ce491 100644
--- a/core/res/res/values-as/strings.xml
+++ b/core/res/res/values-as/strings.xml
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Android ছিষ্টেম"</string>
<string name="user_owner_label" msgid="8628726904184471211">"ব্যক্তিগত প্ৰ\'ফাইললৈ সলনি কৰক"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"কৰ্মস্থানৰ প্ৰ’ফাইললৈ সলনি কৰক"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"ব্যক্তিগত <xliff:g id="APP_NAME">%1$s</xliff:g>লৈ সলনি কৰক"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"কৰ্মস্থানৰ <xliff:g id="APP_NAME">%1$s</xliff:g>লৈ সলনি কৰক"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"সম্পর্কসূচী"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"আপোনাৰ সম্পৰ্কসূচী চাব পাৰে"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"অৱস্থান"</string>
@@ -503,8 +505,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"ভাইব্ৰেটৰ নিয়ন্ত্ৰণ কৰিবলৈ এপ্টোক অনুমতি দিয়ে।"</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"এপ্টোক কম্পন স্থিতিটো এক্সেছ কৰিবলৈ অনুমতি দিয়ে।"</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"পোনপটীয়াকৈ ফ\'ন নম্বৰলৈ কল কৰক"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"এপ্টোক আপোনাৰ হস্তক্ষেপ অবিহনে ফ’ন নম্বৰসমূহলৈ কল কৰিবলৈ অনুমতি দিয়ে। ইয়াৰ ফলত অপ্ৰত্যাশিত মাচুল লোৱা অথবা কল কৰা হ’ব পাৰে। মনত ৰাখিব যে ই এপ্টোক জৰুৰীকালীন নম্বৰসমূহত কল কৰিবলৈ অনুমতি নিদিয়ে। ক্ষতিকাৰক এপ্সমূহে আপোনাৰ অনুমতি নোলোৱাকৈয়ে কল কৰি আপোনাৰ টকা খৰছ কৰাব পাৰে অথবা এনেকুৱা বাহকৰ ক’ড ডায়েল কৰিব পাৰে যাৰ ফলত অন্তৰ্গামী কলসমূহ স্বয়ংক্ৰিয়ভাৱে অন্য নম্বৰলৈ ফৰৱাৰ্ড হয়।"</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"আইএমএছ কল সেৱা ব্যৱহাৰ কৰিব পাৰে"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"আপোনাৰ হস্তক্ষেপৰ অবিহনে আইএমএছ সেৱা ব্যৱহাৰ কৰি কল কৰিবলৈ এপক অনুমতি দিয়ে।"</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"ফ\'নৰ স্থিতি আৰু পৰিচয় পঢ়ক"</string>
@@ -1715,7 +1716,7 @@
<string name="color_inversion_feature_name" msgid="2672824491933264951">"ৰং বিপৰীতকৰণ"</string>
<string name="color_correction_feature_name" msgid="7975133554160979214">"ৰং শুধৰণী"</string>
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"এখন হাতেৰে ব্যৱহাৰ কৰাৰ ম’ড"</string>
- <string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"এক্সট্ৰা ডিম"</string>
+ <string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"অতিৰিক্তভাৱে পোহৰ কমোৱাৰ সুবিধা"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"শুনাৰ ডিভাইচ"</string>
<string name="accessibility_shortcut_enabling_service" msgid="5473495203759847687">"ভলিউম কীসমূহ ধৰি ৰাখক। <xliff:g id="SERVICE_NAME">%1$s</xliff:g> অন কৰা হ\'ল।"</string>
<string name="accessibility_shortcut_disabling_service" msgid="8675244165062700619">"ভলিউম কী ধৰি ৰাখিছিল। <xliff:g id="SERVICE_NAME">%1$s</xliff:g> অফ কৰা হ\'ল।"</string>
@@ -2159,10 +2160,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"এই সমল কৰ্মস্থানৰ এপৰ জৰিয়তে খুলিব নোৱাৰি"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"এই সমল ব্যক্তিগত এপৰ সৈতে শ্বেয়াৰ কৰিব নোৱাৰি"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"এই সমল ব্যক্তিগত এপৰ জৰিয়তে খুলিব নোৱাৰি"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"কৰ্মস্থানৰ এপ্সমূহ পজ কৰা আছে"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"আনপজ কৰক"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"কোনো কৰ্মস্থানৰ এপ্ নাই"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"কোনো ব্যক্তিগত এপ্ নাই"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"ব্যক্তিগত <xliff:g id="APP">%s</xliff:g> খোলক"</string>
diff --git a/core/res/res/values-az/strings.xml b/core/res/res/values-az/strings.xml
index 8050996..c6c5e91 100644
--- a/core/res/res/values-az/strings.xml
+++ b/core/res/res/values-az/strings.xml
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Android sistemi"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Şəxsi profilə keçin"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"İş profilinə keçin"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"<xliff:g id="APP_NAME">%1$s</xliff:g> üzrə şəxsi profilə keçin"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"<xliff:g id="APP_NAME">%1$s</xliff:g> üzrə iş profilinə keçin"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Kontaktlar"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"kontaktlarınıza daxil olun"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Məkan"</string>
@@ -503,8 +505,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"Tətbiqə vibratoru idarə etmə icazəsi verir."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"Tətbiqə vibrasiya vəziyyətinə daxil olmaq imkanı verir."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"telefon nömrələrinə birbaşa zəng edir"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"Tətbiqə telefon nömrələrinə müdaxiləsiz zəng etmək icazəsi verir. Gözlənilməz ödəmə və ya zənglə nəticələnə bilər. Bununla tətbiq təcili nömrələrə zəng edə bilmir. Zərərli tətbiqlər təsdiq olmadan zəng etməklə və ya gələn zənglərin başqa nömrəyə avtomatik yönləndirilməsinə səbəb olan operator kodları yığmaqla xərc yarada bilər."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"IMS zəng xidmətinə giriş"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Tətbiqə müdaxilə olmadan zəng etmək üçün IMS xidmətindən istifadə etməyə imkan verir."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"telefon statusunu və identifikasiyanı oxuyur"</string>
@@ -2159,10 +2160,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Bu kontenti iş tətbiqləri ilə açmaq mümkün deyil"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Bu kontenti şəxsi tətbiqlər ilə paylaşmaq mümkün deyil"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Bu kontenti şəxsi tətbiqlər ilə açmaq mümkün deyil"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"İş tətbiqlərinə pauza verilib"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"Pauzanı bitirin"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"İş tətbiqi yoxdur"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Şəxsi tətbiq yoxdur"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"Açın: <xliff:g id="APP">%s</xliff:g> (şəxsi)"</string>
diff --git a/core/res/res/values-b+sr+Latn/strings.xml b/core/res/res/values-b+sr+Latn/strings.xml
index 125d1cd..3d640d80 100644
--- a/core/res/res/values-b+sr+Latn/strings.xml
+++ b/core/res/res/values-b+sr+Latn/strings.xml
@@ -299,6 +299,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Android sistem"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Pređi na lični profil"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"Pređi na poslovni profil"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"Pređi na lični profil aplikacije <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"Pređi na poslovni profil aplikacije <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Kontakti"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"pristupi kontaktima"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Lokacija"</string>
@@ -504,8 +506,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"Dozvoljava aplikaciji da kontroliše vibraciju."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"Dozvoljava aplikaciji da pristupa stanju vibriranja."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"direktno pozivanje brojeva telefona"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"Dozvoljava aplikaciji da poziva brojeve telefona bez vaše interakcije. To može da dovede do neočekivanih naplata ili poziva. Imajte u vidu da se time aplikaciji ne dozvoljava da poziva brojeve za hitne slučajeve. Zlonamerne aplikacije mogu da izazovu troškove upućivanjem poziva bez vaše potvrde ili da biraju kodove operatera usled čega se dolazni pozivi automatski prosleđuju na drugi broj."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"pristup usluzi poziva pomoću razmene trenutnih poruka"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Dozvoljava aplikaciji da koristi uslugu razmene trenutnih poruka da bi upućivala pozive bez vaše intervencije."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"čitanje statusa i identiteta telefona"</string>
@@ -702,7 +703,7 @@
<skip />
<string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Pravljenje modela lica nije uspelo. Probajte ponovo."</string>
<string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Otkrivene su tamne naočari. Lice mora da bude potpuno vidljivo."</string>
- <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Otkriveno je prekrivanje lica. Lice mora da bude potpuno vidljivo."</string>
+ <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Lice je prekriveno. Mora da bude sasvim vidljivo."</string>
<string-array name="face_acquired_vendor">
</string-array>
<string name="face_error_hw_not_available" msgid="5085202213036026288">"Provera lica nije uspela. Hardver nije dostupan."</string>
@@ -1256,7 +1257,7 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Pokretanje aplikacija."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Završavanje pokretanja."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Pritisnuli ste dugme za uključivanje – time obično isključujete ekran.\n\nProbajte lagano da dodirnete dok podešavate otisak prsta."</string>
- <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Završite podešavanje isključivanjem ekrana"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Isključite ekran i napustite podešavanje"</string>
<string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Isključi"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Nastavljate verifikaciju otiska prsta?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"Pritisnuli ste dugme za uključivanje – time obično isključujete ekran.\n\nProbajte lagano da dodirnete da biste verifikovali otisak prsta."</string>
@@ -1846,7 +1847,7 @@
<string name="restr_pin_confirm_pin" msgid="7143161971614944989">"Potvrdite novi PIN"</string>
<string name="restr_pin_create_pin" msgid="917067613896366033">"Napravite PIN za izmenu ograničenja"</string>
<string name="restr_pin_error_doesnt_match" msgid="7063392698489280556">"PIN-ovi se ne podudaraju. Probajte ponovo."</string>
- <string name="restr_pin_error_too_short" msgid="1547007808237941065">"PIN je prekratak. Mora da sadrži najmanje 4 cifre."</string>
+ <string name="restr_pin_error_too_short" msgid="1547007808237941065">"PIN je prekratak. Mora da ima bar 4 cifre."</string>
<string name="restr_pin_try_later" msgid="5897719962541636727">"Probajte ponovo kasnije"</string>
<string name="immersive_cling_title" msgid="2307034298721541791">"Prikazuje se ceo ekran"</string>
<string name="immersive_cling_description" msgid="7092737175345204832">"Da biste izašli, prevucite nadole odozgo."</string>
@@ -2160,10 +2161,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Ovaj sadržaj ne može da se otvara pomoću poslovnih aplikacija"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Ovaj sadržaj ne može da se deli pomoću ličnih aplikacija"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Ovaj sadržaj ne može da se otvara pomoću ličnih aplikacija"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Poslovne aplikacije su pauzirane"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"Opozovi pauzu"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Nema poslovnih aplikacija"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Nema ličnih aplikacija"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"Otvorite ličnu aplikaciju <xliff:g id="APP">%s</xliff:g>"</string>
diff --git a/core/res/res/values-be/strings.xml b/core/res/res/values-be/strings.xml
index 2cc38d6..5e97e2e 100644
--- a/core/res/res/values-be/strings.xml
+++ b/core/res/res/values-be/strings.xml
@@ -300,6 +300,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Сістэма Android"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Пераключыцца на асабісты профіль"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"Пераключыцца на працоўны профіль"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"Пераключыцца на асабісты профіль <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"Пераключыцца на працоўны профіль <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Кантакты"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"атрымліваць доступ да вашых кантактаў"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Месцазнаходжанне"</string>
@@ -505,8 +507,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"Дазваляе прыкладанням кіраваць вібрацыяй."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"Дазваляе праграме атрымліваць доступ да вібрасігналу."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"непасрэдна набіраць тэлефонныя нумары"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"Дазваляе праграме тэлефанаваць на тэлефонныя нумары без вашага ўдзелу. У выніку вы можаце пабачыць нечаканыя плацяжы і званкі. Аднак праграма не зможа рабіць выклікі на нумары экстранных службаў. Шкодныя праграмы могуць прыносіць выдаткі, робячы выклікі без вашага пацвярджэння, або набіраючы коды аператараў, з якімі ўваходныя выклікі аўтаматычна перанакіроўваюцца на іншы нумар."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"атрымліваць доступ да сэрвісу выклікаў IMS"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Дазваляе праграмам выкарыстоўваць службу IMS, каб рабіць выклікі без вашага ўмяшання."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"чытанне статусу тэлефона і ідэнтыфікацыя"</string>
@@ -674,7 +675,7 @@
<string name="face_sensor_privacy_enabled" msgid="7407126963510598508">"Каб выкарыстоўваць распазнаванне твару, уключыце "<b>"доступ да камеры"</b>" праз раздзел \"Налады > Прыватнасць\""</string>
<string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"Наладзьце дадатковыя спосабы разблакіроўкі"</string>
<string name="fingerprint_setup_notification_content" msgid="205578121848324852">"Націсніце, каб дадаць адбітак пальца"</string>
- <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Разблакіраванне адбіткам пальца"</string>
+ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Разблакіроўка адбіткам пальца"</string>
<string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Не ўдалося скарыстаць сканер адбіткаў пальцаў"</string>
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Звярніцеся ў сэрвісны цэнтр."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"Не ўдалося стварыць мадэль твару. Паўтарыце."</string>
@@ -712,8 +713,7 @@
<string name="face_error_canceled" msgid="2164434737103802131">"Распазнаванне твару скасавана."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"Распазнаванне твару скасавана карыстальнікам"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Занадта шмат спроб. Паўтарыце спробу пазней."</string>
- <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
- <skip />
+ <string name="face_error_lockout_permanent" msgid="8533257333130473422">"Занадта шмат спроб. Распазнаванне твару недаступна."</string>
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Занадта шмат спроб. Разблакіруйце экран іншым спосабам."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"Не ўдалося спраўдзіць твар. Паўтарыце спробу."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"Вы не наладзілі распазнаванне твару"</string>
@@ -1874,8 +1874,8 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Абноўлены вашым адміністратарам"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Выдалены вашым адміністратарам"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"ОК"</string>
- <string name="battery_saver_description_with_learn_more" msgid="5444908404021316250">"У рэжыме эканоміі зараду ўключаецца цёмная тэма і выключаюцца ці абмяжоўваюцца дзеянні ў фонавым рэжыме, некаторыя візуальныя эфекты, пэўныя функцыі і падключэнні да сетак."</string>
- <string name="battery_saver_description" msgid="8518809702138617167">"У рэжыме эканоміі зараду ўключаецца цёмная тэма і выключаюцца ці абмяжоўваюцца дзеянні ў фонавым рэжыме, некаторыя візуальныя эфекты, пэўныя функцыі і падключэнні да сетак."</string>
+ <string name="battery_saver_description_with_learn_more" msgid="5444908404021316250">"У рэжыме энергазберажэння ўключаецца цёмная тэма і выключаюцца ці абмяжоўваюцца дзеянні ў фонавым рэжыме, некаторыя візуальныя эфекты, пэўныя функцыі і падключэнні да сетак."</string>
+ <string name="battery_saver_description" msgid="8518809702138617167">"У рэжыме энергазберажэння ўключаецца цёмная тэма і выключаюцца ці абмяжоўваюцца дзеянні ў фонавым рэжыме, некаторыя візуальныя эфекты, пэўныя функцыі і падключэнні да сетак."</string>
<string name="data_saver_description" msgid="4995164271550590517">"У рэжыме \"Эканомія трафіка\" фонавая перадача для некаторых праграмам адключана. Праграма, якую вы зараз выкарыстоўваеце, можа атрымліваць доступ да даных, але радзей, чым звычайна. Напрыклад, відарысы могуць не загружацца, пакуль вы не націсніце на іх."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Уключыць Эканомію трафіка?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Уключыць"</string>
@@ -2162,16 +2162,12 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Не ўдалося адкрыць гэта змесціва з дапамогай працоўных праграм"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Не ўдалося абагуліць гэта змесціва з асабістымі праграмамі"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Не ўдалося адкрыць гэта змесціва з дапамогай асабістых праграм"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Працоўныя праграмы прыпынены"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"Уключыць"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Няма працоўных праграм"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Няма асабістых праграм"</string>
- <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
- <skip />
+ <string name="miniresolver_open_in_personal" msgid="6499100403307136696">"Адкрыць асабістую праграму <xliff:g id="APP">%s</xliff:g>"</string>
+ <string name="miniresolver_open_in_work" msgid="7138659785478630639">"Адкрыць працоўную праграму <xliff:g id="APP">%s</xliff:g>"</string>
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Скарыстаць асабісты браўзер"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Скарыстаць працоўны браўзер"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN-код разблакіроўкі сеткі для SIM-карты"</string>
diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml
index e4d72ee..ae3c0c6 100644
--- a/core/res/res/values-bg/strings.xml
+++ b/core/res/res/values-bg/strings.xml
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Система Android"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Превключване към личния потребителски профил"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"Превключване към служебния потребителски профил"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"Превключване към <xliff:g id="APP_NAME">%1$s</xliff:g> в личния потребителски профил"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"Превключване към <xliff:g id="APP_NAME">%1$s</xliff:g> в служебния потребителски профил"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Контакти"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"има достъп до контактите ви"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Местоположение"</string>
@@ -503,8 +505,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"Разрешава на приложението да контролира устройството за вибрация."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"Дава възможност на приложението да осъществява достъп до състоянието на вибриране."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"директно обаждане до телефонни номера"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"Разрешава на приложението да се обажда без ваша намеса на телефонни номера. Това може да доведе до неочаквани таксувания или обаждания. Имайте предвид, че това не позволява на приложението да извършва обаждания до номера за спешни случаи. Злонамерените приложения могат да ви въвлекат в разходи, като извършват обаждания без потвърждение от ваша страна или като набират кодове на оператора, които автоматично пренасочват входящите обаждания към друг номер."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"достъп до услугата за незабавни съобщения за обаждания"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Разрешава на приложението да използва услугата за незабавни съобщения за извършване на обаждания без намеса от ваша страна."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"четене на състоянието и идентификационните данни на телефона"</string>
@@ -2064,7 +2065,7 @@
<string name="harmful_app_warning_open_anyway" msgid="5963657791740211807">"ОТВАРЯНЕ"</string>
<string name="harmful_app_warning_title" msgid="8794823880881113856">"Открито е опасно приложение"</string>
<string name="slices_permission_request" msgid="3677129866636153406">"<xliff:g id="APP_0">%1$s</xliff:g> иска да показва части от <xliff:g id="APP_2">%2$s</xliff:g>"</string>
- <string name="screenshot_edit" msgid="7408934887203689207">"Редактиране"</string>
+ <string name="screenshot_edit" msgid="7408934887203689207">"Редактиране"</string>
<string name="volume_dialog_ringer_guidance_vibrate" msgid="2055927873175228519">"При обаждания и известия устройството ще вибрира"</string>
<string name="volume_dialog_ringer_guidance_silent" msgid="1011246774949993783">"Обажданията и известията ще бъдат заглушени"</string>
<string name="notification_channel_system_changes" msgid="2462010596920209678">"Промени в системата"</string>
@@ -2159,10 +2160,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Това съдържание не може да се отваря със служебни приложения"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Това съдържание не може да се споделя с лични приложения"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Това съдържание не може да се отваря с лични приложения"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Служебните приложения са поставени на пауза"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"Отмяна на паузата"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Няма подходящи служебни приложения"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Няма подходящи лични приложения"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"Към личния потребителски профил в(ъв) <xliff:g id="APP">%s</xliff:g>"</string>
@@ -2318,9 +2317,9 @@
<string name="permdesc_startForegroundServicesFromBackground" msgid="4071826571656001537">"Разрешава на дадено придружаващо приложение да стартира услуги на преден план, докато се изпълнява на заден план."</string>
<string name="mic_access_on_toast" msgid="2666925317663845156">"Микрофонът е налице"</string>
<string name="mic_access_off_toast" msgid="8111040892954242437">"Микрофонът е блокиран"</string>
- <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Двоен екран"</string>
- <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Функцията за двоен екран е включена"</string>
- <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"Приложението <xliff:g id="APP_NAME">%1$s</xliff:g> използва и двата екрана, за да показва съдържание"</string>
+ <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Dual screen"</string>
+ <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Функцията Dual Screen е включена"</string>
+ <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g> използва и двата екрана, за да показва съдържание"</string>
<string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"Устройството е твърде топло"</string>
<string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"Функцията за двоен екран не е налице, защото телефонът ви е твърде топъл"</string>
<string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"Функцията Dual Screen не е налице"</string>
diff --git a/core/res/res/values-bn/strings.xml b/core/res/res/values-bn/strings.xml
index a5cbfa0..d4fc14f 100644
--- a/core/res/res/values-bn/strings.xml
+++ b/core/res/res/values-bn/strings.xml
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Android সিস্টেম"</string>
<string name="user_owner_label" msgid="8628726904184471211">"এর বদলে ব্যক্তিগত প্রোফাইল ব্যবহার করুন"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"এর বদলে কাজের প্রোফাইল ব্যবহার করুন"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"<xliff:g id="APP_NAME">%1$s</xliff:g> ব্যক্তিগত প্রোফাইলে পরিবর্তন করুন"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"<xliff:g id="APP_NAME">%1$s</xliff:g> অফিস প্রোফাইলে পরিবর্তন করুন"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"পরিচিতি"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"আপনার পরিচিতিগুলিতে অ্যাক্সেস"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"লোকেশন"</string>
@@ -633,7 +635,7 @@
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"অত্যন্ত উজ্জ্বল"</string>
<string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"পাওয়ার বোতাম প্রেস করার বিষয়টি শনাক্ত করা হয়েছে"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"অ্যাডজাস্ট করার চেষ্টা করুন"</string>
- <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"প্রতিবার আঙ্গুলের ছাপ সেটআপ করার সময় আপনার আঙ্গুলের অবস্থান সামান্য পরিবর্তন করুন"</string>
+ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"প্রতিবার আপনার আঙুলের অবস্থান সামান্য পরিবর্তন করুন"</string>
<string-array name="fingerprint_acquired_vendor">
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"আঙ্গুলের ছাপ শনাক্ত করা যায়নি"</string>
@@ -1727,7 +1729,7 @@
<string name="accessibility_gesture_3finger_instructional_text" msgid="3425123684990193765">"একটি ফিচার থেকে অন্যটিতে যেতে, তিনটি আঙ্গুল দিয়ে উপরের দিকে সোয়াইপ করে ধরে থাকুন।"</string>
<string name="accessibility_magnification_chooser_text" msgid="1502075582164931596">"বড় করে দেখা"</string>
<string name="user_switched" msgid="7249833311585228097">"বর্তমান ব্যবহারকারী <xliff:g id="NAME">%1$s</xliff:g>৷"</string>
- <string name="user_switching_message" msgid="1912993630661332336">"ব্যবহারকারী পরিবর্তন করে <xliff:g id="NAME">%1$s</xliff:g> করা হচ্ছে…"</string>
+ <string name="user_switching_message" msgid="1912993630661332336">"<xliff:g id="NAME">%1$s</xliff:g> প্রোফাইলে পাল্টানো হচ্ছে…"</string>
<string name="user_logging_out_message" msgid="7216437629179710359">"<xliff:g id="NAME">%1$s</xliff:g>কে লগ-আউট করা হচ্ছে..."</string>
<string name="owner_name" msgid="8713560351570795743">"মালিক"</string>
<string name="guest_name" msgid="8502103277839834324">"অতিথি"</string>
diff --git a/core/res/res/values-bs/strings.xml b/core/res/res/values-bs/strings.xml
index 478a3b6..a990594 100644
--- a/core/res/res/values-bs/strings.xml
+++ b/core/res/res/values-bs/strings.xml
@@ -247,7 +247,7 @@
<string name="global_action_power_off" msgid="4404936470711393203">"Isključi"</string>
<string name="global_action_power_options" msgid="1185286119330160073">"Napajanje"</string>
<string name="global_action_restart" msgid="4678451019561687074">"Ponovo pokreni"</string>
- <string name="global_action_emergency" msgid="1387617624177105088">"Hitno"</string>
+ <string name="global_action_emergency" msgid="1387617624177105088">"Hitni poziv"</string>
<string name="global_action_bug_report" msgid="5127867163044170003">"Izvještaj o greškama"</string>
<string name="global_action_logout" msgid="6093581310002476511">"Završi sesiju"</string>
<string name="global_action_screenshot" msgid="2610053466156478564">"Snimak ekrana"</string>
@@ -269,7 +269,7 @@
<string name="global_action_settings" msgid="4671878836947494217">"Postavke"</string>
<string name="global_action_assist" msgid="2517047220311505805">"Pomoć"</string>
<string name="global_action_voice_assist" msgid="6655788068555086695">"Glasovna pomoć"</string>
- <string name="global_action_lockdown" msgid="2475471405907902963">"Zaključavanje"</string>
+ <string name="global_action_lockdown" msgid="2475471405907902963">"Zaključaj"</string>
<string name="status_bar_notification_info_overflow" msgid="3330152558746563475">"999+"</string>
<string name="notification_hidden_text" msgid="2835519769868187223">"Novo obavještenje"</string>
<string name="notification_channel_physical_keyboard" msgid="5417306456125988096">"Fizička tastatura"</string>
@@ -299,6 +299,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Sistem Android"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Pređite na lični profil"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"Pređite na radni profil"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"Prebaci u ličnu aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"Prebaci u poslovnu aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Kontakti"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"pristupa vašim kontaktima"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Lokacija"</string>
@@ -644,7 +646,7 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Lice je provjereno, pritisnite dugme za potvrdu"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Hardver za otisak prsta nije dostupan."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"Nije moguće postaviti otisak prsta"</string>
- <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Vrijeme za postavljanje otiska prsta je isteklo. Pokušajte ponovo."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Postavljanje otiska prsta je isteklo. Pokušajte ponovo."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Radnja s otiskom prsta je otkazana."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Korisnik je otkazao radnju s otiskom prsta."</string>
<string name="fingerprint_error_lockout" msgid="6626753679019351368">"Previše pokušaja. Umjesto toga koristite zaključavanje ekrana."</string>
@@ -964,7 +966,7 @@
<string name="lockscreen_instructions_when_pattern_enabled" msgid="7982445492532123308">"Pritisnite dugme Meni kako biste otključali uređaj ili obavili hitni poziv."</string>
<string name="lockscreen_instructions_when_pattern_disabled" msgid="7434061749374801753">"Pritisnite dugme Meni za otključavanje uređaja."</string>
<string name="lockscreen_pattern_instructions" msgid="3169991838169244941">"Nacrtajte uzorak za otključavanje"</string>
- <string name="lockscreen_emergency_call" msgid="7500692654885445299">"Hitno"</string>
+ <string name="lockscreen_emergency_call" msgid="7500692654885445299">"Hitni poziv"</string>
<string name="lockscreen_return_to_call" msgid="3156883574692006382">"Povratak na poziv"</string>
<string name="lockscreen_pattern_correct" msgid="8050630103651508582">"Ispravno!"</string>
<string name="lockscreen_pattern_wrong" msgid="2940138714468358458">"Pokušajte ponovo"</string>
diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml
index b13e9e8..804f34b 100644
--- a/core/res/res/values-ca/strings.xml
+++ b/core/res/res/values-ca/strings.xml
@@ -299,6 +299,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Sistema Android"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Canvia al perfil personal"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"Canvia al perfil de treball"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"Canvia al perfil personal de <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"Canvia al perfil de treball de <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Contactes"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"accedir als contactes"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Ubicació"</string>
@@ -474,8 +476,8 @@
<string name="permdesc_writeCalendar" product="default" msgid="5416380074475634233">"Aquesta aplicació pot afegir, suprimir i canviar esdeveniments del calendari al telèfon. També pot enviar missatges que sembli que provenen dels propietaris del calendari o canviar esdeveniments sense notificar-los-ho."</string>
<string name="permlab_accessLocationExtraCommands" msgid="5162339812057983988">"accedir a ordres del proveïdor d\'ubicació addicionals"</string>
<string name="permdesc_accessLocationExtraCommands" msgid="355369611979907967">"Permet que l\'aplicació accedeixi a ordres addicionals del proveïdor d\'ubicacions; per tant, és possible que l\'aplicació pugui interferir en el funcionament del GPS o d\'altres fonts d\'ubicacions."</string>
- <string name="permlab_accessFineLocation" msgid="6426318438195622966">"accedeix a la ubicació exacta només en primer pla"</string>
- <string name="permdesc_accessFineLocation" msgid="6732174080240016335">"Aquesta aplicació pot obtenir la teva ubicació exacta a través dels serveis d\'ubicació mentre s\'està utilitzant. Els serveis d\'ubicació del dispositiu han d\'estar activats perquè l\'aplicació pugui obtenir la ubicació, i això pot fer que l\'ús de la bateria augmenti."</string>
+ <string name="permlab_accessFineLocation" msgid="6426318438195622966">"accedeix a la ubicació precisa només en primer pla"</string>
+ <string name="permdesc_accessFineLocation" msgid="6732174080240016335">"Aquesta aplicació pot obtenir la teva ubicació precisa a través dels serveis d\'ubicació mentre s\'està utilitzant. Els serveis d\'ubicació del dispositiu han d\'estar activats perquè l\'aplicació pugui obtenir la ubicació, i això pot fer que l\'ús de la bateria augmenti."</string>
<string name="permlab_accessCoarseLocation" msgid="1561042925407799741">"accedeix a la ubicació aproximada només en primer pla"</string>
<string name="permdesc_accessCoarseLocation" msgid="778521847873199160">"Aquesta aplicació pot obtenir la teva ubicació aproximada a través dels serveis d\'ubicació mentre s\'està utilitzant. Els serveis d\'ubicació del dispositiu han d\'estar activats perquè l\'aplicació pugui obtenir la ubicació."</string>
<string name="permlab_accessBackgroundLocation" msgid="1721164702777366138">"accedir a la ubicació en segon pla"</string>
@@ -504,8 +506,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"Permet que l\'aplicació controli el vibrador."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"Permet que l\'aplicació accedeixi a l\'estat de vibració."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"trucar directament a números de telèfon"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"Permet que l\'aplicació truqui a números de telèfon sense la teva intervenció. Això pot comportar càrrecs o trucades inesperats. Tingues en compte que això no permet que l\'aplicació truqui a números d\'emergència. És possible que se\'t cobri si les aplicacions malicioses fan trucades sense confirmació o marquen codis d\'operadors que poden causar que les trucades entrants es desviïn automàticament a un altre número."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"accés al servei de trucades IMS"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Permet que l\'aplicació utilitzi el servei IMS per fer trucades sense la teva intervenció."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"veure l\'estat i la identitat del telèfon"</string>
@@ -635,7 +636,7 @@
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Hi ha massa llum"</string>
<string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"S\'ha premut el botó d\'engegada"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Prova d\'ajustar l\'empremta digital"</string>
- <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Canvia lleugerament la posició del dit en cada intent"</string>
+ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Canvia lleugerament la posició del dit cada vegada"</string>
<string-array name="fingerprint_acquired_vendor">
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"L\'empremta digital no s\'ha reconegut"</string>
@@ -681,8 +682,8 @@
<string name="face_acquired_too_dark" msgid="8539853432479385326">"No hi ha prou llum"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Allunya\'t del telèfon"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Apropa el telèfon"</string>
- <string name="face_acquired_too_high" msgid="8278815780046368576">"Mou el telèfon més amunt"</string>
- <string name="face_acquired_too_low" msgid="4075391872960840081">"Mou el telèfon més avall"</string>
+ <string name="face_acquired_too_high" msgid="8278815780046368576">"Apuja el telèfon"</string>
+ <string name="face_acquired_too_low" msgid="4075391872960840081">"Abaixa el telèfon"</string>
<string name="face_acquired_too_right" msgid="6245286514593540859">"Mou el telèfon cap a l\'esquerra"</string>
<string name="face_acquired_too_left" msgid="9201762240918405486">"Mou el telèfon cap a la dreta"</string>
<string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Mira més directament cap al dispositiu."</string>
@@ -694,7 +695,7 @@
<string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Mira més directament al telèfon"</string>
<string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Mira més directament al telèfon"</string>
<string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Mira més directament al telèfon"</string>
- <string name="face_acquired_obscured" msgid="4917643294953326639">"Treu qualsevol cosa que amagui la teva cara."</string>
+ <string name="face_acquired_obscured" msgid="4917643294953326639">"Aparta tot allò que et tapi la cara"</string>
<string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Neteja la part superior de la pantalla, inclosa la barra negra"</string>
<!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
<skip />
@@ -2160,10 +2161,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"No es pot obrir aquest contingut amb aplicacions de treball"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"No es pot compartir aquest contingut amb aplicacions personals"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"No es pot obrir aquest contingut amb aplicacions personals"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Les aplicacions de treball estan en pausa"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"Reactiva"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Cap aplicació de treball"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Cap aplicació personal"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"Obre <xliff:g id="APP">%s</xliff:g> al perfil personal"</string>
diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml
index df6869b..5afe4bd 100644
--- a/core/res/res/values-cs/strings.xml
+++ b/core/res/res/values-cs/strings.xml
@@ -300,6 +300,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Systém Android"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Přepnout na osobní profil"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"Přepnout na pracovní profil"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"Přepnout na osobní verzi aplikace <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"Přepnout na pracovní verzi aplikace <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Kontakty"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"přístup ke kontaktům"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Poloha"</string>
@@ -505,8 +507,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"Umožňuje aplikaci ovládat vibrace."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"Umožňuje aplikaci přístup ke stavu vibrací."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"přímé volání na telefonní čísla"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"Umožňuje aplikaci volat na telefonní čísla bez vašeho přičinění. Může to mít za následek neočekávané poplatky nebo hovory. Toto oprávnění neumožňuje aplikaci volat na tísňová čísla. Škodlivé aplikace mohou způsobit poplatky tím, že budou volat bez vašeho svolení nebo budou vytáčet kódy operátora, které příchozí hovory automaticky přesměrují na jiné číslo."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"přístup ke službě zasílání rychlých zpráv pro účely hovorů"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Umožňuje aplikaci používat službu zasílání rychlých zpráv k uskutečňování hovorů bez vašeho zásahu."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"čtení stavu a identity telefonu"</string>
@@ -626,11 +627,11 @@
<string name="biometric_error_generic" msgid="6784371929985434439">"Při ověřování došlo k chybě"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Použít zámek obrazovky"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Pokračujte zadáním zámku obrazovky"</string>
- <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Pevně zatlačte na senzor"</string>
+ <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Pevně zatlačte na snímač"</string>
<string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Otisk prstu se nepodařilo rozpoznat. Zkuste to znovu."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Vyčistěte snímač otisků prstů a zkuste to znovu"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Vyčistěte senzor a zkuste to znovu"</string>
- <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Zatlačte silně na senzor"</string>
+ <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Pevně zatlačte na snímač"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Pohyb prstem byl příliš pomalý. Zkuste to znovu."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Zkuste jiný otisk prstu"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Je příliš světlo"</string>
@@ -682,10 +683,10 @@
<string name="face_acquired_too_dark" msgid="8539853432479385326">"Nedostatečné osvětlení"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Umístěte telefon dál"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Umístěte telefon blíž"</string>
- <string name="face_acquired_too_high" msgid="8278815780046368576">"Umístěte telefon výš"</string>
- <string name="face_acquired_too_low" msgid="4075391872960840081">"Umístěte telefon níž"</string>
- <string name="face_acquired_too_right" msgid="6245286514593540859">"Umístěte telefon víc doleva"</string>
- <string name="face_acquired_too_left" msgid="9201762240918405486">"Umístěte telefon víc doprava"</string>
+ <string name="face_acquired_too_high" msgid="8278815780046368576">"Posuňte telefon výš"</string>
+ <string name="face_acquired_too_low" msgid="4075391872960840081">"Posuňte telefon níž"</string>
+ <string name="face_acquired_too_right" msgid="6245286514593540859">"Posuňte telefon doleva"</string>
+ <string name="face_acquired_too_left" msgid="9201762240918405486">"Posuňte telefon doprava"</string>
<string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Dívejte se přímo na zařízení."</string>
<string name="face_acquired_not_detected" msgid="1057966913397548150">"Obličej není vidět. Držte telefon v úrovni očí."</string>
<string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Příliš mnoho pohybu. Držte telefon nehybně."</string>
@@ -1241,7 +1242,7 @@
<string name="unsupported_display_size_show" msgid="980129850974919375">"Vždy zobrazovat"</string>
<string name="unsupported_compile_sdk_message" msgid="7326293500707890537">"Aplikace <xliff:g id="APP_NAME">%1$s</xliff:g> byla vytvořena nekompatibilní systému Android a může se chovat neočekávaně. K dispozici může být aktualizovaná verze aplikace."</string>
<string name="unsupported_compile_sdk_show" msgid="1601210057960312248">"Vždy zobrazovat"</string>
- <string name="unsupported_compile_sdk_check_update" msgid="1103639989147664456">"Zkontrolovat aktualizace"</string>
+ <string name="unsupported_compile_sdk_check_update" msgid="1103639989147664456">"Zkontrolovat dostupnost aktualizace"</string>
<string name="smv_application" msgid="3775183542777792638">"Aplikace <xliff:g id="APPLICATION">%1$s</xliff:g> (proces <xliff:g id="PROCESS">%2$s</xliff:g>) porušila své vlastní vynucené zásady StrictMode."</string>
<string name="smv_process" msgid="1398801497130695446">"Proces <xliff:g id="PROCESS">%1$s</xliff:g> porušil své vlastní vynucené zásady StrictMode."</string>
<string name="android_upgrading_title" product="default" msgid="7279077384220829683">"Telefon se aktualizuje…"</string>
@@ -2161,10 +2162,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Tento obsah nelze otevřít pomocí pracovních aplikací"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Tento obsah nelze sdílet pomocí osobních aplikací"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Tento obsah nelze otevřít pomocí osobních aplikací"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Pracovní aplikace jsou pozastaveny"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"Zrušit pozastavení"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Žádné pracovní aplikace"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Žádné osobní aplikace"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"Otevřít osobní aplikaci <xliff:g id="APP">%s</xliff:g>"</string>
diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml
index ff3fb8d..4398a31 100644
--- a/core/res/res/values-da/strings.xml
+++ b/core/res/res/values-da/strings.xml
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Android-system"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Skift til personlig profil"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"Skift til arbejdsprofil"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"Skift til <xliff:g id="APP_NAME">%1$s</xliff:g> til privat brug"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"Skift til <xliff:g id="APP_NAME">%1$s</xliff:g> til arbejdsbrug"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Kontakter"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"have adgang til dine kontakter"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Lokation"</string>
@@ -1090,7 +1092,7 @@
<string name="enable_explore_by_touch_warning_title" msgid="5095399706284943314">"Vil du aktivere Udforsk ved berøring?"</string>
<string name="enable_explore_by_touch_warning_message" product="tablet" msgid="1037295476738940824">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> ønsker at aktivere Udforsk ved berøring. Når Udforsk ved berøring er tændt, kan du høre eller se beskrivelser af, hvad der er under din finger eller udføre bevægelser for at interagere med tabletten."</string>
<string name="enable_explore_by_touch_warning_message" product="default" msgid="4312979647356179250">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> ønsker at aktivere Udforsk ved berøring. Når Udforsk ved berøring er aktiveret, kan du høre eller se beskrivelser af, hvad der er under din finger, eller udføre bevægelser for at interagere med telefonen."</string>
- <string name="oneMonthDurationPast" msgid="4538030857114635777">"for 1 måned siden"</string>
+ <string name="oneMonthDurationPast" msgid="4538030857114635777">"1 måned siden"</string>
<string name="beforeOneMonthDurationPast" msgid="8315149541372065392">"Før for 1 måned siden"</string>
<string name="last_num_days" msgid="2393660431490280537">"{count,plural, =1{Seneste dag}one{De seneste # dag}other{De seneste # dage}}"</string>
<string name="last_month" msgid="1528906781083518683">"Seneste måned"</string>
@@ -1120,8 +1122,8 @@
<string name="duration_days_shortest_future" msgid="3392722163935571543">"om <xliff:g id="COUNT">%d</xliff:g> d."</string>
<string name="duration_years_shortest_future" msgid="5537464088352970388">"om <xliff:g id="COUNT">%d</xliff:g> år"</string>
<string name="duration_minutes_relative" msgid="8620337701051015593">"{count,plural, =1{For # minut siden}one{For # minut siden}other{For # minutter siden}}"</string>
- <string name="duration_hours_relative" msgid="4836449961693180253">"{count,plural, =1{For # time siden}one{For # time siden}other{For # timer siden}}"</string>
- <string name="duration_days_relative" msgid="621965767567258302">"{count,plural, =1{For # dag siden}one{For # dag siden}other{For # dage siden}}"</string>
+ <string name="duration_hours_relative" msgid="4836449961693180253">"{count,plural, =1{# time siden}one{# time siden}other{# timer siden}}"</string>
+ <string name="duration_days_relative" msgid="621965767567258302">"{count,plural, =1{1 dag siden}one{1 dag siden}other{# dag siden}}"</string>
<string name="duration_years_relative" msgid="8731202348869424370">"{count,plural, =1{For # år siden}one{For # år siden}other{For # år siden}}"</string>
<string name="duration_minutes_relative_future" msgid="5259574171747708115">"{count,plural, =1{# minut}one{# minut}other{# minutter}}"</string>
<string name="duration_hours_relative_future" msgid="6670440478481140565">"{count,plural, =1{# time}one{# time}other{# timer}}"</string>
@@ -2315,11 +2317,11 @@
<string name="permdesc_startForegroundServicesFromBackground" msgid="4071826571656001537">"Tillader, at en medfølgende app kan starte tjenester i forgrunden via tilladelser til tjenester i baggrunden."</string>
<string name="mic_access_on_toast" msgid="2666925317663845156">"Mikrofonen er tilgængelig"</string>
<string name="mic_access_off_toast" msgid="8111040892954242437">"Mikrofonen er blokeret"</string>
- <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Dobbeltskærm"</string>
- <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Dobbeltskærm er aktiveret"</string>
+ <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Dual Screen"</string>
+ <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Dual Screen er aktiveret"</string>
<string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g> bruger begge skærme til at vise indhold"</string>
<string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"Enheden er for varm"</string>
- <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"Dobbeltskærm er ikke tilgængelig, fordi din telefon er for varm"</string>
+ <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"Dual Screen er ikke tilgængelig, fordi din telefon er for varm"</string>
<string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"Dual Screen er ikke tilgængelig"</string>
<string name="concurrent_display_notification_power_save_content" msgid="2198116070583851493">"Dual Screen er ikke tilgængelig, fordi Batterisparefunktion er aktiveret. Du kan deaktivere dette i Indstillinger."</string>
<string name="device_state_notification_settings_button" msgid="691937505741872749">"Gå til Indstillinger"</string>
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index 676f744..7b3d76b 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Android-System"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Zum privaten Profil wechseln"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"Zum Arbeitsprofil wechseln"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"Zum privaten Profil in <xliff:g id="APP_NAME">%1$s</xliff:g> wechseln"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"Zum Arbeitsprofil in <xliff:g id="APP_NAME">%1$s</xliff:g> wechseln"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Kontakte"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"auf deine Kontakte zugreifen"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Standort"</string>
@@ -503,8 +505,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"Ermöglicht der App, den Vibrationsalarm zu steuern"</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"Ermöglicht der App, auf den Vibrationsstatus zuzugreifen."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"Telefonnummern direkt anrufen"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"Ermöglicht der App, ohne dein Zutun Telefonnummern zu wählen. Das kann zu unerwarteten Anrufen bzw. Kosten führen. Beachte, dass die App keine Notrufnummer anrufen darf. Es gibt schädliche Apps, die Kosten verursachen können, weil sie eigenmächtig Anrufe starten, oder die bestimmte Anbietercodes wählen, woraufhin eingehende Anrufe automatisch an eine andere Nummer weitergeleitet werden."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"Zugriff auf IMS-Anrufdienst"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Ermöglicht der App die Verwendung des IMS-Dienstes zum Tätigen von Anrufen ohne Nutzereingriffe"</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"Telefonstatus und Identität abrufen"</string>
@@ -685,7 +686,7 @@
<string name="face_acquired_too_right" msgid="6245286514593540859">"Bewege das Smartphone nach links"</string>
<string name="face_acquired_too_left" msgid="9201762240918405486">"Bewege das Smartphone nach rechts"</string>
<string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Bitte sieh direkt auf dein Gerät."</string>
- <string name="face_acquired_not_detected" msgid="1057966913397548150">"Dein Gesicht wurde nicht erkannt. Halte dein Smartphone auf Augenhöhe."</string>
+ <string name="face_acquired_not_detected" msgid="1057966913397548150">"Gesicht nicht erkannt. Smartphone auf Augenhöhe halten."</string>
<string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Zu viel Unruhe. Halte das Smartphone ruhig."</string>
<string name="face_acquired_recalibrate" msgid="8724013080976469746">"Bitte registriere dein Gesicht noch einmal."</string>
<string name="face_acquired_too_different" msgid="2520389515612972889">"Gesicht nicht erkannt. Versuche es noch einmal."</string>
@@ -701,7 +702,7 @@
<skip />
<string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Dein Gesichtsmodell kann nicht erstellt werden. Versuche es noch einmal."</string>
<string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Dunkle Brille erkannt. Dein Gesicht muss vollständig sichtbar sein."</string>
- <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Dein Gesicht ist bedeckt. Es muss vollständig sichtbar sein."</string>
+ <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Gesicht ist bedeckt. Es muss vollständig sichtbar sein."</string>
<string-array name="face_acquired_vendor">
</string-array>
<string name="face_error_hw_not_available" msgid="5085202213036026288">"Gesicht nicht erkannt. Hardware nicht verfügbar."</string>
@@ -2159,10 +2160,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Diese Art von Inhalt kann nicht mit geschäftlichen Apps geöffnet werden"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Diese Art von Inhalt kann nicht über private Apps geteilt werden"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Diese Art von Inhalt kann nicht mit privaten Apps geöffnet werden"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Geschäftliche Apps sind pausiert"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"Nicht mehr pausieren"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Keine geschäftlichen Apps"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Keine privaten Apps"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"Private App „<xliff:g id="APP">%s</xliff:g>“ öffnen"</string>
diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml
index 2520400..2d22400 100644
--- a/core/res/res/values-el/strings.xml
+++ b/core/res/res/values-el/strings.xml
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Σύστημα Android"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Εναλλαγή σε προσωπικό προφίλ"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"Εναλλαγή σε προφίλ εργασίας"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"Μετάβαση στο προσωπικό προφίλ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"Μετάβαση στο προφίλ εργασίας <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Επαφές"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"πρόσβαση στις επαφές σας"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Τοποθεσία"</string>
@@ -503,8 +505,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"Επιτρέπει στην εφαρμογή τον έλεγχο της δόνησης."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"Επιτρέπει στην εφαρμογή να έχει πρόσβαση στην κατάσταση δόνησης."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"πραγματοποιεί απευθείας κλήση τηλεφωνικών αριθμών"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"Επιτρέπει στην εφαρμογή να καλεί αριθμούς τηλεφώνου χωρίς τη δική σας παρέμβαση. Αυτό μπορεί να οδηγήσει σε απροσδόκητες χρεώσεις ή κλήσεις. Λάβετε υπόψη ότι αυτό δεν επιτρέπει την κλήση αριθμών έκτακτης ανάγκης. Οι κακόβουλες εφαρμογές ενδέχεται να σας επιφέρουν χρεώσεις πραγματοποιώντας κλήσεις χωρίς την επιβεβαίωσή σας ή καλώντας κωδικούς εταιρείας κινητής τηλεφωνίας που προκαλούν την αυτόματη προώθηση των εισερχόμενων κλήσεων σε άλλον αριθμό."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"έχει πρόσβαση στην υπηρεσία κλήσεων της IMS"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Επιτρέπει στην εφαρμογή τη χρήση της υπηρεσίας IMS για την πραγματοποίηση κλήσεων χωρίς τη δική σας παρέμβαση."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"διαβάζει την κατάσταση και ταυτότητα τηλεφώνου"</string>
@@ -634,7 +635,7 @@
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Υπερβολικά έντονος φωτισμός"</string>
<string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Εντοπίστηκε πάτημα του κουμπιού λειτουργίας"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Δοκιμάστε να το προσαρμόσετε"</string>
- <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Αλλάζετε ελαφρώς τη θέση του δακτύλου σας κάθε φορά."</string>
+ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Αλλάζετε ελαφρώς τη θέση του δακτύλου σας κάθε φορά"</string>
<string-array name="fingerprint_acquired_vendor">
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"Δεν είναι δυνατή η αναγνώριση του δακτυλικού αποτυπώματος"</string>
@@ -2159,10 +2160,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Δεν είναι δυνατό το άνοιγμα αυτού του περιεχομένου με εφαρμογές εργασιών"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Δεν είναι δυνατή η κοινοποίηση αυτού του περιεχομένου με προσωπικές εφαρμογές"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Δεν είναι δυνατό το άνοιγμα αυτού του περιεχομένου με προσωπικές εφαρμογές"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Οι εφαρμογές εργασιών τέθηκαν σε παύση"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"Αναίρεση παύσης"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Δεν υπάρχουν εφαρμογές εργασιών"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Δεν υπάρχουν προσωπικές εφαρμογές"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"Άνοιγμα προσωπικού <xliff:g id="APP">%s</xliff:g>"</string>
diff --git a/core/res/res/values-en-rAU/strings.xml b/core/res/res/values-en-rAU/strings.xml
index bc92e09..0bd4f76 100644
--- a/core/res/res/values-en-rAU/strings.xml
+++ b/core/res/res/values-en-rAU/strings.xml
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Android System"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Switch to personal profile"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"Switch to work profile"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"Switch to personal <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"Switch to work <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Contacts"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"access your contacts"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Location"</string>
@@ -503,8 +505,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"Allows the app to control the vibrator."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"Allows the app to access the vibrator state."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"directly call phone numbers"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"Allows the app to call phone numbers without your intervention. This may result in unexpected charges or calls. Note that this doesn\'t allow the app to call emergency numbers. Malicious apps may cost you money by making calls without your confirmation, or dial carrier codes which cause incoming calls to be automatically forwarded to another number."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"access IMS call service"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Allows the app to use the IMS service to make calls without your intervention."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"read phone status and identity"</string>
@@ -2159,10 +2160,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"This content can’t be opened with work apps"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"This content can’t be shared with personal apps"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"This content can’t be opened with personal apps"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Work apps are paused"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"Unpause"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"No work apps"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"No personal apps"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"Open personal <xliff:g id="APP">%s</xliff:g>"</string>
diff --git a/core/res/res/values-en-rCA/strings.xml b/core/res/res/values-en-rCA/strings.xml
index 54484f0..291a372 100644
--- a/core/res/res/values-en-rCA/strings.xml
+++ b/core/res/res/values-en-rCA/strings.xml
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Android System"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Switch to personal profile"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"Switch to work profile"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"Switch to personal <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"Switch to work <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Contacts"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"access your contacts"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Location"</string>
diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml
index 69db8d3..8650aba 100644
--- a/core/res/res/values-en-rGB/strings.xml
+++ b/core/res/res/values-en-rGB/strings.xml
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Android System"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Switch to personal profile"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"Switch to work profile"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"Switch to personal <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"Switch to work <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Contacts"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"access your contacts"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Location"</string>
@@ -503,8 +505,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"Allows the app to control the vibrator."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"Allows the app to access the vibrator state."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"directly call phone numbers"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"Allows the app to call phone numbers without your intervention. This may result in unexpected charges or calls. Note that this doesn\'t allow the app to call emergency numbers. Malicious apps may cost you money by making calls without your confirmation, or dial carrier codes which cause incoming calls to be automatically forwarded to another number."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"access IMS call service"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Allows the app to use the IMS service to make calls without your intervention."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"read phone status and identity"</string>
@@ -2159,10 +2160,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"This content can’t be opened with work apps"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"This content can’t be shared with personal apps"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"This content can’t be opened with personal apps"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Work apps are paused"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"Unpause"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"No work apps"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"No personal apps"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"Open personal <xliff:g id="APP">%s</xliff:g>"</string>
diff --git a/core/res/res/values-en-rIN/strings.xml b/core/res/res/values-en-rIN/strings.xml
index 95cf753..0d30c69 100644
--- a/core/res/res/values-en-rIN/strings.xml
+++ b/core/res/res/values-en-rIN/strings.xml
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Android System"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Switch to personal profile"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"Switch to work profile"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"Switch to personal <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"Switch to work <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Contacts"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"access your contacts"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Location"</string>
@@ -503,8 +505,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"Allows the app to control the vibrator."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"Allows the app to access the vibrator state."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"directly call phone numbers"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"Allows the app to call phone numbers without your intervention. This may result in unexpected charges or calls. Note that this doesn\'t allow the app to call emergency numbers. Malicious apps may cost you money by making calls without your confirmation, or dial carrier codes which cause incoming calls to be automatically forwarded to another number."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"access IMS call service"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Allows the app to use the IMS service to make calls without your intervention."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"read phone status and identity"</string>
@@ -2159,10 +2160,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"This content can’t be opened with work apps"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"This content can’t be shared with personal apps"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"This content can’t be opened with personal apps"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Work apps are paused"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"Unpause"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"No work apps"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"No personal apps"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"Open personal <xliff:g id="APP">%s</xliff:g>"</string>
diff --git a/core/res/res/values-en-rXC/strings.xml b/core/res/res/values-en-rXC/strings.xml
index 8550f2e..d36df94 100644
--- a/core/res/res/values-en-rXC/strings.xml
+++ b/core/res/res/values-en-rXC/strings.xml
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Android System"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Switch to personal profile"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"Switch to work profile"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"Switch to personal <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"Switch to work <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Contacts"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"access your contacts"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Location"</string>
diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml
index 4ac6311..f9b9884 100644
--- a/core/res/res/values-es-rUS/strings.xml
+++ b/core/res/res/values-es-rUS/strings.xml
@@ -299,6 +299,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Sistema Android"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Cambiar al perfil personal"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"Cambiar al perfil de trabajo"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"Cambiar a <xliff:g id="APP_NAME">%1$s</xliff:g> (personal)"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"Cambiar a <xliff:g id="APP_NAME">%1$s</xliff:g> (trabajo)"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Contactos"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"acceder a los contactos"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Ubicación"</string>
@@ -504,8 +506,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"Permite que la aplicación controle la vibración."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"Permite que la app acceda al estado del modo de vibración."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"llamar directamente a números de teléfono"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"Permite que la app llame a números de teléfono sin tu intervención. Esta acción podría ocasionar cargos o llamadas inesperados. Ten en cuenta que no permite que la app llame a números de emergencia. Las apps maliciosas pueden generar cargos realizando llamadas sin tu confirmación o marcando códigos de operador que desvíen automáticamente las llamadas entrantes a otro número."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"acceder al servicio IMS para realizar llamadas"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Permite que la aplicación utilice el servicio IMS para hacer llamadas sin tu intervención."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"leer la identidad y el estado del dispositivo"</string>
@@ -702,7 +703,7 @@
<skip />
<string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"No se puede crear modelo de rostro. Vuelve a intentarlo."</string>
<string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Se detectaron lentes oscuros. Tu rostro debe verse completamente."</string>
- <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Se detectó que llevas mascarilla. Tu rostro debe verse completamente."</string>
+ <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Llevas mascarilla. Tu rostro debe verse completamente."</string>
<string-array name="face_acquired_vendor">
</string-array>
<string name="face_error_hw_not_available" msgid="5085202213036026288">"No se verificó el rostro. Hardware no disponible."</string>
@@ -711,8 +712,7 @@
<string name="face_error_canceled" msgid="2164434737103802131">"Se canceló el reconocimiento facial."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"El usuario canceló Desbloqueo facial"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Demasiados intentos. Inténtalo de nuevo más tarde."</string>
- <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
- <skip />
+ <string name="face_error_lockout_permanent" msgid="8533257333130473422">"Demasiados intentos. El Desbloqueo facial no está disponible."</string>
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Demasiados intentos. En su lugar, utiliza el bloqueo de pantalla."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"No se pudo verificar el rostro. Vuelve a intentarlo."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"No configuraste Desbloqueo facial"</string>
@@ -1371,7 +1371,7 @@
<string name="usb_unsupported_audio_accessory_title" msgid="2335775548086533065">"Se detectó un accesorio de audio analógico"</string>
<string name="usb_unsupported_audio_accessory_message" msgid="1300168007129796621">"El dispositivo adjunto no es compatible con este teléfono. Presiona para obtener más información."</string>
<string name="adb_active_notification_title" msgid="408390247354560331">"Depuración por USB activada"</string>
- <string name="adb_active_notification_message" msgid="5617264033476778211">"Presiona para desactivar"</string>
+ <string name="adb_active_notification_message" msgid="5617264033476778211">"Presiona para desactivarla"</string>
<string name="adb_active_notification_message" product="tv" msgid="6624498401272780855">"Seleccionar para desactivar la depuración por USB"</string>
<string name="adbwifi_active_notification_title" msgid="6147343659168302473">"Se conectó la depuración inalámbrica"</string>
<string name="adbwifi_active_notification_message" msgid="930987922852867972">"Presiona para desactivar la depuración inalámbrica"</string>
@@ -2161,16 +2161,12 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"No se puede abrir este contenido con apps de trabajo"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"No se pueden usar apps personales para compartir este contenido"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"No se puede abrir este contenido con apps personales"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Se pausaron las apps de trabajo"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"Reanudar"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"El contenido no es compatible con apps de trabajo"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"El contenido no es compatible con apps personales"</string>
- <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
- <skip />
+ <string name="miniresolver_open_in_personal" msgid="6499100403307136696">"Abrir <xliff:g id="APP">%s</xliff:g> personal"</string>
+ <string name="miniresolver_open_in_work" msgid="7138659785478630639">"Abrir <xliff:g id="APP">%s</xliff:g> de trabajo"</string>
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Usar un navegador personal"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Usar un navegador de trabajo"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN de desbloqueo del dispositivo para la red de tarjeta SIM"</string>
diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml
index 7558b7e..d7eb0fe 100644
--- a/core/res/res/values-es/strings.xml
+++ b/core/res/res/values-es/strings.xml
@@ -251,7 +251,7 @@
<string name="global_action_bug_report" msgid="5127867163044170003">"Informe de errores"</string>
<string name="global_action_logout" msgid="6093581310002476511">"Finalizar sesión"</string>
<string name="global_action_screenshot" msgid="2610053466156478564">"Captura de pantalla"</string>
- <string name="bugreport_title" msgid="8549990811777373050">"Informar error"</string>
+ <string name="bugreport_title" msgid="8549990811777373050">"Informe de errores"</string>
<string name="bugreport_message" msgid="5212529146119624326">"Se recopilará información sobre el estado actual de tu dispositivo y se enviará por correo electrónico. Pasarán unos minutos desde que empiece a generarse el informe de errores hasta que se envíe."</string>
<string name="bugreport_option_interactive_title" msgid="7968287837902871289">"Informe interactivo"</string>
<string name="bugreport_option_interactive_summary" msgid="8493795476325339542">"Usa esta opción en la mayoría de los casos. Te permite realizar un seguimiento del progreso del informe, introducir más información sobre el problema y hacer capturas de pantalla. Es posible que se omitan algunas secciones menos utilizadas y que requieran más tiempo."</string>
@@ -299,6 +299,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Sistema Android"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Cambiar al perfil personal"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"Cambiar al perfil de trabajo"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"Cambiar a <xliff:g id="APP_NAME">%1$s</xliff:g> personal"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"Cambiar a <xliff:g id="APP_NAME">%1$s</xliff:g> de trabajo"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Contactos"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"acceder a tus contactos"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Ubicación"</string>
@@ -504,8 +506,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"Permite que la aplicación controle la función de vibración."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"Permite que la aplicación acceda al ajuste de vibración."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"llamar directamente a números de teléfono"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"Permite que la aplicación llame a números de teléfono sin tu intervención, lo que puede dar lugar a llamadas o cargos inesperados. Ten en cuenta que esto no permite que la aplicación llame a números de emergencia. Las aplicaciones maliciosas pueden incurrir en gastos al hacer llamadas sin tu confirmación o marcar códigos de operador que desvían automáticamente las llamadas entrantes a otro número."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"acceder al servicio de llamadas IMS"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Permite que la aplicación utilice el servicio IMS para realizar llamadas sin tu intervención."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"consultar la identidad y el estado del teléfono"</string>
@@ -694,7 +695,7 @@
<string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Mira al teléfono de forma más directa"</string>
<string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Mira al teléfono de forma más directa"</string>
<string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Mira al teléfono de forma más directa"</string>
- <string name="face_acquired_obscured" msgid="4917643294953326639">"Retira cualquier objeto que te tape la cara."</string>
+ <string name="face_acquired_obscured" msgid="4917643294953326639">"Retira cualquier objeto que te tape la cara"</string>
<string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Limpia la parte superior de la pantalla, incluida la barra de color negro"</string>
<!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
<skip />
@@ -1392,7 +1393,7 @@
<string name="share_remote_bugreport_action" msgid="7630880678785123682">"COMPARTIR"</string>
<string name="decline_remote_bugreport_action" msgid="4040894777519784346">"RECHAZAR"</string>
<string name="select_input_method" msgid="3971267998568587025">"Selecciona un método de entrada"</string>
- <string name="show_ime" msgid="6406112007347443383">"Mientras el teclado físico está activo"</string>
+ <string name="show_ime" msgid="6406112007347443383">"Mantenlo en pantalla mientras el teclado físico está activo"</string>
<string name="hardware" msgid="1800597768237606953">"Mostrar teclado virtual"</string>
<string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"Configura <xliff:g id="DEVICE_NAME">%s</xliff:g>"</string>
<string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"Configura teclados físicos"</string>
@@ -2160,10 +2161,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Este contenido no se puede abrir con aplicaciones de trabajo"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Este contenido no se puede compartir con aplicaciones personales"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Este contenido no se puede abrir con aplicaciones personales"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Las aplicaciones de trabajo están en pausa"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"Reactivar"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Ninguna aplicación de trabajo"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Ninguna aplicación personal"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"Abrir <xliff:g id="APP">%s</xliff:g> en el perfil personal"</string>
@@ -2319,11 +2318,11 @@
<string name="permdesc_startForegroundServicesFromBackground" msgid="4071826571656001537">"Permite que una aplicación complementaria inicie servicios en primer plano desde el segundo plano."</string>
<string name="mic_access_on_toast" msgid="2666925317663845156">"El micrófono está disponible"</string>
<string name="mic_access_off_toast" msgid="8111040892954242437">"El micrófono está bloqueado"</string>
- <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Cámara Dual"</string>
- <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"La función Cámara Dual está activada"</string>
+ <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Dual Screen"</string>
+ <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"La función Dual Screen está activada"</string>
<string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g> está usando ambas pantallas para mostrar contenido"</string>
<string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"El dispositivo está demasiado caliente"</string>
- <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"Cámara Dual no está disponible porque el teléfono se está calentando demasiado"</string>
+ <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"Dual Screen no está disponible porque el teléfono se está calentando demasiado"</string>
<string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"Dual Screen no está disponible"</string>
<string name="concurrent_display_notification_power_save_content" msgid="2198116070583851493">"Dual Screen no está disponible porque la función Ahorro de batería está activada. Puedes desactivarla en Ajustes."</string>
<string name="device_state_notification_settings_button" msgid="691937505741872749">"Ir a Ajustes"</string>
diff --git a/core/res/res/values-et/strings.xml b/core/res/res/values-et/strings.xml
index e22fdea..87ab78a 100644
--- a/core/res/res/values-et/strings.xml
+++ b/core/res/res/values-et/strings.xml
@@ -268,7 +268,7 @@
<string name="global_action_settings" msgid="4671878836947494217">"Seaded"</string>
<string name="global_action_assist" msgid="2517047220311505805">"Abi"</string>
<string name="global_action_voice_assist" msgid="6655788068555086695">"Häälabi"</string>
- <string name="global_action_lockdown" msgid="2475471405907902963">"Lukustamine"</string>
+ <string name="global_action_lockdown" msgid="2475471405907902963">"Lukusta"</string>
<string name="status_bar_notification_info_overflow" msgid="3330152558746563475">"999+"</string>
<string name="notification_hidden_text" msgid="2835519769868187223">"Uus märguanne"</string>
<string name="notification_channel_physical_keyboard" msgid="5417306456125988096">"Füüsiline klaviatuur"</string>
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Android-süsteem"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Lülitu isiklikule profiilile"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"Lülitu tööprofiilile"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"Lülita <xliff:g id="APP_NAME">%1$s</xliff:g> isiklikule profiilile"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"Lülita <xliff:g id="APP_NAME">%1$s</xliff:g> tööprofiilile"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Kontaktid"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"juurdepääs kontaktidele"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Asukoht"</string>
@@ -503,8 +505,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"Võimaldab rakendusel juhtida vibreerimist."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"Võimaldab rakendusel juurde pääseda vibreerimise olekule."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"helista otse telefoninumbritele"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"Võimaldab rakendusel telefoninumbritele helistada ilma teie sekkumiseta. See võib kaasa tuua ootamatuid tasusid või kõnesid. Pange tähele, et see ei luba rakendusel helistada hädaabinumbritele. Pahatahtlike rakenduste tõttu võib tekkida soovimatuid kulusid, kuna need võivad teha kõnesid ilma teie kinnituseta või valida operaatori koode, mille tõttu suunatakse sissetulevad kõned automaatselt teisele numbrile."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"juurdepääs IMS-kõneteenusele"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Võimaldab rakendusel kasutada IMS-teenust kõnede tegemiseks ilma, et peaksite sekkuma."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"Telefoni oleku ja identiteedi lugemine"</string>
@@ -701,7 +702,7 @@
<skip />
<string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Teie näomudelit ei saa luua. Proovige uuesti."</string>
<string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Tuvastati tumedad prillid. Teie nägu peab olema täielikult nähtaval."</string>
- <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Tuvastati nägu kattev ese. Teie nägu peab olema täielikult nähtaval."</string>
+ <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Tuvastati näokate. Nägu peab olema täielikult nähtaval."</string>
<string-array name="face_acquired_vendor">
</string-array>
<string name="face_error_hw_not_available" msgid="5085202213036026288">"Nägu ei saa kinnitada. Riistvara pole saadaval."</string>
@@ -2159,10 +2160,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Seda sisu ei saa töörakendustega avada"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Seda sisu ei saa isiklike rakendustega jagada"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Seda sisu ei saa isiklike rakendustega avada"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Töörakendused on peatatud"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"Jätka"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Töörakendusi pole"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Isiklikke rakendusi pole"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"Ava isikliku profiili <xliff:g id="APP">%s</xliff:g>"</string>
diff --git a/core/res/res/values-eu/strings.xml b/core/res/res/values-eu/strings.xml
index 6ddd2c4..a035deb 100644
--- a/core/res/res/values-eu/strings.xml
+++ b/core/res/res/values-eu/strings.xml
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Android sistema"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Aldatu profil pertsonalera"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"Aldatu laneko profilera"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"Aldatu <xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioko profil pertsonalera"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"Aldatu <xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioko laneko profilera"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Kontaktuak"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"atzitu kontaktuak"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Kokapena"</string>
@@ -503,8 +505,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"Bibragailua kontrolatzeko baimena ematen die aplikazioei."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"Dardara-egoera erabiltzeko baimena ematen die aplikazioei."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"deitu zuzenean telefono-zenbakietara"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"Zuk ezer egin beharrik gabe, telefono-zenbakietara deitzeko baimena ematen die aplikazioei. Ondorioz, baliteke ustekabeko gastuak edo deiak eragitea. Kontuan izan aplikazioak ezingo duela deitu larrialdietarako zenbakietara. Zuk berretsi gabeko deiak eginda, asmo txarreko aplikazioek baimen hori erabil dezakete gastuak eragiteko edo operadore-kode jakin batzuk markatzeko, sarrerako deiak beste zenbaki batera automatikoki desbideratzeko asmoarekin."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"atzitu IMS dei-zerbitzua"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Zuk ezer egin beharrik gabe deiak egiteko IMS zerbitzua erabiltzeko baimena ematen die aplikazioei."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"irakurri telefonoaren egoera eta identitatea"</string>
@@ -644,7 +645,7 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Autentifikatu da aurpegia; sakatu Berretsi"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Hatz-marken hardwarea ez dago erabilgarri."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"Ezin da konfiguratu hatz-marka"</string>
- <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Gainditu egin da hatz-marka konfiguratzeko denbora-muga. Saiatu berriro."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Hatz-marka konfiguratzeko denbora-muga gainditu da. Saiatu berriro."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Hatz-markaren eragiketa bertan behera utzi da."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Erabiltzaileak bertan behera utzi du hatz-marka bidezko eragiketa."</string>
<string name="fingerprint_error_lockout" msgid="6626753679019351368">"Saiakera gehiegi egin dira. Erabili pantailaren blokeoa."</string>
@@ -1712,11 +1713,11 @@
<string name="done_accessibility_shortcut_menu_button" msgid="3668407723770815708">"Eginda"</string>
<string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Desaktibatu lasterbidea"</string>
<string name="leave_accessibility_shortcut_on" msgid="6543362062336990814">"Erabili lasterbidea"</string>
- <string name="color_inversion_feature_name" msgid="2672824491933264951">"Kolore-alderantzikatzea"</string>
+ <string name="color_inversion_feature_name" msgid="2672824491933264951">"Koloreen alderantzikatzea"</string>
<string name="color_correction_feature_name" msgid="7975133554160979214">"Koloreen zuzenketa"</string>
<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">"Audifonoak"</string>
+ <string name="hearing_aids_feature_name" msgid="1125892105105852542">"Entzumen-gailuak"</string>
<string name="accessibility_shortcut_enabling_service" msgid="5473495203759847687">"Bolumen-botoiak sakatuta eduki direnez, <xliff:g id="SERVICE_NAME">%1$s</xliff:g> aktibatu egin da."</string>
<string name="accessibility_shortcut_disabling_service" msgid="8675244165062700619">"Bolumen-botoiak sakatuta eduki direnez, <xliff:g id="SERVICE_NAME">%1$s</xliff:g> desaktibatu egin da."</string>
<string name="accessibility_shortcut_spoken_feedback" msgid="3760999147597564314">"Askatu bolumen-botoiak. <xliff:g id="SERVICE_NAME">%1$s</xliff:g> aktibatzeko, eduki sakatuta berriro bi bolumen-botoiak hiru segundoz."</string>
@@ -2159,10 +2160,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Eduki hau ezin da laneko aplikazioekin ireki"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Eduki hau ezin da aplikazio pertsonalekin partekatu"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Eduki hau ezin da aplikazio pertsonalekin ireki"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Pausatuta daude laneko aplikazioak"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"Berraktibatu"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Ez dago laneko aplikaziorik"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Ez dago aplikazio pertsonalik"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"Ireki <xliff:g id="APP">%s</xliff:g> pertsonala"</string>
diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml
index 21ed614..2393132 100644
--- a/core/res/res/values-fa/strings.xml
+++ b/core/res/res/values-fa/strings.xml
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"سیستم Android"</string>
<string name="user_owner_label" msgid="8628726904184471211">"جابهجا شدن به نمایه شخصی"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"رفتن به نمایه کاری"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"رفتن به نمایه شخصی <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"رفتن به نمایه کاری <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"مخاطبین"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"دسترسی به مخاطبین شما"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"مکان"</string>
@@ -503,8 +505,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"به برنامه اجازه میدهد تا لرزاننده را کنترل کند."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"به برنامه اجازه میدهد تا به وضعیت لرزاننده دسترسی داشته باشد."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"تماس مستقیم با شماره تلفنها"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"به این برنامه اجازه میدهد بدون دخالت شما با شمارههای تلفن تماس بگیرد. این کار ممکن است باعث تماسها یا کسر هزینههای غیرمنتظره شود. توجه داشته باشید این کار به برنامه اجازه نمیدهد با شمارههای تلفن اضطراری تماس بگیرد. برنامههای مخرب ممکن است با برقراری تماس بدون تأیید شما، یا شمارهگیری کدهای شرکت مخابراتی که باعث میشود تماسهای ورودی بهطور خودکار به شماره دیگری هدایت شود، برای شما هزینههایی بهبار آورد."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"دسترسی به سرویس تماس IMS"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"به برنامه اجازه میدهد از سرویس IMS برای برقراری تماسها بدون دخالت شما استفاده کند."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"خواندن وضعیت تلفن و شناسه"</string>
@@ -644,7 +645,7 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"چهره اصالتسنجی شد، لطفاً تأیید را فشار دهید"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"سختافزار اثرانگشت در دسترس نیست."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"اثر انگشت راهاندازی نشد"</string>
- <string name="fingerprint_error_timeout" msgid="7361192266621252164">"مهلت راهاندازی اثر انگشت بهپایان رسید. دوباره امتحان کنید."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"مهلت تنظیم اثر انگشت بهپایان رسید. دوباره امتحان کنید."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"عملکرد اثر انگشت لغو شد."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"کاربر عملیات اثر انگشت را لغو کرد"</string>
<string name="fingerprint_error_lockout" msgid="6626753679019351368">"تلاشها از حد مجاز بیشتر شده است. بهجای آن از قفل صفحه استفاده کنید."</string>
@@ -2159,10 +2160,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"نمیتوان این محتوا را با برنامههای کاری باز کرد"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"نمیتوان این محتوا را با برنامههای شخصی همرسانی کرد"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"نمیتوان این محتوا را با برنامههای شخصی باز کرد"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"برنامههای کاری موقتاً متوقف شده است"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"ازسرگیری"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"برنامه کاریای وجود ندارد"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"برنامه شخصیای وجود ندارد"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"باز کردن <xliff:g id="APP">%s</xliff:g> شخصی"</string>
@@ -2320,7 +2319,7 @@
<string name="mic_access_off_toast" msgid="8111040892954242437">"میکروفون مسدود شد"</string>
<string name="concurrent_display_notification_name" msgid="1526911253558311131">"صفحه دوتایی"</string>
<string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"«صفحه دوتایی» روشن است"</string>
- <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g> از هر دو نمایشگر برای نمایش محتوا استفاده میکند"</string>
+ <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g> از هر دو نمایشگر برای نمایش محتوا استفاده میکند"</string>
<string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"دستگاه بیشازحد گرم شده است"</string>
<string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"«صفحه دوتایی» دردسترس نیست زیرا تلفن بیشازحد گرم شده است"</string>
<string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"Dual Screen دردسترس نیست"</string>
diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml
index 0695d12..bd49057 100644
--- a/core/res/res/values-fi/strings.xml
+++ b/core/res/res/values-fi/strings.xml
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Android-järjestelmä"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Vaihda henkilökohtaiseen profiiliin"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"Vaihda työprofiiliin"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"Siirry henkilökohtaiseen profiiliin: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"Siirry työprofiiliin: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Yhteystiedot"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"pääsy yhteystietoihin"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Sijainti"</string>
@@ -503,8 +505,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"Antaa sovelluksen hallita värinää."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"Sallii sovelluksen käyttää värinätilaa."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"soittaa puhelinnumeroihin suoraan"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"Sallii sovelluksen soittaa puhelinnumeroihin ilman toimintaasi. Tämä voi johtaa odottamattomiin veloituksiin tai puheluihin. Huomaa, että tämä lupa ei anna sovelluksen soittaa hätänumeroihin. Haitalliset sovellukset voivat aiheuttaa rahallisia kuluja soittamalla puheluja ilman vahvistustasi tai käyttämällä operaattorikoodeja, joilla saapuvat puhelut siirretään automaattisesti toiseen numeroon."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"pikaviestipalvelun puhelukäyttöoikeus"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Antaa sovelluksen soittaa puheluita pikaviestipalvelun avulla ilman käyttäjän toimia."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"lue puhelimen tila ja identiteetti"</string>
@@ -628,7 +629,7 @@
<string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Sormenjälkeä ei voi tunnistaa. Yritä uudelleen."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Puhdista sormenjälkitunnistin ja yritä uudelleen"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Puhdista anturi ja yritä uudelleen"</string>
- <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Paina anturia voimakkaasti"</string>
+ <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Paina tunnistinta voimakkaasti"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Liikutit sormea liian hitaasti. Yritä uudelleen."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Kokeile toista sormenjälkeä"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Liian kirkas"</string>
@@ -693,7 +694,7 @@
<string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Katso suoremmin puhelimeen"</string>
<string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Katso suoremmin puhelimeen"</string>
<string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Katso suoremmin puhelimeen"</string>
- <string name="face_acquired_obscured" msgid="4917643294953326639">"Poista esteet kasvojesi edestä."</string>
+ <string name="face_acquired_obscured" msgid="4917643294953326639">"Poista esteet kasvojesi edestä"</string>
<string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Puhdista näytön yläreuna, mukaan lukien musta palkki"</string>
<!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
<skip />
@@ -2159,10 +2160,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Tätä sisältöä ei voi avata työsovelluksilla"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Tätä sisältöä ei voi jakaa henkilökohtaisilla sovelluksilla"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Tätä sisältöä ei voi avata henkilökohtaisilla sovelluksilla"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Työsovellukset on keskeytetty"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"Jatka"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Ei työsovelluksia"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Ei henkilökohtaisia sovelluksia"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"Avaa henkilökohtainen sovellus (<xliff:g id="APP">%s</xliff:g>)"</string>
diff --git a/core/res/res/values-fr-rCA/strings.xml b/core/res/res/values-fr-rCA/strings.xml
index 5296fb2..76d884b 100644
--- a/core/res/res/values-fr-rCA/strings.xml
+++ b/core/res/res/values-fr-rCA/strings.xml
@@ -299,6 +299,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Système Android"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Passer au profil personnel"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"Passer au profil professionnel"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"Passer à <xliff:g id="APP_NAME">%1$s</xliff:g> dans le profil personnel"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"Passer à <xliff:g id="APP_NAME">%1$s</xliff:g> dans le profil professionnel"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Contacts"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"accéder à vos contacts"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Localisation"</string>
@@ -702,7 +704,7 @@
<skip />
<string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Impossible de créer votre modèle facial. Réessayez."</string>
<string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Lunettes sombres détectées. Votre visage doit être entièrement visible."</string>
- <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Couvre-visage détecté. Votre visage doit être entièrement visible."</string>
+ <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Couvre-visage détecté. Montrez votre visage entier."</string>
<string-array name="face_acquired_vendor">
</string-array>
<string name="face_error_hw_not_available" msgid="5085202213036026288">"Imposs. de vérif. visage. Matériel non accessible."</string>
@@ -711,8 +713,7 @@
<string name="face_error_canceled" msgid="2164434737103802131">"Opération de reconnaissance du visage annulée."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"Le déverrouillage par reconnaissance faciale a été annulé"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Trop de tentatives. Veuillez réessayer plus tard."</string>
- <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
- <skip />
+ <string name="face_error_lockout_permanent" msgid="8533257333130473422">"Trop de tentatives. Le déverrouillage par reconnaissance faciale est inaccessible."</string>
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Trop de tentatives. Entrez plutôt le verrouillage de l\'écran."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"Impossible de vérifier le visage. Réessayez."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"Déverrouillage par reconnaissance faciale non configuré"</string>
@@ -1730,7 +1731,7 @@
<string name="accessibility_gesture_3finger_instructional_text" msgid="3425123684990193765">"Pour basculer entre les fonctionnalités, balayez l\'écran vers le haut avec trois doigts et maintenez-les-y."</string>
<string name="accessibility_magnification_chooser_text" msgid="1502075582164931596">"Agrandissement"</string>
<string name="user_switched" msgid="7249833311585228097">"Utilisateur actuel : <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="user_switching_message" msgid="1912993630661332336">"Passage au profil : <xliff:g id="NAME">%1$s</xliff:g>…"</string>
+ <string name="user_switching_message" msgid="1912993630661332336">"Passage au profil : <xliff:g id="NAME">%1$s</xliff:g> en cours…"</string>
<string name="user_logging_out_message" msgid="7216437629179710359">"Déconnexion de <xliff:g id="NAME">%1$s</xliff:g> en cours..."</string>
<string name="owner_name" msgid="8713560351570795743">"Propriétaire"</string>
<string name="guest_name" msgid="8502103277839834324">"Invité"</string>
@@ -2167,10 +2168,8 @@
<skip />
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Aucune application professionnelle"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Aucune application personnelle"</string>
- <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
- <skip />
+ <string name="miniresolver_open_in_personal" msgid="6499100403307136696">"Ouvrir <xliff:g id="APP">%s</xliff:g> dans le profil personnel"</string>
+ <string name="miniresolver_open_in_work" msgid="7138659785478630639">"Ouvrir <xliff:g id="APP">%s</xliff:g> dans le profil professionnel"</string>
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Utiliser le navigateur du profil personnel"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Utiliser le navigateur du profil professionnel"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"NIP de déverrouillage du réseau associé au module SIM"</string>
diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml
index 1da7374..058e780 100644
--- a/core/res/res/values-fr/strings.xml
+++ b/core/res/res/values-fr/strings.xml
@@ -299,6 +299,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Système Android"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Passer au profil personnel"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"Passer au profil pro"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"Passer au <xliff:g id="APP_NAME">%1$s</xliff:g> personnel"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"Passer au <xliff:g id="APP_NAME">%1$s</xliff:g> professionnel"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Contacts"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"accéder à vos contacts"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Position"</string>
@@ -504,8 +506,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"Permet à l\'application de contrôler le vibreur."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"Permet à l\'application d\'accéder à l\'état du vibreur."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"appeler directement les numéros de téléphone"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"Permet à l\'appli de composer des numéros de téléphone sans votre intervention. Cela peut entraîner des frais ou des appels inattendus. Notez que cette autorisation ne permet pas à l\'appli d\'appeler des numéros d\'urgence. Les applis malveillantes peuvent engendrer des frais en passant des appels sans votre confirmation ou en composant des codes d\'opérateur qui transfèrent automatiquement des appels entrants vers un autre numéro."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"accéder au service d\'appel IMS"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Permet à l\'application d\'utiliser le service IMS pour passer des appels sans votre intervention."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"Voir l\'état et l\'identité du téléphone"</string>
@@ -681,7 +682,7 @@
<string name="face_acquired_too_dark" msgid="8539853432479385326">"Lumière insuffisante"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Éloignez le téléphone."</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Rapprochez le téléphone"</string>
- <string name="face_acquired_too_high" msgid="8278815780046368576">"Déplacez le téléphone vers le haut"</string>
+ <string name="face_acquired_too_high" msgid="8278815780046368576">"Levez le téléphone"</string>
<string name="face_acquired_too_low" msgid="4075391872960840081">"Déplacez le téléphone vers le bas"</string>
<string name="face_acquired_too_right" msgid="6245286514593540859">"Déplacez le téléphone vers la gauche"</string>
<string name="face_acquired_too_left" msgid="9201762240918405486">"Déplacez le téléphone vers la droite"</string>
@@ -1619,7 +1620,7 @@
<string name="default_audio_route_name" product="tablet" msgid="367936735632195517">"Tablette"</string>
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"Téléviseur"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Téléphone"</string>
- <string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Haut-parleurs de la station d\'accueil"</string>
+ <string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Haut-parleur de la station de recharge"</string>
<string name="default_audio_route_name_external_device" msgid="8124229858618975">"Appareil externe"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Écouteurs"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
@@ -1646,7 +1647,7 @@
<string name="kg_wrong_pattern" msgid="1342812634464179931">"Schéma incorrect."</string>
<string name="kg_wrong_password" msgid="2384677900494439426">"Mot de passe incorrect."</string>
<string name="kg_wrong_pin" msgid="3680925703673166482">"Code PIN incorrect."</string>
- <string name="kg_pattern_instructions" msgid="8366024510502517748">"Dessinez votre schéma."</string>
+ <string name="kg_pattern_instructions" msgid="8366024510502517748">"Tracez votre schéma"</string>
<string name="kg_sim_pin_instructions" msgid="6479401489471690359">"Saisissez le code PIN de la carte SIM."</string>
<string name="kg_pin_instructions" msgid="7355933174673539021">"Saisissez le code PIN."</string>
<string name="kg_password_instructions" msgid="7179782578809398050">"Saisissez votre mot de passe."</string>
@@ -2160,10 +2161,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Impossible d\'ouvrir ce contenu avec des applis professionnelles"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Impossible de partager ce contenu avec des applis personnelles"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Impossible d\'ouvrir ce contenu avec des applis personnelles"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Les applis professionnelles sont en pause"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"Réactiver"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Aucune appli professionnelle"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Aucune appli personnelle"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"Ouvrir l\'appli personnelle <xliff:g id="APP">%s</xliff:g>"</string>
@@ -2287,7 +2286,7 @@
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Activer dans les paramètres"</string>
<string name="dismiss_action" msgid="1728820550388704784">"Fermer"</string>
<string name="sensor_privacy_start_use_mic_notification_content_title" msgid="2420858361276370367">"Débloquer le micro de l\'appareil"</string>
- <string name="sensor_privacy_start_use_camera_notification_content_title" msgid="7287720213963466672">"Débloquer l\'appareil photo de l\'appareil"</string>
+ <string name="sensor_privacy_start_use_camera_notification_content_title" msgid="7287720213963466672">"Débloquer la caméra de l\'appareil"</string>
<string name="sensor_privacy_start_use_notification_content_text" msgid="7595608891015777346">"Pour <b><xliff:g id="APP">%s</xliff:g></b> et tous les services et applis"</string>
<string name="sensor_privacy_start_use_dialog_turn_on_button" msgid="7089318886628390827">"Débloquer"</string>
<string name="sensor_privacy_notification_channel_label" msgid="936036783155261349">"Confidentialité du capteur"</string>
diff --git a/core/res/res/values-gl/strings.xml b/core/res/res/values-gl/strings.xml
index 5ca9724..e70c7f1 100644
--- a/core/res/res/values-gl/strings.xml
+++ b/core/res/res/values-gl/strings.xml
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Sistema Android"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Cambiar ao perfil persoal"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"Cambiar ao perfil de traballo"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"Cambiar ao perfil persoal de <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"Cambiar ao perfil de traballo de <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Contactos"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"acceder aos teus contactos"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Localización"</string>
@@ -503,8 +505,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"Permite á aplicación controlar o vibrador."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"Permite que a aplicación acceda ao estado de vibrador"</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"chamar directamente aos números de teléfono"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"Permite que a aplicación chame a números de teléfono sen a túa intervención. En consecuencia, poderías recibir chamadas ou cargos inesperados. Ten en conta que a aplicación non poderá chamar a números de emerxencias. As aplicacións maliciosas poden facer chamadas que che ocasionen gastos sen a túa confirmación ou marcar códigos de operadores que provoquen que as chamadas entrantes se desvíen de forma automática a outro número."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"acceso ao servizo de chamadas de IMS"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Permite que a aplicación use o servizo de IMS para facer chamadas sen a túa intervención."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"ler o estado e a identidade do teléfono"</string>
@@ -685,7 +686,7 @@
<string name="face_acquired_too_right" msgid="6245286514593540859">"Move o teléfono cara á esquerda"</string>
<string name="face_acquired_too_left" msgid="9201762240918405486">"Move o teléfono cara á dereita"</string>
<string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Mira o dispositivo de forma máis directa."</string>
- <string name="face_acquired_not_detected" msgid="1057966913397548150">"A túa cara non é visible. Pon o teléfono frente ós ollos."</string>
+ <string name="face_acquired_not_detected" msgid="1057966913397548150">"Non se che ve a cara. Pon o teléfono diante dos ollos"</string>
<string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Demasiado movemento. Non movas o teléfono."</string>
<string name="face_acquired_recalibrate" msgid="8724013080976469746">"Volve rexistrar a túa cara."</string>
<string name="face_acquired_too_different" msgid="2520389515612972889">"Non se recoñeceu a cara. Téntao de novo."</string>
@@ -693,15 +694,15 @@
<string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Mira o teléfono de forma máis directa"</string>
<string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Mira o teléfono de forma máis directa"</string>
<string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Mira o teléfono de forma máis directa"</string>
- <string name="face_acquired_obscured" msgid="4917643294953326639">"Quita todo o que oculte a túa cara."</string>
+ <string name="face_acquired_obscured" msgid="4917643294953326639">"Quita todo o que oculte a túa cara"</string>
<string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Limpa a parte superior da pantalla, incluída a barra de cor negra"</string>
<!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
<skip />
<!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
<skip />
<string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Non se puido crear o modelo facial. Téntao de novo."</string>
- <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Detectáronse lentes escuras. A cara debe poder verse por completo."</string>
- <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Detectouse unha máscara. A cara debe poder verse por completo."</string>
+ <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Levas lentes escuras, pero débeseche ver toda a cara"</string>
+ <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Levas máscara, pero débeseche ver toda a cara"</string>
<string-array name="face_acquired_vendor">
</string-array>
<string name="face_error_hw_not_available" msgid="5085202213036026288">"Sen verificar a cara. Hardware non dispoñible."</string>
@@ -2159,10 +2160,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Este contido non pode abrirse con aplicacións do traballo"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Este contido non pode compartirse con aplicacións persoais"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Este contido non pode abrirse con aplicacións persoais"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Puxéronse en pausa as aplicacións do traballo"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"Reactivar"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Non hai ningunha aplicación do traballo compatible"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Non hai ningunha aplicación persoal compatible"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"Abrir <xliff:g id="APP">%s</xliff:g> no perfil persoal"</string>
@@ -2320,7 +2319,7 @@
<string name="mic_access_off_toast" msgid="8111040892954242437">"O micrófono está bloqueado"</string>
<string name="concurrent_display_notification_name" msgid="1526911253558311131">"Pantalla dual"</string>
<string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"A pantalla dual está activada"</string>
- <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"A aplicación <xliff:g id="APP_NAME">%1$s</xliff:g> está usando ambas as pantallas para mostrar contido"</string>
+ <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g> está usando ambas as pantallas para mostrar contido"</string>
<string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"O dispositivo está demasiado quente"</string>
<string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"A pantalla dual non está dispoñible porque o teléfono está quentando demasiado"</string>
<string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"Dual Screen non está dispoñible"</string>
diff --git a/core/res/res/values-gu/strings.xml b/core/res/res/values-gu/strings.xml
index aa25626..b9ba6d2 100644
--- a/core/res/res/values-gu/strings.xml
+++ b/core/res/res/values-gu/strings.xml
@@ -219,7 +219,7 @@
<string name="turn_on_radio" msgid="2961717788170634233">"વાયરલેસ ચાલુ કરો"</string>
<string name="turn_off_radio" msgid="7222573978109933360">"વાયરલેસ બંધ કરો"</string>
<string name="screen_lock" msgid="2072642720826409809">"સ્ક્રીન લૉક કરો"</string>
- <string name="power_off" msgid="4111692782492232778">"પાવર બંધ"</string>
+ <string name="power_off" msgid="4111692782492232778">"પાવર બંધ કરો"</string>
<string name="silent_mode_silent" msgid="5079789070221150912">"રિંગર બંધ"</string>
<string name="silent_mode_vibrate" msgid="8821830448369552678">"રિંગર વાઇબ્રેટ"</string>
<string name="silent_mode_ring" msgid="6039011004781526678">"રિંગર ચાલુ"</string>
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Android સિસ્ટમ"</string>
<string name="user_owner_label" msgid="8628726904184471211">"વ્યક્તિગત પ્રોફાઇલ પર સ્વિચ કરો"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"કાર્યાલયની પ્રોફાઇલ પર સ્વિચ કરો"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"વ્યક્તિગત <xliff:g id="APP_NAME">%1$s</xliff:g> પર સ્વિચ કરો"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"ઑફિસની <xliff:g id="APP_NAME">%1$s</xliff:g> પર સ્વિચ કરો"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"સંપર્કો"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"તમારા સંપર્કોને ઍક્સેસ કરવાની"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"લોકેશન"</string>
@@ -503,8 +505,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"એપ્લિકેશનને વાઇબ્રેટરને નિયંત્રિત કરવાની મંજૂરી આપે છે."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"ઍપને વાઇબ્રેટર સ્થિતિને ઍક્સેસ કરવાની મંજૂરી આપે છે."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"સીધા જ ફોન નંબર્સ પર કૉલ કરો"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"ઍપને તમારા હસ્તક્ષેપ વિના ફોન નંબર પર કૉલ કરવાની મંજૂરી આપે છે. આનું પરિણામ અનપેક્ષિત શુલ્ક અથવા કૉલ હોઈ શકે છે. નોંધ કરજો કે આનાથી ઍપને ઇમર્જન્સી નંબર પર કૉલ કરવાની મંજૂરી મળતી નથી. દુર્ભાવનાપૂર્ણ ઍપ તમારા કન્ફર્મેશન વિના કૉલ કરીને તમારા પૈસા ખર્ચી શકે છે અથવા તે મોબાઇલ ઑપરેટરના કોડ ડાયલ કરી શકે છે, જેના કારણે ઇનકમિંગ કૉલ ઑટોમૅટિક રીતે બીજા નંબર પર ફૉરવર્ડ થાય છે."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"IMS કૉલ સેવા ઍક્સેસ કરો"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"તમારા હસ્તક્ષેપ વગર કૉલ્સ કરવા માટે IMS સેવાનો ઉપયોગ કરવાની એપ્લિકેશનને મંજૂરી આપે છે."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"ફોન સ્થિતિ અને ઓળખ વાંચો"</string>
@@ -2159,10 +2160,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"આ કન્ટેન્ટ ઑફિસ માટેની ઍપ વડે ખોલી શકાતું નથી"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"આ કન્ટેન્ટ વ્યક્તિગત ઍપ સાથે શેર કરી શકાતું નથી"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"આ કન્ટેન્ટ વ્યક્તિગત ઍપ વડે ખોલી શકાતું નથી"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"ઑફિસ માટેની ઍપ થોભાવવામાં આવી છે"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"ફરી ચાલુ કરો"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"કોઈ ઑફિસ માટેની ઍપ સપોર્ટ કરતી નથી"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"કોઈ વ્યક્તિગત ઍપ સપોર્ટ કરતી નથી"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"વ્યક્તિગત પ્રોફાઇલવાળી <xliff:g id="APP">%s</xliff:g> ઍપ ખોલો"</string>
@@ -2318,8 +2317,8 @@
<string name="permdesc_startForegroundServicesFromBackground" msgid="4071826571656001537">"સાથી ઍપને બૅકગ્રાઉન્ડમાંથી ફૉરગ્રાઉન્ડ સેવાઓ શરૂ કરવાની મંજૂરી આપે છે."</string>
<string name="mic_access_on_toast" msgid="2666925317663845156">"માઇક્રોફોન ઉપલબ્ધ છે"</string>
<string name="mic_access_off_toast" msgid="8111040892954242437">"માઇક્રોફોનને બ્લૉક કરવામાં આવ્યો છે"</string>
- <string name="concurrent_display_notification_name" msgid="1526911253558311131">"ડ્યૂઅલ સ્ક્રીન"</string>
- <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"ડ્યૂઅલ સ્ક્રીન ચાલુ છે"</string>
+ <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Dual screen"</string>
+ <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Dual screen ચાલુ છે"</string>
<string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"કન્ટેન્ટ બતાવવા માટે <xliff:g id="APP_NAME">%1$s</xliff:g> બન્ને ડિસ્પ્લેનો ઉપયોગ કરી રહી છે"</string>
<string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"ડિવાઇસ ખૂબ જ ગરમ છે"</string>
<string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"ડ્યૂઅલ સ્ક્રીન અનુપલબ્ધ છે કારણ કે તમારો ફોન ખૂબ જ ગરમ થઈ રહ્યો છે"</string>
diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml
index f4f77a9..a992c6e 100644
--- a/core/res/res/values-hi/strings.xml
+++ b/core/res/res/values-hi/strings.xml
@@ -243,7 +243,7 @@
<string name="global_actions" product="tv" msgid="3871763739487450369">"Android TV डिवाइस में फ़ोन से जुड़े विकल्प"</string>
<string name="global_actions" product="default" msgid="6410072189971495460">"फ़ोन विकल्प"</string>
<string name="global_action_lock" msgid="6949357274257655383">"स्क्रीन लॉक"</string>
- <string name="global_action_power_off" msgid="4404936470711393203">"पावर बंद करें"</string>
+ <string name="global_action_power_off" msgid="4404936470711393203">"बंद करें"</string>
<string name="global_action_power_options" msgid="1185286119330160073">"पावर"</string>
<string name="global_action_restart" msgid="4678451019561687074">"रीस्टार्ट करें"</string>
<string name="global_action_emergency" msgid="1387617624177105088">"आपातकालीन"</string>
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Android सिस्टम"</string>
<string name="user_owner_label" msgid="8628726904184471211">"प्रोफ़ाइल बदलकर निजी प्रोफ़ाइल पर जाएं"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"प्रोफ़ाइल बदलकर वर्क प्रोफ़ाइल पर जाएं"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"<xliff:g id="APP_NAME">%1$s</xliff:g> की निजी प्रोफ़ाइल पर जाएं"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"<xliff:g id="APP_NAME">%1$s</xliff:g> की वर्क प्रोफ़ाइल पर जाएं"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"संपर्क"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"अपने संपर्कों को ऐक्सेस करें"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"जगह की जानकारी"</string>
@@ -503,8 +505,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"ऐप्स को कंपनकर्ता नियंत्रित करने देता है."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"इससे ऐप्लिकेशन, डिवाइस का वाइब्रेटर ऐक्सेस कर पाएगा."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"फ़ोन नंबर पर सीधे कॉल करें"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"इससे ऐप्लिकेशन, आपकी अनुमति के बिना ही किसी के फ़ोन पर कॉल कर सकता है. इस वजह से, हो सकता है कि किसी को भी अनचाहे कॉल लग जाएं या कॉल का शुल्क कट जाए. ध्यान दें कि यह अनुमति मिलने से, ऐप्लिकेशन आपातकालीन नंबर पर कॉल नहीं कर सकता. नुकसान पहुंचाने वाले ऐप्लिकेशन, आपकी अनुमति के बिना किसी को कॉल कर सकते हैं. इस वजह से, कॉल का शुल्क कट सकता है. इसके अलावा, ये ऐप्लिकेशन, कैरियर कोड वाले नंबर डायल कर सकते हैं. इससे, आने वाले (इनकमिंग) कॉल दूसरे नंबर पर अपने-आप फ़ॉरवर्ड हो जाते हैं."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"IMS कॉल सेवा ऐक्सेस करें"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"आपके हस्तक्षेप के बिना कॉल करने के लिए, ऐप को IMS सेवा का उपयोग करने देती है."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"फ़ोन की स्थिति और पहचान पढ़ें"</string>
@@ -628,13 +629,13 @@
<string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"फ़िंगरप्रिंट की पहचान नहीं की जा सकी. फिर से कोशिश करें."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"फ़िंगरप्रिंट सेंसर को साफ़ करके फिर से कोशिश करें"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"फ़िंगरप्रिंट सेंसर को साफ़ करके फिर से कोशिश करें"</string>
- <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"सेंसर को उंगली से ज़ोर से दबाएं"</string>
+ <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"सेंसर को उंगली से दबाएं"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"उंगली बहुत धीरे चलाई गई. कृपया फिर से कोशिश करें."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"किसी दूसरे फ़िंगरप्रिंट से कोशिश करें"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"बहुत रोशनी है"</string>
<string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"पावर बटन दबाया गया"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"सेंसर पर सही तरीके से उंगली लगाने की कोशिश करें"</string>
- <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"फ़िंगरप्रिंट सेट अप करते समय, अपनी उंगली को हर बार थोड़ी अलग स्थिति में रखें"</string>
+ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"फ़िंगरप्रिंट सेट अप करते समय, अपनी उंगली को हर बार एक अलग ऐंगल में रखें"</string>
<string-array name="fingerprint_acquired_vendor">
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"फ़िंगरप्रिंट की पहचान नहीं हो पाई"</string>
@@ -682,10 +683,10 @@
<string name="face_acquired_too_far" msgid="2922278214231064859">"फ़ोन को नज़दीक लाएं"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"फ़ोन को थोड़ा और ऊपर ले जाएं"</string>
<string name="face_acquired_too_low" msgid="4075391872960840081">"फ़ोन को थोड़ा नीचे ले जाएं"</string>
- <string name="face_acquired_too_right" msgid="6245286514593540859">"फ़ोन को अपने बाईं ओर ले जाएं"</string>
- <string name="face_acquired_too_left" msgid="9201762240918405486">"फ़ोन को अपने दाईं ओर ले जाएं"</string>
+ <string name="face_acquired_too_right" msgid="6245286514593540859">"फ़ोन को अपनी बाईं ओर ले जाएं"</string>
+ <string name="face_acquired_too_left" msgid="9201762240918405486">"फ़ोन को अपनी दाईं ओर ले जाएं"</string>
<string name="face_acquired_poor_gaze" msgid="4427153558773628020">"कृपया अपने डिवाइस की तरफ़ सीधे देखें."</string>
- <string name="face_acquired_not_detected" msgid="1057966913397548150">"आपका चेहरा नहीं दिख रहा है. फ़ोन को अपनी आंखों की सीध में पकड़कर रखें."</string>
+ <string name="face_acquired_not_detected" msgid="1057966913397548150">"आपका चेहरा नहीं दिख रहा है. फ़ोन को अपनी आंखों की सीध में रखें."</string>
<string name="face_acquired_too_much_motion" msgid="8199691445085189528">"डिवाइस बहुत ज़्यादा हिल रहा है. फ़ोन को बिना हिलाएं पकड़ें."</string>
<string name="face_acquired_recalibrate" msgid="8724013080976469746">"कृपया फिर से अपने चेहरे की पहचान कराएं."</string>
<string name="face_acquired_too_different" msgid="2520389515612972889">"चेहरे की पहचान नहीं हुई. फिर से कोशिश करें."</string>
@@ -2159,10 +2160,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"इस कॉन्टेंट को ऑफ़िस के काम से जुड़े ऐप्लिकेशन पर खोला नहीं जा सकता"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"इस कॉन्टेंट को निजी ऐप्लिकेशन का इस्तेमाल करके, शेयर नहीं किया जा सकता"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"इस कॉन्टेंट को निजी ऐप्लिकेशन पर खोला नहीं जा सकता"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"वर्क ऐप्लिकेशन बंद किए गए हैं"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"चालू करें"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"यह कॉन्टेंट, ऑफ़िस के काम से जुड़े आपके किसी भी ऐप्लिकेशन पर खोला नहीं जा सकता"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"यह कॉन्टेंट आपके किसी भी निजी ऐप्लिकेशन पर खोला नहीं जा सकता"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"निजी प्रोफ़ाइल वाला <xliff:g id="APP">%s</xliff:g> ऐप्लिकेशन खोलें"</string>
@@ -2320,7 +2319,7 @@
<string name="mic_access_off_toast" msgid="8111040892954242437">"माइक्रोफ़ोन को ब्लॉक किया गया है"</string>
<string name="concurrent_display_notification_name" msgid="1526911253558311131">"ड्यूअल स्क्रीन"</string>
<string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"ड्यूअल स्क्रीन की सुविधा चालू है"</string>
- <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g>, कॉन्टेंट दिखाने के लिए दोनों डिसप्ले का इस्तेमाल कर रहा है"</string>
+ <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g>, कॉन्टेंट दिखाने के लिए दोनों स्क्रीन का इस्तेमाल कर रहा है"</string>
<string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"आपका फ़ोन बहुत गर्म हो गया है"</string>
<string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"ड्यूअल स्क्रीन की सुविधा अभी उपलब्ध नहीं है, क्योंकि आपका फ़ोन बहुत गर्म हो रहा है"</string>
<string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"Dual Screen का इस्तेमाल नहीं किया जा सकता"</string>
diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml
index 86869fa..fe25142 100644
--- a/core/res/res/values-hr/strings.xml
+++ b/core/res/res/values-hr/strings.xml
@@ -269,7 +269,7 @@
<string name="global_action_settings" msgid="4671878836947494217">"Postavke"</string>
<string name="global_action_assist" msgid="2517047220311505805">"Pomoć"</string>
<string name="global_action_voice_assist" msgid="6655788068555086695">"Glasovna pomoć"</string>
- <string name="global_action_lockdown" msgid="2475471405907902963">"Zaključavanje"</string>
+ <string name="global_action_lockdown" msgid="2475471405907902963">"Zaključaj"</string>
<string name="status_bar_notification_info_overflow" msgid="3330152558746563475">"999+"</string>
<string name="notification_hidden_text" msgid="2835519769868187223">"Nova obavijest"</string>
<string name="notification_channel_physical_keyboard" msgid="5417306456125988096">"Fizička tipkovnica"</string>
@@ -299,6 +299,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Sustav Android"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Prijeđite na osobni profil"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"Poslovni profil"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"Prijeđite na aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g> za osobni profil"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"Prijeđite na aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g> za poslovni profil"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Kontakti"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"pristupati vašim kontaktima"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Lokacija"</string>
@@ -504,8 +506,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"Aplikaciji omogućuje nadzor nad vibratorom."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"Aplikaciji omogućuje da pristupi stanju vibracije."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"izravno pozivanje telefonskog broja"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"Aplikaciji omogućuje pozivanje telefonskih brojeva bez vaše intervencije. To može rezultirati neočekivanim terećenjima ili pozivima. Napominjemo da to ne omogućuje aplikaciji pozivanje brojeva hitnih službi. Zlonamjerne aplikacije mogu vam uzrokovati troškove pozivajući bez vaše potvrde ili birajući pozivne brojeve mobilnih operatera koji uzrokuju automatsko preusmjeravanje dolaznih poziva na drugi broj."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"pristupiti usluzi poziva izravnih poruka"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Omogućuje aplikaciji upotrebu usluge izravnih poruka za uspostavljanje poziva bez vaše intervencije."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"čitanje statusa i identiteta telefona"</string>
@@ -691,9 +692,9 @@
<string name="face_acquired_recalibrate" msgid="8724013080976469746">"Ponovo registrirajte svoje lice."</string>
<string name="face_acquired_too_different" msgid="2520389515612972889">"Prepoznavanje lica nije uspjelo. Pokušajte ponovo."</string>
<string name="face_acquired_too_similar" msgid="8882920552674125694">"Malo pomaknite glavu"</string>
- <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Gledajte izravnije prema telefonu"</string>
+ <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Gledajte ravno u telefon"</string>
<string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Gledajte ravno u telefon"</string>
- <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Gledajte izravnije prema telefonu"</string>
+ <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Gledajte ravno u telefon"</string>
<string name="face_acquired_obscured" msgid="4917643294953326639">"Uklonite sve što vam zakriva lice."</string>
<string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Očistite vrh zaslona, uključujući crnu traku"</string>
<!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
@@ -702,7 +703,7 @@
<skip />
<string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Izrada modela lica nije uspjela. Pokušajte ponovo."</string>
<string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Otkrivene su tamne naočale. Vaše lice mora biti potpuno vidljivo."</string>
- <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Otkriveno je prekrivanje lica. Vaše lice mora biti potpuno vidljivo."</string>
+ <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Otkriveno je pokrivalo za lice. Vaše lice mora biti potpuno vidljivo."</string>
<string-array name="face_acquired_vendor">
</string-array>
<string name="face_error_hw_not_available" msgid="5085202213036026288">"Lice nije potvrđeno. Hardver nije dostupan."</string>
@@ -2160,10 +2161,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Taj se sadržaj ne može otvoriti pomoću poslovnih aplikacija"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Taj se sadržaj ne može dijeliti pomoću osobnih aplikacija"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Taj se sadržaj ne može otvoriti pomoću osobnih aplikacija"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Poslovne aplikacije su pauzirane"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"Ponovno pokreni"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Poslovne aplikacije nisu dostupne"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Osobne aplikacije nisu dostupne"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"Otvorite osobnu aplikaciju <xliff:g id="APP">%s</xliff:g>"</string>
diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml
index 9a585f81..c78d5e0 100644
--- a/core/res/res/values-hu/strings.xml
+++ b/core/res/res/values-hu/strings.xml
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Android rendszer"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Váltás személyes profilra"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"Váltás munkaprofilra"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"Váltás személyes <xliff:g id="APP_NAME">%1$s</xliff:g>-profilra"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"Váltás munkahelyi <xliff:g id="APP_NAME">%1$s</xliff:g>-profilra"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Névjegyek"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"hozzáférés a névjegyekhez"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Helyadatok"</string>
@@ -503,8 +505,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"Lehetővé teszi az alkalmazás számára a rezgés vezérlését."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"Lehetővé teszi az alkalmazás számára a rezgés állapotához való hozzáférést."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"telefonszámok közvetlen hívása"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"Lehetővé teszi az alkalmazás számára, hogy az Ön közreműködése nélkül hívjon fel telefonszámokat. Ennek eredményeként váratlan terhelésekkel vagy telefonhívásokkal találkozhat. Vegye figyelembe, hogy ez nem teszi lehetővé segélyhívó számok hívását az alkalmazás számára. A rosszindulatú alkalmazások az Ön jóváhagyása nélkül kezdeményezhetnek hívásokat, így költségek merülhetnek fel. Emellett szolgáltatói kódokat tárcsázhatnak, aminek eredményeképp a bejövő hívásokat automatikusan másik számra irányítják át."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"hozzáférés az IMS-hívásszolgáltatáshoz"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Az alkalmazás az IMS-szolgáltatást használhatja híváskezdeményezéshez az Ön közbeavatkozása nélkül."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"telefonállapot és azonosító olvasása"</string>
@@ -634,7 +635,7 @@
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Túl világos"</string>
<string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Bekapcsológomb lenyomása észlelve"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Próbálja beállítani"</string>
- <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Módosítsa minden alkalommal kis mértékben ujja helyzetét."</string>
+ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Mindig tegye odébb egy kicsit az ujját"</string>
<string-array name="fingerprint_acquired_vendor">
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"Az ujjlenyomat nem ismerhető fel"</string>
@@ -2064,7 +2065,7 @@
<string name="harmful_app_warning_open_anyway" msgid="5963657791740211807">"MEGNYITÁS MÉGIS"</string>
<string name="harmful_app_warning_title" msgid="8794823880881113856">"A rendszer kártékony alkalmazást észlelt"</string>
<string name="slices_permission_request" msgid="3677129866636153406">"A(z) <xliff:g id="APP_0">%1$s</xliff:g> alkalmazás részleteket szeretne megjeleníteni a(z) <xliff:g id="APP_2">%2$s</xliff:g> alkalmazásból"</string>
- <string name="screenshot_edit" msgid="7408934887203689207">"Szerkesztés"</string>
+ <string name="screenshot_edit" msgid="7408934887203689207">"Módosítás"</string>
<string name="volume_dialog_ringer_guidance_vibrate" msgid="2055927873175228519">"A hívások és az értesítések rezegnek"</string>
<string name="volume_dialog_ringer_guidance_silent" msgid="1011246774949993783">"A hívások és az értesítések némák"</string>
<string name="notification_channel_system_changes" msgid="2462010596920209678">"Rendszermódosítások"</string>
@@ -2159,10 +2160,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Ez a tartalom nem nyitható meg munkahelyi alkalmazásokkal"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Ez a tartalom nem osztható meg személyes alkalmazásokkal"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Ez a tartalom nem nyitható meg személyes alkalmazásokkal"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"A munkahelyi alkalmazások szüneteltetve vannak"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"Szüneteltetés feloldása"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Nincs munkahelyi alkalmazás"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Nincs személyes alkalmazás"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"Személyes <xliff:g id="APP">%s</xliff:g> megnyitása"</string>
diff --git a/core/res/res/values-hy/strings.xml b/core/res/res/values-hy/strings.xml
index ea57ed4..938241d 100644
--- a/core/res/res/values-hy/strings.xml
+++ b/core/res/res/values-hy/strings.xml
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Android համակարգ"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Բացել անձնական պրոֆիլը"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"Բացել աշխատանքային պրոֆիլը"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"Անցնել անձնական <xliff:g id="APP_NAME">%1$s</xliff:g> պրոֆիլին"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"Անցնել աշխատանքային <xliff:g id="APP_NAME">%1$s</xliff:g> պրոֆիլին"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Կոնտակտներ"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"օգտագործել ձեր կոնտակտները"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Տեղորոշում"</string>
@@ -503,8 +505,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"Թույլ է տալիս հավելվածին կառավարել թրթռոցը:"</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"Հավելվածին թույլ է տալիս օգտագործել սարքի թրթռալու ռեժիմը։"</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"ուղղակիորեն զանգել հեռախոսահամարներին"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"Թույլ է տալիս հավելվածին զանգել հեռախոսահամարների՝ առանց ձեր միջամտության։ Սա կարող է հանգեցնել անկանխատեսելի գանձումների կամ զանգերի: Նկատի ունեցեք, որ սա թույլ չի տալիս հավելվածին զանգել արտակարգ իրավիճակների համարներին: Վնասակար հավելվածները կարող են գումար կորզել՝ կատարելով զանգեր առանց ձեր հաստատման կամ հավաքել համարներ, որոնց արդյունքում ստանում եք մուտքային զանգեր՝ այլ համարի ավտոմատ փոխանցելու համար։"</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"օգտվել IMS զանգերի ծառայությունից"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Թույլ է տալիս հավելվածին IMS ծառայության միջոցով կատարել զանգեր՝ առանց ձեր միջամտության:"</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"կարդալ հեռախոսի կարգավիճակը և ինքնությունը"</string>
@@ -634,7 +635,7 @@
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Շատ լուսավոր է"</string>
<string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Հայտնաբերվել է սնուցման կոճակի սեղմում"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Փորձեք փոխել մատի դիրքը"</string>
- <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Ամեն անգամ թեթևակի փոխեք մատի դիրքը"</string>
+ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Ամեն անգամ թեթևակի փոխեք մատի դիրքը"</string>
<string-array name="fingerprint_acquired_vendor">
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"Մատնահետքը չի ճանաչվել"</string>
@@ -685,7 +686,7 @@
<string name="face_acquired_too_right" msgid="6245286514593540859">"Տեղափոխեք հեռախոսը ձախ"</string>
<string name="face_acquired_too_left" msgid="9201762240918405486">"Տեղափոխեք հեռախոսը աջ"</string>
<string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Նայեք ուղիղ էկրանին։"</string>
- <string name="face_acquired_not_detected" msgid="1057966913397548150">"Դեմքը չի երևում։ Հեռախոսը պահեք աչքերի մակարդակում։"</string>
+ <string name="face_acquired_not_detected" msgid="1057966913397548150">"Դեմքը չի երևում։ Հեռախոսը պահեք աչքերի մակարդակում։"</string>
<string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Շատ եք շարժում։ Հեռախոսն անշարժ պահեք։"</string>
<string name="face_acquired_recalibrate" msgid="8724013080976469746">"Նորից փորձեք։"</string>
<string name="face_acquired_too_different" msgid="2520389515612972889">"Դեմքը չի հաջողվում ճանաչել։ Նորից փորձեք։"</string>
@@ -701,7 +702,7 @@
<skip />
<string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Չհաջողվեց ստեղծել ձեր դեմքի մոդելը։ Նորից փորձեք։"</string>
<string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Հանեք ակնոցը։ Ձեր դեմքը պետք է ամբողջովին տեսանելի լինի։"</string>
- <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Դեմքի մի մասը ծածկված է։ Ձեր դեմքը պետք է ամբողջովին տեսանելի լինի։"</string>
+ <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Դեմքի մի մասը ծածկված է։ Ձեր դեմքը պետք է ամբողջովին տեսանելի լինի։"</string>
<string-array name="face_acquired_vendor">
</string-array>
<string name="face_error_hw_not_available" msgid="5085202213036026288">"Չհաջողվեց հաստատել դեմքը։ Սարքն անհասանելի է:"</string>
@@ -1728,7 +1729,7 @@
<string name="accessibility_gesture_3finger_instructional_text" msgid="3425123684990193765">"Մի գործառույթից մյուսին անցնելու համար երեք մատը սահեցրեք վերև և պահեք։"</string>
<string name="accessibility_magnification_chooser_text" msgid="1502075582164931596">"Խոշորացում"</string>
<string name="user_switched" msgid="7249833311585228097">"Ներկայիս օգտատերը <xliff:g id="NAME">%1$s</xliff:g>:"</string>
- <string name="user_switching_message" msgid="1912993630661332336">"Անցում հետևյալ պրոֆիլին՝ <xliff:g id="NAME">%1$s</xliff:g>..."</string>
+ <string name="user_switching_message" msgid="1912993630661332336">"Անցում <xliff:g id="NAME">%1$s</xliff:g> պրոֆիլին..."</string>
<string name="user_logging_out_message" msgid="7216437629179710359">"Ելք <xliff:g id="NAME">%1$s</xliff:g>-ից…"</string>
<string name="owner_name" msgid="8713560351570795743">"Սեփականատեր"</string>
<string name="guest_name" msgid="8502103277839834324">"Հյուր"</string>
@@ -2159,10 +2160,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Այս բովանդակությունը հնարավոր չէ բացել աշխատանքային հավելվածներով"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Այս բովանդակությունը հնարավոր չէ ուղարկել անձնական հավելվածներով"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Այս բովանդակությունը հնարավոր չէ բացել անձնական հավելվածներով"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Աշխատանքային հավելվածները դադարեցված են"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"Վերսկսել"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Աշխատանքային հավելվածներ չկան"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Անձնական հավելվածներ չկան"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"Անձնական <xliff:g id="APP">%s</xliff:g> պրոֆիլի բացում"</string>
@@ -2320,7 +2319,7 @@
<string name="mic_access_off_toast" msgid="8111040892954242437">"Խոսափողն արգելափակված է"</string>
<string name="concurrent_display_notification_name" msgid="1526911253558311131">"Կրկնակի էկրան"</string>
<string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Կրկնակի էկրանը միացված է"</string>
- <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածը երկու էկրաններն էլ օգտագործում է բովանդակություն ցուցադրելու համար"</string>
+ <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածն օգտագործում է երկու էկրանները"</string>
<string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"Սարքը գերտաքացել է"</string>
<string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"Կրկնակի էկրանն անհասանելի է, քանի որ ձեր հեռախոսը գերտաքանում է"</string>
<string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"Dual Screen-ը հասանելի չէ"</string>
diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml
index 568f12a..5400e05 100644
--- a/core/res/res/values-in/strings.xml
+++ b/core/res/res/values-in/strings.xml
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Sistem Android"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Beralih ke profil pribadi"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"Beralih ke profil kerja"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"Beralih ke <xliff:g id="APP_NAME">%1$s</xliff:g> pribadi"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"Beralih ke <xliff:g id="APP_NAME">%1$s</xliff:g> kerja"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Kontak"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"mengakses kontak"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Lokasi"</string>
@@ -503,8 +505,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"Mengizinkan aplikasi untuk mengendalikan vibrator."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"Mengizinkan aplikasi untuk mengakses status vibrator."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"panggil nomor telepon secara langsung"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"Mengizinkan aplikasi memanggil nomor telepon tanpa intervensi Anda. Hal ini dapat mengakibatkan adanya biaya atau panggilan yang tidak terduga. Perhatikan bahwa hal ini tidak memungkinkan aplikasi menghubungi nomor darurat. Anda dapat dikenai biaya oleh aplikasi berbahaya dengan melakukan panggilan tanpa konfirmasi dari Anda, atau menghubungi kode operator yang menyebabkan panggilan masuk dialihkan secara otomatis ke nomor lain."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"akses layanan panggilan IMS"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Memungkinkan aplikasi menggunakan layanan IMS untuk melakukan panggilan tanpa campur tangan Anda."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"baca identitas dan status ponsel"</string>
@@ -680,10 +681,10 @@
<string name="face_acquired_too_dark" msgid="8539853432479385326">"Cahaya tidak cukup"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Jauhkan ponsel"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Dekatkan ponsel"</string>
- <string name="face_acquired_too_high" msgid="8278815780046368576">"Gerakkan ponsel ke atas"</string>
- <string name="face_acquired_too_low" msgid="4075391872960840081">"Gerakkan ponsel ke bawah"</string>
- <string name="face_acquired_too_right" msgid="6245286514593540859">"Gerakkan ponsel ke kiri Anda"</string>
- <string name="face_acquired_too_left" msgid="9201762240918405486">"Gerakkan ponsel ke kanan Anda"</string>
+ <string name="face_acquired_too_high" msgid="8278815780046368576">"Geser ponsel ke atas"</string>
+ <string name="face_acquired_too_low" msgid="4075391872960840081">"Geser ponsel ke bawah"</string>
+ <string name="face_acquired_too_right" msgid="6245286514593540859">"Geser ponsel ke kiri"</string>
+ <string name="face_acquired_too_left" msgid="9201762240918405486">"Geser ponsel ke kanan"</string>
<string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Lihat langsung ke perangkat."</string>
<string name="face_acquired_not_detected" msgid="1057966913397548150">"Wajah tidak terlihat. Pegang ponsel sejajar mata."</string>
<string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Terlalu banyak gerakan. Stabilkan ponsel."</string>
@@ -693,7 +694,7 @@
<string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Lihat lebih lurus ke arah ponsel"</string>
<string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Lihat lebih lurus ke arah ponsel"</string>
<string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Lihat lebih lurus ke arah ponsel"</string>
- <string name="face_acquired_obscured" msgid="4917643294953326639">"Singkirkan apa saja yang menutupi wajah Anda."</string>
+ <string name="face_acquired_obscured" msgid="4917643294953326639">"Singkirkan semua yang menutupi wajah."</string>
<string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Bersihkan bagian atas layar, termasuk kotak hitam"</string>
<!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
<skip />
@@ -701,7 +702,7 @@
<skip />
<string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Tidak dapat membuat model wajah Anda. Coba lagi."</string>
<string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Kacamata hitam terdeteksi. Wajah Anda harus terlihat sepenuhnya."</string>
- <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Penutup wajah terdeteksi. Wajah Anda harus terlihat sepenuhnya."</string>
+ <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Penutup wajah terdeteksi. Wajah harus terlihat sepenuhnya."</string>
<string-array name="face_acquired_vendor">
</string-array>
<string name="face_error_hw_not_available" msgid="5085202213036026288">"Tidak dapat memverifikasi wajah. Hardware tidak tersedia."</string>
@@ -2159,10 +2160,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Konten ini tidak dapat dibuka dengan aplikasi kerja"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Konten ini tidak dapat dibagikan dengan aplikasi pribadi"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Konten ini tidak dapat dibuka dengan aplikasi pribadi"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Aplikasi kerja dijeda"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"Batalkan jeda"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Tidak ada aplikasi kerja"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Tidak ada aplikasi pribadi"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"Buka <xliff:g id="APP">%s</xliff:g> pribadi"</string>
@@ -2319,7 +2318,7 @@
<string name="mic_access_on_toast" msgid="2666925317663845156">"Mikrofon tersedia"</string>
<string name="mic_access_off_toast" msgid="8111040892954242437">"Mikrofon diblokir"</string>
<string name="concurrent_display_notification_name" msgid="1526911253558311131">"Layar ganda"</string>
- <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Layar ganda aktif"</string>
+ <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Dual screen aktif"</string>
<string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g> menggunakan kedua layar untuk menampilkan konten"</string>
<string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"Suhu perangkat terlalu panas"</string>
<string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"Layar ganda tidak tersedia karena suhu ponsel terlalu panas"</string>
diff --git a/core/res/res/values-is/strings.xml b/core/res/res/values-is/strings.xml
index eb34c84..3ddd7ac 100644
--- a/core/res/res/values-is/strings.xml
+++ b/core/res/res/values-is/strings.xml
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Android kerfið"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Skipta yfir í eigið snið"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"Skipta yfir í vinnusnið"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"Skipta yfir í eigið snið <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"Skipta yfir í vinnusnið <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Tengiliðir"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"fá aðgang að tengiliðunum þínum"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Staðsetning"</string>
@@ -503,8 +505,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"Leyfir forriti að stjórna titraranum."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"Veitir forritinu aðgang að stöðu titrings."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"hringja beint í símanúmer"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"Leyfir forriti að hringja í símanúmer án aðgerðar frá þér. Þetta getur haft í för með sér óvænt gjöld eða símtöl. Athugaðu að þetta heimilar forriti ekki að hringja í neyðarnúmer. Skaðleg forrit gætu kostað þig peninga með því að hringja án staðfestingar frá þér eða hringja í kóða símafyrirtækis sem verður til þess að móttekin símtöl verði framsend sjálfkrafa í annað númer."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"fá aðgang að IMS-símtalsþjónustu"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Leyfir forriti að nota IMS-þjónustu til að hringja án inngrips frá þér."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"lesa stöðu símans og auðkenni"</string>
@@ -1696,7 +1697,7 @@
<string name="accessibility_shortcut_off" msgid="3651336255403648739">"Ekki kveikja"</string>
<string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"KVEIKT"</string>
<string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"SLÖKKT"</string>
- <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Viltu leyfa <xliff:g id="SERVICE">%1$s</xliff:g> að hafa fulla stjórn yfir tækinu þínu?"</string>
+ <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Viltu leyfa „<xliff:g id="SERVICE">%1$s</xliff:g>“ að hafa fulla stjórn yfir tækinu þínu?"</string>
<string name="accessibility_service_warning_description" msgid="291674995220940133">"Full stjórnun er viðeigandi fyrir forrit sem hjálpa þér ef þú hefur ekki aðgang, en ekki fyrir flest forrit."</string>
<string name="accessibility_service_screen_control_title" msgid="190017412626919776">"Skoða og stjórna skjá"</string>
<string name="accessibility_service_screen_control_description" msgid="6946315917771791525">"Það getur lesið allt efni á skjánum og birt efni yfir öðrum forritum."</string>
@@ -2159,10 +2160,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Ekki er hægt að opna þetta efni með vinnuforritum"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Ekki er hægt að deila þessu efni með forritum til einkanota"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Ekki er hægt að opna þetta efni með forritum til einkanota"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Hlé gert á vinnuforritum"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"Ljúka hléi"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Engin vinnuforrit"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Engin forrit til einkanota"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"Opna <xliff:g id="APP">%s</xliff:g> með einkaprófíl"</string>
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index a170c92..2feaa0e 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -299,6 +299,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Sistema Android"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Passa al profilo personale"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"Passa al profilo di lavoro"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"Passa all\'app <xliff:g id="APP_NAME">%1$s</xliff:g> personale"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"Passa all\'app <xliff:g id="APP_NAME">%1$s</xliff:g> di lavoro"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Contatti"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"Possono accedere ai contatti"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Posizione"</string>
@@ -504,8 +506,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"Consente all\'applicazione di controllare la vibrazione."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"Consente all\'app di accedere allo stato di vibrazione."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"chiamata diretta n. telefono"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"Consente all\'app di chiamare numeri di telefono senza il tuo intervento. Questo potrebbe comportare chiamate o addebiti imprevisti. Tieni presente che l\'app non può chiamare numeri di emergenza. Le app dannose potrebbero generare dei costi effettuando chiamate senza la tua conferma o componendo codici di operatori a causa dei quali le chiamate in arrivo vengono deviate automaticamente su un altro numero."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"accesso al servizio di chiamata IMS"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Consente all\'app di utilizzare il servizio IMS per fare chiamate senza il tuo intervento."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"lettura stato e identità telefono"</string>
@@ -702,7 +703,7 @@
<skip />
<string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Impossibile creare il modello del volto. Riprova."</string>
<string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Sono stati rilevati occhiali scuri. Il tuo volto deve essere visibile per intero."</string>
- <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"È stata rilevata una mascherina. Il tuo volto deve essere visibile per intero."</string>
+ <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Rilevata mascherina. Il volto deve essere visibile per intero."</string>
<string-array name="face_acquired_vendor">
</string-array>
<string name="face_error_hw_not_available" msgid="5085202213036026288">"Imposs. verificare volto. Hardware non disponibile."</string>
@@ -2160,10 +2161,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Questi contenuti non possono essere aperti con app di lavoro"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Questi contenuti non possono essere condivisi con app personali"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Questi contenuti non possono essere aperti con app personali"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Le app di lavoro sono in pausa"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"Riattiva"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Nessuna app di lavoro"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Nessuna app personale"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"Apri l\'app <xliff:g id="APP">%s</xliff:g> personale"</string>
diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml
index 0d8eca0..3d71a47 100644
--- a/core/res/res/values-iw/strings.xml
+++ b/core/res/res/values-iw/strings.xml
@@ -251,7 +251,7 @@
<string name="global_action_bug_report" msgid="5127867163044170003">"דיווח על באג"</string>
<string name="global_action_logout" msgid="6093581310002476511">"סיום הפעלה"</string>
<string name="global_action_screenshot" msgid="2610053466156478564">"צילום מסך"</string>
- <string name="bugreport_title" msgid="8549990811777373050">"דיווח על באג"</string>
+ <string name="bugreport_title" msgid="8549990811777373050">"דוח על באג"</string>
<string name="bugreport_message" msgid="5212529146119624326">"הפעולה הזו תאסוף מידע על מצב המכשיר הנוכחי שלך כדי לשלוח אותו כהודעת אימייל. היא תימשך זמן קצר מרגע פתיחת הדיווח על הבאג ועד לשליחת ההודעה בפועל. יש להמתין בסבלנות."</string>
<string name="bugreport_option_interactive_title" msgid="7968287837902871289">"דוח אינטראקטיבי"</string>
<string name="bugreport_option_interactive_summary" msgid="8493795476325339542">"כדאי להשתמש באפשרות הזו ברוב המקרים. היא מאפשרת לך לעקוב אחר התקדמות הדוח, להזין פרטים נוספים על הבעיה ולצלם את המסך. היא עשויה להשמיט כמה קטעים שנמצאים פחות בשימוש ושיצירת הדיווח עליהם נמשכת זמן רב."</string>
@@ -299,6 +299,8 @@
<string name="android_system_label" msgid="5974767339591067210">"מערכת Android"</string>
<string name="user_owner_label" msgid="8628726904184471211">"החלפה לפרופיל אישי"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"החלפה לפרופיל עבודה"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"מעבר אל <xliff:g id="APP_NAME">%1$s</xliff:g> בפרופיל האישי"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"מעבר אל <xliff:g id="APP_NAME">%1$s</xliff:g> בפרופיל העבודה"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"אנשי קשר"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"גישה אל אנשי הקשר"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"מיקום"</string>
@@ -504,8 +506,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"מאפשרת לאפליקציה לשלוט ברטט."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"מאפשרת לאפליקציה לקבל גישה למצב רטט."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"חיוג ישירות למספרי טלפון"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"ההרשאה הזו מאפשרת לאפליקציה להתקשר לכל מספר טלפון שהוא ללא התערבותך. הפעולה עשויה להוביל לשיחות או לחיובים לא צפויים. לתשומך ליבך, ההרשאה הזו לא מאפשרת לאפליקציה להתקשר למספרי חירום. אפליקציות זדוניות עלולות לגרום לחיובים נוספים בגלל התקשרות לשיחות ללא אישורך, או לחייג לקודי ספק שיגרמו לכך שהשיחות הנכנסות יופנו אוטומטית למספר אחר."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"גישה אל שירות שיחות IMS"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"מאפשרת לאפליקציה להשתמש בשירות ה-IMS לביצוע שיחות ללא התערבות שלך."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"קריאת הסטטוס והזהות של הטלפון"</string>
@@ -1619,7 +1620,7 @@
<string name="default_audio_route_name" product="tablet" msgid="367936735632195517">"טאבלט"</string>
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"טלוויזיה"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"טלפון"</string>
- <string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"רמקולים של מעגן"</string>
+ <string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"רמקולים באביזר עגינה"</string>
<string name="default_audio_route_name_external_device" msgid="8124229858618975">"מכשיר חיצוני"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"אוזניות"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
@@ -2160,10 +2161,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"אי אפשר לפתוח את התוכן הזה באמצעות אפליקציות לעבודה"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"אי אפשר לשתף את התוכן הזה עם אפליקציות לשימוש אישי"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"אי אפשר לפתוח את התוכן הזה באמצעות אפליקציות לשימוש אישי"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"האפליקציות לעבודה מושהות"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"ביטול ההשהיה"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"אין אפליקציות לעבודה"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"אין אפליקציות לשימוש אישי"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"פתיחת <xliff:g id="APP">%s</xliff:g> בפרופיל האישי"</string>
diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml
index 4c63c1d..a89089c 100644
--- a/core/res/res/values-ja/strings.xml
+++ b/core/res/res/values-ja/strings.xml
@@ -253,9 +253,9 @@
<string name="bugreport_title" msgid="8549990811777373050">"バグレポート"</string>
<string name="bugreport_message" msgid="5212529146119624326">"現在のデバイスの状態に関する情報が収集され、その内容がメールで送信されます。バグレポートが開始してから送信可能な状態となるまでには多少の時間がかかりますのでご了承ください。"</string>
<string name="bugreport_option_interactive_title" msgid="7968287837902871289">"対話型レポート"</string>
- <string name="bugreport_option_interactive_summary" msgid="8493795476325339542">"ほとんどの場合はこのオプションを使用します。レポートの進行状況を追跡し、問題についての詳細情報の確認やスクリーンショットの作成が可能です。レポート作成に時間がかかる、あまり使用されない項目は省略されることがあります。"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8493795476325339542">"ほとんどの場合はこのオプションを使用します。レポートの進行状況を追跡し、問題についての詳細情報の入力やスクリーンショットの作成が可能です。レポート作成に時間がかかる、あまり使用されない項目は省略されることがあります。"</string>
<string name="bugreport_option_full_title" msgid="7681035745950045690">"完全レポート"</string>
- <string name="bugreport_option_full_summary" msgid="1975130009258435885">"デバイスの反応がないとき、または動作が遅すぎるときにシステムへの影響を最小限に抑えたい場合は、このオプションを使用します。また、すべてのレポート項目を表示したい場合もこのオプションを使用します。詳細情報は表示されず、追加のスクリーンショットは作成されません。"</string>
+ <string name="bugreport_option_full_summary" msgid="1975130009258435885">"デバイスの反応がないときや、動作が遅すぎるときにシステムへの影響を最小限に抑えたい場合、またすべてのレポート項目を表示したい場合にこのオプションを使用します。詳細情報の入力はできず、追加のスクリーンショットを撮ることもできません。"</string>
<string name="bugreport_countdown" msgid="6418620521782120755">"{count,plural, =1{# 秒後にバグレポート用のスクリーンショットを撮影します。}other{# 秒後にバグレポート用のスクリーンショットを撮影します。}}"</string>
<string name="bugreport_screenshot_success_toast" msgid="7986095104151473745">"バグレポートのスクリーンショットを取得しました"</string>
<string name="bugreport_screenshot_failure_toast" msgid="6736320861311294294">"バグレポートのスクリーンショットを取得できませんでした"</string>
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Android システム"</string>
<string name="user_owner_label" msgid="8628726904184471211">"個人用プロファイルに切り替える"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"仕事用プロファイルに切り替える"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"個人用の <xliff:g id="APP_NAME">%1$s</xliff:g> に切り替える"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"仕事用の <xliff:g id="APP_NAME">%1$s</xliff:g> に切り替える"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"連絡先"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"連絡先へのアクセス"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"位置情報"</string>
@@ -503,8 +505,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"バイブレーションの制御をアプリに許可します。"</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"バイブレーションのオン / オフ状態の把握をアプリに許可します。"</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"電話番号発信"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"電話番号への自動発信をアプリに許可します。許可することで、予期せぬ発信や料金が発生する恐れがあります。この場合、緊急通報への発信はアプリに許可されません。悪意のあるアプリが確認なしで発信して料金が発生したり、携帯通信会社のコードをダイヤルして着信を別の番号に自動転送したりする恐れがあります。"</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"IMS通話サービスへのアクセス"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"IMSサービスがユーザー操作なしで電話をかけることをアプリに許可します。"</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"デバイス情報と ID の読み取り"</string>
@@ -2159,10 +2160,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"このコンテンツを仕事用アプリで開くことはできません"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"このコンテンツを個人用アプリと共有することはできません"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"このコンテンツを個人用アプリで開くことはできません"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"仕事用アプリ一時停止中"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"停止解除"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"仕事用アプリはありません"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"個人用アプリはありません"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"個人用 <xliff:g id="APP">%s</xliff:g> を開く"</string>
@@ -2326,7 +2325,7 @@
<string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"デュアル スクリーンを使用できません"</string>
<string name="concurrent_display_notification_power_save_content" msgid="2198116070583851493">"バッテリー セーバーが ON のため、デュアル スクリーンを使用できません。この動作は設定で OFF にできます。"</string>
<string name="device_state_notification_settings_button" msgid="691937505741872749">"設定に移動"</string>
- <string name="device_state_notification_turn_off_button" msgid="6327161707661689232">"オフにする"</string>
+ <string name="device_state_notification_turn_off_button" msgid="6327161707661689232">"OFF にする"</string>
<string name="keyboard_layout_notification_selected_title" msgid="1202560174252421219">"<xliff:g id="DEVICE_NAME">%s</xliff:g>の設定完了"</string>
<string name="keyboard_layout_notification_one_selected_message" msgid="4314216053129257197">"キーボードのレイアウトは<xliff:g id="LAYOUT_1">%s</xliff:g>に設定されています。タップすると変更できます。"</string>
<string name="keyboard_layout_notification_two_selected_message" msgid="1876349944065922950">"キーボードのレイアウトは<xliff:g id="LAYOUT_1">%1$s</xliff:g>、<xliff:g id="LAYOUT_2">%2$s</xliff:g>に設定されています。タップすると変更できます。"</string>
diff --git a/core/res/res/values-ka/strings.xml b/core/res/res/values-ka/strings.xml
index b4cb0cf..be8a071 100644
--- a/core/res/res/values-ka/strings.xml
+++ b/core/res/res/values-ka/strings.xml
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Android-ის სისტემა"</string>
<string name="user_owner_label" msgid="8628726904184471211">"პერსონალურ პროფილზე გადართვა"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"სამსახურის პროფილზე გადართვა"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"<xliff:g id="APP_NAME">%1$s</xliff:g>-ის პირად ვერსიაზე გადასვლა"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"<xliff:g id="APP_NAME">%1$s</xliff:g>-ის სამსახურის ვერსიაზე გადასვლა"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"კონტაქტები"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"თქვენს კონტაქტებზე წვდომა"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"მდებარეობა"</string>
diff --git a/core/res/res/values-kk/strings.xml b/core/res/res/values-kk/strings.xml
index be3778b..954b06f 100644
--- a/core/res/res/values-kk/strings.xml
+++ b/core/res/res/values-kk/strings.xml
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Android жүйесі"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Жеке профильге ауысу"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"Жұмыс профиліне ауысу"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"Жеке профильге (<xliff:g id="APP_NAME">%1$s</xliff:g>) ауысу"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"Жұмыс профиліне (<xliff:g id="APP_NAME">%1$s</xliff:g>) ауысу"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Контактілер"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"контактілерге кіру"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Локация"</string>
@@ -503,8 +505,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"Қолданбаға вибраторды басқаруға рұқсат береді."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"Қолданбаға діріл күйін пайдалануға мүмкіндік береді."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"нөмірлерге тікелей телефон шалу"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"Қолданбаға сіз қатыспай-ақ телефон нөміріне қоңырау шалу рұқсаты беріледі. Нәтижесінде болжанбаған ақы төлеуіңіз немесе күтпеген қоңырау алуыңыз мүмкін. Қолданбаға құтқару қызметінің нөміріне қоңырау шалуға рұқсат берілмейтінін ескеріңіз. Зиянды қолданбалар келісіміңізді алмай қоңырау шалып, шығынға батыруы мүмкін немесе оператор кодын теріп, кіріс қоңырауларды басқа нөмірге автоматты түрде бағыттауы мүмкін."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"IMS қоңырау қызметін пайдалану"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Сіздің қатысуыңызсыз қоңыраулар соғу үшін қолданбаға IMS қызметін пайдалануға рұқсат етеді."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"телефон күйін оқу немесе анықтау"</string>
@@ -624,7 +625,7 @@
<string name="biometric_error_generic" msgid="6784371929985434439">"Аутентификациялауда қате шықты."</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Экран құлпын пайдалану"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Жалғастыру үшін экран құлпын енгізіңіз."</string>
- <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Сканерді қатты басыңыз."</string>
+ <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Сканерді қатты басыңыз"</string>
<string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Саусақ ізін тану мүмкін емес. Қайталап көріңіз."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Саусақ ізін оқу сканерін тазалап, әрекетті қайталаңыз."</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Сканерді тазалап, әрекетті қайталаңыз."</string>
@@ -634,7 +635,7 @@
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Тым жарық."</string>
<string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Қуат түймесін басу әрекеті анықталды."</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Дұрыстап қойып көріңіз."</string>
- <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Саусағыңыздың қалпын аздап өзгертіп тұрыңыз."</string>
+ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Саусағыңыздың орнын аздап өзгертіп тұрыңыз"</string>
<string-array name="fingerprint_acquired_vendor">
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"Саусақ ізі танылмады."</string>
@@ -682,17 +683,17 @@
<string name="face_acquired_too_far" msgid="2922278214231064859">"Телефонды жақынырақ ұстаңыз."</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Телефонды жоғарырақ ұстаңыз."</string>
<string name="face_acquired_too_low" msgid="4075391872960840081">"Телефонды төменірек ұстаңыз."</string>
- <string name="face_acquired_too_right" msgid="6245286514593540859">"Телефонды солға қарай ұстаңыз."</string>
- <string name="face_acquired_too_left" msgid="9201762240918405486">"Телефонды оңға қарай ұстаңыз."</string>
+ <string name="face_acquired_too_right" msgid="6245286514593540859">"Телефонды солға қарай жылжытыңыз."</string>
+ <string name="face_acquired_too_left" msgid="9201762240918405486">"Телефонды оңға қарай жылжытыңыз."</string>
<string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Құрылғының камерасына тура қараңыз."</string>
<string name="face_acquired_not_detected" msgid="1057966913397548150">"Бетіңіз көрінбей тұр. Телефонды көз деңгейінде ұстаңыз."</string>
<string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Қозғалыс тым көп. Телефонды қозғалтпаңыз."</string>
<string name="face_acquired_recalibrate" msgid="8724013080976469746">"Қайта тіркеліңіз."</string>
<string name="face_acquired_too_different" msgid="2520389515612972889">"Бет танылмады. Қайталап көріңіз."</string>
<string name="face_acquired_too_similar" msgid="8882920552674125694">"Басыңыздың қалпын сәл өзгертіңіз."</string>
- <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Телефонға барынша тура қараңыз."</string>
- <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Телефонға барынша тура қараңыз."</string>
- <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Телефонға барынша тура қараңыз."</string>
+ <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Телефонға тура қараңыз."</string>
+ <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Телефонға тура қараңыз."</string>
+ <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Телефонға тура қараңыз."</string>
<string name="face_acquired_obscured" msgid="4917643294953326639">"Бетіңізді жауып тұрған нәрсені алып тастаңыз."</string>
<string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Экранның жоғарғы жағын, сонымен қатар қара жолақты өшіріңіз."</string>
<!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
@@ -2159,10 +2160,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Бұл контентті жұмыс қолданбаларымен ашу мүмкін емес."</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Бұл контентті жеке қолданбалармен бөлісу мүмкін емес."</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Бұл контентті жеке қолданбалармен ашу мүмкін емес."</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Жұмыс қолданбалары кідіртілді."</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"Қайта қосу"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Жұмыс қолданбалары жоқ."</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Жеке қолданбалар жоқ."</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"Жеке <xliff:g id="APP">%s</xliff:g> қолданбасын ашу"</string>
@@ -2285,10 +2284,10 @@
<string name="window_magnification_prompt_content" msgid="8159173903032344891">"Енді экранның бір бөлігін ұлғайтуға болады."</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Параметрлер бөлімінен қосу"</string>
<string name="dismiss_action" msgid="1728820550388704784">"Қабылдамау"</string>
- <string name="sensor_privacy_start_use_mic_notification_content_title" msgid="2420858361276370367">"Құрылғы микрофонының бөгеуін алыңыз"</string>
- <string name="sensor_privacy_start_use_camera_notification_content_title" msgid="7287720213963466672">"Құрылғы камерасының бөгеуін алыңыз"</string>
+ <string name="sensor_privacy_start_use_mic_notification_content_title" msgid="2420858361276370367">"Құрылғы микрофонын блоктан шығарыңыз"</string>
+ <string name="sensor_privacy_start_use_camera_notification_content_title" msgid="7287720213963466672">"Құрылғы камерасын блоктан шығарыңыз"</string>
<string name="sensor_privacy_start_use_notification_content_text" msgid="7595608891015777346">"<b><xliff:g id="APP">%s</xliff:g></b> және барлық қолданбалар мен қызметтерге арналған."</string>
- <string name="sensor_privacy_start_use_dialog_turn_on_button" msgid="7089318886628390827">"Бөгеуді алу"</string>
+ <string name="sensor_privacy_start_use_dialog_turn_on_button" msgid="7089318886628390827">"Блоктан шығару"</string>
<string name="sensor_privacy_notification_channel_label" msgid="936036783155261349">"Датчикке қатысты құпиялық"</string>
<string name="splash_screen_view_icon_description" msgid="180638751260598187">"Қолданба белгішесі"</string>
<string name="splash_screen_view_branding_description" msgid="7911129347402728216">"Қолданба брендін ілгері жылжыту кескіні"</string>
@@ -2317,7 +2316,7 @@
<string name="permlab_startForegroundServicesFromBackground" msgid="6363004936218638382">"Экрандық режимдегі қызметтерді фоннан іске қосу"</string>
<string name="permdesc_startForegroundServicesFromBackground" msgid="4071826571656001537">"Қосымша қолданбаға экрандық режимдегі қызметтерді фоннан іске қосуға рұқсат беріледі."</string>
<string name="mic_access_on_toast" msgid="2666925317663845156">"Микрофон қолжетімді."</string>
- <string name="mic_access_off_toast" msgid="8111040892954242437">"Микрофон бөгелген."</string>
+ <string name="mic_access_off_toast" msgid="8111040892954242437">"Микрофон блокталған."</string>
<string name="concurrent_display_notification_name" msgid="1526911253558311131">"Қос экран"</string>
<string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Қос экран функциясы қосулы"</string>
<string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g> қолданбасы контентті көрсету үшін екі дисплейді де пайдаланады."</string>
diff --git a/core/res/res/values-km/strings.xml b/core/res/res/values-km/strings.xml
index 2f9c2e7..eb0c7f0 100644
--- a/core/res/res/values-km/strings.xml
+++ b/core/res/res/values-km/strings.xml
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"ប្រព័ន្ធ Android"</string>
<string name="user_owner_label" msgid="8628726904184471211">"ប្តូរទៅកម្រងព័ត៌មានផ្ទាល់ខ្លួន"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"ប្តូរទៅកម្រងព័ត៌មានការងារ"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"ប្ដូរទៅ <xliff:g id="APP_NAME">%1$s</xliff:g> ផ្ទាល់ខ្លួន"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"ប្ដូរទៅ <xliff:g id="APP_NAME">%1$s</xliff:g> ការងារ"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"ទំនាក់ទំនង"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"ចូលប្រើទំនាក់ទំនងរបស់អ្នក"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"ទីតាំង"</string>
@@ -503,8 +505,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"ឲ្យកម្មវិធីគ្រប់គ្រងកម្មវិធីញ័រ។"</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"អនុញ្ញាតឱ្យកម្មវិធីចូលប្រើស្ថានភាពកម្មវិធីញ័រ។"</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"ហៅលេខទូរស័ព្ទដោយផ្ទាល់"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"អនុញ្ញាតឱ្យកម្មវិធីហៅទៅលេខទូរសព្ទដោយគ្មានការអន្តរាគមន៍របស់អ្នក។ ការធ្វើបែបនេះអាចបណ្ដាលឱ្យមានការហៅទូរសព្ទ ឬការគិតថ្លៃដែលមិនបានរំពឹងទុក។ សូមចំណាំថា ការធ្វើបែបនេះមិនអនុញ្ញាតឱ្យកម្មវិធីហៅទូរសព្ទទៅលេខសង្គ្រោះបន្ទាន់ទេ។ កម្មវិធីគ្រោះថ្នាក់អាចគិតប្រាក់ពីអ្នកដោយហៅទូរសព្ទដោយគ្មានការបញ្ជាក់របស់អ្នក ឬហៅទូរសព្ទទៅលេខកូដក្រុមហ៊ុនសេវាទូរសព្ទ ដែលបណ្តាលឱ្យការហៅចូលត្រូវបានបញ្ជូនបន្តដោយស្វ័យប្រវត្តិទៅលេខផ្សេងទៀត។"</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"ចូលដំណើរការសេវាកម្មការហៅតាម IMS"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"អនុញ្ញាតឲ្យកម្មវិធីនេះប្រើសេវាកម្ម IMS ដើម្បីធ្វើការហៅដោយគ្មានការអន្តរាគមន៍ពីអ្នក។"</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"អានស្ថានភាព និងអត្តសញ្ញាណទូរស័ព្ទ"</string>
@@ -680,10 +681,10 @@
<string name="face_acquired_too_dark" msgid="8539853432479385326">"មិនមានពន្លឺគ្រប់គ្រាន់"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"ដាក់ទូរសព្ទឱ្យឆ្ងាយជាងមុន"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"ដាក់ទូរសព្ទឱ្យជិតជាងមុន"</string>
- <string name="face_acquired_too_high" msgid="8278815780046368576">"ដាក់ទូរសព្ទឱ្យខ្ពស់ជាងមុន"</string>
- <string name="face_acquired_too_low" msgid="4075391872960840081">"ដាក់ទូរសព្ទឱ្យទាបជាងមុន"</string>
+ <string name="face_acquired_too_high" msgid="8278815780046368576">"រំកិលទូរសព្ទឡើងលើ"</string>
+ <string name="face_acquired_too_low" msgid="4075391872960840081">"រំកិលទូរសព្ទចុះក្រោម"</string>
<string name="face_acquired_too_right" msgid="6245286514593540859">"ដាក់ទូរសព្ទទៅខាងឆ្វេងអ្នក"</string>
- <string name="face_acquired_too_left" msgid="9201762240918405486">"ដាក់ទូរសព្ទទៅខាងស្ដាំអ្នក"</string>
+ <string name="face_acquired_too_left" msgid="9201762240918405486">"រំកិលទូរសព្ទទៅខាងស្ដាំ"</string>
<string name="face_acquired_poor_gaze" msgid="4427153558773628020">"សូមមើលឱ្យចំឧបករណ៍របស់អ្នកជាងមុន។"</string>
<string name="face_acquired_not_detected" msgid="1057966913397548150">"មើលមិនឃើញមុខរបស់អ្នកទេ។ កាន់ទូរសព្ទរបស់អ្នកដាក់ត្រឹមភ្នែក។"</string>
<string name="face_acquired_too_much_motion" msgid="8199691445085189528">"មានចលនាខ្លាំងពេក។ សូមកាន់ទូរសព្ទឱ្យនឹង។"</string>
@@ -701,7 +702,7 @@
<skip />
<string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"មិនអាចបង្កើតគំរូមុខរបស់អ្នកបានទេ។ សូមព្យាយាមម្ដងទៀត។"</string>
<string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"បានរកឃើញវ៉ែនតាខ្មៅ។ មុខរបស់អ្នកត្រូវតែអាចមើលឃើញពេញលេញ។"</string>
- <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"បានរកឃើញគ្រឿងពាក់លើមុខ។ មុខរបស់អ្នកត្រូវតែអាចមើលឃើញពេញលេញ។"</string>
+ <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"បានរកឃើញរបស់បាំងមុខ។ មុខអ្នកត្រូវតែអាចមើលឃើញពេញលេញ។"</string>
<string-array name="face_acquired_vendor">
</string-array>
<string name="face_error_hw_not_available" msgid="5085202213036026288">"មិនអាចផ្ទៀងផ្ទាត់មុខបានទេ។ មិនមានហាតវែរទេ។"</string>
@@ -2159,10 +2160,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"ខ្លឹមសារនេះមិនអាចបើកតាមរយៈកម្មវិធីការងារបានទេ"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"ខ្លឹមសារនេះមិនអាចចែករំលែកតាមរយៈកម្មវិធីផ្ទាល់ខ្លួនបានទេ"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"ខ្លឹមសារនេះមិនអាចបើកតាមរយៈកម្មវិធីផ្ទាល់ខ្លួនបានទេ"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"កម្មវិធីការងារត្រូវបានផ្អាក"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"ឈប់ផ្អាក"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"គ្មានកម្មវិធីការងារទេ"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"គ្មានកម្មវិធីផ្ទាល់ខ្លួនទេ"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"បើក <xliff:g id="APP">%s</xliff:g> ផ្ទាល់ខ្លួន"</string>
diff --git a/core/res/res/values-kn/strings.xml b/core/res/res/values-kn/strings.xml
index 7af2f5a..5c41cfb 100644
--- a/core/res/res/values-kn/strings.xml
+++ b/core/res/res/values-kn/strings.xml
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Android ಸಿಸ್ಟಂ"</string>
<string name="user_owner_label" msgid="8628726904184471211">"ವೈಯಕ್ತಿಕ ಪ್ರೊಫೈಲ್ಗೆ ಬದಲಾಯಿಸಿ"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"ಉದ್ಯೋಗ ಪ್ರೊಫೈಲ್ಗೆ ಬದಲಿಸಿ"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"ವೈಯಕ್ತಿಕ <xliff:g id="APP_NAME">%1$s</xliff:g> ಗೆ ಬದಲಿಸಿ"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"ಕೆಲಸದ <xliff:g id="APP_NAME">%1$s</xliff:g> ಗೆ ಬದಲಿಸಿ"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"ಸಂಪರ್ಕಗಳು"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"ನಿಮ್ಮ ಸಂಪರ್ಕಗಳನ್ನು ಪ್ರವೇಶಿಸಲು"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"ಸ್ಥಳ"</string>
@@ -503,8 +505,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"ವೈಬ್ರೇಟರ್ ನಿಯಂತ್ರಿಸಲು ಅಪ್ಲಿಕೇಶನ್ಗೆ ಅನುಮತಿಸುತ್ತದೆ."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"ವೈಬ್ರೇಟರ್ ಸ್ಥಿತಿಯನ್ನು ಪ್ರವೇಶಿಸಲು ಆ್ಯಪ್ಗೆ ಅನುಮತಿಸುತ್ತದೆ."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"ಫೋನ್ ಸಂಖ್ಯೆಗಳಿಗೆ ನೇರವಾಗಿ ಕರೆ ಮಾಡಿ"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"ನಿಮ್ಮ ಹಸ್ತಕ್ಷೇಪವಿಲ್ಲದೆಯೇ ಫೋನ್ ಸಂಖ್ಯೆಗಳಿಗೆ ಕರೆ ಮಾಡಲು ಆ್ಯಪ್ಗೆ ಅನುಮತಿಸುತ್ತದೆ. ಇದು ಅನಿರೀಕ್ಷಿತ ಶುಲ್ಕಗಳು ಅಥವಾ ಕರೆಗಳಿಗೆ ಕಾರಣವಾಗಬಹುದು. ತುರ್ತು ಸಂಖ್ಯೆಗಳಿಗೆ ಕರೆ ಮಾಡಲು ಇದು ಆ್ಯಪ್ಗೆ ಅನುಮತಿಸುವುದಿಲ್ಲ ಎಂಬುದನ್ನು ಗಮನಿಸಿ. ದುರುದ್ದೇಶಪ್ರೇರಿತ ಆ್ಯಪ್ಗಳು ನಿಮ್ಮ ದೃಢೀಕರಣವಿಲ್ಲದೆಯೇ ಕರೆಗಳನ್ನು ಮಾಡುವ ಮೂಲಕ ಅಥವಾ ಒಳಬರುವ ಕರೆಗಳನ್ನು ಮತ್ತೊಂದು ಸಂಖ್ಯೆಗೆ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಫಾರ್ವರ್ಡ್ ಮಾಡಲು ಕಾರಣವಾಗುವ ವಾಹಕದ ಕೋಡ್ಗಳನ್ನು ಡಯಲ್ ಮಾಡುವ ಮೂಲಕ ನಿಮ್ಮ ಹಣ ವೆಚ್ಚವಾಗುವಂತೆ ಮಾಡಬಹುದು."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"IMS ಕರೆ ಸೇವೆಯನ್ನು ಪ್ರವೇಶಿಸಿ"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"ನಿಮ್ಮ ಮಧ್ಯಸ್ಥಿಕೆ ಇಲ್ಲದೆಯೇ ಕರೆಗಳನ್ನು ಮಾಡಲು IMS ಸೇವೆಯನ್ನು ಬಳಸಲು ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಅನುಮತಿಸುತ್ತದೆ."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"ಫೋನ್ ಸ್ಥಿತಿ ಮತ್ತು ಗುರುತಿಸುವಿಕೆಯನ್ನು ಓದಿ"</string>
@@ -693,7 +694,7 @@
<string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"ನಿಮ್ಮ ಫೋನ್ ಅನ್ನು ನೇರವಾಗಿ ನೋಡಿ"</string>
<string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"ನಿಮ್ಮ ಫೋನ್ ಅನ್ನು ನೇರವಾಗಿ ನೋಡಿ"</string>
<string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"ನಿಮ್ಮ ಫೋನ್ ಅನ್ನು ನೇರವಾಗಿ ನೋಡಿ"</string>
- <string name="face_acquired_obscured" msgid="4917643294953326639">"ನಿಮ್ಮ ಮುಖವನ್ನು ಮರೆಮಾಡುವ ಯಾವುದನ್ನಾದರೂ ತೆಗೆದುಹಾಕಿ."</string>
+ <string name="face_acquired_obscured" msgid="4917643294953326639">"ಮುಖವನ್ನು ಮರೆ ಮಾಡುವ ವಸ್ತುಗಳನ್ನು ತೆಗೆದುಹಾಕಿ."</string>
<string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"ಬ್ಲ್ಯಾಕ್ ಬಾರ್ ಸೇರಿದಂತೆ ನಿಮ್ಮ ಸ್ಕ್ರೀನ್ನ ಮೇಲ್ಭಾಗವನ್ನು ತೆರವುಗೊಳಿಸಿ"</string>
<!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
<skip />
@@ -701,7 +702,7 @@
<skip />
<string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"ಫೇಸ್ ಮಾಡೆಲ್ ರಚಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ಪುನಃ ಪ್ರಯತ್ನಿಸಿ."</string>
<string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"ಕಪ್ಪು ಕನ್ನಡಕ ಪತ್ತೆಯಾಗಿದೆ. ನಿಮ್ಮ ಮುಖವು ಸಂಪೂರ್ಣವಾಗಿ ಗೋಚರಿಸಬೇಕು."</string>
- <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"ಮುಖವಾಡ ಪತ್ತೆಯಾಗಿದೆ. ನಿಮ್ಮ ಮುಖವು ಸಂಪೂರ್ಣವಾಗಿ ಗೋಚರಿಸಬೇಕು."</string>
+ <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"ಮುಖವಾಡ ಪತ್ತೆಯಾಗಿದೆ. ಮುಖವು ಸಂಪೂರ್ಣವಾಗಿ ಗೋಚರಿಸಬೇಕು."</string>
<string-array name="face_acquired_vendor">
</string-array>
<string name="face_error_hw_not_available" msgid="5085202213036026288">"ಮುಖ ದೃಢೀಕರಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ಹಾರ್ಡ್ವೇರ್ ಲಭ್ಯವಿಲ್ಲ."</string>
@@ -1199,7 +1200,7 @@
<string name="whichSendToApplicationNamed" msgid="3385686512014670003">"%1$s ಬಳಸಿಕೊಂಡು ಕಳುಹಿಸಿ"</string>
<string name="whichSendToApplicationLabel" msgid="3543240188816513303">"ಕಳುಹಿಸು"</string>
<string name="whichHomeApplication" msgid="8276350727038396616">"ಮುಖಪುಟ ಅಪ್ಲಿಕೇಶನ್ ಆಯ್ಕೆಮಾಡಿ"</string>
- <string name="whichHomeApplicationNamed" msgid="5855990024847433794">"ಮುಖಪುಟ ಎಂಬಂತೆ %1$s ಅನ್ನು ಬಳಸಿ"</string>
+ <string name="whichHomeApplicationNamed" msgid="5855990024847433794">"%1$s ಅನ್ನು ಹೋಮ್ ಆಗಿ ಬಳಸಿ"</string>
<string name="whichHomeApplicationLabel" msgid="8907334282202933959">"ಚಿತ್ರ ಕ್ಯಾಪ್ಚರ್ ಮಾಡಿ"</string>
<string name="whichImageCaptureApplication" msgid="2737413019463215284">"ಇದರ ಜೊತೆಗೆ ಚಿತ್ರ ಕ್ಯಾಪ್ಚರ್ ಮಾಡಿ"</string>
<string name="whichImageCaptureApplicationNamed" msgid="8820702441847612202">"%1$s ಜೊತೆ ಚಿತ್ರ ಕ್ಯಾಪ್ಚರ್ ಮಾಡಿ"</string>
@@ -1255,7 +1256,7 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ಪ್ರಾರಂಭಿಸಲಾಗುತ್ತಿದೆ."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"ಬೂಟ್ ಪೂರ್ಣಗೊಳಿಸಲಾಗುತ್ತಿದೆ."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"ನೀವು ಪವರ್ ಬಟನ್ ಒತ್ತಿದ್ದೀರಿ — ಇದು ಸಾಮಾನ್ಯವಾಗಿ ಸ್ಕ್ರೀನ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ.\n\nನಿಮ್ಮ ಫಿಂಗರ್ಪ್ರಿಂಟ್ ಅನ್ನು ಹೊಂದಿಸುವಾಗ ಲಘುವಾಗಿ ಟ್ಯಾಪ್ ಮಾಡಲು ಪ್ರಯತ್ನಿಸಿ."</string>
- <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"ಸೆಟಪ್ ಪೂರ್ಣಗೊಳಿಸಲು, ಸ್ಕ್ರೀನ್ ಆಫ್ ಮಾಡಿ"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"ಸೆಟಪ್ ಅಂತ್ಯಗೊಳಿಸಲು, ಸ್ಕ್ರೀನ್ ಆಫ್ ಮಾಡಿ"</string>
<string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"ಆಫ್ ಮಾಡಿ"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"ಫಿಂಗರ್ಪ್ರಿಂಟ್ ಪರಿಶೀಲನೆ ಮುಂದುವರಿಸುವುದೇ?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"ನೀವು ಪವರ್ ಬಟನ್ ಒತ್ತಿದ್ದೀರಿ — ಇದು ಸಾಮಾನ್ಯವಾಗಿ ಸ್ಕ್ರೀನ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ.\n\nನಿಮ್ಮ ಫಿಂಗರ್ಪ್ರಿಂಟ್ ಅನ್ನು ಪರಿಶೀಲಿಸಲು ಲಘುವಾಗಿ ಟ್ಯಾಪ್ ಮಾಡಲು ಪ್ರಯತ್ನಿಸಿ."</string>
@@ -2022,7 +2023,7 @@
<string name="autofill_save_title_with_2types" msgid="3783270967447869241">"<xliff:g id="TYPE_0">%1$s</xliff:g> ಮತ್ತು <xliff:g id="TYPE_1">%2$s</xliff:g> ಅನ್ನು "<b>"<xliff:g id="LABEL">%3$s</xliff:g>"</b>" ನಲ್ಲಿ ಉಳಿಸುವುದೇ?"</string>
<string name="autofill_save_title_with_3types" msgid="6598228952100102578">"<xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> ಮತ್ತು <xliff:g id="TYPE_2">%3$s</xliff:g> ಅನ್ನು "<b>"<xliff:g id="LABEL">%4$s</xliff:g>"</b>" ನಲ್ಲಿ ಉಳಿಸುವುದೇ?"</string>
<string name="autofill_update_title" msgid="3630695947047069136"><b>"<xliff:g id="LABEL">%1$s</xliff:g>"</b>" ನಲ್ಲಿ ಅಪ್ಡೇಟ್ ಮಾಡುವುದೇ?"</string>
- <string name="autofill_update_title_with_type" msgid="5264152633488495704">"<xliff:g id="TYPE">%1$s</xliff:g> ಅನ್ನು "<b>"<xliff:g id="LABEL">%2$s</xliff:g>"</b>" ನಲ್ಲಿ ಅಪ್ಡೇಟ್ ಮಾಡುವುದೇ?"</string>
+ <string name="autofill_update_title_with_type" msgid="5264152633488495704">"<xliff:g id="TYPE">%1$s</xliff:g> ಅನ್ನು "<b>"<xliff:g id="LABEL">%2$s</xliff:g>"</b>" ನಲ್ಲಿ ಅಪ್ಡೇಟ್ ಮಾಡಬೇಕೆ?"</string>
<string name="autofill_update_title_with_2types" msgid="1797514386321086273">"<xliff:g id="TYPE_0">%1$s</xliff:g> ಮತ್ತು <xliff:g id="TYPE_1">%2$s</xliff:g> ಅನ್ನು "<b>"<xliff:g id="LABEL">%3$s</xliff:g>"</b>" ನಲ್ಲಿ ಅಪ್ಡೇಟ್ ಮಾಡುವುದೇ?"</string>
<string name="autofill_update_title_with_3types" msgid="1312232153076212291">"ಈ ಮುಂದಿನ ಐಟಂಗಳನ್ನು "<b>"<xliff:g id="LABEL">%4$s</xliff:g>"</b>" ನಲ್ಲಿ ಅಪ್ಡೇಟ್ ಮಾಡುವುದೇ: <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> ಮತ್ತು <xliff:g id="TYPE_2">%3$s</xliff:g> ?"</string>
<string name="autofill_save_yes" msgid="8035743017382012850">"ಉಳಿಸಿ"</string>
@@ -2159,10 +2160,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"ಕೆಲಸಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ಆ್ಯಪ್ಗಳ ಈ ವಿಷಯವನ್ನು ತೆರೆಯಲಾಗುವುದಿಲ್ಲ"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"ವೈಯಕ್ತಿಕ ಆ್ಯಪ್ಗಳ ಮೂಲಕ ಈ ವಿಷಯವನ್ನು ಹಂಚಿಕೊಳ್ಳಲಾಗುವುದಿಲ್ಲ"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"ವೈಯಕ್ತಿಕ ಆ್ಯಪ್ಗಳ ಮೂಲಕ ಈ ವಿಷಯವನ್ನು ತೆರೆಯಲಾಗುವುದಿಲ್ಲ"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"ಕೆಲಸಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ಆ್ಯಪ್ಗಳನ್ನು ವಿರಾಮಗೊಳಿಸಲಾಗಿದೆ"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"ವಿರಾಮವನ್ನು ರದ್ದುಗೊಳಿಸಿ"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"ಯಾವುದೇ ಕೆಲಸಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ಆ್ಯಪ್ಗಳಿಲ್ಲ"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"ಯಾವುದೇ ವೈಯಕ್ತಿಕ ಆ್ಯಪ್ಗಳಿಲ್ಲ"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"ವೈಯಕ್ತಿಕ <xliff:g id="APP">%s</xliff:g> ತೆರೆಯಿರಿ"</string>
@@ -2292,7 +2291,7 @@
<string name="sensor_privacy_notification_channel_label" msgid="936036783155261349">"ಸೆನ್ಸರ್ ಗೌಪ್ಯತೆ"</string>
<string name="splash_screen_view_icon_description" msgid="180638751260598187">"ಅಪ್ಲಿಕೇಶನ್ ಐಕಾನ್"</string>
<string name="splash_screen_view_branding_description" msgid="7911129347402728216">"ಅಪ್ಲಿಕೇಶನ್ ಬ್ರ್ಯಾಂಡಿಂಗ್ ಚಿತ್ರ"</string>
- <string name="view_and_control_notification_title" msgid="4300765399209912240">"ಪ್ರವೇಶ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಪರಿಶೀಲಿಸಿ"</string>
+ <string name="view_and_control_notification_title" msgid="4300765399209912240">"ಆ್ಯಕ್ಸೆಸ್ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಪರಿಶೀಲಿಸಿ"</string>
<string name="view_and_control_notification_content" msgid="8003766498562604034">"<xliff:g id="SERVICE_NAME">%s</xliff:g> ನಿಮ್ಮ ಸ್ಕ್ರೀನ್ ಅನ್ನು ವೀಕ್ಷಿಸಬಹುದು ಮತ್ತು ನಿಯಂತ್ರಿಸಬಹುದು. ಪರಿಶೀಲಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ."</string>
<string name="ui_translation_accessibility_translated_text" msgid="3197547218178944544">"<xliff:g id="MESSAGE">%1$s</xliff:g> ಅನ್ನು ಅನುವಾದಿಸಲಾಗಿದೆ."</string>
<string name="ui_translation_accessibility_translation_finished" msgid="3057830947610088465">"<xliff:g id="FROM_LANGUAGE">%1$s</xliff:g> ಭಾಷೆಯಿಂದ <xliff:g id="TO_LANGUAGE">%2$s</xliff:g> ಭಾಷೆಗೆ ಸಂದೇಶವನ್ನು ಅನುವಾದಿಸಲಾಗಿದೆ."</string>
@@ -2320,7 +2319,7 @@
<string name="mic_access_off_toast" msgid="8111040892954242437">"ಮೈಕ್ರೊಫೋನ್ ಅನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ"</string>
<string name="concurrent_display_notification_name" msgid="1526911253558311131">"ಡ್ಯೂಯಲ್ ಸ್ಕ್ರೀನ್"</string>
<string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"ಡ್ಯೂಯಲ್ ಸ್ಕ್ರೀನ್ ಆನ್ ಆಗಿದೆ"</string>
- <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"ವಿಷಯವನ್ನು ತೋರಿಸಲು <xliff:g id="APP_NAME">%1$s</xliff:g> ಎರಡೂ ಡಿಸ್ಪ್ಲೇಗಳನ್ನು ಬಳಸುತ್ತದೆ"</string>
+ <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"ಕಂಟೆಂಟ್ ಅನ್ನು ತೋರಿಸಲು <xliff:g id="APP_NAME">%1$s</xliff:g> ಎರಡೂ ಡಿಸ್ಪ್ಲೇಗಳನ್ನು ಬಳಸುತ್ತಿದೆ"</string>
<string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"ಸಾಧನವು ತುಂಬಾ ಬಿಸಿಯಾಗಿದೆ"</string>
<string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"ನಿಮ್ಮ ಫೋನ್ ತುಂಬಾ ಬಿಸಿಯಾಗುವುದರಿಂದ ಡ್ಯೂಯಲ್ ಸ್ಕ್ರೀನ್ ಲಭ್ಯವಿಲ್ಲ"</string>
<string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"Dual Screen ಲಭ್ಯವಿಲ್ಲ"</string>
diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml
index 84ec310..5ddc551 100644
--- a/core/res/res/values-ko/strings.xml
+++ b/core/res/res/values-ko/strings.xml
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Android 시스템"</string>
<string name="user_owner_label" msgid="8628726904184471211">"개인 프로필로 전환"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"직장 프로필로 전환"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"개인 <xliff:g id="APP_NAME">%1$s</xliff:g> 앱으로 전환"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"직장 <xliff:g id="APP_NAME">%1$s</xliff:g> 앱으로 전환"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"연락처"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"연락처에 액세스"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"위치"</string>
@@ -503,8 +505,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"앱이 진동을 제어할 수 있도록 허용합니다."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"앱이 진동 상태에 액세스하도록 허용합니다."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"전화번호 자동 연결"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"사용자의 조작 없이도 앱에서 전화번호로 전화를 걸 수 있도록 허용합니다. 이 권한을 사용하면 예상치 못한 요금이나 통화가 발생할 수 있습니다. 앱에서 비상 전화를 걸 수는 없습니다. 악성 앱에서 내 확인 없이 전화를 걸거나 수신 전화가 자동으로 다른 번호로 착신 전환되도록 이동통신사 코드를 입력하여 요금이 부과될 수 있습니다."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"IMS 통화 서비스에 접근"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"앱이 IMS 서비스를 사용하여 자동으로 전화를 걸 수 있도록 허용합니다."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"휴대전화 상태 및 ID 읽기"</string>
@@ -624,11 +625,11 @@
<string name="biometric_error_generic" msgid="6784371929985434439">"인증 오류"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"화면 잠금 사용"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"계속하려면 화면 잠금용 사용자 인증 정보를 입력하세요"</string>
- <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"센서 위에 손가락을 좀 더 오래 올려놓으세요."</string>
+ <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"센서 위에 손가락을 좀 더 오래 올려놓으세요"</string>
<string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"지문을 인식할 수 없습니다. 다시 시도해 주세요."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"지문 센서를 닦은 후 다시 시도해 보세요."</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"센서를 닦은 후 다시 시도해 보세요."</string>
- <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"센서 위에 손가락을 좀 더 오래 올려놓으세요."</string>
+ <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"센서 위에 손가락을 좀 더 오래 올려놓으세요"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"손가락을 너무 느리게 움직였습니다. 다시 시도해 주세요."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"다른 지문으로 시도"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"너무 밝음"</string>
@@ -677,23 +678,23 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"수리업체에 방문하세요."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"얼굴 모델을 만들 수 없습니다. 다시 시도해 주세요."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"너무 밝습니다. 조명 밝기를 조금 낮춰보세요."</string>
- <string name="face_acquired_too_dark" msgid="8539853432479385326">"조명이 부족합니다."</string>
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"조명이 부족합니다"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"휴대전화를 얼굴에서 더 멀리 떨어뜨려 주세요."</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"휴대전화를 얼굴에 더 가까이 가져와 주세요."</string>
- <string name="face_acquired_too_high" msgid="8278815780046368576">"휴대전화를 위로 이동하세요"</string>
- <string name="face_acquired_too_low" msgid="4075391872960840081">"휴대전화를 아래로 이동하세요"</string>
- <string name="face_acquired_too_right" msgid="6245286514593540859">"휴대전화를 왼쪽으로 이동하세요"</string>
- <string name="face_acquired_too_left" msgid="9201762240918405486">"휴대전화를 오른쪽으로 이동하세요"</string>
+ <string name="face_acquired_too_high" msgid="8278815780046368576">"휴대전화를 위쪽으로 움직이세요"</string>
+ <string name="face_acquired_too_low" msgid="4075391872960840081">"휴대전화를 아래쪽으로 움직이세요"</string>
+ <string name="face_acquired_too_right" msgid="6245286514593540859">"휴대전화를 왼쪽으로 움직이세요"</string>
+ <string name="face_acquired_too_left" msgid="9201762240918405486">"휴대전화를 오른쪽으로 움직이세요"</string>
<string name="face_acquired_poor_gaze" msgid="4427153558773628020">"기기에서 더 똑바로 바라보세요."</string>
<string name="face_acquired_not_detected" msgid="1057966913397548150">"얼굴이 보이지 않습니다. 눈높이에 맞춰 휴대전화를 들어 주세요."</string>
<string name="face_acquired_too_much_motion" msgid="8199691445085189528">"너무 많이 움직였습니다. 휴대전화를 흔들리지 않게 잡으세요."</string>
<string name="face_acquired_recalibrate" msgid="8724013080976469746">"얼굴을 다시 등록해 주세요."</string>
<string name="face_acquired_too_different" msgid="2520389515612972889">"얼굴을 인식할 수 없습니다. 다시 시도해 주세요."</string>
<string name="face_acquired_too_similar" msgid="8882920552674125694">"얼굴의 위치를 조금 변경해 주세요."</string>
- <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"휴대전화를 좀 더\\n똑바로 바라봐 주세요."</string>
- <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"휴대전화를 좀 더\\n똑바로 바라봐 주세요."</string>
- <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"휴대전화를 좀 더\\n똑바로 바라봐 주세요."</string>
- <string name="face_acquired_obscured" msgid="4917643294953326639">"얼굴이 가려지지 않도록 해 주세요."</string>
+ <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"휴대전화를 좀 더 정면으로 바라보세요"</string>
+ <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"휴대전화를 좀 더 정면으로 바라보세요"</string>
+ <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"휴대전화를 좀 더 정면으로 바라보세요"</string>
+ <string name="face_acquired_obscured" msgid="4917643294953326639">"얼굴이 가려지지 않도록 해 주세요"</string>
<string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"검은색 바를 포함한 화면 상단을 청소하세요."</string>
<!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
<skip />
@@ -701,7 +702,7 @@
<skip />
<string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"얼굴 모델을 만들 수 없습니다. 다시 시도해 주세요."</string>
<string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"선글라스가 감지되었습니다. 전체 얼굴이 보여야 합니다."</string>
- <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"마스크가 감지되었습니다. 전체 얼굴이 보여야 합니다."</string>
+ <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"마스크가 감지되었습니다. 얼굴 전체가 보여야 합니다"</string>
<string-array name="face_acquired_vendor">
</string-array>
<string name="face_error_hw_not_available" msgid="5085202213036026288">"얼굴을 확인할 수 없습니다. 하드웨어를 사용할 수 없습니다."</string>
@@ -1368,7 +1369,7 @@
<string name="usb_power_notification_message" msgid="7284765627437897702">"연결된 기기를 충전합니다. 옵션을 더 보려면 탭하세요."</string>
<string name="usb_unsupported_audio_accessory_title" msgid="2335775548086533065">"아날로그 오디오 액세서리가 감지됨"</string>
<string name="usb_unsupported_audio_accessory_message" msgid="1300168007129796621">"연결된 기기가 이 휴대전화와 호환되지 않습니다. 자세히 알아보려면 탭하세요."</string>
- <string name="adb_active_notification_title" msgid="408390247354560331">"USB 디버깅 연결됨."</string>
+ <string name="adb_active_notification_title" msgid="408390247354560331">"USB 디버깅 연결됨"</string>
<string name="adb_active_notification_message" msgid="5617264033476778211">"USB 디버깅을 사용 중지하려면 탭하세요."</string>
<string name="adb_active_notification_message" product="tv" msgid="6624498401272780855">"USB 디버깅을 사용하지 않으려면 선택합니다."</string>
<string name="adbwifi_active_notification_title" msgid="6147343659168302473">"무선 디버깅 연결됨"</string>
@@ -2159,10 +2160,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"이 콘텐츠는 직장 앱으로 열 수 없습니다."</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"이 콘텐츠는 개인 앱을 통해 공유할 수 없습니다."</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"이 콘텐츠는 개인 앱으로 열 수 없습니다."</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"직장 앱이 일시중지됨"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"일시중지 해제"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"직장 앱 없음"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"개인 앱 없음"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"개인 <xliff:g id="APP">%s</xliff:g> 열기"</string>
diff --git a/core/res/res/values-ky/strings.xml b/core/res/res/values-ky/strings.xml
index 6207e5e..55b3723 100644
--- a/core/res/res/values-ky/strings.xml
+++ b/core/res/res/values-ky/strings.xml
@@ -255,7 +255,7 @@
<string name="bugreport_option_interactive_title" msgid="7968287837902871289">"Интерактивдүү кабар"</string>
<string name="bugreport_option_interactive_summary" msgid="8493795476325339542">"Ката жөнүндө кабардын абалын жана көйгөй тууралуу кошумча маалыматты көрсөтүү үчүн ушул функцияны колдонууну сунуштайбыз. Ката жөнүндө кабар жөнөтүлүп жатканда көп убакыт талап кылынбашы үчүн негизги бөлүмдөр гана көрүнөт."</string>
<string name="bugreport_option_full_title" msgid="7681035745950045690">"Толук кабар берүү"</string>
- <string name="bugreport_option_full_summary" msgid="1975130009258435885">"Түзмөгүңүз жооп бербей же өтө жай иштеп жатса, ошондой эле жөндөөлөрдүн бардык кабарлоо бөлүмдөрүн карап чыккыңыз келсе, ушул функцияны колдонуңуз. Баса, ката жөнүндө кошумча маалыматты көрсөтүп же скриншотторду тарта албайсыз."</string>
+ <string name="bugreport_option_full_summary" msgid="1975130009258435885">"Түзмөгүңүз жооп бербей же өтө жай иштеп жатса, ошондой эле параметрлердин бардык кабарлоо бөлүмдөрүн карап чыккыңыз келсе, ушул функцияны колдонуңуз. Баса, ката жөнүндө кошумча маалыматты көрсөтүп же скриншотторду тарта албайсыз."</string>
<string name="bugreport_countdown" msgid="6418620521782120755">"{count,plural, =1{Мүчүлүштүк тууралуу кабар берүү үчүн # секунддан кийин скриншот тартылат.}other{Мүчүлүштүк тууралуу кабар берүү үчүн # секунддан кийин скриншот тартылат.}}"</string>
<string name="bugreport_screenshot_success_toast" msgid="7986095104151473745">"Мүчүлүштүк тууралуу кабарлоо үчүн скриншот тартылды"</string>
<string name="bugreport_screenshot_failure_toast" msgid="6736320861311294294">"Мүчүлүштүк тууралуу кабарлоо үчүн скриншот тартылган жок"</string>
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Android системасы"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Жеке профилге которулуу"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"Жумуш профилине которулуу"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"Жеке <xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосуна которулуу"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"Жумушка тиешелүү <xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосуна которулуу"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Байланыштар"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"байланыштарыңызды көрүүгө"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Жайгашкан жер"</string>
@@ -503,8 +505,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"Колдонмого дирилдегичти көзөмөлдөө мүмкүнчүлүгүн берет."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"Колдонмого дирилдөө абалына кирүүгө уруксат берет."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"телефон номерлерине түз чалуу"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"Колдонмого сиздин кийлигишүүңүзсүз телефон номерлерине чалуу мүмкүнчүлүгүн берет. Бул күтүлбөгөн төлөмдөргө же чалууларга алып келиши мүмкүн. Бул колдонмого кырсыктаганда жардамга келчү кызматтын номерине чалуу мүмкүнчүлүгүн бербейт. Зыянкеч колдонмолор сиздин ырастооңузсуз чалууларды аткарып, же байланыш операторлорунун коддорун терип чыгымдарга себепкер болушу мүмкүн. Бул кирүүчү чалууларды автоматтык түрдө башка номерге багыттайт."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"IMS чалуу кызматына мүмкүнчүлүк алуу"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Колдонмого сизди катыштырбай туруп, IMS кызматынын жардамы менен, чалууларды жасоо мүмкүнчүлүгүн берет."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"телефондун абалын жана аныктыгын окуу"</string>
@@ -634,7 +635,7 @@
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Өтө жарык"</string>
<string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Кубат баскычы басылганы аныкталды"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Тууралап көрүңүз"</string>
- <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Манжаңыздын абалын ар жолкусунда бир аз өзгөртүп туруңуз"</string>
+ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Манжаңыздын абалын улам өзгөртүп коюңуз"</string>
<string-array name="fingerprint_acquired_vendor">
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"Манжа изи таанылган жок"</string>
@@ -680,7 +681,7 @@
<string name="face_acquired_too_dark" msgid="8539853432479385326">"Жарык жетишсиз"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Телефонду алыстатыңыз"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Телефонду жакындатыңыз"</string>
- <string name="face_acquired_too_high" msgid="8278815780046368576">"Телефонду жогору жылдырыңыз"</string>
+ <string name="face_acquired_too_high" msgid="8278815780046368576">"Телефонду өйдө жылдырыңыз"</string>
<string name="face_acquired_too_low" msgid="4075391872960840081">"Телефонду ылдый жылдырыңыз"</string>
<string name="face_acquired_too_right" msgid="6245286514593540859">"Телефонду солго жылдырыңыз"</string>
<string name="face_acquired_too_left" msgid="9201762240918405486">"Телефонду оңго жылдырыңыз"</string>
@@ -999,10 +1000,10 @@
<string name="lockscreen_failed_attempts_almost_glogin" product="tv" msgid="6399092175942158529">"Графикалык ачкычыңызды <xliff:g id="NUMBER_0">%1$d</xliff:g> жолу туура эмес чийдиңиз. Дагы <xliff:g id="NUMBER_1">%2$d</xliff:g> ийгиликсиз аракеттен кийин, Android TV түзмөгүңүздүн кулпусун Google аккаунтуңузга кирип ачышыңыз керек болот.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> секунддан кийин кайталап көрүңүз."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="5691623136957148335">"Графикалык ачкычты <xliff:g id="NUMBER_0">%1$d</xliff:g> жолу туура эмес тарттыңыз. Дагы <xliff:g id="NUMBER_1">%2$d</xliff:g> жолу туура эмес тартсаңыз, телефонуңуздун кулпусун Google\'га кирип ачууга туура келет.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> секундадан кийин дагы аракет кылып көрүңүз."</string>
<string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="7914445759242151426">"Сиз планшетиңизди бөгөттөн чыгарууга <xliff:g id="NUMBER_0">%1$d</xliff:g> жолу туура эмес аракет кылдыңыз. Дагы <xliff:g id="NUMBER_1">%2$d</xliff:g> аракеттен кийин, планшет баштапкы абалына келтирилет жана бардык маалыматтар өчүрүлөт."</string>
- <string name="lockscreen_failed_attempts_almost_at_wipe" product="tv" msgid="4275591249631864248">"Android TV түзмөгүңүздүн кулпусун <xliff:g id="NUMBER_0">%1$d</xliff:g> жолу туура эмес ачууга аракет жасадыңыз. Дагы <xliff:g id="NUMBER_1">%2$d</xliff:g> ийгиликсиз аракеттен кийин, Android TV түзмөгүңүз демейки жөндөөлөргө кайтарылып, бардык колдонуучу дайындары жоголот."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="tv" msgid="4275591249631864248">"Android TV түзмөгүңүздүн кулпусун <xliff:g id="NUMBER_0">%1$d</xliff:g> жолу туура эмес ачууга аракет жасадыңыз. Дагы <xliff:g id="NUMBER_1">%2$d</xliff:g> ийгиликсиз аракеттен кийин, Android TV түзмөгүңүз демейки параметрлерге кайтарылып, бардык колдонуучу дайындары жоголот."</string>
<string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="1166532464798446579">"Сиз телефонуңузду бөгөттөн чыгарууга <xliff:g id="NUMBER_0">%1$d</xliff:g> жолу туура эмес аракет кылдыңыз. Дагы <xliff:g id="NUMBER_1">%2$d</xliff:g> аракеттен кийин, телефон баштапкы абалына келтирилет жана бардык маалыматтар өчүрүлөт."</string>
<string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="8682445539263683414">"Сиз планшетти бөгөттөн чыгарууга <xliff:g id="NUMBER">%d</xliff:g> жолу туура эмес аракет кылдыңыз. Планшет баштапкы абалына келтирилет."</string>
- <string name="lockscreen_failed_attempts_now_wiping" product="tv" msgid="2205435033340091883">"Android TV түзмөгүңүздүн кулпусун <xliff:g id="NUMBER">%d</xliff:g> жолу туура эмес ачууга аракет жасадыңыз. Android TV түзмөгүңүз эми демейки жөндөөлөргө кайтарылат."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="tv" msgid="2205435033340091883">"Android TV түзмөгүңүздүн кулпусун <xliff:g id="NUMBER">%d</xliff:g> жолу туура эмес ачууга аракет жасадыңыз. Android TV түзмөгүңүз эми демейки параметрлерге кайтарылат."</string>
<string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="2203704707679895487">"Сиз телефонду бөгөттөн чыгарууга <xliff:g id="NUMBER">%d</xliff:g> жолу туура эмес аракет кылдыңыз. Телефон баштапкы абалына келтирилет."</string>
<string name="lockscreen_too_many_failed_attempts_countdown" msgid="6807200118164539589">"<xliff:g id="NUMBER">%d</xliff:g> секунддан кийин кайталаңыз."</string>
<string name="lockscreen_forgot_pattern_button_text" msgid="8362442730606839031">"Сүрөт үлгүсүн унутуп калдыңызбы?"</string>
@@ -1375,7 +1376,7 @@
<string name="adbwifi_active_notification_message" msgid="930987922852867972">"Мүчүлүштүктөрдү зымсыз оңдоону өчүрүү үчүн таптап коюңуз"</string>
<string name="adbwifi_active_notification_message" product="tv" msgid="8633421848366915478">"Мүчүлүштүктөрдү Wi-Fi аркылуу оңдоону өчүрүңүз."</string>
<string name="test_harness_mode_notification_title" msgid="2282785860014142511">"Сыноо программасынын режими иштетилди"</string>
- <string name="test_harness_mode_notification_message" msgid="3039123743127958420">"Сыноо программасынын режимин өчүрүү үчүн баштапкы жөндөөлөргө кайтарыңыз."</string>
+ <string name="test_harness_mode_notification_message" msgid="3039123743127958420">"Сыноо программасынын режимин өчүрүү үчүн баштапкы параметрлерге кайтарыңыз."</string>
<string name="console_running_notification_title" msgid="6087888939261635904">"Сериялык консоль иштетилди"</string>
<string name="console_running_notification_message" msgid="7892751888125174039">"Майнаптуулугуна таасири тиет. Аны өчүрүү үчүн операциялык тутумду жүктөгүчтү текшериңиз."</string>
<string name="mte_override_notification_title" msgid="4731115381962792944">"Cынамык MTE иштетилди"</string>
@@ -1670,10 +1671,10 @@
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="3328686432962224215">"Сиз сырсөзүңүздү <xliff:g id="NUMBER_0">%1$d</xliff:g> жолу туура эмес тердиңиз. \n\n <xliff:g id="NUMBER_1">%2$d</xliff:g> секундадан кийин кайталаңыз."</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="7357404233979139075">"Сиз бөгөттөн чыгаруу үлгүсүн <xliff:g id="NUMBER_0">%1$d</xliff:g> жолу туура эмес көрсөттүңүз. \n\n <xliff:g id="NUMBER_1">%2$d</xliff:g> секундадан кийин кайталаңыз."</string>
<string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="3479940221343361587">"Сиз планшетиңизди <xliff:g id="NUMBER_0">%1$d</xliff:g> жолу ийгиликсиз бөгөттөн чыгаруу аракетин кылдыңыз. Дагы <xliff:g id="NUMBER_1">%2$d</xliff:g> ийгиликсиз аракеттен кийин, планшет баштапкы абалына кайтарылат жана бардык берилиштериңиз өчүрүлөт."</string>
- <string name="kg_failed_attempts_almost_at_wipe" product="tv" msgid="9064457748587850217">"Android TV түзмөгүңүздүн кулпусун <xliff:g id="NUMBER_0">%1$d</xliff:g> жолу туура эмес ачууга аракет жасадыңыз. Дагы <xliff:g id="NUMBER_1">%2$d</xliff:g> ийгиликсиз аракеттен кийин, Android TV түзмөгүңүз демейки жөндөөлөргө кайтарылып, бардык колдонуучу дайындары жоголот."</string>
+ <string name="kg_failed_attempts_almost_at_wipe" product="tv" msgid="9064457748587850217">"Android TV түзмөгүңүздүн кулпусун <xliff:g id="NUMBER_0">%1$d</xliff:g> жолу туура эмес ачууга аракет жасадыңыз. Дагы <xliff:g id="NUMBER_1">%2$d</xliff:g> ийгиликсиз аракеттен кийин, Android TV түзмөгүңүз демейки параметрлерге кайтарылып, бардык колдонуучу дайындары жоголот."</string>
<string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="5955398963754432548">"Сиз телефонуңузду <xliff:g id="NUMBER_0">%1$d</xliff:g> жолу ийгиликсиз бөгөттөн чыгаруу аракетин кылдыңыз. Дагы <xliff:g id="NUMBER_1">%2$d</xliff:g> ийгиликсиз аракеттен кийин, телефон баштапкы абалына кайтарылат жана бардык берилиштериңиз өчүрүлөт."</string>
<string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2299099385175083308">"Сиз планшетиңизди <xliff:g id="NUMBER">%d</xliff:g> жолу ийгиликсиз бөгөттөн чыгаруу аракетин кылдыңыз. Планшет баштапкы абалына кайтарылат."</string>
- <string name="kg_failed_attempts_now_wiping" product="tv" msgid="5045460916106267585">"Android TV түзмөгүңүздүн кулпусун <xliff:g id="NUMBER">%d</xliff:g> жолу туура эмес ачууга аракет жасадыңыз. Android TV түзмөгүңүз эми демейки жөндөөлөргө кайтарылат."</string>
+ <string name="kg_failed_attempts_now_wiping" product="tv" msgid="5045460916106267585">"Android TV түзмөгүңүздүн кулпусун <xliff:g id="NUMBER">%d</xliff:g> жолу туура эмес ачууга аракет жасадыңыз. Android TV түзмөгүңүз эми демейки параметрлерге кайтарылат."</string>
<string name="kg_failed_attempts_now_wiping" product="default" msgid="5043730590446071189">"Сиз телефонуңузду <xliff:g id="NUMBER">%d</xliff:g> жолу ийгиликсиз бөгөттөн чыгаруу аракетин кылдыңыз. Телефон баштапкы абалына кайтарылат."</string>
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="7086799295109717623">"Графикалык ачкычты <xliff:g id="NUMBER_0">%1$d</xliff:g> жолу туура эмес көрсөттүңүз. <xliff:g id="NUMBER_1">%2$d</xliff:g> жолу туура эмес көрсөтүлгөндөн кийин, планшетиңиздин кулпусун ачуу үчүн Google аккаунтуңузга кирүүгө туура келет.\n\n<xliff:g id="NUMBER_2">%3$d</xliff:g> секундадан кийин кайталап көрсөңүз болот."</string>
<string name="kg_failed_attempts_almost_at_login" product="tv" msgid="4670840383567106114">"Графикалык ачкычыңызды <xliff:g id="NUMBER_0">%1$d</xliff:g> жолу туура эмес чийдиңиз. Дагы <xliff:g id="NUMBER_1">%2$d</xliff:g> ийгиликсиз аракеттен кийин, Android TV түзмөгүңүздүн кулпусун электрондук почта аккаунтуңуз менен ачышыңыз керек болот.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> секунддан кийин кайталап көрүңүз."</string>
@@ -1713,7 +1714,7 @@
<string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Кыска жолду өчүрүү"</string>
<string name="leave_accessibility_shortcut_on" msgid="6543362062336990814">"Кыска жолду колдонуу"</string>
<string name="color_inversion_feature_name" msgid="2672824491933264951">"Түстөрдү инверсиялоо"</string>
- <string name="color_correction_feature_name" msgid="7975133554160979214">"Түсүн тууралоо"</string>
+ <string name="color_correction_feature_name" msgid="7975133554160979214">"Түстөрдү тууралоо"</string>
<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>
@@ -2159,10 +2160,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Бул мазмунду жумуш колдонмолору менен ачуу мүмкүн эмес"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Бул мазмунду жеке колдонмолор менен бөлүшүү мүмкүн эмес"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Бул мазмунду жеке колдонмолор менен ачуу мүмкүн эмес"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Жумуш колдонмолору тындырылды"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"Иштетүү"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Жумуш колдонмолору жок"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Жеке колдонмолор жок"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"Жеке <xliff:g id="APP">%s</xliff:g> колдонмосун ачуу"</string>
diff --git a/core/res/res/values-lo/strings.xml b/core/res/res/values-lo/strings.xml
index 80e6009..d727b40 100644
--- a/core/res/res/values-lo/strings.xml
+++ b/core/res/res/values-lo/strings.xml
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"ລະບົບ Android"</string>
<string name="user_owner_label" msgid="8628726904184471211">"ສະຫຼັບໄປໂປຣໄຟລ໌ສ່ວນຕົວ"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"ສະຫຼັບໄປໃຊ້ໂປຣໄຟລ໌ບ່ອນເຮັດວຽກ"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"ປ່ຽນໄປໃຊ້ໂປຣໄຟລ໌ສ່ວນຕົວໃນ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"ປ່ຽນໄປໃຊ້ໂປຣໄຟລ໌ວຽກໃນ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"ລາຍຊື່ຜູ້ຕິດຕໍ່"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"ເຂົ້າຫາລາຍຊື່ຂອງທ່ານ"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"ສະຖານທີ່"</string>
@@ -503,8 +505,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"ອະນຸຍາດໃຫ້ແອັບຯຄວບຄຸມໂຕສັ່ນ."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"ອະນຸຍາດໃຫ້ແອັບເຂົ້າເຖິງສະຖານະການສັ່ນໄດ້."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"ໂທຫາເບີໂທລະສັບໂດຍກົງ"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"ອະນຸຍາດໃຫ້ແອັບໂທເຂົ້າເບີໂທລະສັບໂດຍບໍ່ຕ້ອງໃຫ້ທ່ານຈັດການ. ເຊິ່ງອາດເຮັດໃຫ້ມີການຮຽກເກັບເງິນ ຫຼື ການໂທທີ່ບໍ່ຄາດຄິດ. ກະລຸນາຮັບຊາບວ່າການດຳເນີນການນີ້ບໍ່ໄດ້ອະນຸຍາດໃຫ້ແອັບໂທຫາເບີໂທສຸກເສີນ. ແອັບທີ່ເປັນອັນຕະລາຍອາດເຮັດໃຫ້ທ່ານຕ້ອງເສຍຄ່າໃຊ້ຈ່າຍດ້ວຍການໂທໂດຍບໍ່ຂໍການຢືນຢັນຈາກທ່ານ ຫຼື ກົດລະຫັດຜູ້ໃຫ້ບໍລິການເຊິ່ງເຮັດໃຫ້ສາຍໂທເຂົ້າຖືກສົ່ງຕໍ່ໄປຫາເບີອື່ນໂດຍອັດຕະໂນມັດ."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"ເຂົ້າຫາການບໍລິການໂທ IMS"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"ອະນຸຍາດໃຫ້ແອັບໃຊ້ການບໍລິການ IMS ເພື່ອໂທໂດຍບໍ່ມີການຊ່ວຍເຫຼືອຂອງທ່ານ."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"ອ່ານສະຖານະ ແລະຂໍ້ມູນລະບຸໂຕຕົນຂອງໂທລະສັບ"</string>
@@ -2159,10 +2160,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"ເນື້ອຫານີ້ບໍ່ສາມາດຖືກເປີດໄດ້ດ້ວຍແອັບບ່ອນເຮັດວຽກ"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"ເນື້ອຫານີ້ບໍ່ສາມາດຖືກແບ່ງປັນກັບແອັບສ່ວນຕົວໄດ້"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"ເນື້ອຫານີ້ບໍ່ສາມາດຖືກເປີດໄດ້ດ້ວຍແອັບສ່ວນຕົວ"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"ຢຸດແອັບບ່ອນເຮັດວຽກໄວ້ຊົ່ວຄາວແລ້ວ"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"ຍົກເລີກການຢຸດຊົ່ວຄາວ"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"ບໍ່ມີແອັບບ່ອນເຮັດວຽກ"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"ບໍ່ມີແອັບສ່ວນຕົວ"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"ເປີດ <xliff:g id="APP">%s</xliff:g> ແບບສ່ວນຕົວ"</string>
diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml
index 864cdc6..ea2d5ac 100644
--- a/core/res/res/values-lt/strings.xml
+++ b/core/res/res/values-lt/strings.xml
@@ -300,6 +300,8 @@
<string name="android_system_label" msgid="5974767339591067210">"„Android“ sistema"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Perjungti į asmeninį profilį"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"Perjungti į darbo profilį"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"Perjungti į asmeninę programą „<xliff:g id="APP_NAME">%1$s</xliff:g>“"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"Perjungti į darbo programą „<xliff:g id="APP_NAME">%1$s</xliff:g>“"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Kontaktai"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"pasiekti kontaktus"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Vietovė"</string>
@@ -505,8 +507,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"Leidžiama programai valdyti vibravimą."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"Programai leidžiama pasiekti vibratoriaus būseną."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"skambinti tiesiogiai telefono numeriais"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"Leidžiama programai skambinti telefonų numeriais be jūsų įsikišimo. Gali būti taikomi nenumatyti mokesčiai ar gaunami nenumatyti skambučiai. Atminkite, kad programai neleidžiama skambinti pagalbos numeriais. Naudojant kenkėjiškas programas gali būti taikomi mokesčiai, skambinant be jūsų patvirtinimo arba renkant operatorių kodus, kuriuos taikant gaunamieji skambučiai automatiškai peradresuojami kitu numeriu."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"pasiekti IMS skambučių paslaugą"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Programai leidžiama naudoti IMS paslaugą, kad būtų galima atlikti skambučius be jūsų įsikišimo."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"skaityti telefono būseną ir tapatybę"</string>
@@ -626,7 +627,7 @@
<string name="biometric_error_generic" msgid="6784371929985434439">"Autentifikuojant įvyko klaida"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Naudoti ekrano užraktą"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Jei norite tęsti, įveskite ekrano užraktą"</string>
- <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Tvirtai paspauskite jutiklį"</string>
+ <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Stipriai paspauskite jutiklį"</string>
<string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Nepavyko atpažinti kontrolinio kodo. Bandykite dar kartą."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Nuvalykite kontrolinio kodo jutiklį ir bandykite dar kartą"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Nuvalykite jutiklį ir bandykite dar kartą"</string>
@@ -646,7 +647,7 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Veidas autentifikuotas, paspauskite patvirtinimo mygtuką"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Piršto antspaudo aparatinė įranga nepasiekiama."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"Nepavyko nustatyti kontrolinio kodo"</string>
- <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Baigėsi kontrolinio kodo sąrankos skirtasis laikas. Bandykite dar kartą."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Baigėsi piršto atspaudo sąrankos skirtasis laikas. Bandykite dar kartą."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Piršto antspaudo operacija atšaukta."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Piršto antspaudo operaciją atšaukė naudotojas."</string>
<string name="fingerprint_error_lockout" msgid="6626753679019351368">"Per daug bandymų. Naudokite ekrano užraktą."</string>
@@ -679,7 +680,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Apsilankykite pas taisymo paslaugos teikėją."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"Nepavyko sukurti veido modelio. Band. dar kartą."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Per šviesu. Išbandykite mažesnį apšvietimą."</string>
- <string name="face_acquired_too_dark" msgid="8539853432479385326">"Nepakanka apšvietimo"</string>
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"Per tamsu"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Laikykite telefoną toliau"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Laikykite telefoną arčiau"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Laikykite telefoną aukščiau"</string>
@@ -2161,10 +2162,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Šio turinio negalima atidaryti naudojant darbo programas"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Šio turinio negalima bendrinti su asmeninėmis programomis"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Šio turinio negalima atidaryti naudojant asmenines programas"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Darbo programos pristabdytos"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"Atšaukti pristabdymą"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Nėra darbo programų"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Nėra asmeninių programų"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"Asmeninės programos „<xliff:g id="APP">%s</xliff:g>“ atidarymas"</string>
diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml
index f293a2f..dd84e8a 100644
--- a/core/res/res/values-lv/strings.xml
+++ b/core/res/res/values-lv/strings.xml
@@ -299,6 +299,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Android sistēma"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Pārslēgties uz personisko profilu"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"Pārslēgties uz darba profilu"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"Pārslēgties uz personīgo profilu lietotnē <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"Pārslēgties uz darba profilu lietotnē <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Kontaktpersonas"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"piekļūt jūsu kontaktpersonu datiem"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Atrašanās vieta"</string>
@@ -504,8 +506,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"Ļauj lietotnei kontrolēt vibrosignālu."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"Ļauj lietotnei piekļūt vibrosignāla statusam."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"tieši zvanīt uz tālruņa numuriem"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"Ļauj lietotnei zvanīt uz tālruņa numuriem bez jūsu iejaukšanās. Var rasties neparedzētas izmaksas vai zvani. Ņemiet vērā, ka lietotnei tādējādi netiek atļauts zvanīt uz ārkārtas numuriem. Ļaunprātīgas lietotnes var radīt jums izmaksas, veicot zvanus bez jūsu apstiprinājuma, vai sastādīt mobilo sakaru operatoru kodus, kuru dēļ ienākošie zvani tiek automātiski pāradresēti uz citu numuru."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"piekļūt tūlītējās ziņojumapmaiņas pakalpojumam, lai veiktu zvanus"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Ļauj lietotnei izmantot tūlītējās ziņojumapmaiņas pakalpojumu, lai veiktu zvanus bez jūsu ziņas."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"lasīt tālruņa statusu un identitāti"</string>
@@ -2160,10 +2161,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Šo saturu nevar atvērt darba lietotnēs"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Šo saturu nevar kopīgot ar personīgajām lietotnēm"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Šo saturu nevar atvērt personīgajās lietotnēs"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Darba lietotnes ir apturētas."</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"Aktivizēt"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Nav darba lietotņu"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Nav personīgu lietotņu"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"Lietotnes <xliff:g id="APP">%s</xliff:g> atvēršana personīgajā profilā"</string>
diff --git a/core/res/res/values-mcc310/config.xml b/core/res/res/values-mcc310/config.xml
index 76abcee..df398f9 100644
--- a/core/res/res/values-mcc310/config.xml
+++ b/core/res/res/values-mcc310/config.xml
@@ -22,7 +22,4 @@
<!-- Whether safe headphone volume is enabled or not (country specific). -->
<bool name="config_safe_media_volume_enabled">false</bool>
- <!-- Whether safe headphone sound dosage warning is enabled or not (country specific). -->
- <bool name="config_safe_sound_dosage_mcc_enabled">false</bool>
-
</resources>
diff --git a/core/res/res/values-mcc311/config.xml b/core/res/res/values-mcc311/config.xml
index 6e0b678..df398f9 100644
--- a/core/res/res/values-mcc311/config.xml
+++ b/core/res/res/values-mcc311/config.xml
@@ -22,7 +22,4 @@
<!-- Whether safe headphone volume is enabled or not (country specific). -->
<bool name="config_safe_media_volume_enabled">false</bool>
- <!-- Whether safe headphone sound dosage warning is enabled or not (country specific). -->
- <bool name="config_safe_sound_dosage_enabled">false</bool>
-
</resources>
diff --git a/core/res/res/values-mcc312/config.xml b/core/res/res/values-mcc312/config.xml
index 6e0b678..df398f9 100644
--- a/core/res/res/values-mcc312/config.xml
+++ b/core/res/res/values-mcc312/config.xml
@@ -22,7 +22,4 @@
<!-- Whether safe headphone volume is enabled or not (country specific). -->
<bool name="config_safe_media_volume_enabled">false</bool>
- <!-- Whether safe headphone sound dosage warning is enabled or not (country specific). -->
- <bool name="config_safe_sound_dosage_enabled">false</bool>
-
</resources>
diff --git a/core/res/res/values-mcc313/config.xml b/core/res/res/values-mcc313/config.xml
index 6e0b678..df398f9 100644
--- a/core/res/res/values-mcc313/config.xml
+++ b/core/res/res/values-mcc313/config.xml
@@ -22,7 +22,4 @@
<!-- Whether safe headphone volume is enabled or not (country specific). -->
<bool name="config_safe_media_volume_enabled">false</bool>
- <!-- Whether safe headphone sound dosage warning is enabled or not (country specific). -->
- <bool name="config_safe_sound_dosage_enabled">false</bool>
-
</resources>
diff --git a/core/res/res/values-mcc314/config.xml b/core/res/res/values-mcc314/config.xml
index 6e0b678..df398f9 100644
--- a/core/res/res/values-mcc314/config.xml
+++ b/core/res/res/values-mcc314/config.xml
@@ -22,7 +22,4 @@
<!-- Whether safe headphone volume is enabled or not (country specific). -->
<bool name="config_safe_media_volume_enabled">false</bool>
- <!-- Whether safe headphone sound dosage warning is enabled or not (country specific). -->
- <bool name="config_safe_sound_dosage_enabled">false</bool>
-
</resources>
diff --git a/core/res/res/values-mcc315/config.xml b/core/res/res/values-mcc315/config.xml
index 6e0b678..df398f9 100644
--- a/core/res/res/values-mcc315/config.xml
+++ b/core/res/res/values-mcc315/config.xml
@@ -22,7 +22,4 @@
<!-- Whether safe headphone volume is enabled or not (country specific). -->
<bool name="config_safe_media_volume_enabled">false</bool>
- <!-- Whether safe headphone sound dosage warning is enabled or not (country specific). -->
- <bool name="config_safe_sound_dosage_enabled">false</bool>
-
</resources>
diff --git a/core/res/res/values-mcc316/config.xml b/core/res/res/values-mcc316/config.xml
index 6e0b678..df398f9 100644
--- a/core/res/res/values-mcc316/config.xml
+++ b/core/res/res/values-mcc316/config.xml
@@ -22,7 +22,4 @@
<!-- Whether safe headphone volume is enabled or not (country specific). -->
<bool name="config_safe_media_volume_enabled">false</bool>
- <!-- Whether safe headphone sound dosage warning is enabled or not (country specific). -->
- <bool name="config_safe_sound_dosage_enabled">false</bool>
-
</resources>
diff --git a/core/res/res/values-mk/strings.xml b/core/res/res/values-mk/strings.xml
index 0a0ed8a..d570cfc 100644
--- a/core/res/res/values-mk/strings.xml
+++ b/core/res/res/values-mk/strings.xml
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Систем Android"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Префрли на личен профил"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"Префрли се на работен профил"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"Префрлете се на личната апликација <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"Префрлете се на работната апликација <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Контакти"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"пристапува до контактите"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Локација"</string>
@@ -503,8 +505,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"Дозволува апликацијата да ги контролира вибрациите."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"Ѝ дозволува на апликацијата да пристапи до состојбата на вибрации."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"директно избирај телефонски броеви"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"Дозволува апликацијата да повика кој било телефонски број без ваша интервенција. Поради тоа може да дојде до неочекувани плаќања или повици. Имајте на ум дека ова не дозволува апликацијата да повикува броеви за итни случаи. Злонамерните апликации може да ве чинат пари со упатување повици без ваша потврда или бирање шифри на оператор што предизвикуваат дојдовните повици автоматски да се проследуваат до друг број."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"пристапи до услугата за повици IMS"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Дозволува апликацијата да ја користи услугата IMS за повици без ваша интервенција."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"прочитај ги статусот и идентитетот на телефонот"</string>
@@ -634,7 +635,7 @@
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Премногу светло"</string>
<string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Откриено е притискање на копчето за вклучување"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Пробајте да го приспособите прстот"</string>
- <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Менувајте ја положбата на прстот по малку секој пат"</string>
+ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Менувајте ја положбата на прстот секојпат по малку"</string>
<string-array name="fingerprint_acquired_vendor">
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"Отпечатокот не е препознаен"</string>
@@ -680,8 +681,8 @@
<string name="face_acquired_too_dark" msgid="8539853432479385326">"Нема доволно светлина"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Оддалечете го телефонот"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Доближете го телефонот"</string>
- <string name="face_acquired_too_high" msgid="8278815780046368576">"Кренете го телефонот погоре"</string>
- <string name="face_acquired_too_low" msgid="4075391872960840081">"Спуштете го телефонот подолу"</string>
+ <string name="face_acquired_too_high" msgid="8278815780046368576">"Поткренете го телефонот"</string>
+ <string name="face_acquired_too_low" msgid="4075391872960840081">"Снижете го телефонот"</string>
<string name="face_acquired_too_right" msgid="6245286514593540859">"Поместете го телефонот налево"</string>
<string name="face_acquired_too_left" msgid="9201762240918405486">"Поместете го телефонот надесно"</string>
<string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Погледнете подиректно во уредот."</string>
@@ -693,7 +694,7 @@
<string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Гледајте подиректно во телефонот"</string>
<string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Гледајте подиректно во телефонот"</string>
<string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Гледајте подиректно во телефонот"</string>
- <string name="face_acquired_obscured" msgid="4917643294953326639">"Отстранете ги работите што ви го покриваат лицето."</string>
+ <string name="face_acquired_obscured" msgid="4917643294953326639">"Отстранете ги работите што ви го покриваат ликот."</string>
<string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Исчистете го врвот на екранот, вклучувајќи ја црната лента"</string>
<!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
<skip />
@@ -701,7 +702,7 @@
<skip />
<string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Не може да создаде модел на лик. Обидете се пак."</string>
<string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Носите темни очила. Лицето мора да ви се гледа целосно."</string>
- <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Лицето е покриено. Лицето мора да ви се гледа целосно."</string>
+ <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Ликот е покриен. Ликот мора да ви се гледа целосно."</string>
<string-array name="face_acquired_vendor">
</string-array>
<string name="face_error_hw_not_available" msgid="5085202213036026288">"Ликот не може да се потврди. Хардвер - недостапен."</string>
@@ -1555,7 +1556,7 @@
<string name="date_picker_prev_month_button" msgid="3418694374017868369">"Претходниот месец"</string>
<string name="date_picker_next_month_button" msgid="4858207337779144840">"Следниот месец"</string>
<string name="keyboardview_keycode_alt" msgid="8997420058584292385">"Копче „Alt“"</string>
- <string name="keyboardview_keycode_cancel" msgid="2134624484115716975">"Копче „Откажи“"</string>
+ <string name="keyboardview_keycode_cancel" msgid="2134624484115716975">"Откажи"</string>
<string name="keyboardview_keycode_delete" msgid="2661117313730098650">"Копче „Избриши“"</string>
<string name="keyboardview_keycode_done" msgid="2524518019001653851">"Копче „Готово“"</string>
<string name="keyboardview_keycode_mode_change" msgid="2743735349997999020">"Копче „Промени режим“"</string>
@@ -1696,12 +1697,12 @@
<string name="accessibility_shortcut_off" msgid="3651336255403648739">"Не вклучувај"</string>
<string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"ВКЛУЧЕНО"</string>
<string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"ИСКЛУЧЕНО"</string>
- <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Дали дозволувате <xliff:g id="SERVICE">%1$s</xliff:g> да има целосна контрола врз вашиот уред?"</string>
+ <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Да се дозволи <xliff:g id="SERVICE">%1$s</xliff:g> да има целосна контрола врз вашиот уред?"</string>
<string name="accessibility_service_warning_description" msgid="291674995220940133">"Целосната контрола е соодветна за апликации што ви помагаат со потребите за пристапност, но не и за повеќето апликации."</string>
- <string name="accessibility_service_screen_control_title" msgid="190017412626919776">"Приказ и контрола на екранот"</string>
+ <string name="accessibility_service_screen_control_title" msgid="190017412626919776">"Преглед и контрола на екранот"</string>
<string name="accessibility_service_screen_control_description" msgid="6946315917771791525">"Може да ги чита сите содржини на екранот и да прикажува содржини врз другите апликации."</string>
<string name="accessibility_service_action_perform_title" msgid="779670378951658160">"Преглед и вршење дејства"</string>
- <string name="accessibility_service_action_perform_description" msgid="2718852014003170558">"Може да ја следи вашата интеракција со апликациите или хардверскиот сензор и да врши интеракција со апликациите во ваше име."</string>
+ <string name="accessibility_service_action_perform_description" msgid="2718852014003170558">"Може да ја следи вашата интеракција со апликациите или со хардверските сензори и да врши интеракција со апликациите во ваше име."</string>
<string name="accessibility_dialog_button_allow" msgid="2092558122987144530">"Дозволи"</string>
<string name="accessibility_dialog_button_deny" msgid="4129575637812472671">"Одбиј"</string>
<string name="accessibility_select_shortcut_menu_title" msgid="6002726538854613272">"Допрете на функција за да почнете да ја користите:"</string>
@@ -2159,10 +2160,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Овие содржини не може да се отвораат со работни апликации"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Овие содржини не може да се споделуваат со лични апликации"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Овие содржини не може да се отвораат со лични апликации"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Работните апликации се паузирани"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"Прекини ја паузата"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Нема работни апликации"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Нема лични апликации"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"Отворање лична <xliff:g id="APP">%s</xliff:g>"</string>
@@ -2306,7 +2305,7 @@
<string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"Не може да се пристапи до камерата на вашиот таблет од <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
<string name="vdm_secure_window" msgid="161700398158812314">"До ова не може да се пристапи при стриминг. Наместо тоа, пробајте на вашиот телефон."</string>
<string name="vdm_pip_blocked" msgid="4036107522497281397">"Не може да се прикажува слика во слика при стримување"</string>
- <string name="system_locale_title" msgid="711882686834677268">"Стандардно за системот"</string>
+ <string name="system_locale_title" msgid="711882686834677268">"Стандарден за системот"</string>
<string name="default_card_name" msgid="9198284935962911468">"КАРТИЧКА <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
<string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Дозвола за профилот на придружен часовник за управување со часовници"</string>
<string name="permdesc_companionProfileWatch" msgid="5655698581110449397">"Дозволува придружна апликација да управува со часовници."</string>
diff --git a/core/res/res/values-ml/strings.xml b/core/res/res/values-ml/strings.xml
index b6dcf69..dcc45f8 100644
--- a/core/res/res/values-ml/strings.xml
+++ b/core/res/res/values-ml/strings.xml
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Android സിസ്റ്റം"</string>
<string name="user_owner_label" msgid="8628726904184471211">"വ്യക്തിഗത പ്രൊഫൈലിലേക്ക് മാറുക"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"ഔദ്യോഗിക പ്രൊഫൈലിലേക്ക് മാറുക"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"വ്യക്തിപരമായ ആവശ്യത്തിനുള്ള <xliff:g id="APP_NAME">%1$s</xliff:g>-ലേക്ക് മാറുക"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"ഔദ്യോഗിക ആവശ്യത്തിനുള്ള <xliff:g id="APP_NAME">%1$s</xliff:g>-ലേക്ക് മാറുക"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"കോൺടാക്റ്റുകൾ"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"നിങ്ങളുടെ കോൺടാക്റ്റുകൾ ആക്സസ്സ് ചെയ്യുക"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"ലൊക്കേഷൻ"</string>
@@ -623,17 +625,17 @@
<string name="biometric_error_generic" msgid="6784371929985434439">"പിശക് പരിശോധിച്ചുറപ്പിക്കുന്നു"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"സ്ക്രീൻ ലോക്ക് ഉപയോഗിക്കുക"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"തുടരാൻ നിങ്ങളുടെ സ്ക്രീൻ ലോക്ക് നൽകുക"</string>
- <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"സെൻസറിന് മുകളിൽ ശക്തിയായി അമർത്തുക"</string>
+ <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"സെൻസറിൽ നന്നായി അമർത്തുക"</string>
<string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"ഫിംഗർപ്രിന്റ് തിരിച്ചറിയാനാകുന്നില്ല. വീണ്ടും ശ്രമിക്കുക."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"ഫിംഗർപ്രിന്റ് സെൻസർ വൃത്തിയാക്കിയ ശേഷം വീണ്ടും ശ്രമിക്കുക"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"സെൻസർ വൃത്തിയാക്കിയ ശേഷം വീണ്ടും ശ്രമിക്കുക"</string>
- <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"സെൻസറിന് മുകളിൽ ശക്തിയായി അമർത്തുക"</string>
+ <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"സെൻസറിൽ നന്നായി അമർത്തുക"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"വിരൽ വളരെ പതുക്കെ നീക്കി. വീണ്ടും ശ്രമിക്കുക."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"മറ്റൊരു ഫിംഗർപ്രിന്റ് ഉപയോഗിച്ച് നോക്കുക"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"തെളിച്ചം വളരെയധികമാണ്"</string>
<string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"പവർ ബട്ടൺ അമർത്തിയത് തിരിച്ചറിഞ്ഞു"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"അൽപ്പം നീക്കി നോക്കൂ"</string>
- <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"ഓരോ തവണയും നിങ്ങളുടെ വിരലിന്റെ സ്ഥാനം ചെറുതായി മാറ്റുക"</string>
+ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"ഓരോ തവണയും വിരലിന്റെ സ്ഥാനം ചെറുതായി മാറ്റുക"</string>
<string-array name="fingerprint_acquired_vendor">
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"ഫിംഗർപ്രിന്റ് തിരിച്ചറിഞ്ഞില്ല"</string>
@@ -684,7 +686,7 @@
<string name="face_acquired_too_right" msgid="6245286514593540859">"ഫോൺ നിങ്ങളുടെ ഇടതുവശത്തേക്ക് നീക്കുക"</string>
<string name="face_acquired_too_left" msgid="9201762240918405486">"ഫോൺ നിങ്ങളുടെ വലതുവശത്തേക്ക് നീക്കുക"</string>
<string name="face_acquired_poor_gaze" msgid="4427153558773628020">"നിങ്ങളുടെ ഉപകരണത്തിന് നേരെ കൂടുതൽ നന്നായി നോക്കുക."</string>
- <string name="face_acquired_not_detected" msgid="1057966913397548150">"മുഖം കാണാനാകുന്നില്ല. ഫോൺ കണ്ണിന് നേരെ പിടിക്കുക."</string>
+ <string name="face_acquired_not_detected" msgid="1057966913397548150">"മുഖം കാണുന്നില്ല. ഫോൺ കണ്ണിന് നേരെ പിടിക്കുക."</string>
<string name="face_acquired_too_much_motion" msgid="8199691445085189528">"വളരെയധികം ചലനം. ഫോൺ അനക്കാതെ നേരെ പിടിക്കുക."</string>
<string name="face_acquired_recalibrate" msgid="8724013080976469746">"നിങ്ങളുടെ മുഖം വീണ്ടും എൻറോൾ ചെയ്യുക."</string>
<string name="face_acquired_too_different" msgid="2520389515612972889">"മുഖം തിരിച്ചറിയാനാകുന്നില്ല. വീണ്ടും ശ്രമിക്കൂ."</string>
@@ -700,7 +702,7 @@
<skip />
<string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"മുഖ മോഡൽ സൃഷ്ടിക്കാനാകില്ല. വീണ്ടും ശ്രമിക്കൂ."</string>
<string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"കറുത്ത കണ്ണട കണ്ടെത്തി. നിങ്ങളുടെ മുഖം പൂർണ്ണമായും ദൃശ്യമായിരിക്കണം."</string>
- <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"മുഖം മറച്ചിരിക്കുന്നതായി കണ്ടെത്തി. നിങ്ങളുടെ മുഖം പൂർണ്ണമായും ദൃശ്യമായിരിക്കണം."</string>
+ <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"മുഖം മറച്ചിരിക്കുന്നു. മുഖം പൂർണ്ണമായും ദൃശ്യമായിരിക്കണം."</string>
<string-array name="face_acquired_vendor">
</string-array>
<string name="face_error_hw_not_available" msgid="5085202213036026288">"മുഖം പരിശോധിക്കാൻ കഴിയില്ല. ഹാർഡ്വെയർ ലഭ്യമല്ല."</string>
@@ -1063,7 +1065,7 @@
<string name="js_dialog_before_unload_positive_button" msgid="4274257182303565509">"ഈ പേജ് വിടുക"</string>
<string name="js_dialog_before_unload_negative_button" msgid="3873765747622415310">"ഈ പേജിൽ തുടരുക"</string>
<string name="js_dialog_before_unload" msgid="7213364985774778744">"<xliff:g id="MESSAGE">%s</xliff:g>\n\nഈ പേജിൽ നിന്നും നാവിഗേറ്റുചെയ്തു പോകണമെന്ന് തീർച്ചയാണോ?"</string>
- <string name="autofill_window_title" msgid="4379134104008111961">"<xliff:g id="SERVICENAME">%1$s</xliff:g> ഉപയോഗിച്ച് സ്വമേധയാ പൂരിപ്പിക്കുക"</string>
+ <string name="autofill_window_title" msgid="4379134104008111961">"<xliff:g id="SERVICENAME">%1$s</xliff:g> ഉപയോഗിച്ച് സ്വയമേവ പൂരിപ്പിക്കുക"</string>
<string name="permlab_setAlarm" msgid="1158001610254173567">"ഒരു അലാറം സജ്ജീകരിക്കുക"</string>
<string name="permdesc_setAlarm" msgid="2185033720060109640">"ഒരു ഇൻസ്റ്റാളുചെയ്ത അലാറം ക്ലോക്ക് അപ്ലിക്കേഷനിൽ അലാറം സജ്ജീകരിക്കുന്നതിന് അപ്ലിക്കേഷനെ അനുവദിക്കുന്നു. ചില അലാറം ക്ലോക്ക് അപ്ലിക്കേഷനുകൾ ഈ സവിശേഷത നടപ്പിലാക്കാതിരുന്നേക്കാം."</string>
<string name="permlab_addVoicemail" msgid="4770245808840814471">"വോയ്സ് മെയിൽ ചേർക്കുക"</string>
diff --git a/core/res/res/values-mn/strings.xml b/core/res/res/values-mn/strings.xml
index 2917fb6..fcecbe9 100644
--- a/core/res/res/values-mn/strings.xml
+++ b/core/res/res/values-mn/strings.xml
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Андройд систем"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Хувийн профайл руу сэлгэх"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"Ажлын профайл руу сэлгэх"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"Хувийн <xliff:g id="APP_NAME">%1$s</xliff:g> руу сэлгэх"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"Ажлын <xliff:g id="APP_NAME">%1$s</xliff:g> руу сэлгэх"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Харилцагчид"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"харилцагч руугаа хандах"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Байршил"</string>
@@ -503,8 +505,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"Апп нь чичиргээг удирдах боломжтой."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"Аппыг чичиргээний төлөвт хандахыг зөвшөөрдөг."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"утасны дугаарт шууд дуудлага хийх"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"Аппад таны оролцоогүйгээр утасны дугаарууд руу дуудлага хийхийг зөвшөөрнө. Энэ нь гэнэтийн төлбөрийн нэхэмжлэх эсвэл дуудлага хүлээн авахад хүргэж магадгүй. Энэ нь аппад яаралтай тусламжийн утасны дугаарууд руу дуудлага хийхийг зөвшөөрөхгүйг анхаарна уу. Хортой аппууд таны баталгаажуулалтгүйгээр дуудлага хийх эсвэл ирсэн дуудлагыг автоматаар өөр дугаар луу шилжүүлэхэд хүргэх оператор компанийн код руу залгаснаар танаас төлбөр гаргаж магадгүй."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"IMS дуудлагын үйлчилгээнд хандах"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Апп нь дуудлага хийхдээ таны оролцоогүйгээр IMS үйлчилгээг ашиглах боломжтой."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"утасны статус ба таниулбарыг унших"</string>
@@ -693,7 +694,7 @@
<string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Утас руугаа аль болох эгц харна уу"</string>
<string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Утас руугаа аль болох эгц харна уу"</string>
<string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Утас руугаа аль болох эгц харна уу"</string>
- <string name="face_acquired_obscured" msgid="4917643294953326639">"Таны нүүрийг далдалж буй аливаа зүйлийг хасна уу."</string>
+ <string name="face_acquired_obscured" msgid="4917643294953326639">"Таны нүүрийг далдалж буй аливаа зүйлийг авна уу."</string>
<string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Хар хэсэг зэрэг дэлгэцийнхээ дээд хэсгийг цэвэрлэнэ үү"</string>
<!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
<skip />
@@ -2159,10 +2160,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Энэ контентыг ажлын аппуудаар нээх боломжгүй"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Энэ контентыг хувийн аппуудаар хуваалцах боломжгүй"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Энэ контентыг хувийн аппуудаар нээх боломжгүй"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Ажлын аппуудыг түр зогсоосон"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"Үргэлжлүүлэх"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Ямар ч ажлын апп байхгүй байна"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Ямар ч хувийн апп байхгүй байна"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"Хувийн <xliff:g id="APP">%s</xliff:g>-г нээх"</string>
diff --git a/core/res/res/values-mr/strings.xml b/core/res/res/values-mr/strings.xml
index 640f5d940..c63baeb 100644
--- a/core/res/res/values-mr/strings.xml
+++ b/core/res/res/values-mr/strings.xml
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Android सिस्टीम"</string>
<string name="user_owner_label" msgid="8628726904184471211">"वैयक्तिक प्रोफाइलवर स्विच करा"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"कार्य प्रोफाइलवर स्विच करा"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"<xliff:g id="APP_NAME">%1$s</xliff:g> च्या वैयक्तिक प्रोफाइलवर स्विच करा"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"<xliff:g id="APP_NAME">%1$s</xliff:g> च्या कार्य प्रोफाइलवर स्विच करा"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"संपर्क"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"आपल्या संपर्कांवर प्रवेश"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"स्थान"</string>
@@ -503,8 +505,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"अॅप ला व्हायब्रेटर नियंत्रित करण्यासाठी अनुमती देते."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"अॅपला व्हायब्रेटर स्थितीचा अॅक्सेस करण्याची अनुमती देते."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"फोन नंबरवर प्रत्यक्ष कॉल करा"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"अॅपला तुमच्या हस्तक्षेपाशिवाय फोन नंबरवर कॉल करण्याची अनुमती देते. यामुळे अनपेक्षित शुल्के आकारली जाऊ शकतात किंवा अनपेक्षित कॉल येऊ शकतात. लक्षात ठेवा, की हे अॅपला आणीबाणी नंबरवर कॉल करण्याची अनुमती देत नाही. दुर्भावनापूर्ण अॅप्सनी तुमच्या कंफर्मेशनशिवाय कॉल केल्याने किंवा वाहक कोड डायल केल्याने त्यासाठी तुमच्याकडून शुल्क आकारले जाऊ शकते, ज्यामुळे इनकमिंग कॉल आपोआप दुसर्या नंबरवर फॉरवर्ड केले जातात."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"IMS कॉल सेवा अॅक्सेस करा"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"आपल्या हस्तक्षेपाशिवाय अॅपला कॉल करण्यासाठी IMS सेवा वापरण्याची अनुमती देते."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"फोन स्थिती आणि ओळख वाचा"</string>
@@ -644,7 +645,7 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"चेहरा ऑथेंटिकेशन केलेला आहे, कृपया कंफर्म प्रेस करा"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"फिंगरप्रिंट हार्डवेअर उपलब्ध नाही."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"फिंगरप्रिंट सेट करता आली नाही"</string>
- <string name="fingerprint_error_timeout" msgid="7361192266621252164">"फिंगरप्रिट सेट करण्याची वेळ संपली आहे. पुन्हा प्रयत्न करा."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"फिंगरप्रिंट सेट करण्याची वेळ संपली आहे. पुन्हा प्रयत्न करा."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"फिंगरप्रिंट ऑपरेशन रद्द झाले."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"वापरकर्त्याने फिंगरप्रिंट ऑपरेशन रद्द केले."</string>
<string name="fingerprint_error_lockout" msgid="6626753679019351368">"खूप जास्त प्रयत्न. त्याऐवजी स्क्रीन लॉक वापरा."</string>
@@ -1058,10 +1059,10 @@
<string name="factorytest_not_system" msgid="5658160199925519869">"FACTORY_TEST कृती फक्त /सिस्टीम/अॅप मध्ये इंस्टॉल केलेल्या पॅकेजसाठी सपोर्ट आहे."</string>
<string name="factorytest_no_action" msgid="339252838115675515">"FACTORY_TEST क्रिया प्रदान करणारे कोणतेही पॅकेज आढळले नाही."</string>
<string name="factorytest_reboot" msgid="2050147445567257365">"रीबूट करा"</string>
- <string name="js_dialog_title" msgid="7464775045615023241">"\"<xliff:g id="TITLE">%s</xliff:g>\" वरील पृष्ठ हे म्हणते:"</string>
+ <string name="js_dialog_title" msgid="7464775045615023241">"\"<xliff:g id="TITLE">%s</xliff:g>\" वरील पेज हे म्हणते:"</string>
<string name="js_dialog_title_default" msgid="3769524569903332476">"JavaScript"</string>
<string name="js_dialog_before_unload_title" msgid="7012587995876771246">"नेव्हिगेशनची पुष्टी करा"</string>
- <string name="js_dialog_before_unload_positive_button" msgid="4274257182303565509">"हे पृष्ठ सोडा"</string>
+ <string name="js_dialog_before_unload_positive_button" msgid="4274257182303565509">"हे पेज सोडा"</string>
<string name="js_dialog_before_unload_negative_button" msgid="3873765747622415310">"या पेजवर रहा"</string>
<string name="js_dialog_before_unload" msgid="7213364985774778744">"<xliff:g id="MESSAGE">%s</xliff:g>\n\nआपल्याला खात्री आहे की तुम्ही या पृष्ठावरून नेव्हिगेट करू इच्छिता?"</string>
<string name="autofill_window_title" msgid="4379134104008111961">"<xliff:g id="SERVICENAME">%1$s</xliff:g> सह ऑटोफील करा"</string>
@@ -1228,7 +1229,7 @@
<string name="force_close" msgid="9035203496368973803">"ठीक"</string>
<string name="report" msgid="2149194372340349521">"अहवाल द्या"</string>
<string name="wait" msgid="7765985809494033348">"प्रतीक्षा करा"</string>
- <string name="webpage_unresponsive" msgid="7850879412195273433">"पृष्ठ प्रतिसाद न देणारे झाले आहे.\n\nतुम्ही हे बंद करू इच्छिता?"</string>
+ <string name="webpage_unresponsive" msgid="7850879412195273433">"पेज प्रतिसाद न देणारे झाले आहे.\n\nतुम्ही हे बंद करू इच्छिता?"</string>
<string name="launch_warning_title" msgid="6725456009564953595">"अॅप पुनर्निर्देशित केला"</string>
<string name="launch_warning_replace" msgid="3073392976283203402">"<xliff:g id="APP_NAME">%1$s</xliff:g> आता चालत आहे."</string>
<string name="launch_warning_original" msgid="3332206576800169626">"<xliff:g id="APP_NAME">%1$s</xliff:g> मूळतः लाँच केले."</string>
@@ -2159,10 +2160,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"हा आशय कार्य ॲप्स वापरून उघडला जाऊ शकत नाही"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"हा आशय वैयक्तिक ॲप्ससह शेअर केला जाऊ शकत नाही"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"हा आशय वैयक्तिक ॲप्स वापरून उघडला जाऊ शकत नाही"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"कामाशी संबंधित अॅप्स थांबवली आहेत"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"पुन्हा सुरू करा"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"कोणतीही कार्य ॲप्स सपोर्ट करत नाहीत"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"कोणतीही वैयक्तिक ॲप्स सपोर्ट करत नाहीत"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"वैयक्तिक <xliff:g id="APP">%s</xliff:g> उघडा"</string>
diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml
index 04d4478..85393ff 100644
--- a/core/res/res/values-ms/strings.xml
+++ b/core/res/res/values-ms/strings.xml
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Sistem Android"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Beralih ke profil peribadi"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"Beralih ke profil kerja"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"Beralih kepada <xliff:g id="APP_NAME">%1$s</xliff:g> peribadi"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"Beralih kepada <xliff:g id="APP_NAME">%1$s</xliff:g> kerja"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Contacts"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"mengakses kenalan anda"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Lokasi"</string>
@@ -503,8 +505,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"Membenarkan apl mengawal penggetar."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"Membenarkan apl mengakses keadaan penggetar."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"panggil terus nombor telefon"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"Membenarkan apl memanggil nombor telefon tanpa campur tangan anda. Tindakan ini boleh menyebabkan caj atau panggilan yang tidak dijangka. Harap maklum bahawa tindakan ini tidak membenarkan apl menghubungi nombor kecemasan. Apl yang berniat jahat mungkin memakan belanja dengan membuat panggilan tanpa pengesahan anda atau mendail kod pembawa yang menyebabkan panggilan masuk dimajukan kepada nombor lain secara automatik."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"akses perkhidmatan panggilan IMS"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Membenarkan apl menggunakan perkhidmatan IMS untuk membuat panggilan tanpa campur tangan anda."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"baca status dan identiti telefon"</string>
@@ -634,7 +635,7 @@
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Terlalu terang"</string>
<string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Penekanan Kuasa dikesan"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Cuba selaraskan"</string>
- <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Tukar sedikit kedudukan jari anda setiap kali pergerakan dilakukan"</string>
+ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Ubah sedikit kedudukan jari pada setiap percubaan"</string>
<string-array name="fingerprint_acquired_vendor">
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"Cap jari tidak dikenali"</string>
@@ -693,7 +694,7 @@
<string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Lihat terus pada telefon anda"</string>
<string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Lihat terus pada telefon anda"</string>
<string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Lihat terus pada telefon anda"</string>
- <string name="face_acquired_obscured" msgid="4917643294953326639">"Alih keluar apa-apa yang melindungi wajah anda."</string>
+ <string name="face_acquired_obscured" msgid="4917643294953326639">"Tanggalkan apa-apa yang menutup wajah anda."</string>
<string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Bersihkan bahagian atas skrin anda, termasuk bar hitam"</string>
<!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
<skip />
@@ -701,7 +702,7 @@
<skip />
<string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Tidak dapat membuat model wajah anda. Cuba lagi."</string>
<string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Cermin mata gelap dikesan. Wajah anda mesti terlihat sepenuhnya."</string>
- <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Pelitup muka dikesan. Wajah anda mesti terlihat sepenuhnya."</string>
+ <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Pelitup muka dikesan. Wajah anda mesti kelihatan sepenuhnya."</string>
<string-array name="face_acquired_vendor">
</string-array>
<string name="face_error_hw_not_available" msgid="5085202213036026288">"Tdk dpt sahkan wajah. Perkakasan tidak tersedia."</string>
@@ -1728,7 +1729,7 @@
<string name="accessibility_gesture_3finger_instructional_text" msgid="3425123684990193765">"Untuk beralih antara ciri, leret ke atas menggunakan tiga jari dan tahan."</string>
<string name="accessibility_magnification_chooser_text" msgid="1502075582164931596">"Pembesaran"</string>
<string name="user_switched" msgid="7249833311585228097">"Pengguna semasa <xliff:g id="NAME">%1$s</xliff:g>."</string>
- <string name="user_switching_message" msgid="1912993630661332336">"Bertukar kepada <xliff:g id="NAME">%1$s</xliff:g>…"</string>
+ <string name="user_switching_message" msgid="1912993630661332336">"Beralih kepada <xliff:g id="NAME">%1$s</xliff:g>…"</string>
<string name="user_logging_out_message" msgid="7216437629179710359">"Log keluar daripada <xliff:g id="NAME">%1$s</xliff:g>…"</string>
<string name="owner_name" msgid="8713560351570795743">"Pemilik"</string>
<string name="guest_name" msgid="8502103277839834324">"Tetamu"</string>
@@ -2159,10 +2160,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Kandungan ini tidak boleh dibuka dengan apl kerja"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Kandungan ini tidak boleh dikongsi dengan apl peribadi"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Kandungan ini tidak boleh dibuka dengan apl peribadi"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Apl kerja dijeda"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"Nyahjeda"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Tiada apl kerja"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Tiada apl peribadi"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"Buka <xliff:g id="APP">%s</xliff:g> peribadi"</string>
diff --git a/core/res/res/values-my/strings.xml b/core/res/res/values-my/strings.xml
index e54ebd7..8dba098 100644
--- a/core/res/res/values-my/strings.xml
+++ b/core/res/res/values-my/strings.xml
@@ -250,7 +250,7 @@
<string name="global_action_bug_report" msgid="5127867163044170003">"အမှားရှာပြင် မှတ်တမ်း"</string>
<string name="global_action_logout" msgid="6093581310002476511">"စက်ရှင် ပြီးဆုံးပြီ"</string>
<string name="global_action_screenshot" msgid="2610053466156478564">"ဖန်သားပြင်ဓာတ်ပုံ"</string>
- <string name="bugreport_title" msgid="8549990811777373050">"ချွတ်ယွင်းမှတ်တမ်း"</string>
+ <string name="bugreport_title" msgid="8549990811777373050">"ချွတ်ယွင်းချက်အစီရင်ခံစာ"</string>
<string name="bugreport_message" msgid="5212529146119624326">"သင့်ရဲ့ လက်ရှိ စက်အခြေအနေ အချက်အလက်များကို အီးမေးလ် အနေဖြင့် ပေးပို့ရန် စုဆောင်းပါမည်။ အမှားရှာဖွေပြင်ဆင်မှုမှတ်တမ်းမှ ပေးပို့ရန် အသင့်ဖြစ်သည်အထိ အချိန် အနည်းငယ်ကြာမြင့်မှာ ဖြစ်သဖြင့် သည်းခံပြီး စောင့်ပါရန်"</string>
<string name="bugreport_option_interactive_title" msgid="7968287837902871289">"လက်ငင်းတုံ့ပြန်နိုင်သည့် အစီရင်ခံချက်"</string>
<string name="bugreport_option_interactive_summary" msgid="8493795476325339542">"အခြေအနေတော်တော်များများတွင် ၎င်းကိုအသုံးပြုပါ။ ၎င်းသည် အစီရင်ခံစာကို မှတ်သားခြင်း၊ ပြဿနာအကြောင်း နောက်ထပ်အသေးစိတ်များကို ထည့်သွင်းခြင်းနှင့် မျက်နှာပြင်ပုံဖမ်းယူခြင်းတို့ကို ပြုလုပ်ခွင့်ပေးပါသည်။ ပေးပို့ရန် အလွန်ကြာပြီး အသုံးပြုခြင်းနည်းပါးသည့်အပိုင်းကို ၎င်းက ချန်ခဲ့နိုင်ပါသည်။"</string>
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Android စနစ်"</string>
<string name="user_owner_label" msgid="8628726904184471211">"ကိုယ်ရေးကိုယ်တာသုံး ပရိုဖိုင်သို့ ပြောင်းရန်"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"အလုပ်ပရိုဖိုင်သို့ ပြောင်းရန်"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"ကိုယ်ပိုင် <xliff:g id="APP_NAME">%1$s</xliff:g> သို့ပြောင်းရန်"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"အလုပ်သုံး <xliff:g id="APP_NAME">%1$s</xliff:g> သို့ပြောင်းရန်"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"အဆက်အသွယ်များ"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"သင့် အဆက်အသွယ်များအား ဝင်ရောက်သုံးရန်"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"တည်နေရာ"</string>
@@ -503,8 +505,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"အက်ပ်အား တုန်ခါစက်ကို ထိန်းချုပ်ခွင့် ပြုသည်။"</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"အက်ပ်ကို တုန်ခါမှုအခြေအနေအား သုံးခွင့်ပေးပါ။"</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"ဖုန်းနံပါတ်များကိုတိုက်ရိုက်ခေါ်ဆိုခြင်း"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"သင့်ဆောင်ရွက်မှုမပါဘဲ အက်ပ်ကို ဖုန်းနံပါတ်များ ခေါ်ခွင့်ပြုသည်။ ထို့ကြောင့် မမျှော်လင့်သော ကျသင့်ငွေ သို့မဟုတ် ခေါ်ဆိုမှုများ ရှိနိုင်သည်။ ၎င်းသည် အက်ပ်ကို အရေးပေါ် နံပါတ်များ ခေါ်ဆိုခွင့်ပြုခြင်း မဟုတ်ပါ။ မသမာသော အက်ပ်များက သင့်အတည်ပြုချက်မပါဘဲ ဖုန်းခေါ်ခြင်းဖြင့် သင့်အား ငွေကြေးကုန်ကျစေနိုင်သည် (သို့) ၎င်းတို့က အဝင်ခေါ်ဆိုမှုများအား အခြားဖုန်းနံပါတ်သို့ အလိုအလျောက်ထပ်ဆင့်ပို့သည့် မိုဘိုင်းဖုန်းကုမ္ပဏီကုဒ်များကို ခေါ်ဆိုနိုင်သည်။"</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"IMS ဖုန်းခေါ်ဆိုမှု ဝန်ဆောင်ဌာန ဝင်ကြည့်ပါ"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"သင့်ရဲ့ဝင်ရောက်စွက်ဖက်မှုမပါဘဲ IMS ဝန်ဆောင်မှုကိုအသုံးပြုပြီး ဖုန်းခေါ်ဆိုနိုင်ရန် အပ်ဖ်ကို ခွင့်ပြုထားပါ။"</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"ဖုန်းရဲ့ အခြေအနေ နှင့် အမှတ်သညာအား ဖတ်ခြင်း"</string>
@@ -634,7 +635,7 @@
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"အလွန် လင်းသည်"</string>
<string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"ဖွင့်ပိတ်ခလုတ် နှိပ်လိုက်သည်"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"ပြင်ဆင်ကြည့်ပါ"</string>
- <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"အကြိမ်တိုင်း သင့်လက်ချောင်း၏ အနေအထားကို အနည်းငယ်ပြောင်းပါ"</string>
+ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"အကြိမ်တိုင်း လက်ချောင်းအနေအထားကို အနည်းငယ်ပြောင်းပါ"</string>
<string-array name="fingerprint_acquired_vendor">
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"လက်ဗွေကို မသိရှိပါ"</string>
@@ -681,7 +682,7 @@
<string name="face_acquired_too_close" msgid="4453646176196302462">"ဖုန်းကို အဝေးသို့ခွာပါ"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"ဖုန်းကို အနားသို့ပိုတိုးပါ"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"ဖုန်းကို ပိုမြှင့်လိုက်ပါ"</string>
- <string name="face_acquired_too_low" msgid="4075391872960840081">"ဖုန်းကို အောက်ပိုနှိမ့်ပါ"</string>
+ <string name="face_acquired_too_low" msgid="4075391872960840081">"ဖုန်းကို ပိုနှိမ့်လိုက်ပါ"</string>
<string name="face_acquired_too_right" msgid="6245286514593540859">"ဖုန်းကို သင့်ဘယ်ဘက်သို့ ရွှေ့ပါ"</string>
<string name="face_acquired_too_left" msgid="9201762240918405486">"ဖုန်းကို သင့်ညာဘက်သို့ ရွှေ့ပါ"</string>
<string name="face_acquired_poor_gaze" msgid="4427153558773628020">"သင့်စက်ပစ္စည်းကို တည့်တည့်ကြည့်ပါ။"</string>
@@ -701,7 +702,7 @@
<skip />
<string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"သင့်မျက်နှာနမူနာ ပြုလုပ်၍မရပါ။ ထပ်စမ်းကြည့်ပါ။"</string>
<string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"အရောင်ရင့်သောမျက်မှန် တွေ့သည်။ သင့်မျက်နှာကို အပြည့်အဝ မြင်ရရန်လိုအပ်သည်။"</string>
- <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"မျက်နှာဖုံး တွေ့သည်။ သင့်မျက်နှာကို အပြည့်အဝ မြင်ရရန်လိုအပ်သည်။"</string>
+ <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"မျက်နှာ ဖုံးနေသည်။ သင့်မျက်နှာအပြည့် မြင်ရရန်လိုသည်။"</string>
<string-array name="face_acquired_vendor">
</string-array>
<string name="face_error_hw_not_available" msgid="5085202213036026288">"မျက်နှာကို အတည်ပြု၍ မရပါ။ ဟာ့ဒ်ဝဲ မရနိုင်ပါ။"</string>
@@ -971,7 +972,7 @@
<string name="lockscreen_password_wrong" msgid="8605355913868947490">"ထပ် စမ်းပါ"</string>
<string name="lockscreen_storage_locked" msgid="634993789186443380">"ဝန်ဆောင်မှုနှင့် ဒေတာအားလုံးအတွက် လော့ခ်ဖွင့်ပါ"</string>
<string name="faceunlock_multiple_failures" msgid="681991538434031708">"မျက်မှာပြ လော့ခ်ဖွင့်ခြင်း ခွင့်ပြုသော အကြိမ်ရေထက် ကျော်လွန်သွားပါပြီ"</string>
- <string name="lockscreen_missing_sim_message_short" msgid="1229301273156907613">"ဆင်းမ်မရှိပါ"</string>
+ <string name="lockscreen_missing_sim_message_short" msgid="1229301273156907613">"ဆင်းမ်ကတ် မရှိပါ"</string>
<string name="lockscreen_missing_sim_message" product="tablet" msgid="3986843848305639161">"တက်ဘလက်တွင် ဆင်းမ်မရှိပါ။"</string>
<string name="lockscreen_missing_sim_message" product="tv" msgid="3903140876952198273">"သင့် Android TV စက်တွင် ဆင်းမ်မရှိပါ။"</string>
<string name="lockscreen_missing_sim_message" product="default" msgid="6184187634180854181">"ဖုန်းတွင် ဆင်းမ်မရှိပါ။"</string>
@@ -1191,7 +1192,7 @@
<string name="whichGiveAccessToApplicationLabel" msgid="7805857277166106236">"ဖွင့်ခွင့်ပေးရန်"</string>
<string name="whichEditApplication" msgid="6191568491456092812">"...နှင့် တည်းဖြတ်ရန်"</string>
<string name="whichEditApplicationNamed" msgid="8096494987978521514">"%1$s နှင့် တည်းဖြတ်ရန်"</string>
- <string name="whichEditApplicationLabel" msgid="1463288652070140285">"တည်းဖြတ်ပါ"</string>
+ <string name="whichEditApplicationLabel" msgid="1463288652070140285">"တည်းဖြတ်ရန်"</string>
<string name="whichSendApplication" msgid="4143847974460792029">"မျှဝေပါ"</string>
<string name="whichSendApplicationNamed" msgid="4470386782693183461">"%1$sနှင့် မျှဝေရန်"</string>
<string name="whichSendApplicationLabel" msgid="7467813004769188515">"မျှဝေပါ"</string>
@@ -1368,7 +1369,7 @@
<string name="usb_power_notification_message" msgid="7284765627437897702">"ချိတ်ဆက်ထားသည့် စက်ပစ္စည်းကို အားသွင်းနေသည်။ နောက်ထပ်ရွေးချယ်စရာများအတွက် တို့ပါ။"</string>
<string name="usb_unsupported_audio_accessory_title" msgid="2335775548086533065">"အန်နာလော့ အသံကိရိယာကို တွေ့ထားပါသည်"</string>
<string name="usb_unsupported_audio_accessory_message" msgid="1300168007129796621">"တပ်ဆင်ထားသော ကိရိယာကို ဤဖုန်းနှင့် တွဲသုံး၍မရပါ။ ပိုမိုလေ့လာရန် တို့ပါ။"</string>
- <string name="adb_active_notification_title" msgid="408390247354560331">"USB အမှားရှာပြင်စနစ် ချိတ်ဆက်ထားသည်"</string>
+ <string name="adb_active_notification_title" msgid="408390247354560331">"USB အမှားရှာပြင်ခြင်း ချိတ်ဆက်ထားသည်"</string>
<string name="adb_active_notification_message" msgid="5617264033476778211">"USB အမှားရှာပြင်ခြင်းကို ပိတ်ရန် တို့ပါ"</string>
<string name="adb_active_notification_message" product="tv" msgid="6624498401272780855">"USB ဖြင့် အမှားရှာပြင်ခြင်းကို ပိတ်ရန် ရွေးပါ။"</string>
<string name="adbwifi_active_notification_title" msgid="6147343659168302473">"ကြိုးမဲ့ အမှားရှာပြင်ခြင်းကို ချိတ်ဆက်ပြီးပြီ"</string>
@@ -1728,7 +1729,7 @@
<string name="accessibility_gesture_3finger_instructional_text" msgid="3425123684990193765">"ဝန်ဆောင်မှုများအကြား ပြောင်းရန် လက်သုံးချောင်းဖြင့် အပေါ်သို့ ပွတ်ဆွဲပြီး ဖိထားပါ။"</string>
<string name="accessibility_magnification_chooser_text" msgid="1502075582164931596">"ချဲ့ခြင်း"</string>
<string name="user_switched" msgid="7249833311585228097">"လက်ရှိအသုံးပြုနေသူ <xliff:g id="NAME">%1$s</xliff:g>."</string>
- <string name="user_switching_message" msgid="1912993630661332336">"<xliff:g id="NAME">%1$s</xliff:g>သို့ ပြောင်းနေ…"</string>
+ <string name="user_switching_message" msgid="1912993630661332336">"<xliff:g id="NAME">%1$s</xliff:g>သို့ ပြောင်းနေသည်…"</string>
<string name="user_logging_out_message" msgid="7216437629179710359">"<xliff:g id="NAME">%1$s</xliff:g>ကို ထွက်ပစ်ပါတော့မည်..."</string>
<string name="owner_name" msgid="8713560351570795743">"ပိုင်ရှင်"</string>
<string name="guest_name" msgid="8502103277839834324">"ဧည့်သည်"</string>
@@ -1952,7 +1953,7 @@
<string name="app_suspended_more_details" msgid="211260942831587014">"ပိုမိုလေ့လာရန်"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"အက်ပ်ကို ခဏမရပ်တော့ရန်"</string>
<string name="work_mode_off_title" msgid="6367463960165135829">"အလုပ်သုံးအက်ပ် ပြန်ဖွင့်မလား။"</string>
- <string name="work_mode_turn_on" msgid="5316648862401307800">"ပြန်ဖွင့်ရန်"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"ပြန်စရန်"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"အရေးပေါ်"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"အက်ပ်ကို မရနိုင်ပါ"</string>
<string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> ကို ယခု မရနိုင်ပါ။"</string>
@@ -2159,10 +2160,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"ဤအကြောင်းအရာကို အလုပ်သုံးအက်ပ်များဖြင့် မဖွင့်နိုင်ပါ"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"ဤအကြောင်းအရာကို ကိုယ်ပိုင်အက်ပ်များဖြင့် မမျှဝေနိုင်ပါ"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"ဤအကြောင်းအရာကို ကိုယ်ပိုင်အက်ပ်များဖြင့် မဖွင့်နိုင်ပါ"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"အလုပ်သုံးအက်ပ်များကို ခေတ္တရပ်ထားသည်"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"ပြန်ဖွင့်ရန်"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"အလုပ်သုံးအက်ပ်များ မရှိပါ"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"ကိုယ်ပိုင်အက်ပ်များ မရှိပါ"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"ကိုယ်ရေးကိုယ်တာသုံး <xliff:g id="APP">%s</xliff:g> ဖွင့်ခြင်း"</string>
@@ -2318,11 +2317,11 @@
<string name="permdesc_startForegroundServicesFromBackground" msgid="4071826571656001537">"နောက်ခံမှနေ၍ မျက်နှာစာဝန်ဆောင်မှုများ စတင်ရန် တွဲဖက် အက်ပ်ကို ခွင့်ပြုသည်။"</string>
<string name="mic_access_on_toast" msgid="2666925317663845156">"မိုက်ခရိုဖုန်း သုံးနိုင်သည်"</string>
<string name="mic_access_off_toast" msgid="8111040892954242437">"မိုက်ခရိုဖုန်း ပိတ်ထားသည်"</string>
- <string name="concurrent_display_notification_name" msgid="1526911253558311131">"စခရင်နှစ်ခု"</string>
- <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"‘စခရင်နှစ်ခု’ ဖွင့်ထားသည်"</string>
- <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g> သည် အကြောင်းအရာကို ဖန်သားပြင်နှစ်ခုစလုံးတွင် ပြနေသည်"</string>
+ <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Dual screen"</string>
+ <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Dual screen ဖွင့်ထားသည်"</string>
+ <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g> သည် အကြောင်းအရာကို ပြရန် ဖန်သားပြင်နှစ်ခုစလုံးကို သုံးနေသည်"</string>
<string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"စက်ပစ္စည်း အလွန်ပူနေသည်"</string>
- <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"သင့်ဖုန်း အလွန်ပူနေသဖြင့် ‘စခရင်နှစ်ခု’ သုံး၍မရပါ"</string>
+ <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"သင့်ဖုန်း အလွန်ပူနေသဖြင့် Dual screen သုံး၍မရပါ"</string>
<string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"Dual Screen သုံး၍မရပါ"</string>
<string name="concurrent_display_notification_power_save_content" msgid="2198116070583851493">"‘ဘက်ထရီ အားထိန်း’ ဖွင့်ထားသဖြင့် Dual Screen သုံး၍မရပါ။ ၎င်းကို ဆက်တင်များတွင် ပိတ်နိုင်သည်။"</string>
<string name="device_state_notification_settings_button" msgid="691937505741872749">"ဆက်တင်များသို့ သွားရန်"</string>
diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml
index 56c191e..c0ae444 100644
--- a/core/res/res/values-nb/strings.xml
+++ b/core/res/res/values-nb/strings.xml
@@ -144,7 +144,7 @@
<string name="wifi_calling_off_summary" msgid="5626710010766902560">"Av"</string>
<string name="wfc_mode_wifi_preferred_summary" msgid="1035175836270943089">"Ring via Wifi"</string>
<string name="wfc_mode_cellular_preferred_summary" msgid="4958965609212575619">"Ring over mobilnettverk"</string>
- <string name="wfc_mode_wifi_only_summary" msgid="104951993894678665">"Bare Wifi"</string>
+ <string name="wfc_mode_wifi_only_summary" msgid="104951993894678665">"Bare wifi"</string>
<!-- no translation found for crossSimFormat_spn (9125246077491634262) -->
<skip />
<string name="crossSimFormat_spn_cross_sim_calling" msgid="5620807020002879057">"<xliff:g id="SPN">%s</xliff:g>-reserve for anrop"</string>
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Android-system"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Bytt til personlig profil"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"Bytt til jobbprofil"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"Bytt til <xliff:g id="APP_NAME">%1$s</xliff:g> for personlig bruk"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"Bytt til <xliff:g id="APP_NAME">%1$s</xliff:g> for jobb"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Kontakter"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"se kontaktene dine"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Posisjon"</string>
@@ -503,8 +505,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"Lar appen kontrollere vibreringsfunksjonen."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"Gir appen tilgang til vibreringstilstanden."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"ringe telefonnummer direkte"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"Dette gir appen tillatelse til å ringe telefonnumre uten at du gjør noe. Dette kan føre til uventede kostnader eller anrop. Vær oppmerksom på at dette ikke fører til at appen kan ringe nødnumre. Skadelige apper kan føre til kostnader ved at de kan ringe uten å få bekreftelse fra deg, eller de kan ringe operatørkoder som fører til at innkommende anrop automatisk viderekobles til andre numre."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"få tilgang til nettprattjenesten for ringing"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Lar appen bruke nettprattjenesten til å ringe uten at du gjør noe."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"lese telefonstatus og -identitet"</string>
@@ -634,7 +635,7 @@
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"For lyst"</string>
<string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Trykk på av/på-knappen er registrert"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Prøv å justere"</string>
- <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Endre posisjonen til fingeren litt hver gang"</string>
+ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Endre fingerens posisjon litt hver gang"</string>
<string-array name="fingerprint_acquired_vendor">
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"Gjenkjenner ikke fingeravtrykket"</string>
@@ -701,7 +702,7 @@
<skip />
<string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Kan ikke lage ansiktsmodell. Prøv på nytt."</string>
<string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Mørke briller er registrert. Ansiktet må være helt synlig."</string>
- <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Ansiktsdekke er registrert. Ansiktet må være helt synlig."</string>
+ <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Ansiktet er tildekket. Hele ansiktet må vises."</string>
<string-array name="face_acquired_vendor">
</string-array>
<string name="face_error_hw_not_available" msgid="5085202213036026288">"Kan ikke bekrefte ansikt. Utilgjengelig maskinvare."</string>
@@ -1121,7 +1122,7 @@
<string name="duration_days_shortest_future" msgid="3392722163935571543">"om <xliff:g id="COUNT">%d</xliff:g> d"</string>
<string name="duration_years_shortest_future" msgid="5537464088352970388">"om <xliff:g id="COUNT">%d</xliff:g> år"</string>
<string name="duration_minutes_relative" msgid="8620337701051015593">"{count,plural, =1{for # minutt siden}other{For # minutter siden}}"</string>
- <string name="duration_hours_relative" msgid="4836449961693180253">"{count,plural, =1{For # time siden}other{For # timer siden}}"</string>
+ <string name="duration_hours_relative" msgid="4836449961693180253">"{count,plural, =1{# time siden}other{# timer siden}}"</string>
<string name="duration_days_relative" msgid="621965767567258302">"{count,plural, =1{For # dag siden}other{For # dager siden}}"</string>
<string name="duration_years_relative" msgid="8731202348869424370">"{count,plural, =1{For # år siden}other{For # år siden}}"</string>
<string name="duration_minutes_relative_future" msgid="5259574171747708115">"{count,plural, =1{# minutt}other{# minutter}}"</string>
@@ -1364,7 +1365,7 @@
<string name="usb_midi_notification_title" msgid="7404506788950595557">"MIDI via USB er slått på"</string>
<string name="usb_uvc_notification_title" msgid="2030032862673400008">"Enheten er koblet til som webkamera"</string>
<string name="usb_accessory_notification_title" msgid="1385394660861956980">"USB-tilbehør er tilkoblet"</string>
- <string name="usb_notification_message" msgid="4715163067192110676">"Trykk for å få flere alternativ."</string>
+ <string name="usb_notification_message" msgid="4715163067192110676">"Trykk for flere alternativer."</string>
<string name="usb_power_notification_message" msgid="7284765627437897702">"Den tilkoblede enheten lades. Trykk for å se flere alternativer."</string>
<string name="usb_unsupported_audio_accessory_title" msgid="2335775548086533065">"Analogt lydtilbehør ble oppdaget"</string>
<string name="usb_unsupported_audio_accessory_message" msgid="1300168007129796621">"Den tilkoblede enheten er ikke kompatibel med denne telefonen. Trykk for å finne ut mer."</string>
@@ -2159,10 +2160,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Dette innholdet kan ikke åpnes med jobbapper"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Dette innholdet kan ikke deles med personlige apper"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Dette innholdet kan ikke åpnes med personlige apper"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Jobbapper er satt på pause"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"Slå av pausen"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Ingen jobbapper"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Ingen personlige apper"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"Åpne <xliff:g id="APP">%s</xliff:g> personlig"</string>
diff --git a/core/res/res/values-ne/strings.xml b/core/res/res/values-ne/strings.xml
index b11d76a..fd66175 100644
--- a/core/res/res/values-ne/strings.xml
+++ b/core/res/res/values-ne/strings.xml
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Android सिस्टम"</string>
<string name="user_owner_label" msgid="8628726904184471211">"व्यक्तिगत प्रोफाइलमा बदल्नुहोस्"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"कार्य प्रोफाइलमा बदल्नुहोस्"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"<xliff:g id="APP_NAME">%1$s</xliff:g> को व्यक्तिगत प्रोफाइल प्रयोग गर्नुहोस्"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"<xliff:g id="APP_NAME">%1$s</xliff:g> को कार्य प्रोफाइल प्रयोग गर्नुहोस्"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"सम्पर्कहरू"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"तपाईँको सम्पर्कमाथि पहुँच गर्नुहोस्"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"लोकेसन"</string>
@@ -1367,7 +1369,7 @@
<string name="usb_power_notification_message" msgid="7284765627437897702">"कनेक्ट गरिएको डिभाइस चार्ज गर्दै। थप विकल्पहरूका लागि ट्याप गर्नुहोस्।"</string>
<string name="usb_unsupported_audio_accessory_title" msgid="2335775548086533065">"एनालग अडियोको सहायक उपकरण पत्ता लाग्यो"</string>
<string name="usb_unsupported_audio_accessory_message" msgid="1300168007129796621">"संलग्न गरिएको यन्त्र यो फोनसँग कम्प्याटिबल छैन। थप जान्न ट्याप गर्नुहोस्।"</string>
- <string name="adb_active_notification_title" msgid="408390247354560331">"USB डिबग गर्न ADB कनेक्ट गरिएको छ"</string>
+ <string name="adb_active_notification_title" msgid="408390247354560331">"USB डिबगिङ कनेक्ट गरिएको छ कनेक्ट गरिएको छ"</string>
<string name="adb_active_notification_message" msgid="5617264033476778211">"USB डिबगिङ अफ गर्न ट्याप गर्नुहोस्"</string>
<string name="adb_active_notification_message" product="tv" msgid="6624498401272780855">"USB डिबगिङलाई असक्षम पार्न ट्याप गर्नुहोस्।"</string>
<string name="adbwifi_active_notification_title" msgid="6147343659168302473">"वायरलेस डिबगिङ जोडियो"</string>
@@ -1645,8 +1647,8 @@
<string name="kg_wrong_password" msgid="2384677900494439426">"गलत पासवर्ड"</string>
<string name="kg_wrong_pin" msgid="3680925703673166482">"गलत PIN"</string>
<string name="kg_pattern_instructions" msgid="8366024510502517748">"आफ्नो ढाँचा कोर्नुहोस्"</string>
- <string name="kg_sim_pin_instructions" msgid="6479401489471690359">"SIM PIN प्रविष्टि गर्नुहोस्"</string>
- <string name="kg_pin_instructions" msgid="7355933174673539021">"PIN प्रविष्टि गर्नुहोस्"</string>
+ <string name="kg_sim_pin_instructions" msgid="6479401489471690359">"SIM PIN हाल्नुहोस्"</string>
+ <string name="kg_pin_instructions" msgid="7355933174673539021">"PIN हाल्नुहोस्"</string>
<string name="kg_password_instructions" msgid="7179782578809398050">"पासवर्ड प्रविष्टि गर्नुहोस्"</string>
<string name="kg_puk_enter_puk_hint" msgid="6696187482616360994">"SIM कार्ड अहिले असक्षम छ। सुचारु गर्नको लागि PUK कोड प्रविष्टि गर्नुहोस्। विवरणको लागि वाहकलाई सम्पर्क गर्नुहोस्।"</string>
<string name="kg_puk_enter_pin_hint" msgid="8190982314659429770">"इच्छित PIN कोड प्रविष्टि गर्नुहोस्"</string>
@@ -1700,7 +1702,7 @@
<string name="accessibility_service_screen_control_title" msgid="190017412626919776">"स्क्रिन हेर्नुहोस् र नियन्त्रण गर्नुहोस्"</string>
<string name="accessibility_service_screen_control_description" msgid="6946315917771791525">"यसले स्क्रिनमा देखिने सबै सामग्री पढ्न सक्छ र अन्य एपहरूमा उक्त सामग्री देखाउन सक्छ।"</string>
<string name="accessibility_service_action_perform_title" msgid="779670378951658160">"कारबाहीहरू हेर्नुहोस् र तिनमा कार्य गर्नुहोस्"</string>
- <string name="accessibility_service_action_perform_description" msgid="2718852014003170558">"यसले कुनै एप वा हार्डवेयर सेन्सरसँग तपाईंले गर्ने अन्तर्क्रियाको ट्र्याक गर्न सक्छ र तपाईंका तर्फबाट एपहरूसँग अन्तर्क्रिया गर्न सक्छ।"</string>
+ <string name="accessibility_service_action_perform_description" msgid="2718852014003170558">"यसले कुनै एप वा हार्डवेयर सेन्सरसँग तपाईंले गर्ने अन्तर्क्रिया ट्र्याक गर्न सक्छ र तपाईंका तर्फबाट एपहरूसँग अन्तर्क्रिया गर्न सक्छ।"</string>
<string name="accessibility_dialog_button_allow" msgid="2092558122987144530">"अनुमति दिनुहोस्"</string>
<string name="accessibility_dialog_button_deny" msgid="4129575637812472671">"नदिनुहोस्"</string>
<string name="accessibility_select_shortcut_menu_title" msgid="6002726538854613272">"कुनै सुविधा प्रयोग गर्न थाल्न उक्त सुविधामा ट्याप गर्नुहोस्:"</string>
@@ -1836,8 +1838,8 @@
<string name="reason_service_unavailable" msgid="5288405248063804713">"प्रिन्ट सेवा सक्षम गरिएको छैन"</string>
<string name="print_service_installed_title" msgid="6134880817336942482">"<xliff:g id="NAME">%s</xliff:g> सेवा स्थापित भयो"</string>
<string name="print_service_installed_message" msgid="7005672469916968131">"सक्षम पार्न ट्याप गर्नुहोस्"</string>
- <string name="restr_pin_enter_admin_pin" msgid="1199419462726962697">"प्रशासकको PIN प्रविष्टि गर्नुहोस्"</string>
- <string name="restr_pin_enter_pin" msgid="373139384161304555">"PIN प्रविष्टि गर्नुहोस्"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="1199419462726962697">"प्रशासकको PIN हाल्नुहोस्"</string>
+ <string name="restr_pin_enter_pin" msgid="373139384161304555">"PIN हाल्नुहोस्"</string>
<string name="restr_pin_incorrect" msgid="3861383632940852496">"गलत"</string>
<string name="restr_pin_enter_old_pin" msgid="7537079094090650967">"वर्तमान PIN"</string>
<string name="restr_pin_enter_new_pin" msgid="3267614461844565431">"नयाँ PIN"</string>
diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml
index 9605db1..a4d80c7 100644
--- a/core/res/res/values-nl/strings.xml
+++ b/core/res/res/values-nl/strings.xml
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Android-systeem"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Schakelen naar persoonlijk profiel"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"Schakelen naar werkprofiel"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"Overschakelen naar persoonlijk <xliff:g id="APP_NAME">%1$s</xliff:g>-profiel"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"Overschakelen naar <xliff:g id="APP_NAME">%1$s</xliff:g>-werkprofiel"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Contacten"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"toegang krijgen tot je contacten"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Locatie"</string>
@@ -503,8 +505,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"Hiermee kan de app de trilstand beheren."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"Hiermee heeft de app toegang tot de status van de trilstand."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"telefoonnummers rechtstreeks bellen"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"Hiermee kan de app telefoonnummers bellen zonder je tussenkomst. Dit kan resulteren in onverwachte kosten of gesprekken. Dit geeft de app geen rechten om alarmnummers te bellen. Kwaadwillende apps kunnen je geld kosten omdat ze zonder je toestemming kunnen bellen. Ook kunnen ze providercodes kiezen waardoor inkomende gesprekken automatisch worden doorgestuurd naar een ander nummer."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"toegang tot IMS-service voor bellen"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Hiermee kan de app de IMS-service gebruiken om te bellen zonder je tussenkomst."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"telefoonstatus en -identiteit lezen"</string>
@@ -1239,7 +1240,7 @@
<string name="unsupported_display_size_show" msgid="980129850974919375">"Altijd tonen"</string>
<string name="unsupported_compile_sdk_message" msgid="7326293500707890537">"<xliff:g id="APP_NAME">%1$s</xliff:g> is gemaakt voor een niet-geschikte versie van het Android-besturingssysteem en kan onverwacht gedrag vertonen. Mogelijk is er een geüpdatete versie van de app beschikbaar."</string>
<string name="unsupported_compile_sdk_show" msgid="1601210057960312248">"Altijd tonen"</string>
- <string name="unsupported_compile_sdk_check_update" msgid="1103639989147664456">"Checken op updates"</string>
+ <string name="unsupported_compile_sdk_check_update" msgid="1103639989147664456">"Controleren op updates"</string>
<string name="smv_application" msgid="3775183542777792638">"De app <xliff:g id="APPLICATION">%1$s</xliff:g> (proces <xliff:g id="PROCESS">%2$s</xliff:g>) heeft het zelf afgedwongen StrictMode-beleid geschonden."</string>
<string name="smv_process" msgid="1398801497130695446">"Het proces <xliff:g id="PROCESS">%1$s</xliff:g> heeft het zelf afgedwongen StrictMode-beleid geschonden."</string>
<string name="android_upgrading_title" product="default" msgid="7279077384220829683">"Telefoon wordt geüpdatet…"</string>
@@ -1975,7 +1976,7 @@
<string name="app_streaming_blocked_message_for_settings_dialog" product="tablet" msgid="3286849551133045896">"Je hebt hier geen toegang toe op je <xliff:g id="DEVICE">%1$s</xliff:g>. Probeer het in plaats daarvan op je tablet."</string>
<string name="app_streaming_blocked_message_for_settings_dialog" product="default" msgid="6264287556598916295">"Je hebt hier geen toegang toe op je <xliff:g id="DEVICE">%1$s</xliff:g>. Probeer het in plaats daarvan op je telefoon."</string>
<string name="deprecated_target_sdk_message" msgid="5246906284426844596">"Deze app is ontworpen voor een oudere versie van Android. De app werkt misschien niet goed en bevat niet de nieuwste beveiligings- en privacybeschermingsopties. Check op een update of neem contact op met de ontwikkelaar van de app."</string>
- <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Checken op updates"</string>
+ <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Controleren op updates"</string>
<string name="new_sms_notification_title" msgid="6528758221319927107">"Je hebt nieuwe berichten"</string>
<string name="new_sms_notification_content" msgid="3197949934153460639">"Open je sms-app om ze te bekijken"</string>
<string name="profile_encrypted_title" msgid="9001208667521266472">"Functionaliteit kan beperkt zijn"</string>
@@ -2159,10 +2160,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Deze content kan niet worden geopend met werk-apps"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Deze content kan niet worden gedeeld met persoonlijke apps"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Deze content kan niet worden geopend met persoonlijke apps"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Werk-apps zijn onderbroken"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"Hervatten"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Geen werk-apps"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Geen persoonlijke apps"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"Persoonlijke <xliff:g id="APP">%s</xliff:g> openen"</string>
@@ -2319,7 +2318,7 @@
<string name="mic_access_on_toast" msgid="2666925317663845156">"Microfoon is beschikbaar"</string>
<string name="mic_access_off_toast" msgid="8111040892954242437">"Microfoon is geblokkeerd"</string>
<string name="concurrent_display_notification_name" msgid="1526911253558311131">"Dubbel scherm"</string>
- <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Dubbel scherm is aan"</string>
+ <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Dubbel scherm staat aan"</string>
<string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g> gebruikt beide schermen om content te tonen"</string>
<string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"Het apparaat is te warm"</string>
<string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"Dubbel scherm is niet beschikbaar, omdat je telefoon te warm wordt"</string>
diff --git a/core/res/res/values-or/strings.xml b/core/res/res/values-or/strings.xml
index 69cfaae..fa3fbc4 100644
--- a/core/res/res/values-or/strings.xml
+++ b/core/res/res/values-or/strings.xml
@@ -288,16 +288,18 @@
<string name="notification_channel_usb" msgid="1528280969406244896">"USB ସଂଯୋଗ"</string>
<string name="notification_channel_heavy_weight_app" msgid="17455756500828043">"ଆପ୍ ଚାଲୁଛି"</string>
<string name="notification_channel_foreground_service" msgid="7102189948158885178">"ଆପ୍ଗୁଡ଼ିକ ବ୍ୟାଟେରୀ ଖର୍ଚ୍ଚ କରିଥା\'ନ୍ତି"</string>
- <string name="notification_channel_accessibility_magnification" msgid="1707913872219798098">"ମ୍ୟାଗ୍ନିଫିକେସନ୍"</string>
+ <string name="notification_channel_accessibility_magnification" msgid="1707913872219798098">"ମେଗ୍ନିଫିକେସନ"</string>
<string name="notification_channel_accessibility_security_policy" msgid="1727787021725251912">"ଆକ୍ସେସିବିଲିଟୀ ବ୍ୟବହାର"</string>
<string name="foreground_service_app_in_background" msgid="1439289699671273555">"<xliff:g id="APP_NAME">%1$s</xliff:g> ବ୍ୟାଟେରୀ ବ୍ୟବହାର କରୁଛି"</string>
<string name="foreground_service_apps_in_background" msgid="7340037176412387863">"<xliff:g id="NUMBER">%1$d</xliff:g>ଟି ଆପ୍ ବ୍ୟାଟେରୀ ବ୍ୟବହାର କରୁଛନ୍ତି"</string>
<string name="foreground_service_tap_for_details" msgid="9078123626015586751">"ବ୍ୟାଟେରୀ ଏବଂ ଡାଟା ବ୍ୟବହାର ଉପରେ ବିବରଣୀ ପାଇଁ ଟାପ୍ କରନ୍ତୁ"</string>
<string name="foreground_service_multiple_separator" msgid="5002287361849863168">"<xliff:g id="LEFT_SIDE">%1$s</xliff:g>, <xliff:g id="RIGHT_SIDE">%2$s</xliff:g>"</string>
<string name="safeMode" msgid="8974401416068943888">"ସୁରକ୍ଷିତ ମୋଡ୍"</string>
- <string name="android_system_label" msgid="5974767339591067210">"Android ସିଷ୍ଟମ୍"</string>
+ <string name="android_system_label" msgid="5974767339591067210">"Android ସିଷ୍ଟମ"</string>
<string name="user_owner_label" msgid="8628726904184471211">"ବ୍ୟକ୍ତିଗତ ପ୍ରୋଫାଇଲ୍କୁ ଫେରିଆସନ୍ତୁ"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"କାର୍ଯ୍ୟ ପ୍ରୋଫାଇଲ୍କୁ ଯାଆନ୍ତୁ"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"ବ୍ୟକ୍ତିଗତ <xliff:g id="APP_NAME">%1$s</xliff:g>କୁ ସୁଇଚ କରନ୍ତୁ"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"ୱାର୍କ <xliff:g id="APP_NAME">%1$s</xliff:g>କୁ ସୁଇଚ କରନ୍ତୁ"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"କଣ୍ଟାକ୍ଟ"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"ଆପଣଙ୍କ ଯୋଗାଯୋଗ ଆକ୍ସେସ୍ କରେ"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"ଲୋକେସନ"</string>
@@ -503,8 +505,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"ଆପ୍କୁ, ଭାଇବ୍ରେଟର୍ ନିୟନ୍ତ୍ରଣ କରିବାକୁ ଦେଇଥାଏ।"</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"ଭାଇବ୍ରେଟର୍ ସ୍ଥିତି ଆକ୍ସେସ୍ କରିବାକୁ ଆପକୁ ଅନୁମତି ଦିଏ।"</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"ସିଧାସଳଖ ଫୋନ୍ ନମ୍ବରଗୁଡ଼ିକୁ କଲ୍ କରନ୍ତୁ"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"ଆପଣଙ୍କ ହସ୍ତକ୍ଷେପ ବିନା ଫୋନ ନମ୍ଵରକୁ କଲ କରିବା ପାଇଁ ଆପକୁ ଅନୁମତି ଦିଏ। ଏହା ଫଳରେ ଅପ୍ରତ୍ୟାଶିତ ଚାର୍ଜ ଲାଗୁ ହୋଇପାରେ କିମ୍ବା କଲ ହୋଇପାରେ। ଧ୍ୟାନ ଦିଅନ୍ତୁ ଯେ ଏହା ଜରୁରୀକାଳୀନ ନମ୍ବରଗୁଡ଼ିକୁ କଲ କରିବା ପାଇଁ ଆପକୁ ଅନୁମତି ଦିଏ ନାହିଁ। କ୍ଷତିକାରକ ଆପ୍ସ ଆପଣଙ୍କ ସୁନିଶ୍ଚିତକରଣ ବିନା କଲ କରି ଆପଣଙ୍କ ଟଙ୍କା ଖର୍ଚ୍ଚ କରିପାରେ କିମ୍ବା ଅନ୍ୟ ଏକ ନମ୍ବରକୁ ଇନକମିଂ କଲ ସ୍ୱତଃ ଫରୱାର୍ଡ କରୁଥିବା କେରିଅର କୋଡଗୁଡ଼ିକୁ ଡାଏଲ କରିପାରେ।"</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"IMS କଲ୍ ସେବା ଆକ୍ସେସ୍ କରେ"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"ଆପଣଙ୍କ ହସ୍ତକ୍ଷେପ ବିନା କଲ୍ କରିପାରିବା ପାଇଁ ଆପ୍କୁ IMS ସେବା ବ୍ୟବହାର କରିବାକୁ ଦିଏ।"</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"ଫୋନ୍ ସ୍ଥିତି ଓ ପରିଚୟ ପଢ଼ନ୍ତୁ"</string>
@@ -664,7 +665,7 @@
</string-array>
<string name="fingerprint_error_vendor_unknown" msgid="4170002184907291065">"କିଛି ତ୍ରୁଟି ହୋଇଛି। ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
<string name="fingerprint_icon_content_description" msgid="4741068463175388817">"ଟିପଚିହ୍ନ ଆଇକନ୍"</string>
- <string name="face_recalibrate_notification_name" msgid="7311163114750748686">"ଫେସ୍ ଅନଲକ୍"</string>
+ <string name="face_recalibrate_notification_name" msgid="7311163114750748686">"ଫେସ ଅନଲକ"</string>
<string name="face_recalibrate_notification_title" msgid="2524791952735579082">"ଫେସ୍ ଅନଲକ୍ ସହ ସମସ୍ୟା"</string>
<string name="face_recalibrate_notification_content" msgid="3064513770251355594">"ଆପଣଙ୍କ ଫେସ୍ ମଡେଲକୁ ଡିଲିଟ୍ କରିବାକୁ ଟାପ୍ କରନ୍ତୁ, ତା\'ପରେ ପୁଣି ଆପଣଙ୍କ ଫେସ୍ ଯୋଗ କରନ୍ତୁ"</string>
<string name="face_setup_notification_title" msgid="8843461561970741790">"ଫେସ୍ ଅନଲକ୍ ସେଟ୍ ଅପ୍ କରନ୍ତୁ"</string>
@@ -1040,7 +1041,7 @@
<string name="keyguard_accessibility_expand_lock_area" msgid="4215280881346033434">"ଅନଲକ୍ କ୍ଷେତ୍ରକୁ ବଢ଼ାନ୍ତୁ।"</string>
<string name="keyguard_accessibility_slide_unlock" msgid="2968195219692413046">"ସ୍ଲାଇଡ୍ ଅନଲକ୍।"</string>
<string name="keyguard_accessibility_pattern_unlock" msgid="8669128146589233293">"ପାଟର୍ନ ଅନଲକ୍।"</string>
- <string name="keyguard_accessibility_face_unlock" msgid="4533832120787386728">"ଫେସ୍ ଅନଲକ୍।"</string>
+ <string name="keyguard_accessibility_face_unlock" msgid="4533832120787386728">"ଫେସ ଅନଲକ।"</string>
<string name="keyguard_accessibility_pin_unlock" msgid="4020864007967340068">"PIN ଅନଲକ୍।"</string>
<string name="keyguard_accessibility_sim_pin_unlock" msgid="4895939120871890557">"PIN ଦ୍ଵାରା SIMକୁ ଅନଲକ୍ କରନ୍ତୁ।"</string>
<string name="keyguard_accessibility_sim_puk_unlock" msgid="3459003464041899101">"PUK ଦ୍ଵାରା SIMକୁ ଅନଲକ୍ କରନ୍ତୁ।"</string>
@@ -1430,7 +1431,7 @@
<string name="ext_media_unmounting_notification_title" msgid="4147986383917892162">"<xliff:g id="NAME">%s</xliff:g>କୁ ଇଜେକ୍ଟ କରାଯାଉଛି"</string>
<string name="ext_media_unmounting_notification_message" msgid="5717036261538754203">"କାଢ଼ନ୍ତୁ ନାହିଁ"</string>
<string name="ext_media_init_action" msgid="2312974060585056709">"ସେଟ୍ ଅପ୍ କରନ୍ତୁ"</string>
- <string name="ext_media_unmount_action" msgid="966992232088442745">"ବାହାର କରନ୍ତୁ"</string>
+ <string name="ext_media_unmount_action" msgid="966992232088442745">"କାଢ଼ି ଦିଅନ୍ତୁ"</string>
<string name="ext_media_browse_action" msgid="344865351947079139">"ଖୋଜନ୍ତୁ"</string>
<string name="ext_media_seamless_action" msgid="8837030226009268080">"ଆଉଟ୍ପୁଟ୍ ସ୍ୱିଚ୍ କରନ୍ତୁ"</string>
<string name="ext_media_missing_title" msgid="3209472091220515046">"<xliff:g id="NAME">%s</xliff:g> ନାହିଁ"</string>
@@ -1520,7 +1521,7 @@
<string name="progress_erasing" msgid="6891435992721028004">"ସେୟାର୍ ହୋଇଥିବା ଷ୍ଟୋରେଜ୍ ଲିଭାଉଛି…"</string>
<string name="share" msgid="4157615043345227321">"ସେୟାର୍"</string>
<string name="find" msgid="5015737188624767706">"ଖୋଜନ୍ତୁ"</string>
- <string name="websearch" msgid="5624340204512793290">"ୱେବ୍ ସର୍ଚ୍ଚ"</string>
+ <string name="websearch" msgid="5624340204512793290">"ୱେବ ସର୍ଚ୍ଚ"</string>
<string name="find_next" msgid="5341217051549648153">"ପରବର୍ତ୍ତୀ ଖୋଜନ୍ତୁ"</string>
<string name="find_previous" msgid="4405898398141275532">"ପୂର୍ବବର୍ତ୍ତୀ ଖୋଜନ୍ତୁ"</string>
<string name="gpsNotifTicker" msgid="3207361857637620780">"<xliff:g id="NAME">%s</xliff:g>ଙ୍କଠାରୁ ଲୋକେସନ୍ ଅନୁରୋଧ ଆସିଛି"</string>
@@ -1728,14 +1729,14 @@
<string name="accessibility_gesture_3finger_instructional_text" msgid="3425123684990193765">"ଫିଚରଗୁଡ଼ିକ ମଧ୍ୟରେ ସ୍ୱିଚ୍ କରିବାକୁ, ତିନୋଟି ଆଙ୍ଗୁଠିରେ ଉପରକୁ ସ୍ୱାଇପ୍ କରି ଧରି ରଖନ୍ତୁ।"</string>
<string name="accessibility_magnification_chooser_text" msgid="1502075582164931596">"ମ୍ୟାଗ୍ନିଫିକେସନ୍"</string>
<string name="user_switched" msgid="7249833311585228097">"ବର୍ତ୍ତମାନର ୟୁଜର୍ ହେଉଛନ୍ତି <xliff:g id="NAME">%1$s</xliff:g>।"</string>
- <string name="user_switching_message" msgid="1912993630661332336">"<xliff:g id="NAME">%1$s</xliff:g>ରେ ସ୍ୱିଚ୍ କରନ୍ତୁ…"</string>
+ <string name="user_switching_message" msgid="1912993630661332336">"<xliff:g id="NAME">%1$s</xliff:g>ରେ ସ୍ୱିଚ କରନ୍ତୁ…"</string>
<string name="user_logging_out_message" msgid="7216437629179710359">"<xliff:g id="NAME">%1$s</xliff:g>ଙ୍କୁ ଲଗଆଉଟ୍ କରାଯାଉଛି…"</string>
<string name="owner_name" msgid="8713560351570795743">"ମାଲିକ"</string>
<string name="guest_name" msgid="8502103277839834324">"ଅତିଥି"</string>
<string name="error_message_title" msgid="4082495589294631966">"ତ୍ରୁଟି"</string>
<string name="error_message_change_not_allowed" msgid="843159705042381454">"ଏହି ପରିବର୍ତ୍ତନ ପାଇଁ ଆପଣଙ୍କ ଆଡମିନ୍ ଅନୁମତି ଦେଇନାହାଁନ୍ତି"</string>
<string name="app_not_found" msgid="3429506115332341800">"ଏହି କାର୍ଯ୍ୟକୁ ନିୟନ୍ତ୍ରଣ କରିବା ପାଇଁ କୌଣସି ଆପ୍ଲିକେଶନ୍ ମିଳିଲା ନାହିଁ"</string>
- <string name="revoke" msgid="5526857743819590458">"ବାହାର କରନ୍ତୁ"</string>
+ <string name="revoke" msgid="5526857743819590458">"କାଢ଼ି ଦିଅନ୍ତୁ"</string>
<string name="mediasize_iso_a0" msgid="7039061159929977973">"ISO A0"</string>
<string name="mediasize_iso_a1" msgid="4063589931031977223">"ISO A1"</string>
<string name="mediasize_iso_a2" msgid="2779860175680233980">"ISO A2"</string>
@@ -2159,10 +2160,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"ଏହି ବିଷୟବସ୍ତୁ ୱାର୍କ ଆପଗୁଡ଼ିକରେ ଖୋଲାଯାଇପାରିବ ନାହିଁ"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"ଏହି ବିଷୟବସ୍ତୁ ବ୍ୟକ୍ତିଗତ ଆପଗୁଡ଼ିକରେ ସେୟାର୍ କରାଯାଇପାରିବ ନାହିଁ"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"ଏହି ବିଷୟବସ୍ତୁ ବ୍ୟକ୍ତିଗତ ଆପଗୁଡ଼ିକରେ ଖୋଲାଯାଇପାରିବ ନାହିଁ"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"ୱାର୍କ ଆପ୍ସକୁ ବିରତ କରାଯାଇଛି"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"ପୁଣି ଚାଲୁ କରନ୍ତୁ"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"କୌଣସି ୱାର୍କ ଆପ୍ ନାହିଁ"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"କୌଣସି ବ୍ୟକ୍ତିଗତ ଆପ୍ ନାହିଁ"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"ବ୍ୟକ୍ତିଗତ <xliff:g id="APP">%s</xliff:g> ଖୋଲନ୍ତୁ"</string>
diff --git a/core/res/res/values-pa/strings.xml b/core/res/res/values-pa/strings.xml
index 3c58842..fece843 100644
--- a/core/res/res/values-pa/strings.xml
+++ b/core/res/res/values-pa/strings.xml
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Android ਸਿਸਟਮ"</string>
<string name="user_owner_label" msgid="8628726904184471211">"ਨਿੱਜੀ ਪ੍ਰੋਫਾਈਲ ਵਰਤੋ"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ ਵਰਤੋ"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਦੇ ਨਿੱਜੀ ਪ੍ਰੋਫਾਈਲ \'ਤੇ ਜਾਓ"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਦੇ ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ \'ਤੇ ਜਾਓ"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"ਸੰਪਰਕ"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"ਆਪਣੇ ਸੰਪਰਕਾਂ ਤੱਕ ਪਹੁੰਚ ਕਰਨ"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"ਟਿਕਾਣਾ"</string>
@@ -503,8 +505,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"ਐਪ ਨੂੰ ਵਾਈਬ੍ਰੇਟਰ ਤੇ ਨਿਯੰਤਰਣ ਪਾਉਣ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ।"</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"ਐਪ ਨੂੰ ਥਰਥਰਾਹਟ ਸਥਿਤੀ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦਿੰਦਾ ਹੈ।"</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"ਫ਼ੋਨ ਨੰਬਰਾਂ ਤੇ ਸਿੱਧੇ ਕਾਲ ਕਰੋ"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"ਐਪ ਨੂੰ ਤੁਹਾਡੇ ਦਖਲ ਤੋਂ ਬਿਨਾਂ ਫ਼ੋਨ ਨੰਬਰਾਂ \'ਤੇ ਕਾਲ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿੰਦੀ ਹੈ। ਇਸਦੇ ਨਤੀਜੇ ਵਜੋਂ ਅਣਕਿਆਸੇ ਖਰਚੇ ਜਾਂ ਕਾਲਾਂ ਹੋ ਸਕਦੀਆਂ ਹਨ। ਨੋਟ ਕਰੋ ਕਿ ਇਹ ਐਪ ਨੂੰ ਐਮਰਜੈਂਸੀ ਨੰਬਰਾਂ \'ਤੇ ਕਾਲ ਕਰਨ ਦੀ ਆਗਿਆ ਨਹੀਂ ਦਿੰਦੀ। ਨੁਕਸਾਨਦੇਹ ਐਪਾਂ ਤੁਹਾਡੀ ਤਸਦੀਕ ਤੋਂ ਬਿਨਾਂ ਕਾਲਾਂ ਕਰ ਕੇ, ਜਾਂ ਕੈਰੀਅਰ ਕੋਡ ਡਾਇਲ ਕਰ ਕੇ ਤੁਹਾਨੂੰ ਖਰਚੇ ਪਾ ਸਕਦੀਆਂ ਹਨ ਜਿਸ ਕਾਰਨ ਇਨਕਮਿੰਗ ਕਾਲਾਂ ਆਪਣੇ ਆਪ ਕਿਸੇ ਹੋਰ ਨੰਬਰ \'ਤੇ ਭੇਜੀਆਂ ਜਾਂਦੀਆਂ ਹਨ।"</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"IMS ਕਾਲ ਸੇਵਾ ਤੱਕ ਪਹੁੰਚ"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"ਐਪ ਨੂੰ ਤੁਹਾਡੇ ਦਖ਼ਲ ਤੋਂ ਬਿਨਾਂ ਕਾਲਾਂ ਕਰਨ ਲਈ IMS ਸੇਵਾ ਵਰਤਣ ਦੀ ਆਗਿਆ ਦਿੰਦੀ ਹੈ।"</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"ਫ਼ੋਨ ਸਥਿਤੀ ਅਤੇ ਪਛਾਣ ਪੜ੍ਹੋ"</string>
@@ -1618,7 +1619,7 @@
<string name="default_audio_route_name" product="tablet" msgid="367936735632195517">"ਟੈਬਲੈੱਟ"</string>
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"TV"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"ਫ਼ੋਨ ਕਰੋ"</string>
- <string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"ਡੌਕ ਸਪੀਕਰਸ"</string>
+ <string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"ਡੌਕ ਸਪੀਕਰ"</string>
<string name="default_audio_route_name_external_device" msgid="8124229858618975">"ਬਾਹਰੀ ਡੀਵਾਈਸ"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"ਹੈੱਡਫ਼ੋਨ"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
@@ -1728,7 +1729,7 @@
<string name="accessibility_gesture_3finger_instructional_text" msgid="3425123684990193765">"ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਵਿਚਾਲੇ ਅਦਲਾ-ਬਦਲੀ ਕਰਨ ਲਈ, ਤਿੰਨ ਉਂਗਲਾਂ ਨਾਲ ਉੱਪਰ ਵੱਲ ਸਵਾਈਪ ਕਰਕੇ ਦਬਾਈ ਰੱਖੋ।"</string>
<string name="accessibility_magnification_chooser_text" msgid="1502075582164931596">"ਵੱਡਦਰਸ਼ੀਕਰਨ"</string>
<string name="user_switched" msgid="7249833311585228097">"ਮੌਜੂਦਾ ਉਪਭੋਗਤਾ <xliff:g id="NAME">%1$s</xliff:g>।"</string>
- <string name="user_switching_message" msgid="1912993630661332336">"<xliff:g id="NAME">%1$s</xliff:g> \'ਤੇ ਸਵਿਚ ਕਰ ਰਿਹਾ ਹੈ…"</string>
+ <string name="user_switching_message" msgid="1912993630661332336">"<xliff:g id="NAME">%1$s</xliff:g> \'ਤੇ ਸਵਿੱਚ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ…"</string>
<string name="user_logging_out_message" msgid="7216437629179710359">"<xliff:g id="NAME">%1$s</xliff:g> ਨੂੰ ਲਾਗ-ਆਉਟ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ …"</string>
<string name="owner_name" msgid="8713560351570795743">"ਮਾਲਕ"</string>
<string name="guest_name" msgid="8502103277839834324">"ਮਹਿਮਾਨ"</string>
@@ -2159,10 +2160,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"ਇਸ ਸਮੱਗਰੀ ਨੂੰ ਕੰਮ ਸੰਬੰਧੀ ਐਪਾਂ ਨਾਲ ਨਹੀਂ ਖੋਲ੍ਹਿਆ ਜਾ ਸਕਦਾ"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"ਇਸ ਸਮੱਗਰੀ ਨੂੰ ਨਿੱਜੀ ਐਪਾਂ ਨਾਲ ਸਾਂਝਾ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"ਇਸ ਸਮੱਗਰੀ ਨੂੰ ਨਿੱਜੀ ਐਪਾਂ ਨਾਲ ਨਹੀਂ ਖੋਲ੍ਹਿਆ ਜਾ ਸਕਦਾ"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"ਕੰਮ ਸੰਬੰਧੀ ਐਪਾਂ ਨੂੰ ਰੋਕਿਆ ਗਿਆ ਹੈ"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"ਰੋਕ ਹਟਾਓ"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"ਕੋਈ ਕੰਮ ਸੰਬੰਧੀ ਐਪ ਨਹੀਂ"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"ਕੋਈ ਨਿੱਜੀ ਐਪ ਨਹੀਂ"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"ਨਿੱਜੀ <xliff:g id="APP">%s</xliff:g> ਖੋਲ੍ਹੋ"</string>
diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml
index c247254..de78be6 100644
--- a/core/res/res/values-pl/strings.xml
+++ b/core/res/res/values-pl/strings.xml
@@ -300,6 +300,8 @@
<string name="android_system_label" msgid="5974767339591067210">"System Android"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Przełącz na profil osobisty"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"Przełącz na profil służbowy"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"Przełącz na osobistą aplikację <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"Przełącz na służbową aplikację <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Kontakty"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"dostęp do kontaktów"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Lokalizacja"</string>
@@ -505,8 +507,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"Pozwala aplikacji na sterowanie wibracjami."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"Zezwala aplikacji na dostęp do stanu wibracji"</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"bezpośrednie wybieranie numerów telefonów"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"Zezwala aplikacji na nawiązywanie połączeń telefonicznych bez Twojego udziału. Mogą wystąpić nieoczekiwane opłaty lub połączenia. Pamiętaj, że te uprawnienia nie zezwalają aplikacji na dzwonienie pod numery alarmowe. Złośliwe aplikacje mogą generować koszty wynikające z nawiązywania połączeń bez Twojej wiedzy, a także wybierać określone kody powodujące przekierowywanie połączeń przychodzących na inny numer."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"usługa telefoniczna z dostępem do komunikatora"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Zezwala aplikacji na korzystanie z usługi komunikatora, by nawiązywać połączenia bez Twojego udziału."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"odczytywanie stanu i informacji o telefonie"</string>
@@ -687,7 +688,7 @@
<string name="face_acquired_too_right" msgid="6245286514593540859">"Przesuń telefon w lewo"</string>
<string name="face_acquired_too_left" msgid="9201762240918405486">"Przesuń telefon w prawo"</string>
<string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Patrz prosto na urządzenie."</string>
- <string name="face_acquired_not_detected" msgid="1057966913397548150">"Nie widzę twarzy. Trzymaj telefon na wysokości oczu."</string>
+ <string name="face_acquired_not_detected" msgid="1057966913397548150">"Nie widać twarzy. Trzymaj telefon na wysokości oczu."</string>
<string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Telefon się porusza. Trzymaj go nieruchomo."</string>
<string name="face_acquired_recalibrate" msgid="8724013080976469746">"Zarejestruj swoją twarz ponownie."</string>
<string name="face_acquired_too_different" msgid="2520389515612972889">"Nie rozpoznaję twarzy. Spróbuj ponownie."</string>
@@ -695,7 +696,7 @@
<string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Patrz prosto na telefon"</string>
<string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Patrz prosto na telefon"</string>
<string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Patrz prosto na telefon"</string>
- <string name="face_acquired_obscured" msgid="4917643294953326639">"Usuń wszystko, co zasłania Ci twarz."</string>
+ <string name="face_acquired_obscured" msgid="4917643294953326639">"Usuń wszystko, co zasłania Ci twarz"</string>
<string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Wyczyść górną krawędź ekranu, w tym czarny pasek"</string>
<!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
<skip />
@@ -1241,7 +1242,7 @@
<string name="unsupported_display_size_show" msgid="980129850974919375">"Zawsze pokazuj"</string>
<string name="unsupported_compile_sdk_message" msgid="7326293500707890537">"Aplikacja <xliff:g id="APP_NAME">%1$s</xliff:g> została skompilowana pod niezgodną wersję systemu Android i może zachowywać się niezgodnie z oczekiwaniami. Sprawdź, czy jest dostępna zaktualizowana wersja aplikacji."</string>
<string name="unsupported_compile_sdk_show" msgid="1601210057960312248">"Zawsze pokazuj"</string>
- <string name="unsupported_compile_sdk_check_update" msgid="1103639989147664456">"Sprawdź aktualizację"</string>
+ <string name="unsupported_compile_sdk_check_update" msgid="1103639989147664456">"Sprawdź dostępność aktualizacji"</string>
<string name="smv_application" msgid="3775183542777792638">"Aplikacja <xliff:g id="APPLICATION">%1$s</xliff:g> (proces <xliff:g id="PROCESS">%2$s</xliff:g>) naruszyła wymuszone przez siebie zasady StrictMode."</string>
<string name="smv_process" msgid="1398801497130695446">"Proces <xliff:g id="PROCESS">%1$s</xliff:g> naruszył wymuszone przez siebie zasady StrictMode."</string>
<string name="android_upgrading_title" product="default" msgid="7279077384220829683">"Telefon się aktualizuje…"</string>
@@ -1699,7 +1700,7 @@
<string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"WŁ."</string>
<string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"WYŁ."</string>
<string name="accessibility_enable_service_title" msgid="3931558336268541484">"Pozwolić usłudze <xliff:g id="SERVICE">%1$s</xliff:g> na pełną kontrolę nad urządzeniem?"</string>
- <string name="accessibility_service_warning_description" msgid="291674995220940133">"Pełna kontrola jest odpowiednia dla aplikacji, które pomagają Ci radzić sobie z niepełnosprawnością, ale nie należy jej przyznawać wszystkim aplikacjom."</string>
+ <string name="accessibility_service_warning_description" msgid="291674995220940133">"Pełna kontrola jest odpowiednia dla aplikacji, które ułatwiają Ci dostęp, ale nie należy jej przyznawać wszystkim aplikacjom."</string>
<string name="accessibility_service_screen_control_title" msgid="190017412626919776">"Wyświetlaj i kontroluj ekran"</string>
<string name="accessibility_service_screen_control_description" msgid="6946315917771791525">"Może odczytywać całą zawartość ekranu i wyświetlać treść nad innymi aplikacjami."</string>
<string name="accessibility_service_action_perform_title" msgid="779670378951658160">"Wyświetlaj i wykonuj działania"</string>
@@ -2161,10 +2162,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Tych treści nie można otworzyć w aplikacjach służbowych"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Tych treści nie można udostępniać w aplikacjach osobistych"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Tych treści nie można otworzyć w aplikacjach osobistych"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Aplikacje służbowe zostały wstrzymane"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"Cofnij wstrzymanie"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Brak aplikacji służbowych"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Brak aplikacji osobistych"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"Otwórz aplikację osobistą <xliff:g id="APP">%s</xliff:g>"</string>
diff --git a/core/res/res/values-pt-rBR/strings.xml b/core/res/res/values-pt-rBR/strings.xml
index ff9b8c6..57d7c19 100644
--- a/core/res/res/values-pt-rBR/strings.xml
+++ b/core/res/res/values-pt-rBR/strings.xml
@@ -299,6 +299,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Sistema Android"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Mudar para o perfil pessoal"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"Perfil de trabalho"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"Mudar para o app <xliff:g id="APP_NAME">%1$s</xliff:g> do perfil pessoal"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"Mudar para o app <xliff:g id="APP_NAME">%1$s</xliff:g> do perfil de trabalho"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Contatos"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"acesse seus contatos"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Localização"</string>
@@ -504,8 +506,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"Permite que o app controle a vibração."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"Permite que o app acesse o estado da vibração."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"ligar diretamente para números de telefone"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"Permite que o app faça ligações para números de telefone sem a sua intervenção. Ligações ou cobranças inesperadas podem acontecer. Isso não permite que o app ligue para números de emergência. Você pode receber cobranças indesejadas de ligações feitas por apps maliciosos sem a sua confirmação. Além disso, esses apps podem discar códigos de operadora que automaticamente encaminham ligações recebidas para outro número."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"acessar serviço de mensagens instantâneas para chamadas"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Permite que o app use o serviço de mensagens instantâneas para fazer chamadas sem sua intervenção."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"ler status e identidade do telefone"</string>
@@ -635,7 +636,7 @@
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Claro demais"</string>
<string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"O botão liga/desliga foi pressionado"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Ajuste a posição do dedo"</string>
- <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Mude a posição do dedo ligeiramente a cada momento"</string>
+ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Mude ligeiramente a posição do dedo em cada registro"</string>
<string-array name="fingerprint_acquired_vendor">
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"Impressão digital não reconhecida"</string>
@@ -694,7 +695,7 @@
<string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Olhe diretamente para o smartphone"</string>
<string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Olhe diretamente para o smartphone"</string>
<string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Olhe diretamente para o smartphone"</string>
- <string name="face_acquired_obscured" msgid="4917643294953326639">"Remova tudo que esteja ocultando seu rosto."</string>
+ <string name="face_acquired_obscured" msgid="4917643294953326639">"Tire tudo que possa esconder seu rosto."</string>
<string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Limpe a parte superior da tela, inclusive a barra preta"</string>
<!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
<skip />
@@ -702,7 +703,7 @@
<skip />
<string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Falha ao criar o modelo de rosto. Tente de novo."</string>
<string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Óculos escuros detectados. Seu rosto precisa estar completamente visível."</string>
- <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Máscara detectada. Seu rosto precisa estar completamente visível."</string>
+ <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Máscara detectada. Seu rosto precisa estar visível."</string>
<string-array name="face_acquired_vendor">
</string-array>
<string name="face_error_hw_not_available" msgid="5085202213036026288">"Impossível verificar rosto. Hardware indisponível."</string>
@@ -1729,7 +1730,7 @@
<string name="accessibility_gesture_3finger_instructional_text" msgid="3425123684990193765">"Para alternar entre recursos, deslize de baixo para cima na tela com três dedos, sem soltar."</string>
<string name="accessibility_magnification_chooser_text" msgid="1502075582164931596">"Ampliação"</string>
<string name="user_switched" msgid="7249833311585228097">"Usuário atual <xliff:g id="NAME">%1$s</xliff:g>."</string>
- <string name="user_switching_message" msgid="1912993630661332336">"Alternando para <xliff:g id="NAME">%1$s</xliff:g>…"</string>
+ <string name="user_switching_message" msgid="1912993630661332336">"Mudando para <xliff:g id="NAME">%1$s</xliff:g>…"</string>
<string name="user_logging_out_message" msgid="7216437629179710359">"Desconectando <xliff:g id="NAME">%1$s</xliff:g>…"</string>
<string name="owner_name" msgid="8713560351570795743">"Proprietário"</string>
<string name="guest_name" msgid="8502103277839834324">"Visitante"</string>
@@ -2160,10 +2161,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Não é possível abrir esse conteúdo com apps de trabalho"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Não é possível compartilhar esse conteúdo com apps pessoais"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Não é possível abrir esse conteúdo com apps pessoais"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Os apps de trabalho foram pausados"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"Reativar"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Nenhum app de trabalho"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Nenhum app pessoal"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"Abrir <xliff:g id="APP">%s</xliff:g> no perfil pessoal"</string>
diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml
index b252551..d209189 100644
--- a/core/res/res/values-pt-rPT/strings.xml
+++ b/core/res/res/values-pt-rPT/strings.xml
@@ -299,6 +299,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Sistema Android"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Mudar para o perfil pessoal"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"Mudar para o perfil de trabalho"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"Mudar para <xliff:g id="APP_NAME">%1$s</xliff:g> pessoal"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"Mudar para <xliff:g id="APP_NAME">%1$s</xliff:g> de trabalho"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Contactos"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"aceder aos contactos"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Localização"</string>
@@ -504,8 +506,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"Permite à app controlar o vibrador."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"Permite que a app aceda ao estado de vibração."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"marcar números de telefone diretamente"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"Permite que a app ligue para números de telefone sem a sua intervenção. Esta ação pode resultar em cobranças ou chamadas inesperadas. Tenha em atenção que isto não permite que a app ligue para números de emergência. As apps maliciosas podem fazer chamadas sem a sua confirmação, com possíveis custos para si, ou marcar códigos do operador, o que faz com que as chamadas recebidas sejam encaminhadas automaticamente para outro número."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"aceder ao serviço de chamadas IMS"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Permite que a app utilize o serviço IMS para fazer chamadas sem a sua intervenção."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"ler o estado e a identidade do telemóvel"</string>
@@ -678,7 +679,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Visite um fornecedor de serviços de reparação."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"Impossível criar modelo de rosto. Tente novamente."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Demasiado clara. Experimente uma luz mais suave."</string>
- <string name="face_acquired_too_dark" msgid="8539853432479385326">"Não há luz suficiente"</string>
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"Sem luz suficiente"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Afaste ainda mais o telemóvel"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Aproxime o telemóvel do rosto"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Mova o telemóvel mais para cima"</string>
@@ -702,7 +703,7 @@
<skip />
<string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Não é possível criar o seu modelo de rosto. Tente novamente."</string>
<string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Óculos escuros detetados. O seu rosto tem de estar completamente visível."</string>
- <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Cobertura facial detetada. O seu rosto tem de estar completamente visível."</string>
+ <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Cobertura facial detetada. Todo o rosto tem de estar visível."</string>
<string-array name="face_acquired_vendor">
</string-array>
<string name="face_error_hw_not_available" msgid="5085202213036026288">"Não pode validar o rosto. Hardware não disponível."</string>
@@ -2160,10 +2161,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Não é possível abrir este conteúdo com apps de trabalho"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Não é possível partilhar este conteúdo com apps pessoais"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Não é possível abrir este conteúdo com apps pessoais"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"As apps de trabalho estão pausadas"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"Retomar"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Sem apps de trabalho"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Sem apps pessoais"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"Abra a app <xliff:g id="APP">%s</xliff:g> pessoal"</string>
@@ -2320,7 +2319,7 @@
<string name="mic_access_on_toast" msgid="2666925317663845156">"O microfone está disponível"</string>
<string name="mic_access_off_toast" msgid="8111040892954242437">"O microfone está bloqueado"</string>
<string name="concurrent_display_notification_name" msgid="1526911253558311131">"Dois ecrãs"</string>
- <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"A funcionalidade Dois ecrãs está ativada"</string>
+ <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Funcionalidade Dual Screen ativada"</string>
<string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"A app <xliff:g id="APP_NAME">%1$s</xliff:g> está a usar ambos os ecrãs para mostrar conteúdo"</string>
<string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"O dispositivo está a ficar demasiado quente"</string>
<string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"A funcionalidade Dois ecrãs está indisponível porque o seu telemóvel está a ficar demasiado quente"</string>
diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml
index ff9b8c6..57d7c19 100644
--- a/core/res/res/values-pt/strings.xml
+++ b/core/res/res/values-pt/strings.xml
@@ -299,6 +299,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Sistema Android"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Mudar para o perfil pessoal"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"Perfil de trabalho"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"Mudar para o app <xliff:g id="APP_NAME">%1$s</xliff:g> do perfil pessoal"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"Mudar para o app <xliff:g id="APP_NAME">%1$s</xliff:g> do perfil de trabalho"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Contatos"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"acesse seus contatos"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Localização"</string>
@@ -504,8 +506,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"Permite que o app controle a vibração."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"Permite que o app acesse o estado da vibração."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"ligar diretamente para números de telefone"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"Permite que o app faça ligações para números de telefone sem a sua intervenção. Ligações ou cobranças inesperadas podem acontecer. Isso não permite que o app ligue para números de emergência. Você pode receber cobranças indesejadas de ligações feitas por apps maliciosos sem a sua confirmação. Além disso, esses apps podem discar códigos de operadora que automaticamente encaminham ligações recebidas para outro número."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"acessar serviço de mensagens instantâneas para chamadas"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Permite que o app use o serviço de mensagens instantâneas para fazer chamadas sem sua intervenção."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"ler status e identidade do telefone"</string>
@@ -635,7 +636,7 @@
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Claro demais"</string>
<string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"O botão liga/desliga foi pressionado"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Ajuste a posição do dedo"</string>
- <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Mude a posição do dedo ligeiramente a cada momento"</string>
+ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Mude ligeiramente a posição do dedo em cada registro"</string>
<string-array name="fingerprint_acquired_vendor">
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"Impressão digital não reconhecida"</string>
@@ -694,7 +695,7 @@
<string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Olhe diretamente para o smartphone"</string>
<string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Olhe diretamente para o smartphone"</string>
<string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Olhe diretamente para o smartphone"</string>
- <string name="face_acquired_obscured" msgid="4917643294953326639">"Remova tudo que esteja ocultando seu rosto."</string>
+ <string name="face_acquired_obscured" msgid="4917643294953326639">"Tire tudo que possa esconder seu rosto."</string>
<string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Limpe a parte superior da tela, inclusive a barra preta"</string>
<!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
<skip />
@@ -702,7 +703,7 @@
<skip />
<string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Falha ao criar o modelo de rosto. Tente de novo."</string>
<string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Óculos escuros detectados. Seu rosto precisa estar completamente visível."</string>
- <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Máscara detectada. Seu rosto precisa estar completamente visível."</string>
+ <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Máscara detectada. Seu rosto precisa estar visível."</string>
<string-array name="face_acquired_vendor">
</string-array>
<string name="face_error_hw_not_available" msgid="5085202213036026288">"Impossível verificar rosto. Hardware indisponível."</string>
@@ -1729,7 +1730,7 @@
<string name="accessibility_gesture_3finger_instructional_text" msgid="3425123684990193765">"Para alternar entre recursos, deslize de baixo para cima na tela com três dedos, sem soltar."</string>
<string name="accessibility_magnification_chooser_text" msgid="1502075582164931596">"Ampliação"</string>
<string name="user_switched" msgid="7249833311585228097">"Usuário atual <xliff:g id="NAME">%1$s</xliff:g>."</string>
- <string name="user_switching_message" msgid="1912993630661332336">"Alternando para <xliff:g id="NAME">%1$s</xliff:g>…"</string>
+ <string name="user_switching_message" msgid="1912993630661332336">"Mudando para <xliff:g id="NAME">%1$s</xliff:g>…"</string>
<string name="user_logging_out_message" msgid="7216437629179710359">"Desconectando <xliff:g id="NAME">%1$s</xliff:g>…"</string>
<string name="owner_name" msgid="8713560351570795743">"Proprietário"</string>
<string name="guest_name" msgid="8502103277839834324">"Visitante"</string>
@@ -2160,10 +2161,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Não é possível abrir esse conteúdo com apps de trabalho"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Não é possível compartilhar esse conteúdo com apps pessoais"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Não é possível abrir esse conteúdo com apps pessoais"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Os apps de trabalho foram pausados"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"Reativar"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Nenhum app de trabalho"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Nenhum app pessoal"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"Abrir <xliff:g id="APP">%s</xliff:g> no perfil pessoal"</string>
diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml
index 8646da4..f2de318 100644
--- a/core/res/res/values-ro/strings.xml
+++ b/core/res/res/values-ro/strings.xml
@@ -299,6 +299,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Sistemul Android"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Comută la profilul personal"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"Comută la profilul de serviciu"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"Comută la <xliff:g id="APP_NAME">%1$s</xliff:g> personal"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"Comută la <xliff:g id="APP_NAME">%1$s</xliff:g> pentru serviciu"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Agendă"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"să acceseze agenda"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Locație"</string>
@@ -504,8 +506,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"Permite aplicației să controleze mecanismul de vibrare."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"Permite aplicației să acceseze modul de vibrații."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"să sune direct la numere de telefon"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"Permite aplicației să apeleze numere de telefon fără intervenția ta. Acest lucru poate duce la taxe sau apeluri neașteptate. Aplicația nu poate apela și numere de urgență. Aplicațiile rău intenționate pot să te coste, deoarece fac apeluri fără confirmare sau formează coduri de la operator care redirecționează automat apelurile primite la alt număr."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"accesează serviciul de apelare IMS"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Permite aplicației să folosească serviciul IMS pentru apeluri, fără intervenția ta."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"citește starea și identitatea telefonului"</string>
@@ -691,7 +692,7 @@
<string name="face_acquired_recalibrate" msgid="8724013080976469746">"Reînregistrează-ți chipul."</string>
<string name="face_acquired_too_different" msgid="2520389515612972889">"Chipul nu a fost recunoscut. Reîncearcă."</string>
<string name="face_acquired_too_similar" msgid="8882920552674125694">"Schimbă ușor poziția capului"</string>
- <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Priviți direct spre telefon"</string>
+ <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Privește mai direct spre telefon"</string>
<string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Privește mai direct spre telefon"</string>
<string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Privește mai direct spre telefon"</string>
<string name="face_acquired_obscured" msgid="4917643294953326639">"Îndepărtează orice îți ascunde chipul."</string>
@@ -702,7 +703,7 @@
<skip />
<string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Nu se poate crea modelul facial. Reîncearcă."</string>
<string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"S-au detectat ochelari de culoare închisă. Chipul trebuie să fie vizibil în totalitate."</string>
- <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"S-a detectat un articol care acoperă chipul. Chipul trebuie să fie vizibil în totalitate."</string>
+ <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Un articol acoperă chipul. Întreg chipul trebuie să fie vizibil."</string>
<string-array name="face_acquired_vendor">
</string-array>
<string name="face_error_hw_not_available" msgid="5085202213036026288">"Nu se poate confirma fața. Hardware-ul nu este disponibil."</string>
@@ -2160,10 +2161,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Acest conținut nu poate fi deschis cu aplicații pentru lucru"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Acest conținut nu poate fi trimis cu aplicații personale"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Acest conținut nu poate fi deschis cu aplicații personale"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Aplicațiile pentru lucru sunt întrerupte"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"Reactivează"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Nicio aplicație pentru lucru"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Nicio aplicație personală"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"Deschide <xliff:g id="APP">%s</xliff:g> personal"</string>
@@ -2307,7 +2306,7 @@
<string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"Nu se poate accesa camera foto a tabletei de pe <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
<string name="vdm_secure_window" msgid="161700398158812314">"Nu se poate accesa în timpul streamingului. Încearcă pe telefon."</string>
<string name="vdm_pip_blocked" msgid="4036107522497281397">"Nu se poate viziona picture-in-picture în timpul streamingului"</string>
- <string name="system_locale_title" msgid="711882686834677268">"Prestabilit de sistem"</string>
+ <string name="system_locale_title" msgid="711882686834677268">"Prestabilită de sistem"</string>
<string name="default_card_name" msgid="9198284935962911468">"CARD <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
<string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Permisiunea pentru gestionarea ceasurilor din profilul ceasului însoțitor"</string>
<string name="permdesc_companionProfileWatch" msgid="5655698581110449397">"Permite unei aplicații partenere să gestioneze ceasuri."</string>
diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index 39a4a65..a0cb9c3 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -300,6 +300,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Система Android"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Переключиться на личный профиль"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"Перейти в рабочий профиль"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"Открыть <xliff:g id="APP_NAME">%1$s</xliff:g> в личном профиле"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"Открыть <xliff:g id="APP_NAME">%1$s</xliff:g> в рабочем профиле"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Контакты"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"доступ к контактам"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Местоположение"</string>
@@ -505,8 +507,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"Приложение сможет контролировать вибросигналы."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"Приложение сможет получать доступ к состоянию виброотклика."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"Осуществление телефонных вызовов"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"Разрешает приложению совершать вызовы без вашего участия. Это может привести к непредвиденным расходам или незапланированным звонкам. Обратите внимание, что приложению не предоставляется разрешение на звонки в экстренные службы. Из-за вредоносных приложений, которые совершают платные звонки без вашего подтверждения или используют коды оператора, чтобы входящие вызовы автоматически переадресовывались на другой номер, у вас могут списываться средства."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"совершение звонков с помощью службы IMS"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Позволяет приложению совершать звонки с помощью службы IMS без вашего вмешательства."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"Получение данных о статусе телефона"</string>
@@ -2161,10 +2162,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Этот контент нельзя открыть в рабочем приложении."</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Этот контент нельзя открывать через личные приложения."</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Этот контент нельзя открыть в личном приложении."</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Рабочие приложения приостановлены."</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"Включить"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Не поддерживается рабочими приложениями."</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Не поддерживается личными приложениями."</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"Откройте приложение \"<xliff:g id="APP">%s</xliff:g>\" в личном профиле"</string>
@@ -2322,7 +2321,7 @@
<string name="mic_access_off_toast" msgid="8111040892954242437">"Микрофон заблокирован."</string>
<string name="concurrent_display_notification_name" msgid="1526911253558311131">"Двойной экран"</string>
<string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Двойной экран включен"</string>
- <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g> показывает контент на обоих экранах."</string>
+ <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g> использует оба экрана."</string>
<string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"Устройство перегрелось"</string>
<string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"Двойной экран недоступен из-за перегрева телефона."</string>
<string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"Функция Dual Screen недоступна"</string>
diff --git a/core/res/res/values-si/strings.xml b/core/res/res/values-si/strings.xml
index c8a8b4c..aafee6a 100644
--- a/core/res/res/values-si/strings.xml
+++ b/core/res/res/values-si/strings.xml
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Android පද්ධතිය"</string>
<string name="user_owner_label" msgid="8628726904184471211">"පුද්ගලික පැතිකඩ වෙත මාරුවන්න"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"කාර්යාල පැතිකඩ වෙත මාරු වන්න"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"පුද්ගලික වෙත මාරු කරන්න <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"කාර්යාලය වෙත මාරු කරන්න <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"සම්බන්ධතා"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"ඔබේ සම්බන්ධතාවලට පිවිසෙන්න"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"ස්ථානය"</string>
@@ -503,8 +505,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"කම්පකය පාලනයට යෙදුමට අවසර දෙන්න."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"යෙදුමට කම්පන තත්ත්වයට ප්රවේශ වීමට ඉඩ දෙන්න."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"දුරකථන අංක වෙත ඍජුවම අමතන්න"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"ඔබේ මැදිහත්වීමකින් තොරව දුරකථන අංක ඇමතීමට යෙදුමට ඉඩ දෙයි. මෙය අනපේක්ෂිත ගාස්තු හෝ ඇමතුම්වලට හේතු විය හැක. මෙය යෙදුමට හදිසි ඇමතුම් අංක ඇමතීමට ඉඩ නොදෙන බව සලකන්න. ඔබේ තහවුරු කිරීමකින් තොරව ඇමතුම් ලබා දීමෙන්, හෝ ලැබෙන ඇමතුම් ස්වයංක්රීයව වෙනත් අංකයකට යොමු කිරීමට හේතු වන වාහක කේත ඇමතීමෙන් අනිෂ්ට යෙදුම් ඔබේ මුදල් වැය කළ හැක."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"IMS ඇමතුම් සේවාවට පිවිසෙන්න"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"ඔබේ මැදිහත්වීමකින් තොරව ඇමතුම් සිදු කිරීමට IMS සේවාව භාවිතයට යෙදුමට ඉඩ දෙන්න."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"දුරකථනයේ තත්වය සහ අනන්යතාවය කියවීම"</string>
@@ -710,8 +711,7 @@
<string name="face_error_canceled" msgid="2164434737103802131">"මුහුණු මෙහෙයුම අවලංගු කරන ලදී."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"පරිශීලකයා විසින් මුහුණෙන් අගුළු හැරීම අවලංගු කරන ලදි"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"උත්සාහයන් ඉතා වැඩි ගණනකි. පසුව නැවත උත්සාහ කරන්න."</string>
- <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
- <skip />
+ <string name="face_error_lockout_permanent" msgid="8533257333130473422">"උත්සාහ ගණන ඉතා වැඩියි. මුහුණෙන් අගුළු ඇරීම නැත."</string>
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"උත්සාහයන් ඉතා වැඩි ගණනකි. ඒ වෙනුවට තිර අගුල ඇතුළු කරන්න."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"මුහුණ සත්යාපන කළ නොහැක. නැවත උත්සාහ කරන්න."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"ඔබ මුහුණෙන් අගුළු හැරීම පිහිටුවා නැත"</string>
@@ -2160,16 +2160,12 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"මෙම අන්තර්ගතය කාර්යාල යෙදුම් සමඟ විවෘත කළ නොහැකිය"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"මෙම අන්තර්ගතය පුද්ගලික යෙදුම් සමඟ බෙදා ගත නොහැකිය"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"මෙම අන්තර්ගතය පුද්ගලික යෙදුම් සමඟ විවෘත කළ නොහැකිය"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"කාර්යාල යෙදුම් විරාම කර ඇත"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"විරාම නොකරන්න"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"කාර්යාල යෙදුම් නැත"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"පුද්ගලික යෙදුම් නැත"</string>
- <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
- <skip />
+ <string name="miniresolver_open_in_personal" msgid="6499100403307136696">"පුද්ගලික <xliff:g id="APP">%s</xliff:g> විවෘත කරන්න"</string>
+ <string name="miniresolver_open_in_work" msgid="7138659785478630639">"කාර්යාල <xliff:g id="APP">%s</xliff:g> විවෘත කරන්න"</string>
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"පුද්ගලික බ්රව්සරය භාවිත කරන්න"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"කාර්යාල බ්රව්සරය භාවිත කරන්න"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM ජාල අගුලු හැරීමේ PIN"</string>
diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml
index 8ea8936..8dcdacb 100644
--- a/core/res/res/values-sk/strings.xml
+++ b/core/res/res/values-sk/strings.xml
@@ -300,6 +300,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Systém Android"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Prepnúť na osobný profil"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"Prepnúť na pracovný profil"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"Prepnúť na osobnú verziu aplikácie <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"Prepnúť na pracovnú verziu aplikácie <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Kontakty"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"prístup ku kontaktom"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Poloha"</string>
@@ -505,8 +507,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"Umožňuje aplikácii ovládať vibrácie."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"Povoľuje aplikácii prístup k stavu vibrátora."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"priamo volať na telefónne čísla"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"Umožňuje aplikácii volať na telefónne čísla bez vášho zásahu. Môže to viesť k neočakávaným poplatkom alebo hovorov. Upozorňujeme, že aplikácia nemôže volať na tiesňové linky. Škodlivé aplikácie vám môžu spôsobiť poplatky, pretože volajú bez vášho vedomia alebo vytáčajú kódy operátorov, ktoré automaticky presmerovávajú prichádzajúce hovory na iné číslo."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"prístup k službe volania IMS"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Umožňuje aplikácii používať službu okamžitých správ (IMS) na volanie bez intervencie používateľa."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"čítať stav a identitu telefónu"</string>
@@ -695,7 +696,7 @@
<string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Pozrite sa na telefón priamejšie"</string>
<string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Pozrite sa na telefón priamejšie"</string>
<string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Pozrite sa na telefón priamejšie"</string>
- <string name="face_acquired_obscured" msgid="4917643294953326639">"Odstráňte všetko, čo vám zakrýva tvár."</string>
+ <string name="face_acquired_obscured" msgid="4917643294953326639">"Odstráňte všetko, čo vám zakrýva tvár"</string>
<string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Vyčistite hornú časť obrazovky vrátane čierneho panela"</string>
<!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
<skip />
@@ -2161,10 +2162,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Tento obsah sa nedá otvoriť pomocou pracovných aplikácií"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Tento obsah sa nedá zdieľať pomocou osobných aplikácií"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Tento obsah sa nedá otvoriť pomocou osobných aplikácií"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Pracovné aplikácie sú pozastavené"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"Zrušiť pozastavenie"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Žiadne pracovné aplikácie"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Žiadne osobné aplikácie"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"Otvorte osobnú aplikáciu <xliff:g id="APP">%s</xliff:g>"</string>
@@ -2320,8 +2319,8 @@
<string name="permdesc_startForegroundServicesFromBackground" msgid="4071826571656001537">"Umožňuje sprievodnej aplikácii spúšťať služby na popredí z pozadia."</string>
<string name="mic_access_on_toast" msgid="2666925317663845156">"Mikrofón je k dispozícii"</string>
<string name="mic_access_off_toast" msgid="8111040892954242437">"Mikrofón je blokovaný"</string>
- <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Dvojitá obrazovka"</string>
- <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Dvojitá obrazovka je zapnutá"</string>
+ <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Dual Screen"</string>
+ <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Je zapnutá funkcia Dual Screen"</string>
<string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g> zobrazuje obsah na oboch obrazovkách"</string>
<string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"Zariadenie je príliš horúce"</string>
<string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"Dvojitá obrazovka nie je k dispozícii, pretože telefón sa prehrieva"</string>
diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml
index 223fa0a..0d948cf 100644
--- a/core/res/res/values-sl/strings.xml
+++ b/core/res/res/values-sl/strings.xml
@@ -300,6 +300,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Sistem Android"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Preklopi na osebni profil"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"Preklopi na delovni profil"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"Preklopi na osebno aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"Preklopi na delovno aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Stiki"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"dostop do stikov"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Lokacija"</string>
@@ -505,8 +507,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"Aplikaciji omogoča nadzor vibriranja."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"Aplikaciji dovoljuje dostop do stanja vibriranja."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"neposredno klicanje telefonskih številk"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"Aplikaciji omogoča klicanje telefonskih številk brez vašega posredovanja. Zaradi tega lahko pride do nepričakovanih stroškov ali klicev. Upoštevajte, da to aplikaciji ne dovoljuje klicanja številk za klic v sili. Zlonamerne aplikacije lahko kličejo brez vaše potrditve ali pa kličejo kode operaterjev, ki povzročijo, da se dohodni klici samodejno posredujejo na drugo številko, kar vas lahko drago stane."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"dostop do storitve za klicanje IMS"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Aplikaciji dovoljuje uporabo storitev IMS za opravljanje klicev brez vašega posredovanja."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"branje stanja in identitete telefona"</string>
@@ -636,7 +637,7 @@
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Presvetlo je."</string>
<string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Zaznan je bil pritisk gumba za vklop."</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Poskusite popraviti položaj prsta."</string>
- <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Vsakič nekoliko spremenite položaj prsta."</string>
+ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Vsakič nekoliko spremenite položaj prsta"</string>
<string-array name="fingerprint_acquired_vendor">
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"Prstni odtis ni prepoznan."</string>
@@ -682,20 +683,20 @@
<string name="face_acquired_too_dark" msgid="8539853432479385326">"Premalo svetlobe"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Telefon nekoliko odmaknite."</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Bolj približajte telefon."</string>
- <string name="face_acquired_too_high" msgid="8278815780046368576">"Telefon premaknite višje."</string>
- <string name="face_acquired_too_low" msgid="4075391872960840081">"Telefon premaknite nižje."</string>
- <string name="face_acquired_too_right" msgid="6245286514593540859">"Telefon premaknite v svojo levo."</string>
- <string name="face_acquired_too_left" msgid="9201762240918405486">"Telefon premaknite v svojo desno."</string>
+ <string name="face_acquired_too_high" msgid="8278815780046368576">"Telefon premaknite višje"</string>
+ <string name="face_acquired_too_low" msgid="4075391872960840081">"Telefon premaknite nižje"</string>
+ <string name="face_acquired_too_right" msgid="6245286514593540859">"Telefon premaknite v svojo levo"</string>
+ <string name="face_acquired_too_left" msgid="9201762240918405486">"Telefon premaknite v svojo desno"</string>
<string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Glejte bolj naravnost v napravo."</string>
<string name="face_acquired_not_detected" msgid="1057966913397548150">"Obraz ni viden. Držite telefon v višini oči."</string>
<string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Preveč se premikate. Držite telefon pri miru."</string>
<string name="face_acquired_recalibrate" msgid="8724013080976469746">"Znova registrirajte svoj obraz."</string>
<string name="face_acquired_too_different" msgid="2520389515612972889">"Obraza ni mogoče prepoznati. Poskusite znova."</string>
<string name="face_acquired_too_similar" msgid="8882920552674125694">"Nekoliko spremenite položaj glave."</string>
- <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Glejte bolj naravnost v telefon."</string>
- <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Glejte bolj naravnost v telefon."</string>
- <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Glejte bolj naravnost v telefon."</string>
- <string name="face_acquired_obscured" msgid="4917643294953326639">"Umaknite vse, kar vam morda zakriva obraz."</string>
+ <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Glejte bolj naravnost v telefon"</string>
+ <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Glejte bolj naravnost v telefon"</string>
+ <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Glejte bolj naravnost v telefon"</string>
+ <string name="face_acquired_obscured" msgid="4917643294953326639">"Umaknite vse, kar vam morda zakriva obraz"</string>
<string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Očistite vrhnji del zaslona, vključno s črno vrstico"</string>
<!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
<skip />
@@ -1730,7 +1731,7 @@
<string name="accessibility_gesture_3finger_instructional_text" msgid="3425123684990193765">"Če želite preklopiti med funkcijami, s tremi prsti povlecite navzgor in pridržite."</string>
<string name="accessibility_magnification_chooser_text" msgid="1502075582164931596">"Povečava"</string>
<string name="user_switched" msgid="7249833311585228097">"Trenutni uporabnik <xliff:g id="NAME">%1$s</xliff:g>."</string>
- <string name="user_switching_message" msgid="1912993630661332336">"Preklop na uporabnika <xliff:g id="NAME">%1$s</xliff:g> …"</string>
+ <string name="user_switching_message" msgid="1912993630661332336">"Preklapljanje na uporabnika <xliff:g id="NAME">%1$s</xliff:g> …"</string>
<string name="user_logging_out_message" msgid="7216437629179710359">"Odjavljanje uporabnika <xliff:g id="NAME">%1$s</xliff:g> …"</string>
<string name="owner_name" msgid="8713560351570795743">"Lastnik"</string>
<string name="guest_name" msgid="8502103277839834324">"Gost"</string>
@@ -2161,10 +2162,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Te vsebine ni mogoče odpreti z delovnimi aplikacijami."</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Te vsebine ni mogoče deliti z osebnimi aplikacijami."</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Te vsebine ni mogoče odpreti z osebnimi aplikacijami."</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Delovne aplikacije so začasno zaustavljene."</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"Znova aktiviraj"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Nobena delovna aplikacija ni na voljo"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Nobena osebna aplikacija"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"Odpri aplikacijo <xliff:g id="APP">%s</xliff:g> v osebnem profilu"</string>
diff --git a/core/res/res/values-sq/strings.xml b/core/res/res/values-sq/strings.xml
index c01da3e..d5bb5c2 100644
--- a/core/res/res/values-sq/strings.xml
+++ b/core/res/res/values-sq/strings.xml
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Sistemi Android"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Kalo te profili personal"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"Kalo te profili i punës"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"Kalo te <xliff:g id="APP_NAME">%1$s</xliff:g> personal"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"Kalo te <xliff:g id="APP_NAME">%1$s</xliff:g> i punës"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Kontaktet"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"qasu te kontaktet e tua"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Vendndodhja"</string>
@@ -503,8 +505,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"Lejon aplikacionin të kontrollojë dridhësin."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"Lejon që aplikacioni të ketë qasje te gjendja e dridhësit."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"telefono drejtpërdrejt numrat e telefonit"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"Lejon që aplikacioni të telefonojë numrat e telefonit pa ndërhyrjen tënde. Kjo mund të sjellë telefonata ose tarifa të papritura. Ki parasysh se kjo nuk e lejon aplikacionin të telefonojë numrat e urgjencës. Aplikacionet keqdashëse mund të të shkaktojnë kosto duke kryer telefonata pa konfirmimin tënd ose të formojnë kode të operatorit celular që bëjnë që telefonatat hyrëse të transferohen automatikisht te një numër tjetër."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"qasje në shërbimin e telefonatave IMS"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Lejon aplikacionin të përdorë shërbimin IMS për të kryer telefonata pa ndërhyrjen tënde."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"lexo statusin e telefonit dhe identitetin"</string>
@@ -680,8 +681,8 @@
<string name="face_acquired_too_dark" msgid="8539853432479385326">"Nuk ka dritë të mjaftueshme"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Lëvize telefonin më larg"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Lëvize telefonin më afër"</string>
- <string name="face_acquired_too_high" msgid="8278815780046368576">"Lëvize telefonin më lart"</string>
- <string name="face_acquired_too_low" msgid="4075391872960840081">"Lëvize telefonin më poshtë"</string>
+ <string name="face_acquired_too_high" msgid="8278815780046368576">"Ngrije telefonin më lart"</string>
+ <string name="face_acquired_too_low" msgid="4075391872960840081">"Ule telefonin më poshtë"</string>
<string name="face_acquired_too_right" msgid="6245286514593540859">"Lëvize telefonin në të majtën tënde"</string>
<string name="face_acquired_too_left" msgid="9201762240918405486">"Lëvize telefonin në të djathtën tënde"</string>
<string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Shiko më drejt në pajisjen tënde."</string>
@@ -701,7 +702,7 @@
<skip />
<string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Modeli i fytyrës nuk krijohet. Provo sërish."</string>
<string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"U zbuluan syze të errëta. Fytyra jote duhet të jetë plotësisht e dukshme."</string>
- <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"U zbulua mbulim i fytyrës. Fytyra jote duhet të jetë plotësisht e dukshme."</string>
+ <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Fytyra është e mbuluar. Fytyra duhet të jetë plotësisht e dukshme."</string>
<string-array name="face_acquired_vendor">
</string-array>
<string name="face_error_hw_not_available" msgid="5085202213036026288">"Fytyra s\'mund të verifikohet. Hardueri nuk ofrohet."</string>
@@ -2159,10 +2160,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Kjo përmbajtje nuk mund të hapet me aplikacione pune"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Kjo përmbajtje nuk mund të shpërndahet me aplikacione personale"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Kjo përmbajtje nuk mund të hapet me aplikacione personale"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Aplikacionet e punës janë vendosur në pauzë"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"Hiq nga pauza"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Nuk ka aplikacione pune"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Nuk ka aplikacione personale"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"Hap <xliff:g id="APP">%s</xliff:g> personal"</string>
diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml
index 15d18a6..11af2ba 100644
--- a/core/res/res/values-sr/strings.xml
+++ b/core/res/res/values-sr/strings.xml
@@ -299,6 +299,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Android систем"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Пређи на лични профил"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"Пређи на пословни профил"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"Пређи на лични профил апликације <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"Пређи на пословни профил апликације <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Контакти"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"приступи контактима"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Локација"</string>
@@ -504,8 +506,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"Дозвољава апликацији да контролише вибрацију."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"Дозвољава апликацији да приступа стању вибрирања."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"директно позивање бројева телефона"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"Дозвољава апликацији да позива бројеве телефона без ваше интеракције. То може да доведе до неочекиваних наплата или позива. Имајте у виду да се тиме апликацији не дозвољава да позива бројеве за хитне случајеве. Злонамерне апликације могу да изазову трошкове упућивањем позива без ваше потврде или да бирају кодове оператера услед чега се долазни позиви аутоматски прослеђују на други број."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"приступ услузи позива помоћу размене тренутних порука"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Дозвољава апликацији да користи услугу размене тренутних порука да би упућивала позиве без ваше интервенције."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"читање статуса и идентитета телефона"</string>
@@ -702,7 +703,7 @@
<skip />
<string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Прављење модела лица није успело. Пробајте поново."</string>
<string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Откривене су тамне наочари. Лице мора да буде потпуно видљиво."</string>
- <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Откривено је прекривање лица. Лице мора да буде потпуно видљиво."</string>
+ <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Лице је прекривено. Мора да буде сасвим видљиво."</string>
<string-array name="face_acquired_vendor">
</string-array>
<string name="face_error_hw_not_available" msgid="5085202213036026288">"Провера лица није успела. Хардвер није доступан."</string>
@@ -1256,7 +1257,7 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Покретање апликација."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Завршавање покретања."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Притиснули сте дугме за укључивање – тиме обично искључујете екран.\n\nПробајте лагано да додирнете док подешавате отисак прста."</string>
- <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Завршите подешавање искључивањем екрана"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Искључите екран и напустите подешавање"</string>
<string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Искључи"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Настављате верификацију отиска прста?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"Притиснули сте дугме за укључивање – тиме обично искључујете екран.\n\nПробајте лагано да додирнете да бисте верификовали отисак прста."</string>
@@ -1846,7 +1847,7 @@
<string name="restr_pin_confirm_pin" msgid="7143161971614944989">"Потврдите нови PIN"</string>
<string name="restr_pin_create_pin" msgid="917067613896366033">"Направите PIN за измену ограничења"</string>
<string name="restr_pin_error_doesnt_match" msgid="7063392698489280556">"PIN-ови се не подударају. Пробајте поново."</string>
- <string name="restr_pin_error_too_short" msgid="1547007808237941065">"PIN је прекратак. Мора да садржи најмање 4 цифре."</string>
+ <string name="restr_pin_error_too_short" msgid="1547007808237941065">"PIN је прекратак. Мора да има бар 4 цифре."</string>
<string name="restr_pin_try_later" msgid="5897719962541636727">"Пробајте поново касније"</string>
<string name="immersive_cling_title" msgid="2307034298721541791">"Приказује се цео екран"</string>
<string name="immersive_cling_description" msgid="7092737175345204832">"Да бисте изашли, превуците надоле одозго."</string>
@@ -2160,10 +2161,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Овај садржај не може да се отвара помоћу пословних апликација"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Овај садржај не може да се дели помоћу личних апликација"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Овај садржај не може да се отвара помоћу личних апликација"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Пословне апликације су паузиране"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"Опозови паузу"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Нема пословних апликација"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Нема личних апликација"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"Отворите личну апликацију <xliff:g id="APP">%s</xliff:g>"</string>
diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml
index d59d2d7..cdc80f9 100644
--- a/core/res/res/values-sv/strings.xml
+++ b/core/res/res/values-sv/strings.xml
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Android-system"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Byt till personlig profil"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"Byt till jobbprofilen"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"Byt till privat profil i <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"Byt till jobbprofil i <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Kontakter"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"få tillgång till dina kontakter"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Plats"</string>
@@ -503,8 +505,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"Tillåter att appen styr vibrationen."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"Appen beviljas åtkomst till vibrationsstatus."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"ringa telefonnummer direkt"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"Tillåter att appen ringer telefonnummer utan åtgärd från dig. Detta kan leda till oväntade avgifter eller samtal. Observera att appen inte tillåts ringa nödsamtal. Skadliga appar kan ringa utan ditt godkännande och detta kan kosta pengar. De kan även ange operatörskoder vilket kan leda till att inkommande samtal automatiskt vidarebefordras till ett annat nummer."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"tillgång till tjänsten för snabbmeddelanden vid samtal"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Tillåter att appen använder tjänsten för snabbmeddelanden för att ringa samtal utan åtgärd från dig."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"läsa telefonens status och identitet"</string>
@@ -2159,10 +2160,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Det här innehållet kan inte öppnas med jobbappar"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Det här innehållet kan inte delas med privata appar"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Det här innehållet kan inte öppnas med privata appar"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Jobbappar har pausats"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"Återuppta"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Inga jobbappar"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Inga privata appar"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"Öppna <xliff:g id="APP">%s</xliff:g> med privat profil"</string>
@@ -2288,7 +2287,7 @@
<string name="sensor_privacy_start_use_mic_notification_content_title" msgid="2420858361276370367">"Återaktivera enhetens mikrofon"</string>
<string name="sensor_privacy_start_use_camera_notification_content_title" msgid="7287720213963466672">"Återaktivera enhetens kamera"</string>
<string name="sensor_privacy_start_use_notification_content_text" msgid="7595608891015777346">"För <b><xliff:g id="APP">%s</xliff:g></b> och alla appar och tjänster"</string>
- <string name="sensor_privacy_start_use_dialog_turn_on_button" msgid="7089318886628390827">"Avblockera"</string>
+ <string name="sensor_privacy_start_use_dialog_turn_on_button" msgid="7089318886628390827">"Återaktivera"</string>
<string name="sensor_privacy_notification_channel_label" msgid="936036783155261349">"Sensorintegritet"</string>
<string name="splash_screen_view_icon_description" msgid="180638751260598187">"Appikon"</string>
<string name="splash_screen_view_branding_description" msgid="7911129347402728216">"Appens varumärkesbild"</string>
diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml
index 6449588..5cd8594 100644
--- a/core/res/res/values-sw/strings.xml
+++ b/core/res/res/values-sw/strings.xml
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Mfumo wa Android"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Tumia wasifu wa binafsi"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"Tumia wasifu wa kazini"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"Badili uweke wasifu wa binafsi <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"Badili uweke wasifu wa kazini <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Anwani"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"ifikie anwani zako"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Mahali"</string>
@@ -503,8 +505,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"Inaruhusu programu kudhibiti kitingishi."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"Huruhusu programu kufikia hali ya kitetemeshaji."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"piga simu moja kwa moja kwa nambari za simu"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"Huruhusu programu kupiga simu kiotomatiki. Hii huenda ikasababisha gharama au simu usizotarajia. Kumbuka, idhini hii hairuhusu programu kupiga simu kwa nambari za dharura. Programu hasidi zinaweza kusababisha utozwe pesa kwa kupiga simu bila wewe kuthibitisha, au kupiga nambari za watoa huduma, hatua ambayo husababisha simu zinazoingia kusambazwa kwa nambari nyingine kiotomatiki."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"fikia huduma ya simu ya IMS"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Huruhusu programu kutumia huduma ya IMS kupiga simu bila udhibiti wako."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"kusoma hali na kitambulisho cha simu"</string>
@@ -2159,10 +2160,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Huwezi kufungua maudhui haya ukitumia programu za kazini"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Huwezi kushiriki maudhui haya na programu za binafsi"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Huwezi kufungua maudhui haya ukitumia programu za binafsi"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Programu za kazini zimesitishwa"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"Acha kusitisha"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Hakuna programu za kazini"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Hakuna programu za binafsi"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"Fungua <xliff:g id="APP">%s</xliff:g> ukitumia wasifu binafsi"</string>
@@ -2318,7 +2317,7 @@
<string name="permdesc_startForegroundServicesFromBackground" msgid="4071826571656001537">"Huruhusu programu oanifu kuanzisha huduma zinazoonekana kwenye skrini kutoka katika huduma zinazoendelea chinichini."</string>
<string name="mic_access_on_toast" msgid="2666925317663845156">"Maikrofoni inapatikana"</string>
<string name="mic_access_off_toast" msgid="8111040892954242437">"Maikrofoni imezuiwa"</string>
- <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Hali ya skrini mbili"</string>
+ <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Dual screen"</string>
<string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Umewasha kipengele cha hali ya skrini mbili"</string>
<string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g> inatumia skrini zote kuonyesha maudhui"</string>
<string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"Kifaa kina joto sana"</string>
diff --git a/core/res/res/values-ta/strings.xml b/core/res/res/values-ta/strings.xml
index 4709706..0b68c40 100644
--- a/core/res/res/values-ta/strings.xml
+++ b/core/res/res/values-ta/strings.xml
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Android அமைப்பு"</string>
<string name="user_owner_label" msgid="8628726904184471211">"தனிப்பட்ட சுயவிவரத்திற்கு மாற்றவும்"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"பணிச் சுயவிவரத்திற்கு மாற்றவும்"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"தனிப்பட்ட கணக்கிற்கு (<xliff:g id="APP_NAME">%1$s</xliff:g>) மாறு"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"பணிக் கணக்கிற்கு (<xliff:g id="APP_NAME">%1$s</xliff:g>) மாறு"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"தொடர்புகள்"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"தொடர்புகளை அணுக வேண்டும்"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"இருப்பிடம்"</string>
@@ -503,8 +505,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"அதிர்வைக் கட்டுப்படுத்தப் ஆப்ஸை அனுமதிக்கிறது."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"அதிர்வு நிலையை அணுக ஆப்ஸை அனுமதிக்கும்."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"தொலைபேசி எண்களை நேரடியாக அழைத்தல்"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"உங்கள் உறுதிப்படுத்தல் இல்லாமல் ஃபோன் எண்களை அழைக்க ஆப்ஸை அனுமதிக்கும். இது எதிர்பாராத கட்டணங்கள்/அழைப்புகளுக்கு வழிவகுக்கக்கூடும். அவசர உதவி எண்களை அழைக்க இது ஆப்ஸை அனுமதிக்காது என்பதை நினைவில் கொள்ளுங்கள். தீங்கிழைக்கும் ஆப்ஸ் உங்கள் உறுதிப்படுத்தல் இல்லாமல் அழைப்புகளை மேற்கொள்வதன் மூலம் உங்களுக்கு அநாவசியச் செலவு ஏற்படக்கூடும் அல்லது அவை கேரியர் குறியீடுகளை டயல் செய்து உங்களுக்கான உள்வரும் அழைப்புகளை வேறு எண்ணுக்குத் தானாகத் திசைதிருப்பக்கூடும்."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"IMS அழைப்புச் சேவையை அணுகுதல்"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"உங்கள் குறுக்கீடின்றி IMS சேவையைப் பயன்படுத்தி அழைப்பதற்கு, ஆப்ஸை அனுமதிக்கும்."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"மொபைல் நிலை மற்றும் அடையாளத்தைப் படித்தல்"</string>
@@ -2159,10 +2160,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"பணி ஆப்ஸ் மூலம் இந்த உள்ளடக்கத்தைத் திறக்க முடியாது"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"தனிப்பட்ட ஆப்ஸுடன் இந்த உள்ளடக்கத்தைப் பகிர முடியாது"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"தனிப்பட்ட ஆப்ஸ் மூலம் இந்த உள்ளடக்கத்தைத் திறக்க முடியாது"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"பணி ஆப்ஸ் இடைநிறுத்தப்பட்டுள்ளன"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"மீண்டும் இயக்கு"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"பணி ஆப்ஸ் எதுவுமில்லை"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"தனிப்பட்ட ஆப்ஸ் எதுவுமில்லை"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"தனிப்பட்ட கணக்கில் <xliff:g id="APP">%s</xliff:g> ஆப்ஸைத் திறங்கள்"</string>
diff --git a/core/res/res/values-te/strings.xml b/core/res/res/values-te/strings.xml
index 22f1d1a..03a608e 100644
--- a/core/res/res/values-te/strings.xml
+++ b/core/res/res/values-te/strings.xml
@@ -162,7 +162,7 @@
<string name="httpErrorAuth" msgid="469553140922938968">"ప్రామాణీకరించడం సాధ్యపడలేదు."</string>
<string name="httpErrorProxyAuth" msgid="7229662162030113406">"ప్రాక్సీ సర్వర్ ద్వారా ప్రామాణీకరణ విజయవంతం కాలేదు."</string>
<string name="httpErrorConnect" msgid="3295081579893205617">"సర్వర్కు కనెక్ట్ చేయడం సాధ్యపడలేదు."</string>
- <string name="httpErrorIO" msgid="3860318696166314490">"సర్వర్తో కమ్యూనికేట్ చేయడం సాధ్యపడలేదు. తర్వాత మళ్లీ ప్రయత్నించండి."</string>
+ <string name="httpErrorIO" msgid="3860318696166314490">"సర్వర్తో కమ్యూనికేట్ చేయడం సాధ్యపడలేదు. తర్వాత మళ్లీ ట్రై చేయండి."</string>
<string name="httpErrorTimeout" msgid="7446272815190334204">"సర్వర్కు కనెక్షన్ సమయం ముగిసింది."</string>
<string name="httpErrorRedirectLoop" msgid="8455757777509512098">"పేజీ చాలా ఎక్కువ సర్వర్ మళ్లింపులను కలిగి ఉంది."</string>
<string name="httpErrorUnsupportedScheme" msgid="2664108769858966374">"ప్రోటోకాల్కి మద్దతు లేదు."</string>
@@ -170,7 +170,7 @@
<string name="httpErrorBadUrl" msgid="754447723314832538">"URL చెల్లనిది అయినందువలన పేజీని తెరవడం సాధ్యపడలేదు."</string>
<string name="httpErrorFile" msgid="3400658466057744084">"ఫైల్ను యాక్సెస్ చేయడం సాధ్యపడలేదు."</string>
<string name="httpErrorFileNotFound" msgid="5191433324871147386">"రిక్వెస్ట్ చేసిన ఫైల్ను కనుగొనడం సాధ్యపడలేదు."</string>
- <string name="httpErrorTooManyRequests" msgid="2149677715552037198">"చాలా ఎక్కువ రిక్వెస్ట్లు ప్రాసెస్ చేయబడుతున్నాయి. తర్వాత మళ్లీ ప్రయత్నించండి."</string>
+ <string name="httpErrorTooManyRequests" msgid="2149677715552037198">"చాలా ఎక్కువ రిక్వెస్ట్లు ప్రాసెస్ చేయబడుతున్నాయి. తర్వాత మళ్లీ ట్రై చేయండి."</string>
<string name="notification_title" msgid="5783748077084481121">"<xliff:g id="ACCOUNT">%1$s</xliff:g>కు సైన్ఇన్ ఎర్రర్"</string>
<string name="contentServiceSync" msgid="2341041749565687871">"సింక్"</string>
<string name="contentServiceSyncNotificationTitle" msgid="5766411446676388623">"సింక్ చేయడం సాధ్యపడదు"</string>
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Android సిస్టమ్"</string>
<string name="user_owner_label" msgid="8628726904184471211">"వ్యక్తిగత ప్రొఫైల్కి మార్చు"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"కార్యాలయ ప్రొఫైల్కి మార్చు"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"వ్యక్తిగత <xliff:g id="APP_NAME">%1$s</xliff:g>కు మార్చండి"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"వర్క్ <xliff:g id="APP_NAME">%1$s</xliff:g>కు మార్చండి"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"కాంటాక్ట్లు"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"మీ కాంటాక్ట్లను యాక్సెస్ చేయడానికి"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"లొకేషన్"</string>
@@ -503,8 +505,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"వైబ్రేటర్ను నియంత్రించడానికి యాప్ను అనుమతిస్తుంది."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"వైబ్రేటర్ స్థితిని యాక్సెస్ చేసేందుకు యాప్ను అనుమతిస్తుంది."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"నేరుగా కాల్ చేసే ఫోన్ నంబర్లు"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"మీ ప్రమేయం లేకుండానే ఫోన్ నంబర్లకు కాల్ చేయడానికి యాప్ను అనుమతిస్తుంది. ఇది ఊహించని ఛార్జీలు విధించబడవచ్చు లేదా కాల్స్ చేయవచ్చు. ఇది అత్యవసర నంబర్లకు కాల్ చేయడానికి యాప్ను అనుమతించదని గుర్తుంచుకోండి. హానికరమైన యాప్లు మీరు నిర్ధారించకుండా కాల్స్ చేయవచ్చు, లేదా ఇన్కమింగ్ కాల్స్ను ఆటోమేటిక్గా మరొక నంబర్కు ఫార్వర్డ్ అవ్వడానికి కారణమయ్యే క్యారియర్ కోడ్లను డయల్ చేయవచ్చు, వీటి వల్ల మీకు డబ్బు ఖర్చు అవ్వచ్చు."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"IMS కాల్ సేవ యాక్సెస్ అనుమతి"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"మీ ప్రమేయం లేకుండా కాల్స్ చేయడం కోసం IMS సేవను ఉపయోగించడానికి యాప్ను అనుమతిస్తుంది."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"ఫోన్ స్టేటస్ మరియు గుర్తింపుని చదవడం"</string>
@@ -629,12 +630,12 @@
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"వేలిముద్ర సెన్సార్ను క్లీన్ చేసి, మళ్లీ ట్రై చేయండి"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"సెన్సార్ను క్లీన్ చేసి, మళ్లీ ట్రై చేయండి"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"సెన్సార్ మీద గట్టిగా నొక్కండి"</string>
- <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"వేలిని చాలా నెమ్మదిగా కదిలించారు. దయచేసి మళ్లీ ప్రయత్నించండి."</string>
+ <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"వేలిని చాలా నెమ్మదిగా కదిలించారు. దయచేసి మళ్లీ ట్రై చేయండి."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"మరొక వేలిముద్రను ట్రై చేయండి"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"వెలుతురు అధికంగా ఉంది"</string>
<string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"పవర్ బటన్ కనుగొనబడింది"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"సర్దుబాటు చేయడానికి ట్రై చేయండి"</string>
- <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"ప్రతిసారీ మీ వేళ్ల స్థానాన్ని కొద్దిగా మార్చండి"</string>
+ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"ప్రతిసారి మీ వేలిని కొద్ది కొద్దిగా జరపండి"</string>
<string-array name="fingerprint_acquired_vendor">
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"వేలిముద్ర గుర్తించబడలేదు"</string>
@@ -685,7 +686,7 @@
<string name="face_acquired_too_right" msgid="6245286514593540859">"ఫోన్ను మీ ఎడమ వైపునకు జరపండి"</string>
<string name="face_acquired_too_left" msgid="9201762240918405486">"ఫోన్ను మీ కుడి వైపునకు జరపండి"</string>
<string name="face_acquired_poor_gaze" msgid="4427153558773628020">"దయచేసి మీ పరికరం వైపు మరింత నేరుగా చూడండి."</string>
- <string name="face_acquired_not_detected" msgid="1057966913397548150">"మీ ముఖం కనిపించడం లేదు. మీ ఫోన్ను కంటి స్థాయిలో పట్టుకోండి."</string>
+ <string name="face_acquired_not_detected" msgid="1057966913397548150">"మీ ముఖం కనిపించడం లేదు. మీ ఫోన్ను కళ్లకు ఎదురుగా పట్టుకోండి."</string>
<string name="face_acquired_too_much_motion" msgid="8199691445085189528">"బాగా కదుపుతున్నారు. ఫోన్ను స్థిరంగా పట్టుకోండి"</string>
<string name="face_acquired_recalibrate" msgid="8724013080976469746">"దయచేసి మీ ముఖాన్ని మళ్లీ నమోదు చేయండి."</string>
<string name="face_acquired_too_different" msgid="2520389515612972889">"ముఖం గుర్తించబడలేదు. మళ్లీ ట్రై చేయండి."</string>
@@ -693,7 +694,7 @@
<string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"మీ ఫోన్ వైపు మరింత నేరుగా చూడండి"</string>
<string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"మీ ఫోన్ వైపు మరింత నేరుగా చూడండి"</string>
<string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"మీ ఫోన్ వైపు మరింత నేరుగా చూడండి"</string>
- <string name="face_acquired_obscured" msgid="4917643294953326639">"మీ ముఖానికి అడ్డుగా ఉన్నవాటిని తీసివేయండి."</string>
+ <string name="face_acquired_obscured" msgid="4917643294953326639">"మీ ముఖానికి ఏదైనా అడ్డుగా ఉంటే దాన్ని తీసివేయండి."</string>
<string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"నల్లని బార్తో సహా మీ స్క్రీన్ పైభాగం అంతటినీ శుభ్రంగా తుడవండి"</string>
<!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
<skip />
@@ -709,10 +710,10 @@
<string name="face_error_no_space" msgid="5649264057026021723">"కొత్త ముఖం డేటాను స్టోరేజ్ చేయడం కాదు. మొదట పాతది తొలిగించండి."</string>
<string name="face_error_canceled" msgid="2164434737103802131">"ముఖ యాక్టివిటీ రద్దయింది."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"ఫేస్ అన్లాక్ను యూజర్ రద్దు చేశారు"</string>
- <string name="face_error_lockout" msgid="7864408714994529437">"చాలా ఎక్కువ ప్రయత్నాలు చేశారు. తర్వాత మళ్లీ ప్రయత్నించండి."</string>
+ <string name="face_error_lockout" msgid="7864408714994529437">"చాలా ఎక్కువ ప్రయత్నాలు చేశారు. తర్వాత మళ్లీ ట్రై చేయండి."</string>
<string name="face_error_lockout_permanent" msgid="8533257333130473422">"ఎక్కువ సార్లు ట్రై చేశారు. ఫేస్ అన్లాక్ అందుబాటులో లేదు."</string>
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"చాలా ఎక్కువ సార్లు ప్రయత్నించారు. బదులుగా స్క్రీన్ లాక్ను ఎంటర్ చేయండి."</string>
- <string name="face_error_unable_to_process" msgid="5723292697366130070">"ముఖం ధృవీకరించలేకపోయింది. మళ్లీ ప్రయత్నించండి."</string>
+ <string name="face_error_unable_to_process" msgid="5723292697366130070">"ముఖం ధృవీకరించలేకపోయింది. మళ్లీ ట్రై చేయండి."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"మీరు ఫేస్ అన్లాక్ను సెటప్ చేయలేదు"</string>
<string name="face_error_hw_not_present" msgid="7940978724978763011">"ఫేస్ అన్లాక్ను ఈ పరికరం సపోర్ట్ చేయదు"</string>
<string name="face_error_security_update_required" msgid="5076017208528750161">"సెన్సార్ తాత్కాలికంగా డిజేబుల్ చేయబడింది."</string>
@@ -967,8 +968,8 @@
<string name="lockscreen_emergency_call" msgid="7500692654885445299">"అత్యవసరం"</string>
<string name="lockscreen_return_to_call" msgid="3156883574692006382">"కాల్కు తిరిగి వెళ్లు"</string>
<string name="lockscreen_pattern_correct" msgid="8050630103651508582">"సరైనది!"</string>
- <string name="lockscreen_pattern_wrong" msgid="2940138714468358458">"మళ్లీ ప్రయత్నించండి"</string>
- <string name="lockscreen_password_wrong" msgid="8605355913868947490">"మళ్లీ ప్రయత్నించండి"</string>
+ <string name="lockscreen_pattern_wrong" msgid="2940138714468358458">"మళ్లీ ట్రై చేయండి"</string>
+ <string name="lockscreen_password_wrong" msgid="8605355913868947490">"మళ్లీ ట్రై చేయండి"</string>
<string name="lockscreen_storage_locked" msgid="634993789186443380">"అన్ని లక్షణాలు మరియు డేటా కోసం అన్లాక్ చేయండి"</string>
<string name="faceunlock_multiple_failures" msgid="681991538434031708">"ఫేస్ అన్లాక్ ప్రయత్నాల గరిష్ఠ పరిమితిని మించిపోయారు"</string>
<string name="lockscreen_missing_sim_message_short" msgid="1229301273156907613">"SIM లేదు"</string>
@@ -992,19 +993,19 @@
<string name="lockscreen_sim_puk_locked_instructions" msgid="5307979043730860995">"వినియోగదారు గైడ్ను చూడండి లేదా కస్టమర్ కేర్ను సంప్రదించండి."</string>
<string name="lockscreen_sim_locked_message" msgid="5911944931911850164">"SIM లాక్ చేయబడింది."</string>
<string name="lockscreen_sim_unlock_progress_dialog_message" msgid="8381565919325410939">"SIMను అన్లాక్ చేస్తోంది…"</string>
- <string name="lockscreen_too_many_failed_attempts_dialog_message" msgid="6458790975898594240">"మీరు మీ అన్లాక్ నమూనాను <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా గీసారు. \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> సెకన్లలో మళ్లీ ప్రయత్నించండి."</string>
- <string name="lockscreen_too_many_failed_password_attempts_dialog_message" msgid="3118353451602377380">"మీరు మీ పాస్వర్డ్ను <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా టైప్ చేశారు. \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> సెకన్లలో మళ్లీ ప్రయత్నించండి."</string>
- <string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="2874278239714821984">"మీరు మీ పిన్ను <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా టైప్ చేశారు. \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> సెకన్లలో మళ్లీ ప్రయత్నించండి."</string>
- <string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="3069635524964070596">"మీరు మీ అన్లాక్ నమూనాని <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా గీసారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> విజయవంతం కాని ప్రయత్నాల తర్వాత, మీరు మీ Google సైన్ఇన్ను ఉపయోగించి మీ టాబ్లెట్ను అన్లాక్ చేయడానికి అడగబడతారు.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> సెకన్లలో మళ్లీ ప్రయత్నించండి."</string>
- <string name="lockscreen_failed_attempts_almost_glogin" product="tv" msgid="6399092175942158529">"మీరు మీ అన్లాక్ నమూనాని <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా గీసారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> విఫల ప్రయత్నాల తర్వాత, మీరు మీ Google సైన్ఇన్ను ఉపయోగించి మీ Android TV పరికరాన్ని అన్లాక్ చేయాల్సిందిగా మీకు తెలపబడుతుంది.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> సెకన్లలో మళ్లీ ప్రయత్నించండి."</string>
- <string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="5691623136957148335">"మీరు మీ అన్లాక్ నమూనాని <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా గీసారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> విజయవంతం కాని ప్రయత్నాల తర్వాత, మీరు మీ Google సైన్ఇన్ను ఉపయోగించి మీ ఫోన్ను అన్లాక్ చేయడానికి అడగబడతారు.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> సెకన్లలో మళ్లీ ప్రయత్నించండి."</string>
+ <string name="lockscreen_too_many_failed_attempts_dialog_message" msgid="6458790975898594240">"మీరు మీ అన్లాక్ నమూనాను <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా గీసారు. \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> సెకన్లలో మళ్లీ ట్రై చేయండి."</string>
+ <string name="lockscreen_too_many_failed_password_attempts_dialog_message" msgid="3118353451602377380">"మీరు మీ పాస్వర్డ్ను <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా టైప్ చేశారు. \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> సెకన్లలో మళ్లీ ట్రై చేయండి."</string>
+ <string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="2874278239714821984">"మీరు మీ పిన్ను <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా టైప్ చేశారు. \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> సెకన్లలో మళ్లీ ట్రై చేయండి."</string>
+ <string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="3069635524964070596">"మీరు మీ అన్లాక్ నమూనాని <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా గీసారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> విజయవంతం కాని ప్రయత్నాల తర్వాత, మీరు మీ Google సైన్ఇన్ను ఉపయోగించి మీ టాబ్లెట్ను అన్లాక్ చేయడానికి అడగబడతారు.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> సెకన్లలో మళ్లీ ట్రై చేయండి."</string>
+ <string name="lockscreen_failed_attempts_almost_glogin" product="tv" msgid="6399092175942158529">"మీరు మీ అన్లాక్ నమూనాని <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా గీసారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> విఫల ప్రయత్నాల తర్వాత, మీరు మీ Google సైన్ఇన్ను ఉపయోగించి మీ Android TV పరికరాన్ని అన్లాక్ చేయాల్సిందిగా మీకు తెలపబడుతుంది.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> సెకన్లలో మళ్లీ ట్రై చేయండి."</string>
+ <string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="5691623136957148335">"మీరు మీ అన్లాక్ నమూనాని <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా గీసారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> విజయవంతం కాని ప్రయత్నాల తర్వాత, మీరు మీ Google సైన్ఇన్ను ఉపయోగించి మీ ఫోన్ను అన్లాక్ చేయడానికి అడగబడతారు.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> సెకన్లలో మళ్లీ ట్రై చేయండి."</string>
<string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="7914445759242151426">"మీరు టాబ్లెట్ను అన్లాక్ చేయడానికి <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా ప్రయత్నించారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> విఫల ప్రయత్నాల తర్వాత, టాబ్లెట్ ఫ్యాక్టరీ ఆటోమేటిక్కు రీసెట్ చేయబడుతుంది, అలాగే మొత్తం యూజర్ డేటాను కోల్పోతారు."</string>
<string name="lockscreen_failed_attempts_almost_at_wipe" product="tv" msgid="4275591249631864248">"మీరు మీ Android TV పరికరాన్ని అన్లాక్ చేయడానికి <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు విఫల ప్రయత్నాలు చేశారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> విఫల ప్రయత్నాల తర్వాత, మీ Android TV పరికరం ఫ్యాక్టరీ ఆటోమేటిక్కు రీసెట్ చేయబడుతుంది, అలాగే యూజర్ డేటా మొత్తాన్ని కోల్పోతారు."</string>
<string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="1166532464798446579">"మీరు ఫోన్ను అన్లాక్ చేయడానికి <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా ప్రయత్నించారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> విఫల ప్రయత్నాల తర్వాత, ఫోన్, ఫ్యాక్టరీ ఆటోమేటిక్కు రీసెట్ చేయబడుతుంది, అలాగే మొత్తం యూజర్ డేటాను కోల్పోతారు."</string>
<string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="8682445539263683414">"మీరు టాబ్లెట్ను అన్లాక్ చేయడానికి <xliff:g id="NUMBER">%d</xliff:g> సార్లు తప్పుగా ప్రయత్నించారు. టాబ్లెట్ ఇప్పుడు ఫ్యాక్టరీ ఆటోమేటిక్కు రీసెట్ చేయబడుతుంది."</string>
<string name="lockscreen_failed_attempts_now_wiping" product="tv" msgid="2205435033340091883">"మీరు మీ Android TV పరికరాన్ని అన్లాక్ చేయడానికి <xliff:g id="NUMBER">%d</xliff:g> సార్లు విఫల ప్రయత్నాలు చేశారు. మీ Android TV పరికరం ఇప్పుడు ఫ్యాక్టరీ రీసెట్ చేయబడుతుంది."</string>
<string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="2203704707679895487">"మీరు ఫోన్ను అన్లాక్ చేయడానికి <xliff:g id="NUMBER">%d</xliff:g> సార్లు తప్పుగా ప్రయత్నించారు. ఫోన్ ఇప్పుడు ఫ్యాక్టరీ ఆటోమేటిక్కు రీసెట్ చేయబడుతుంది."</string>
- <string name="lockscreen_too_many_failed_attempts_countdown" msgid="6807200118164539589">"<xliff:g id="NUMBER">%d</xliff:g> సెకన్లలో మళ్లీ ప్రయత్నించండి."</string>
+ <string name="lockscreen_too_many_failed_attempts_countdown" msgid="6807200118164539589">"<xliff:g id="NUMBER">%d</xliff:g> సెకన్లలో మళ్లీ ట్రై చేయండి."</string>
<string name="lockscreen_forgot_pattern_button_text" msgid="8362442730606839031">"నమూనాను మర్చిపోయారా?"</string>
<string name="lockscreen_glogin_forgot_pattern" msgid="9218940117797602518">"ఖాతా అన్లాక్"</string>
<string name="lockscreen_glogin_too_many_attempts" msgid="3775904917743034195">"చాలా ఎక్కువ ఆకృతి ప్రయత్నాలు చేశారు"</string>
@@ -1255,7 +1256,7 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"యాప్లను ప్రారంభిస్తోంది."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"బూట్ను ముగిస్తోంది."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"మీరు పవర్ బటన్ను నొక్కారు — ఇది సాధారణంగా స్క్రీన్ను ఆఫ్ చేస్తుంది.\n\nమీ వేలిముద్రను సెటప్ చేస్తున్నప్పుడు తేలికగా ట్యాప్ చేయడానికి ట్రై చేయండి."</string>
- <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"సెటప్ ముగించడానికి, స్క్రీన్ను ఆఫ్ చేయి"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"సెటప్ ముగించడానికి, స్క్రీన్ను ఆఫ్ చేయండి"</string>
<string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"ఆఫ్ చేయండి"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"మీ వేలిముద్ర వెరిఫైను కొనసాగించాలా?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"మీరు పవర్ బటన్ను నొక్కారు — ఇది సాధారణంగా స్క్రీన్ను ఆఫ్ చేస్తుంది.\n\nమీ వేలిముద్రను వెరిఫై చేయడానికి తేలికగా ట్యాప్ చేయడం ట్రై చేయండి."</string>
@@ -1440,7 +1441,7 @@
<string name="ext_media_move_success_title" msgid="4901763082647316767">"కంటెంట్ బదిలీ పూర్తయింది"</string>
<string name="ext_media_move_success_message" msgid="9159542002276982979">"కంటెంట్ <xliff:g id="NAME">%s</xliff:g>కి తరలించబడింది"</string>
<string name="ext_media_move_failure_title" msgid="3184577479181333665">"కంటెంట్ని తరలించడం సాధ్యం కాలేదు"</string>
- <string name="ext_media_move_failure_message" msgid="4197306718121869335">"కంటెంట్ని తరలించడానికి మళ్లీ ప్రయత్నించండి"</string>
+ <string name="ext_media_move_failure_message" msgid="4197306718121869335">"కంటెంట్ని తరలించడానికి మళ్లీ ట్రై చేయండి"</string>
<string name="ext_media_status_removed" msgid="241223931135751691">"తీసివేయబడింది"</string>
<string name="ext_media_status_unmounted" msgid="8145812017295835941">"తొలగించబడింది"</string>
<string name="ext_media_status_checking" msgid="159013362442090347">"చెక్ చేస్తోంది..."</string>
@@ -1666,18 +1667,18 @@
<string name="kg_login_invalid_input" msgid="8292367491901220210">"చెల్లని వినియోగదారు పేరు లేదా పాస్వర్డ్."</string>
<string name="kg_login_account_recovery_hint" msgid="4892466171043541248">"మీ వినియోగదారు పేరు లేదా పాస్వర్డ్ను మర్చిపోయారా?\n"<b>"google.com/accounts/recovery"</b>"ని సందర్శించండి."</string>
<string name="kg_login_checking_password" msgid="4676010303243317253">"ఖాతాను చెక్ చేస్తోంది…"</string>
- <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="23741434207544038">"మీరు మీ పిన్ను <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా టైప్ చేశారు. \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> సెకన్లలో మళ్లీ ప్రయత్నించండి."</string>
- <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="3328686432962224215">"మీరు మీ పాస్వర్డ్ను <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా టైప్ చేశారు. \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> సెకన్లలో మళ్లీ ప్రయత్నించండి."</string>
- <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="7357404233979139075">"మీరు మీ అన్లాక్ నమూనాను <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా గీసారు. \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> సెకన్లలో మళ్లీ ప్రయత్నించండి."</string>
+ <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="23741434207544038">"మీరు మీ పిన్ను <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా టైప్ చేశారు. \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> సెకన్లలో మళ్లీ ట్రై చేయండి."</string>
+ <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="3328686432962224215">"మీరు మీ పాస్వర్డ్ను <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా టైప్ చేశారు. \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> సెకన్లలో మళ్లీ ట్రై చేయండి."</string>
+ <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="7357404233979139075">"మీరు మీ అన్లాక్ నమూనాను <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా గీసారు. \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> సెకన్లలో మళ్లీ ట్రై చేయండి."</string>
<string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="3479940221343361587">"మీరు టాబ్లెట్ను అన్లాక్ చేయడానికి <xliff:g id="NUMBER_0">%1$d</xliff:g> చెల్లని ప్రయత్నాలు చేశారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> విఫల ప్రయత్నాల తర్వాత, టాబ్లెట్ ఫ్యాక్టరీ ఆటోమేటిక్కు రీసెట్ చేయబడుతుంది, అలాగే మొత్తం యూజర్ డేటాను కోల్పోతారు."</string>
<string name="kg_failed_attempts_almost_at_wipe" product="tv" msgid="9064457748587850217">"మీరు మీ Android TV పరికరాన్ని అన్లాక్ చేయడానికి <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు విఫల ప్రయత్నాలు చేశారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> విఫల ప్రయత్నాల తర్వాత, మీ Android TV పరికరం ఫ్యాక్టరీ ఆటోమేటిక్కు రీసెట్ చేయబడుతుంది, అలాగే యూజర్, డేటా మొత్తాన్ని కోల్పోతారు."</string>
<string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="5955398963754432548">"మీరు ఫోన్ను అన్లాక్ చేయడానికి <xliff:g id="NUMBER_0">%1$d</xliff:g> చెల్లని ప్రయత్నాలు చేశారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> విఫల ప్రయత్నాల తర్వాత, ఫోన్ ఫ్యాక్టరీ ఆటోమేటిక్కు రీసెట్ చేయబడుతుంది, అలాగే మొత్తం యూజర్ డేటాను కోల్పోతారు."</string>
<string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2299099385175083308">"మీరు టాబ్లెట్ను అన్లాక్ చేయడానికి <xliff:g id="NUMBER">%d</xliff:g> చెల్లని ప్రయత్నాలు చేశారు. టాబ్లెట్ ఇప్పుడు ఫ్యాక్టరీ ఆటోమేటిక్కు రీసెట్ చేయబడుతుంది."</string>
<string name="kg_failed_attempts_now_wiping" product="tv" msgid="5045460916106267585">"మీరు మీ Android TV పరికరాన్ని అన్లాక్ చేయడానికి <xliff:g id="NUMBER">%d</xliff:g> సార్లు విఫల ప్రయత్నాలు చేశారు. మీ Android TV పరికరం ఇప్పుడు ఫ్యాక్టరీ రీసెట్ చేయబడుతుంది."</string>
<string name="kg_failed_attempts_now_wiping" product="default" msgid="5043730590446071189">"మీరు ఫోన్ను అన్లాక్ చేయడానికి <xliff:g id="NUMBER">%d</xliff:g> చెల్లని ప్రయత్నాలు చేశారు. ఫోన్ ఇప్పుడు ఫ్యాక్టరీ ఆటోమేటిక్కు రీసెట్ చేయబడుతుంది."</string>
- <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="7086799295109717623">"మీరు మీ అన్లాక్ నమూనాను <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా గీసారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> విఫల ప్రయత్నాల తర్వాత, ఈమెయిల్ ఖాతాను ఉపయోగించి మీ టాబ్లెట్ను అన్లాక్ చేయాల్సిందిగా మిమ్మల్ని అడుగుతారు.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> సెకన్లలో మళ్లీ ప్రయత్నించండి."</string>
- <string name="kg_failed_attempts_almost_at_login" product="tv" msgid="4670840383567106114">"మీరు మీ అన్లాక్ నమూనాను <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా గీశారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> విఫల ప్రయత్నాల తర్వాత మీ Android TV పరికరాన్ని ఈమెయిల్ ఖాతా ద్వారా అన్లాక్ చేయాల్సిందిగా మిమ్మల్ని కోరడం జరుగుతుంది.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> సెకన్లలో మళ్లీ ప్రయత్నించండి."</string>
- <string name="kg_failed_attempts_almost_at_login" product="default" msgid="5270861875006378092">"మీరు మీ అన్లాక్ నమూనాను <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా గీసారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> విఫల ప్రయత్నాల తర్వాత, ఈమెయిల్ ఖాతాను ఉపయోగించి మీ ఫోన్ను అన్లాక్ చేయాల్సిందిగా మిమ్మల్ని అడుగుతారు.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> సెకన్లలో మళ్లీ ప్రయత్నించండి."</string>
+ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="7086799295109717623">"మీరు మీ అన్లాక్ నమూనాను <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా గీసారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> విఫల ప్రయత్నాల తర్వాత, ఈమెయిల్ ఖాతాను ఉపయోగించి మీ టాబ్లెట్ను అన్లాక్ చేయాల్సిందిగా మిమ్మల్ని అడుగుతారు.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> సెకన్లలో మళ్లీ ట్రై చేయండి."</string>
+ <string name="kg_failed_attempts_almost_at_login" product="tv" msgid="4670840383567106114">"మీరు మీ అన్లాక్ నమూనాను <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా గీశారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> విఫల ప్రయత్నాల తర్వాత మీ Android TV పరికరాన్ని ఈమెయిల్ ఖాతా ద్వారా అన్లాక్ చేయాల్సిందిగా మిమ్మల్ని కోరడం జరుగుతుంది.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> సెకన్లలో మళ్లీ ట్రై చేయండి."</string>
+ <string name="kg_failed_attempts_almost_at_login" product="default" msgid="5270861875006378092">"మీరు మీ అన్లాక్ నమూనాను <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా గీసారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> విఫల ప్రయత్నాల తర్వాత, ఈమెయిల్ ఖాతాను ఉపయోగించి మీ ఫోన్ను అన్లాక్ చేయాల్సిందిగా మిమ్మల్ని అడుగుతారు.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> సెకన్లలో మళ్లీ ట్రై చేయండి."</string>
<string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
<string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"తీసివేయండి"</string>
<string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"వాల్యూమ్ను సిఫార్సు చేయబడిన స్థాయి కంటే ఎక్కువగా పెంచాలా?\n\nసుదీర్ఘ వ్యవధుల పాటు అధిక వాల్యూమ్లో వినడం వలన మీ వినికిడి శక్తి దెబ్బ తినవచ్చు."</string>
@@ -1844,9 +1845,9 @@
<string name="restr_pin_enter_new_pin" msgid="3267614461844565431">"కొత్త పిన్"</string>
<string name="restr_pin_confirm_pin" msgid="7143161971614944989">"కొత్త పిన్ను నిర్ధారించండి"</string>
<string name="restr_pin_create_pin" msgid="917067613896366033">"నియంత్రణలను ఎడిట్ చేయడానికి పిన్ను రూపొందించండి"</string>
- <string name="restr_pin_error_doesnt_match" msgid="7063392698489280556">"పిన్లు సరిపోలలేదు. మళ్లీ ప్రయత్నించండి."</string>
+ <string name="restr_pin_error_doesnt_match" msgid="7063392698489280556">"పిన్లు సరిపోలలేదు. మళ్లీ ట్రై చేయండి."</string>
<string name="restr_pin_error_too_short" msgid="1547007808237941065">"పిన్ చాలా చిన్నదిగా ఉంది. తప్పనిసరిగా కనీసం 4 అంకెలు ఉండాలి."</string>
- <string name="restr_pin_try_later" msgid="5897719962541636727">"తర్వాత మళ్లీ ప్రయత్నించండి"</string>
+ <string name="restr_pin_try_later" msgid="5897719962541636727">"తర్వాత మళ్లీ ట్రై చేయండి"</string>
<string name="immersive_cling_title" msgid="2307034298721541791">"ఫుల్-స్క్రీన్లో వీక్షిస్తున్నారు"</string>
<string name="immersive_cling_description" msgid="7092737175345204832">"నిష్క్రమించడానికి, పై నుండి క్రిందికి స్వైప్ చేయండి."</string>
<string name="immersive_cling_positive" msgid="7047498036346489883">"అర్థమైంది"</string>
@@ -1983,7 +1984,7 @@
<string name="profile_encrypted_message" msgid="1128512616293157802">"కార్యాలయ ప్రొఫైల్ అన్లాక్ చేయుటకు నొక్కండి"</string>
<string name="usb_mtp_launch_notification_title" msgid="774319638256707227">"<xliff:g id="PRODUCT_NAME">%1$s</xliff:g>కి కనెక్ట్ చేయబడింది"</string>
<string name="usb_mtp_launch_notification_description" msgid="6942535713629852684">"ఫైళ్లను చూడటానికి నొక్కండి"</string>
- <string name="pin_target" msgid="8036028973110156895">"పిన్ చేయి"</string>
+ <string name="pin_target" msgid="8036028973110156895">"పిన్ చేయండి"</string>
<string name="pin_specific_target" msgid="7824671240625957415">"<xliff:g id="LABEL">%1$s</xliff:g>ను పిన్ చేయండి"</string>
<string name="unpin_target" msgid="3963318576590204447">"అన్పిన్ చేయి"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"<xliff:g id="LABEL">%1$s</xliff:g>ను అన్పిన్ చేయి"</string>
@@ -2159,10 +2160,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"ఈ కంటెంట్ వర్క్ యాప్తో తెరవడం సాధ్యం కాదు"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"ఈ కంటెంట్ వ్యక్తిగత యాప్తో షేర్ చేయడం సాధ్యం కాదు"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"ఈ కంటెంట్ వ్యక్తిగత యాప్తో తెరవడం సాధ్యం కాదు"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"వర్క్ యాప్లు పాజ్ అయ్యాయి"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"అన్పాజ్ చేయండి"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"వర్క్ యాప్లు లేవు"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"వ్యక్తిగత యాప్లు లేవు"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"వ్యక్తిగత <xliff:g id="APP">%s</xliff:g> యాప్ను తెరవండి"</string>
@@ -2320,7 +2319,7 @@
<string name="mic_access_off_toast" msgid="8111040892954242437">"మైక్రోఫోన్ బ్లాక్ చేయబడింది"</string>
<string name="concurrent_display_notification_name" msgid="1526911253558311131">"డ్యూయల్ స్క్రీన్"</string>
<string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"డ్యూయల్ స్క్రీన్ ఆన్లో ఉంది"</string>
- <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"కంటెంట్ను చూపడం కోసం <xliff:g id="APP_NAME">%1$s</xliff:g> రెండు డిస్ప్లేలనూ ఉపయోగిస్తుంది"</string>
+ <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"కంటెంట్ను చూపడం కోసం <xliff:g id="APP_NAME">%1$s</xliff:g> రెండు డిస్ప్లేలనూ ఉపయోగిస్తోంది"</string>
<string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"పరికరం చాలా వేడిగా ఉంది"</string>
<string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"మీ ఫోన్ చాలా వేడిగా అవుతున్నందున, డ్యూయల్ స్క్రీన్ అందుబాటులో లేదు"</string>
<string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"డ్యూయల్ స్క్రీన్ అందుబాటులో లేదు"</string>
diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml
index e33938f..0ec94b2 100644
--- a/core/res/res/values-th/strings.xml
+++ b/core/res/res/values-th/strings.xml
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"ระบบ Android"</string>
<string name="user_owner_label" msgid="8628726904184471211">"สลับไปใช้โปรไฟล์ส่วนตัว"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"สลับไปใช้โปรไฟล์งาน"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"เปลี่ยนไปใช้โปรไฟล์ส่วนตัวใน <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"เปลี่ยนไปใช้โปรไฟล์งานใน <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"รายชื่อติดต่อ"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"เข้าถึงรายชื่อติดต่อ"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"ตำแหน่ง"</string>
@@ -503,8 +505,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"อนุญาตให้แอปพลิเคชันควบคุมการสั่นเตือน"</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"อนุญาตให้แอปเข้าถึงสถานะการสั่น"</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"โทรติดต่อหมายเลขโทรศัพท์โดยตรง"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"อนุญาตให้แอปโทรหาหมายเลขโทรศัพท์โดยที่ไม่ต้องให้คุณจัดการ ซึ่งอาจทำให้มีการเรียกเก็บเงินหรือการโทรที่ไม่คาดคิด โปรดทราบว่าการตั้งค่านี้ไม่ได้อนุญาตให้แอปโทรหาหมายเลขฉุกเฉิน แอปที่เป็นอันตรายอาจทำให้คุณเสียค่าใช้จ่ายด้วยการโทรโดยไม่ขอการยืนยันจากคุณ หรือโทรหารหัสของผู้ให้บริการซึ่งจะมีการโอนสายเรียกเข้าไปยังหมายเลขอื่นโดยอัตโนมัติ"</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"เข้าถึงบริการโทร IMS"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"อนุญาตให้แอปใช้บริการ IMS เพื่อโทรออกโดยคุณไม่ต้องดำเนินการใดๆ เลย"</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"อ่านสถานะและข้อมูลระบุตัวตนของโทรศัพท์"</string>
@@ -1938,7 +1939,7 @@
<string name="user_creation_adding" msgid="7305185499667958364">"อนุญาตให้ <xliff:g id="APP">%1$s</xliff:g> สร้างผู้ใช้ใหม่ด้วย <xliff:g id="ACCOUNT">%2$s</xliff:g> ไหม"</string>
<string name="supervised_user_creation_label" msgid="6884904353827427515">"เพิ่มผู้ใช้ภายใต้การควบคุมดูแล"</string>
<string name="language_selection_title" msgid="52674936078683285">"เพิ่มภาษา"</string>
- <string name="country_selection_title" msgid="5221495687299014379">"ค่ากำหนดภูมิภาค"</string>
+ <string name="country_selection_title" msgid="5221495687299014379">"ค่ากำหนดตามพื้นที่"</string>
<string name="search_language_hint" msgid="7004225294308793583">"พิมพ์ชื่อภาษา"</string>
<string name="language_picker_section_suggested" msgid="6556199184638990447">"แนะนำ"</string>
<string name="language_picker_regions_section_suggested" msgid="6080131515268225316">"แนะนำ"</string>
@@ -2159,10 +2160,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"เปิดเนื้อหานี้โดยใช้แอปงานไม่ได้"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"แชร์เนื้อหานี้โดยใช้แอปส่วนตัวไม่ได้"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"เปิดเนื้อหานี้โดยใช้แอปส่วนตัวไม่ได้"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"แอปงานหยุดชั่วคราว"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"ยกเลิกการหยุดชั่วคราว"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"ไม่มีแอปงาน"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"ไม่มีแอปส่วนตัว"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"เปิด <xliff:g id="APP">%s</xliff:g> ในโปรไฟล์ส่วนตัว"</string>
@@ -2318,8 +2317,8 @@
<string name="permdesc_startForegroundServicesFromBackground" msgid="4071826571656001537">"อนุญาตจากเบื้องหลังให้แอปที่ใช้ร่วมกันเริ่มการทำงานของบริการที่ทำงานอยู่เบื้องหน้า"</string>
<string name="mic_access_on_toast" msgid="2666925317663845156">"ไมโครโฟนพร้อมใช้งาน"</string>
<string name="mic_access_off_toast" msgid="8111040892954242437">"ไมโครโฟนถูกบล็อก"</string>
- <string name="concurrent_display_notification_name" msgid="1526911253558311131">"หน้าจอคู่"</string>
- <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"หน้าจอคู่เปิดอยู่"</string>
+ <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Dual Screen"</string>
+ <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Dual Screen เปิดอยู่"</string>
<string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g> กำลังใช้จอแสดงผลทั้งสองจอเพื่อแสดงเนื้อหา"</string>
<string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"อุปกรณ์ร้อนเกินไป"</string>
<string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"หน้าจอคู่ไม่พร้อมให้ใช้งานเนื่องจากโทรศัพท์ของคุณร้อนเกินไป"</string>
diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml
index 6402f14..c5eec49 100644
--- a/core/res/res/values-tl/strings.xml
+++ b/core/res/res/values-tl/strings.xml
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Android System"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Lumipat sa personal na profile"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"Lumipat sa profile sa trabaho"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"Lumipat sa personal na <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"Lumipat sa <xliff:g id="APP_NAME">%1$s</xliff:g> para sa trabaho"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Mga Contact"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"i-access ang iyong mga contact"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Lokasyon"</string>
@@ -503,8 +505,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"Pinapayagan ang app na kontrolin ang vibrator."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"Pinapayagan ang app na ma-access ang naka-vibrate na status."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"direktang tawagan ang mga numero ng telepono"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"Pinapayagan ang app na tumawag sa mga numero ng telepono nang walang pamamagitan mo. Puwede itong magresulta sa mga hindi inaasahang singil o tawag. Tandaang hindi nito binibigyang-daan ang app na tumawag sa mga numerong pang-emergency. Posibleng may kailanganin kang bayaran dahil sa pagtawag ng mga nakakapinsalang app nang wala ang iyong kumpirmasyon, o mag-dial ang mga ito sa mga code ng carrier na nagdudulot ng awtomatikong pag-forward ng mga papasok na tawag sa ibang numero."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"i-access ang serbisyo sa tawag ng IMS"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Pinapahintulutan ang app na gamitin ang serbisyo ng IMS upang tumawag nang walang pahintulot mo."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"basahin ang katayuan at pagkakakilanlan ng telepono"</string>
@@ -685,7 +686,7 @@
<string name="face_acquired_too_right" msgid="6245286514593540859">"Iusog pakaliwa ang telepono mo"</string>
<string name="face_acquired_too_left" msgid="9201762240918405486">"Iusog pakanan ang telepono mo"</string>
<string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Tumingin nang mas direkta sa iyong device."</string>
- <string name="face_acquired_not_detected" msgid="1057966913397548150">"Hindi makita ang mukha mo. Hawakan ang telepono mo nang kapantay ng mata."</string>
+ <string name="face_acquired_not_detected" msgid="1057966913397548150">"Hindi makita ang mukha mo. Hawakan ang telepono kapantay ng mata."</string>
<string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Masyadong magalaw. Hawakang mabuti ang telepono."</string>
<string name="face_acquired_recalibrate" msgid="8724013080976469746">"Paki-enroll muli ang iyong mukha."</string>
<string name="face_acquired_too_different" msgid="2520389515612972889">"Hindi makilala ang mukha. Subukan ulit."</string>
@@ -701,7 +702,7 @@
<skip />
<string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Hindi magawa ang iyong face model. Subukan ulit."</string>
<string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"May na-detect na madilim na salamin. Dapat ganap na nakikita ang iyong mukha."</string>
- <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"May na-detect na pantakip sa mukha. Dapat ganap na nakikita ang iyong mukha."</string>
+ <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"May na-detect na mask. Dapat ganap na nakikita ang mukha."</string>
<string-array name="face_acquired_vendor">
</string-array>
<string name="face_error_hw_not_available" msgid="5085202213036026288">"Di ma-verify ang mukha. Di available ang hardware."</string>
@@ -2159,10 +2160,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Hindi puwedeng buksan sa mga app para sa trabaho ang content na ito"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Hindi puwedeng ibahagi sa mga personal na app ang content na ito"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Hindi puwedeng buksan sa mga personal na app ang content na ito"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Naka-pause ang mga app para sa trabaho"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"I-unpause"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Walang app para sa trabaho"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Walang personal na app"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"Buksan ang <xliff:g id="APP">%s</xliff:g> na personal"</string>
diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml
index a1c49ed..5405f7a 100644
--- a/core/res/res/values-tr/strings.xml
+++ b/core/res/res/values-tr/strings.xml
@@ -268,7 +268,7 @@
<string name="global_action_settings" msgid="4671878836947494217">"Ayarlar"</string>
<string name="global_action_assist" msgid="2517047220311505805">"Asist"</string>
<string name="global_action_voice_assist" msgid="6655788068555086695">"Sesli Yardım"</string>
- <string name="global_action_lockdown" msgid="2475471405907902963">"Tam gizlilik"</string>
+ <string name="global_action_lockdown" msgid="2475471405907902963">"Tam kilitleme"</string>
<string name="status_bar_notification_info_overflow" msgid="3330152558746563475">"999+"</string>
<string name="notification_hidden_text" msgid="2835519769868187223">"Yeni bildirim"</string>
<string name="notification_channel_physical_keyboard" msgid="5417306456125988096">"Fiziksel klavye"</string>
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Android Sistemi"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Kişisel profile geçiş yap"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"İş profiline geç"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"<xliff:g id="APP_NAME">%1$s</xliff:g> kişisel profiline geç"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"<xliff:g id="APP_NAME">%1$s</xliff:g> iş profiline geç"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Kişiler"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"kişilerinize erişme"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Konum"</string>
@@ -503,8 +505,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"Uygulamaya, titreşimi denetleme izni verir."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"Uygulamanın titreşim durumuna erişimesine izni verir."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"telefon numaralarına doğrudan çağrı yap"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"Uygulamaya, sizin müdahaleniz olmadan telefon numaralarını arama izni verir. Bunun sonucunda beklenmedik ücretlerle veya aramalarla karşılaşabilirsiniz. Bunun, uygulamaya acil durum numaralarını arama izni vermediğini unutmayın. Kötü amaçlı uygulamalar sizin onayınızı almadan arama yaparak veya gelen aramaların otomatik olarak başka bir numaraya yönlendirilmesine neden olan operatör kodlarını arayarak faturanızı kabartabilir."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"IMS çağrı hizmetine erişme"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Uygulamanın, sizin müdahaleniz olmadan telefon etmek için IMS hizmetini kullanmasına izin verir."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"telefonun durumunu ve kimliğini okuma"</string>
@@ -634,7 +635,7 @@
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Çok parlak"</string>
<string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Güç düğmesine basma algılandı"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Ayarlamayı deneyin"</string>
- <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Her defasında parmağınızın konumunu biraz değiştirin"</string>
+ <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Her defasında parmağınızı biraz kaydırın"</string>
<string-array name="fingerprint_acquired_vendor">
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"Parmak izi tanınmadı"</string>
@@ -680,8 +681,8 @@
<string name="face_acquired_too_dark" msgid="8539853432479385326">"Yeterli ışık yok"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Telefonu uzaklaştırın"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Telefonu yaklaştırın"</string>
- <string name="face_acquired_too_high" msgid="8278815780046368576">"Telefonu daha yukarı kaldırın"</string>
- <string name="face_acquired_too_low" msgid="4075391872960840081">"Telefonu daha aşağı indirin"</string>
+ <string name="face_acquired_too_high" msgid="8278815780046368576">"Telefonu yukarı kaldırın"</string>
+ <string name="face_acquired_too_low" msgid="4075391872960840081">"Telefonu aşağı indirin"</string>
<string name="face_acquired_too_right" msgid="6245286514593540859">"Telefonu solunuza kaydırın"</string>
<string name="face_acquired_too_left" msgid="9201762240918405486">"Telefonu sağınıza kaydırın"</string>
<string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Lütfen cihazınıza daha doğrudan bakın."</string>
@@ -693,7 +694,7 @@
<string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Telefonunuza daha doğrudan bakın"</string>
<string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Telefonunuza daha doğrudan bakın"</string>
<string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Telefonunuza daha doğrudan bakın"</string>
- <string name="face_acquired_obscured" msgid="4917643294953326639">"Yüzünüzün görünmesini engelleyen şeyleri kaldırın."</string>
+ <string name="face_acquired_obscured" msgid="4917643294953326639">"Yüzünüzü engelleyen şeyleri kaldırın"</string>
<string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Siyah çubuk da dahil olmak üzere ekranınızın üst kısmını temizleyin"</string>
<!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
<skip />
@@ -701,7 +702,7 @@
<skip />
<string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Yüzünüzün modeli oluşturulamıyor. Tekrar deneyin."</string>
<string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Koyu renk gözlükler algılandı. Yüzünüz tamamen görünür olmalıdır."</string>
- <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Yüzünüzü kapattığınız algılandı. Yüzünüz tamamen görünür olmalıdır."</string>
+ <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Yüzünüz algılanamıyor. Yüzünüz tamamen görünür olmalıdır."</string>
<string-array name="face_acquired_vendor">
</string-array>
<string name="face_error_hw_not_available" msgid="5085202213036026288">"Yüz doğrulanamıyor. Donanım kullanılamıyor."</string>
@@ -964,7 +965,7 @@
<string name="lockscreen_instructions_when_pattern_enabled" msgid="7982445492532123308">"Kilidi açmak veya acil çağrı yapmak için Menü\'ye basın."</string>
<string name="lockscreen_instructions_when_pattern_disabled" msgid="7434061749374801753">"Kilidi açmak için Menü\'ye basın."</string>
<string name="lockscreen_pattern_instructions" msgid="3169991838169244941">"Kilit açmak için deseni çizin"</string>
- <string name="lockscreen_emergency_call" msgid="7500692654885445299">"Acil durum çağrısı"</string>
+ <string name="lockscreen_emergency_call" msgid="7500692654885445299">"Acil durum araması"</string>
<string name="lockscreen_return_to_call" msgid="3156883574692006382">"Çağrıya dön"</string>
<string name="lockscreen_pattern_correct" msgid="8050630103651508582">"Doğru!"</string>
<string name="lockscreen_pattern_wrong" msgid="2940138714468358458">"Tekrar deneyin"</string>
@@ -2159,10 +2160,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Bu içerik, iş uygulamalarıyla açılamaz"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Bu içerik, kişisel uygulamalarla paylaşılamaz"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Bu içerik, kişisel uygulamalarla açılamaz"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"İş uygulamaları duraklatıldı"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"Devam ettir"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"İş uygulaması yok"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Kişisel uygulama yok"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"Kişisel uygulamayı (<xliff:g id="APP">%s</xliff:g>) aç"</string>
@@ -2319,7 +2318,7 @@
<string name="mic_access_on_toast" msgid="2666925317663845156">"Mikrofon kullanılabilir"</string>
<string name="mic_access_off_toast" msgid="8111040892954242437">"Mikrofon engellenmiş"</string>
<string name="concurrent_display_notification_name" msgid="1526911253558311131">"Çift ekran"</string>
- <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Çift Ekran açık"</string>
+ <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Çift ekran açık"</string>
<string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g>, içeriği göstermek için her iki ekranı da kullanıyor"</string>
<string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"Cihaz çok ısındı"</string>
<string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"Telefonunuz çok ısındığı için Çift Ekran kullanılamıyor"</string>
diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml
index 517730c..6a057e3 100644
--- a/core/res/res/values-uk/strings.xml
+++ b/core/res/res/values-uk/strings.xml
@@ -300,6 +300,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Система Android"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Перейти в особистий профіль"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"Перейти в робочий профіль"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"Перейти в особистий профіль у додатку <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"Перейти в робочий профіль у додатку <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Контакти"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"отримувати доступ до контактів"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Геодані"</string>
@@ -505,8 +507,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"Дозволяє програмі контролювати вібросигнал."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"Надає додатку доступ до стану вібрації."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"прямо набирати номери тел."</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"Дозволяє додатку набирати номери телефонів без вашого відома. Це може спричинити неочікуване стягнення плати чи здійснення викликів. Зверніть увагу, що додаток не зможе набирати екстрені номери. Шкідливі додатки можуть здійснювати дзвінки без вашого підтвердження, за що з вас стягуватимуться кошти, або набирати коди оператора, після чого вхідні виклики переадресовуватимуться на інший номер."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"отримувати доступ до телефонної служби IMS"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Додаток зможе телефонувати за допомогою служби IMS без вашого відома."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"читати статус та ідентифікаційну інформацію телефону"</string>
@@ -703,7 +704,7 @@
<skip />
<string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Не вдається створити модель обличчя. Повторіть спробу."</string>
<string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Виявлено темні окуляри. Обличчя має бути видно повністю."</string>
- <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Виявлено аксесуар, який закриває обличчя. Обличчя має бути видно повністю."</string>
+ <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Обличчя не видно повністю, бо його закриває аксесуар."</string>
<string-array name="face_acquired_vendor">
</string-array>
<string name="face_error_hw_not_available" msgid="5085202213036026288">"Не вдається перевірити обличчя. Апаратне забезпечення недоступне."</string>
@@ -2161,10 +2162,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Цей контент не можна відкривати в робочих додатках"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Цим контентом не можна ділитися в особистих додатках"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Цей контент не можна відкривати в особистих додатках"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Робочі додатки призупинено"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"Увімкнути знову"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Немає робочих додатків"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Немає особистих додатків"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"Відкрити особистий додаток <xliff:g id="APP">%s</xliff:g>"</string>
@@ -2290,7 +2289,7 @@
<string name="sensor_privacy_start_use_mic_notification_content_title" msgid="2420858361276370367">"Розблокуйте мікрофон пристрою"</string>
<string name="sensor_privacy_start_use_camera_notification_content_title" msgid="7287720213963466672">"Розблокуйте камеру пристрою"</string>
<string name="sensor_privacy_start_use_notification_content_text" msgid="7595608891015777346">"Для <b><xliff:g id="APP">%s</xliff:g></b> та всіх додатків і сервісів"</string>
- <string name="sensor_privacy_start_use_dialog_turn_on_button" msgid="7089318886628390827">"Розблокувати"</string>
+ <string name="sensor_privacy_start_use_dialog_turn_on_button" msgid="7089318886628390827">"Надати"</string>
<string name="sensor_privacy_notification_channel_label" msgid="936036783155261349">"Конфіденційність датчиків"</string>
<string name="splash_screen_view_icon_description" msgid="180638751260598187">"Значок додатка"</string>
<string name="splash_screen_view_branding_description" msgid="7911129347402728216">"Зображення фірмової символіки додатка"</string>
@@ -2320,8 +2319,8 @@
<string name="permdesc_startForegroundServicesFromBackground" msgid="4071826571656001537">"Дозволяє супутньому додатку запускати активні сервіси у фоновому режимі."</string>
<string name="mic_access_on_toast" msgid="2666925317663845156">"Мікрофон доступний"</string>
<string name="mic_access_off_toast" msgid="8111040892954242437">"Мікрофон заблоковано"</string>
- <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Подвійний екран"</string>
- <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Подвійний екран увімкнено"</string>
+ <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Dual Screen"</string>
+ <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Dual Screen увімкнено"</string>
<string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"Додаток <xliff:g id="APP_NAME">%1$s</xliff:g> використовує обидва екрани для показу контенту"</string>
<string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"Пристрій сильно нагрівається"</string>
<string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"Подвійний екран недоступний, оскільки телефон сильно нагрівається"</string>
diff --git a/core/res/res/values-ur/strings.xml b/core/res/res/values-ur/strings.xml
index 9941797..421c72e 100644
--- a/core/res/res/values-ur/strings.xml
+++ b/core/res/res/values-ur/strings.xml
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Android سسٹم"</string>
<string name="user_owner_label" msgid="8628726904184471211">"ذاتی پروفائل پر سوئچ کریں"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"دفتری پروفائل پر سوئچ کریں"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"ذاتی <xliff:g id="APP_NAME">%1$s</xliff:g> پر سوئچ کریں"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"دفتری <xliff:g id="APP_NAME">%1$s</xliff:g> پر سوئچ کریں"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"رابطے"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"اپنے رابطوں تک رسائی حاصل کریں"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"مقام"</string>
@@ -503,8 +505,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"ایپ کو وائبریٹر کنٹرول کرنے کی اجازت دیتا ہے۔"</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"ایپ کو وائبریٹر اسٹیٹ تک رسائی حاصل کرنے کی اجازت دیتا ہے۔"</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"براہ راست فون نمبرز پر کال کریں"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"ایپ کو آپ کی مداخلت کے بغیر فون نمبرز پر کال کرنے کی سہولت حاصل ہوتی ہے۔ اس کی وجہ سے غیر متوقع چارجز وصول کئے جا سکتے ہیں یا غیر متوقع کالز موصول ہو سکتی ہیں۔ یاد رکھیں کہ اس سے ایپ کو ایمرجنسی نمبرز پر کال کرنے کی سہولت حاصل نہیں ہوتی ہے۔ نقصان دہ ایپس آپ کی تصدیق کے بغیر کالز کر کے آپ کی رقم خرچ کروا سکتی ہیں یا کیریئر کوڈز ڈائل کر سکتی ہیں جس سے اِن کمنگ کالز خودکار طور پر دوسرے نمبر پر فارورڈ ہو جاتی ہیں۔"</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"IMS کال سروس تک رسائی حاصل کریں"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"آپ کی مداخلت کے بغیر کالیں کرنے کیلئے ایپ کو IMS سروس استعمال کرنے کی اجازت دیتی ہے۔"</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"فون کے اسٹیٹس اور شناخت کو پڑھیں"</string>
@@ -2159,10 +2160,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"اس مواد کو ورک ایپس کے ساتھ نہیں کھولا جا سکتا"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"اس مواد کا اشتراک ذاتی ایپس کے ساتھ نہیں کیا جا سکتا"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"اس مواد کو ذاتی ایپس کے ساتھ نہیں کھولا جا سکتا"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"ورک ایپس موقوف ہیں"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"غیر موقوف کریں"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"کوئی ورک ایپ نہیں"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"کوئی ذاتی ایپ نہیں"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"ذاتی <xliff:g id="APP">%s</xliff:g> کھولیں"</string>
@@ -2320,7 +2319,7 @@
<string name="mic_access_off_toast" msgid="8111040892954242437">"مائیکروفون مسدود ہے"</string>
<string name="concurrent_display_notification_name" msgid="1526911253558311131">"دوہری اسکرین"</string>
<string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"دوہری اسکرین آن ہے"</string>
- <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g> مواد دکھانے کیلئے دونوں ڈسپلیز استعمال کر رہی ہے"</string>
+ <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"مواد دکھانے کیلئے <xliff:g id="APP_NAME">%1$s</xliff:g> دونوں ڈسپلیز استعمال کر رہی ہے"</string>
<string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"آلہ بہت زیادہ گرم ہے"</string>
<string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"دوہری اسکرین دستیاب نہیں ہے کیونکہ آپ کا فون بہت زیادہ گرم ہو رہا ہے"</string>
<string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"Dual Screen دستیاب نہیں ہے"</string>
diff --git a/core/res/res/values-uz/strings.xml b/core/res/res/values-uz/strings.xml
index 5e227d3..a255827 100644
--- a/core/res/res/values-uz/strings.xml
+++ b/core/res/res/values-uz/strings.xml
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Android tizimi"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Shaxsiy profilga almashtirish"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"Ishchi profilga almashtirish"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"Shaxsiy <xliff:g id="APP_NAME">%1$s</xliff:g> ilovasiga almashish"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"Ishga oid <xliff:g id="APP_NAME">%1$s</xliff:g> ilovasiga almashish"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Kontaktlar"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"kontaktlarga kirish"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Joylashuv"</string>
@@ -503,8 +505,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"Ilova tebranishli signallarni boshqarishi mumkin."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"Ilovaga tebranish holatini aniqlash ruxsatini beradi."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"telefon raqamlariga tog‘ridan to‘g‘ri qo‘ng‘iroq qilish"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"Ilova sizning ishtirokingizsiz raqamlarga telefon qilishi mumkin. Bu kutilmagan toʻlovlar yoki chaqiruvlarga olib kelishi mumkin. Yodda tuting, bu favqulodda xizmat raqamlariga telefon qilishiga ruxsat bermaydi. Zararli ilovalar beruxsat telefon qilishi yoki kiruvchi chaqiruvlarni avtomatik ravishda boshqa raqamga yoʻnaltiruvchi operator kodlarini terish orqali xarajatlaringizni oshirishi mumkin."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"IMS qo‘ng‘iroq xizmatiga kirish"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Ilovaga sizning ishtirokingizsiz qo‘ng‘iroqlarni amalga oshirish uchun IMS xizmatidan foydalanishga ruxsat beradi."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"telefon holati haqidagi ma’lumotlarni olish"</string>
@@ -701,7 +702,7 @@
<skip />
<string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Yuzingiz modeli yaratilmadi. Qayta urining."</string>
<string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Qora koʻzoynak aniqlandi. Yuzingiz toʻliq koʻrinishi kerak."</string>
- <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Yuzning bir qismi yopilib qolgan. Yuzingiz toʻliq koʻrinishi kerak."</string>
+ <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Yuz qismi yopilib qolgan. Yuzingiz toʻliq koʻrinishi kerak."</string>
<string-array name="face_acquired_vendor">
</string-array>
<string name="face_error_hw_not_available" msgid="5085202213036026288">"Yuzingiz tasdiqlanmadi. Qurilma ishlamayapti."</string>
@@ -2159,10 +2160,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Bu kontent ishga oid ilovalar bilan ochilmaydi"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Bu kontent shaxsiy ilovalar bilan ulashilmaydi"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Bu kontent shaxsiy ilovalar bilan ochilmaydi"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Ishga oid ilovalar pauza qilingan"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"Davom ettirish"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Ishga oid ilovalar topilmadi"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Shaxsiy ilovalar topilmadi"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"Shaxsiy <xliff:g id="APP">%s</xliff:g> ochish"</string>
@@ -2318,7 +2317,7 @@
<string name="permdesc_startForegroundServicesFromBackground" msgid="4071826571656001537">"Hamroh ilovaga faol xizmatlarni fonda ishga tushirishga ruxsat beradi."</string>
<string name="mic_access_on_toast" msgid="2666925317663845156">"Mikrofon yoqildi"</string>
<string name="mic_access_off_toast" msgid="8111040892954242437">"Mikrofon bloklandi"</string>
- <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Ikki ekranli rejim"</string>
+ <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Ikkita ekran"</string>
<string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Ikki ekranli rejim yoniq"</string>
<string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g> kontentni ikkala ekranda chiqarmoqda"</string>
<string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"Qurilma qizib ketdi"</string>
diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml
index c206b68..8547691 100644
--- a/core/res/res/values-vi/strings.xml
+++ b/core/res/res/values-vi/strings.xml
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Hệ thống Android"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Chuyển sang hồ sơ cá nhân"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"Chuyển sang hồ sơ công việc"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"Chuyển sang <xliff:g id="APP_NAME">%1$s</xliff:g> cá nhân"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"Chuyển sang <xliff:g id="APP_NAME">%1$s</xliff:g> công việc"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Danh bạ"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"truy cập vào danh bạ của bạn"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Vị trí"</string>
@@ -503,8 +505,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"Cho phép ứng dụng kiểm soát bộ rung."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"Cho phép ứng dụng truy cập vào trạng thái bộ rung."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"gọi trực tiếp số điện thoại"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"Cho phép ứng dụng gọi cho các số điện thoại mà không cần bạn phải can thiệp. Việc này có thể làm phát sinh các khoản phí hoặc cuộc gọi không mong muốn. Xin lưu ý rằng quyền này không cho phép ứng dụng gọi cho các số khẩn cấp. Các ứng dụng độc hại có thể khiến bạn bị mất tiền thông qua việc thực hiện cuộc gọi khi chưa có sự xác nhận của bạn, hoặc có thể quay số theo mã của nhà mạng, khiến các cuộc gọi đến bị tự động chuyển tiếp đến một số khác."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"truy cập dịch vụ gọi điện qua IMS"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Cho phép ứng dụng sử dụng dịch vụ IMS để thực hiện cuộc gọi mà không có sự can thiệp của bạn."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"đọc trạng thái và nhận dạng của điện thoại"</string>
@@ -624,11 +625,11 @@
<string name="biometric_error_generic" msgid="6784371929985434439">"Lỗi khi xác thực"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Dùng phương thức khóa màn hình"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Hãy nhập phương thức khóa màn hình của bạn để tiếp tục"</string>
- <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Nhấn chắc chắn trên cảm biến"</string>
+ <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Ấn mạnh lên cảm biến"</string>
<string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Không nhận dạng được vân tay. Hãy thử lại."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Hãy vệ sinh cảm biến vân tay rồi thử lại"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Vệ sinh cảm biến rồi thử lại"</string>
- <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Nhấn chắc trên cảm biến"</string>
+ <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Ấn mạnh lên cảm biến"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Di chuyển ngón tay quá chậm. Vui lòng thử lại."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Hãy thử một vân tay khác"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Quá sáng"</string>
@@ -693,7 +694,7 @@
<string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Nhìn thẳng vào điện thoại"</string>
<string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Nhìn thẳng vào điện thoại"</string>
<string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Nhìn thẳng vào điện thoại"</string>
- <string name="face_acquired_obscured" msgid="4917643294953326639">"Hãy loại bỏ mọi thứ che khuất khuôn mặt bạn."</string>
+ <string name="face_acquired_obscured" msgid="4917643294953326639">"Loại bỏ mọi thứ che khuất khuôn mặt bạn."</string>
<string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Vệ sinh phần đầu màn hình, bao gồm cả thanh màu đen"</string>
<!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
<skip />
@@ -701,7 +702,7 @@
<skip />
<string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Không thể tạo mẫu khuôn mặt của bạn. Hãy thử lại."</string>
<string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Đã phát hiện thấy kính râm. Toàn bộ khuôn mặt của bạn phải được trông thấy rõ ràng."</string>
- <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Đã phát hiện khuôn mặt bị che khuất. Toàn bộ khuôn mặt của bạn phải được hiển thị."</string>
+ <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Phát hiện khuôn mặt bị che. Bạn phải cho thấy toàn bộ khuôn mặt."</string>
<string-array name="face_acquired_vendor">
</string-array>
<string name="face_error_hw_not_available" msgid="5085202213036026288">"Không thể xác minh khuôn mặt. Phần cứng không có sẵn."</string>
@@ -2159,10 +2160,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Bạn không thể mở nội dung này bằng ứng dụng công việc"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Bạn không thể chia sẻ nội dung này bằng ứng dụng cá nhân"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Bạn không thể mở nội dung này bằng ứng dụng cá nhân"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Các ứng dụng công việc đã bị tạm dừng"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"Bỏ tạm dừng"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Không có ứng dụng công việc"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Không có ứng dụng cá nhân"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"Mở <xliff:g id="APP">%s</xliff:g> cá nhân"</string>
@@ -2318,8 +2317,8 @@
<string name="permdesc_startForegroundServicesFromBackground" msgid="4071826571656001537">"Cho phép một ứng dụng đồng hành bắt đầu các dịch vụ trên nền trước từ nền."</string>
<string name="mic_access_on_toast" msgid="2666925317663845156">"Micrô đang hoạt động"</string>
<string name="mic_access_off_toast" msgid="8111040892954242437">"Micrô đang bị chặn"</string>
- <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Màn hình đôi"</string>
- <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Chế độ Màn hình đôi đang bật"</string>
+ <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Dual screen"</string>
+ <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Chế độ Dual screen bật"</string>
<string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g> đang dùng cả hai màn hình để thể hiện nội dung"</string>
<string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"Thiết bị quá nóng"</string>
<string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"Không bật được chế độ Màn hình đôi vì điện thoại của bạn quá nóng"</string>
diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml
index 99203d5..6908387 100644
--- a/core/res/res/values-zh-rCN/strings.xml
+++ b/core/res/res/values-zh-rCN/strings.xml
@@ -250,7 +250,7 @@
<string name="global_action_bug_report" msgid="5127867163044170003">"错误报告"</string>
<string name="global_action_logout" msgid="6093581310002476511">"结束会话"</string>
<string name="global_action_screenshot" msgid="2610053466156478564">"屏幕截图"</string>
- <string name="bugreport_title" msgid="8549990811777373050">"错误报告"</string>
+ <string name="bugreport_title" msgid="8549990811777373050">"Bug 报告"</string>
<string name="bugreport_message" msgid="5212529146119624326">"这会收集有关当前设备状态的信息,并以电子邮件的形式进行发送。从开始生成错误报告到准备好发送需要一点时间,请耐心等待。"</string>
<string name="bugreport_option_interactive_title" msgid="7968287837902871289">"互动式报告"</string>
<string name="bugreport_option_interactive_summary" msgid="8493795476325339542">"在大多数情况下,建议您使用此选项,以便追踪报告的生成进度,输入与相应问题相关的更多详细信息,以及截取屏幕截图。系统可能会省略掉一些不常用的区段,从而缩短生成报告的时间。"</string>
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Android 系统"</string>
<string name="user_owner_label" msgid="8628726904184471211">"切换到个人资料"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"切换到工作资料"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"切换到个人 <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"切换到工作 <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"通讯录"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"访问您的通讯录"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"位置信息"</string>
@@ -503,8 +505,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"允许应用控制振动器。"</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"允许该应用访问振动器状态。"</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"拨打电话"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"允许应用在没有您干预的情况下拨打电话号码。这可能会导致意外扣款和拨打电话。请注意,此权限不允许应用拨打紧急电话号码。恶意应用可能会在未经您确认的情况下拨打电话,给您带来不必要的费用;也可能会拨打运营商代码,导致系统将来电自动转接到另一个号码。"</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"使用即时通讯通话服务"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"允许应用自行使用即时通讯服务拨打电话。"</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"读取手机状态和身份"</string>
@@ -2159,10 +2160,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"无法使用工作应用打开该内容"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"无法使用个人应用分享该内容"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"无法使用个人应用打开该内容"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"工作应用已暂停"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"取消暂停"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"没有支持该内容的工作应用"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"没有支持该内容的个人应用"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"打开个人 <xliff:g id="APP">%s</xliff:g>"</string>
diff --git a/core/res/res/values-zh-rHK/strings.xml b/core/res/res/values-zh-rHK/strings.xml
index a3704c7..31bda31 100644
--- a/core/res/res/values-zh-rHK/strings.xml
+++ b/core/res/res/values-zh-rHK/strings.xml
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Android 系統"</string>
<string name="user_owner_label" msgid="8628726904184471211">"切換至個人設定檔"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"切換至工作設定檔"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"轉去個人應用程式「<xliff:g id="APP_NAME">%1$s</xliff:g>」"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"轉去工作應用程式「<xliff:g id="APP_NAME">%1$s</xliff:g>」"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"通訊錄"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"存取你的通訊錄"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"位置"</string>
@@ -503,8 +505,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"允許應用程式控制震動。"</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"允許應用程式存取震動狀態。"</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"直接撥打電話號碼"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"允許應用程式未經您操作自行撥打電話號碼,但這可能會產生非預期的費用或通話。請注意,此權限並不允許應用程式撥打緊急電話號碼。惡意應用程式可能利用此功能擅自撥打電話或撥打流動網絡供應商代碼,導致來電自動轉駁至其他號碼,產生不必要的額外費用。"</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"使用 IMS 通話服務"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"允許應用程式自行使用 IMS 服務撥打電話。"</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"讀取手機狀態和識別碼"</string>
@@ -2159,10 +2160,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"無法使用工作應用程式開啟此內容"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"無法使用個人應用程式分享此內容"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"無法使用個人應用程式開啟此內容"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"已暫停工作應用程式"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"取消暫停"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"沒有適用的工作應用程式"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"沒有適用的個人應用程式"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"開啟個人用 <xliff:g id="APP">%s</xliff:g>"</string>
diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml
index e6b7380..e84bb47 100644
--- a/core/res/res/values-zh-rTW/strings.xml
+++ b/core/res/res/values-zh-rTW/strings.xml
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Android 系統"</string>
<string name="user_owner_label" msgid="8628726904184471211">"切換至個人設定檔"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"切換至工作資料夾"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"切換至個人 <xliff:g id="APP_NAME">%1$s</xliff:g> 帳戶"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"切換至工作用 <xliff:g id="APP_NAME">%1$s</xliff:g> 帳戶"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"聯絡人"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"存取你的聯絡人"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"位置"</string>
@@ -503,8 +505,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"允許應用程式控制震動。"</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"允許應用程式存取震動功能狀態。"</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"直接撥打電話號碼"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"允許應用程式在你未操作的情況下自行撥打電話號碼,但可能產生非預期的費用或撥打非預期的電話。請注意,這項權限並不允許應用程式撥打緊急電話號碼。惡意應用程式可能利用此功能擅自撥打電話或撥打電信業者的代碼,導致來電自動轉接到其他號碼,增加不必要的額外支出。"</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"存取 IMS 撥號服務"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"允許應用程式自動使用 IMS 服務撥打電話。"</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"讀取手機狀態和識別碼"</string>
@@ -1697,7 +1698,7 @@
<string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"開啟"</string>
<string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"關閉"</string>
<string name="accessibility_enable_service_title" msgid="3931558336268541484">"要將裝置的完整控制權授予「<xliff:g id="SERVICE">%1$s</xliff:g>」嗎?"</string>
- <string name="accessibility_service_warning_description" msgid="291674995220940133">"如果你有無障礙服務需求,可以將完整控制權授予具有相關功能的應用程式,但請勿將完整控制權授予大多數的應用程式。"</string>
+ <string name="accessibility_service_warning_description" msgid="291674995220940133">"如果你有無障礙服務需求,建議可將完整控制權授予具有相關功能的應用程式,但請勿將完整控制權授予大多數的應用程式。"</string>
<string name="accessibility_service_screen_control_title" msgid="190017412626919776">"查看及控制螢幕"</string>
<string name="accessibility_service_screen_control_description" msgid="6946315917771791525">"可讀取螢幕上的所有內容及在其他應用程式上顯示內容。"</string>
<string name="accessibility_service_action_perform_title" msgid="779670378951658160">"查看及執行動作"</string>
@@ -2159,10 +2160,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"無法使用工作應用程式開啟這項內容"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"無法透過個人應用程式分享這項內容"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"無法使用個人應用程式開啟這項內容"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"工作應用程式目前為暫停狀態"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"取消暫停"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"沒有適用的工作應用程式"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"沒有適用的個人應用程式"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"開啟個人用「<xliff:g id="APP">%s</xliff:g>」"</string>
diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml
index 355d70d..6a22729 100644
--- a/core/res/res/values-zu/strings.xml
+++ b/core/res/res/values-zu/strings.xml
@@ -298,6 +298,8 @@
<string name="android_system_label" msgid="5974767339591067210">"Uhlelo lwe-Android"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Shintshela kuphrofayela yomuntu siqu"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"Shintshela kuphrofayela yomsebenzi"</string>
+ <string name="user_owner_app_label" msgid="1553595155465750298">"Shintshela ku-<xliff:g id="APP_NAME">%1$s</xliff:g> yomuntu siqu"</string>
+ <string name="managed_profile_app_label" msgid="367401088383965725">"Shintshela ku-<xliff:g id="APP_NAME">%1$s</xliff:g> yomsebenzi"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Oxhumana nabo"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"finyelela koxhumana nabo"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Indawo"</string>
@@ -318,7 +320,7 @@
<string name="permgroupdesc_activityRecognition" msgid="4725624819457670704">"finyelela kumsebenzi wakho womzimba"</string>
<string name="permgrouplab_camera" msgid="9090413408963547706">"Ikhamera"</string>
<string name="permgroupdesc_camera" msgid="7585150538459320326">"thatha izithombe uphinde urekhode ividiyo"</string>
- <string name="permgrouplab_nearby_devices" msgid="5529147543651181991">"Amadivayisi aseduze"</string>
+ <string name="permgrouplab_nearby_devices" msgid="5529147543651181991">"kumadivayisi aseduze"</string>
<string name="permgroupdesc_nearby_devices" msgid="3213561597116913508">"thola futhi uxhume kumadivayisi aseduze"</string>
<string name="permgrouplab_calllog" msgid="7926834372073550288">"Amarekhodi wamakholi"</string>
<string name="permgroupdesc_calllog" msgid="2026996642917801803">"funda futhi ubhale irekhodi lamakholi efoni"</string>
@@ -503,8 +505,7 @@
<string name="permdesc_vibrate" msgid="8733343234582083721">"Ivumela uhlelo lokusebenza ukulawula isidlidlizi."</string>
<string name="permdesc_vibrator_state" msgid="7050024956594170724">"Ivumela uhlelo lokusebenza ukuthi lufinyelele kusimo sesidlidlizeli."</string>
<string name="permlab_callPhone" msgid="1798582257194643320">"ngokuqondile shayela izinombolo zocingo"</string>
- <!-- no translation found for permdesc_callPhone (7892422187827695656) -->
- <skip />
+ <string name="permdesc_callPhone" msgid="7892422187827695656">"Ivumela i-app ukushayela izinombolo zefoni ngaphandle kokungenela kwakho. Lokhu kungase kubangele izindleko noma amakholi angalindelekile. Qaphela ukuthi lokhu akuvumeli i-app ukufonela izinombolo zezimo eziphuthumayo. Ama-app angalungile angakubiza imali ngokufona ngaphandle kokuqinisekisa kwakho, noma ukudayela amakhodi enkampani yenethiwekhi abangela ukuthi amakholi angenayo adluliselwe ngokuzenzekelayo kwenye inombolo."</string>
<string name="permlab_accessImsCallService" msgid="442192920714863782">"finyelela kusevisi yekholi ye-IMS"</string>
<string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Ivumela uhlelo lokusebenza ukuthi lusebenzise isevisi ye-IMS ukuze yenze amakholi ngaphandle kokungenelela kwakho."</string>
<string name="permlab_readPhoneState" msgid="8138526903259297969">"funda isimo sefoni kanye nesazisi"</string>
@@ -680,8 +681,8 @@
<string name="face_acquired_too_dark" msgid="8539853432479385326">"Ukukhanya okunganele"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Yisa ifoni kude"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Sondeza ifoni eduze"</string>
- <string name="face_acquired_too_high" msgid="8278815780046368576">"Yisa ifoni phezulu"</string>
- <string name="face_acquired_too_low" msgid="4075391872960840081">"Yisa ifoni phansi"</string>
+ <string name="face_acquired_too_high" msgid="8278815780046368576">"Nyusa ifoni"</string>
+ <string name="face_acquired_too_low" msgid="4075391872960840081">"Yehlisa ifoni"</string>
<string name="face_acquired_too_right" msgid="6245286514593540859">"Yisa ifoni ngakwesokunxele sakho"</string>
<string name="face_acquired_too_left" msgid="9201762240918405486">"Yisa ifoni ngakwesokudla sakho"</string>
<string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Sicela ubheke ngokuqondile kakhulu kudivayisi yakho."</string>
@@ -2159,10 +2160,8 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Lokhu okuqukethwe akukwazi ukukopishwa ngama-app womsebenzi"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Lokhu okuqukethwe akukwazi ukwabiwa nama-app womuntu siqu"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Lokhu okuqukethwe akukwazi ukukopishwa ngama-app womuntu siqu"</string>
- <!-- no translation found for resolver_turn_on_work_apps (1535946298236678122) -->
- <skip />
- <!-- no translation found for resolver_switch_on_work (4527096360772311894) -->
- <skip />
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Ama-app omsebenzi amisiwe"</string>
+ <string name="resolver_switch_on_work" msgid="4527096360772311894">"Qhubekisa"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Awekho ama-app womsebenzi"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Awekho ama-app womuntu siqu"</string>
<string name="miniresolver_open_in_personal" msgid="6499100403307136696">"Vula i-<xliff:g id="APP">%s</xliff:g> yomuntu siqu"</string>
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index 7de36a71..6f7bc53 100644
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -2791,7 +2791,7 @@
<flag name="noExcludeDescendants" value="0x8" />
</attr>
- <!-- Boolean that hints the Android System that the view is credntial and associated with
+ <!-- Boolean that hints the Android System that the view is credential and associated with
CredentialManager -->
<attr name="isCredential" format="boolean" />
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index bf141b5..c147daf 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -774,11 +774,6 @@
we rely on gravity to determine the effective orientation. -->
<bool name="config_deskDockEnablesAccelerometer">true</bool>
- <!-- Control whether nosensor and locked orientation requests are respected from the app when
- config_deskDockEnablesAccelerometer is set to false.
- TODO(b/274763533): Consider making true by default and removing this. -->
- <bool name="config_deskRespectsNoSensorAndLockedWithoutAccelerometer">false</bool>
-
<!-- Car dock behavior -->
<!-- The number of degrees to rotate the display when the device is in a car dock.
@@ -1397,9 +1392,6 @@
<!-- Number of notifications to keep in the notification service historical archive -->
<integer name="config_notificationServiceArchiveSize">100</integer>
- <!-- List of packages that will be able to use full screen intent in notifications by default -->
- <string-array name="config_useFullScreenIntentPackages" translatable="false" />
-
<!-- Allow the menu hard key to be disabled in LockScreen on some devices -->
<bool name="config_disableMenuKeyInLockScreen">false</bool>
@@ -1825,6 +1817,16 @@
specified -->
<string name="default_wallpaper_component" translatable="false">@null</string>
+ <!-- CMF colors to default wallpaper component map, the component with color matching the device
+ color will be the cmf default wallpapers. The default wallpaper will be default wallpaper
+ component if not specified.
+
+ E.g. for SLV color, and com.android.example/com.android.example.SlVDefaultWallpaper
+ <item>SLV,com.android.example/com.android.example.SlVDefaultWallpaper</item> -->
+ <string-array name="cmf_default_wallpaper_component" translatable="false">
+ <!-- Add packages here -->
+ </string-array>
+
<!-- By default a product has no distinct default lock wallpaper -->
<item name="default_lock_wallpaper" type="drawable">@null</item>
@@ -2955,8 +2957,13 @@
<!-- Whether safe headphone volume is enabled or not (country specific). -->
<bool name="config_safe_media_volume_enabled">true</bool>
- <!-- Whether safe headphone sound dosage warning is enabled or not (country specific). -->
- <bool name="config_safe_sound_dosage_enabled">true</bool>
+ <!-- Whether safe headphone sound dosage warning is enabled or not
+ (country specific). This value should only be overlaid to true
+ when a vendor supports offload and has the HAL sound dose
+ interfaces implemented. Otherwise, this can lead to a compliance
+ issue with the safe hearing standards EN50332-3 and IEC62368-1.
+ -->
+ <bool name="config_safe_sound_dosage_enabled">false</bool>
<!-- Whether safe headphone volume warning dialog is disabled on Vol+ (operator specific). -->
<bool name="config_safe_media_disable_on_volume_up">true</bool>
@@ -6440,4 +6447,8 @@
<bool name="config_persistBrightnessNitsForDefaultDisplay">false</bool>
<!-- Whether to request the approval before commit sessions. -->
<bool name="config_isPreApprovalRequestAvailable">true</bool>
+
+ <!-- Whether the AOSP support for app cloning building blocks is to be enabled for the
+ device. -->
+ <bool name="config_enableAppCloningBuildingBlocks">true</bool>
</resources>
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index a49ea0b..faaa2e8 100644
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -4602,24 +4602,13 @@
<!-- Message shown in dialog when user goes over a multiple of 100% of the safe weekly dose -->
<string name="csd_dose_reached_warning" product="default">
- "Warning,\nYou have exceeded the amount of loud sound signals one can safely listen to in a week over headphones.\n\nGoing over this limit will permanently damage your hearing."
- </string>
-
- <!-- Message shown in dialog when user goes over 500% of the safe weekly dose and volume is
- automatically lowered -->
- <string name="csd_dose_repeat_warning" product="default">
- "Warning,\nYou have exceeded 5 times the amount of loud sound signals one can safely listen to in a week over headphones.\n\nVolume has been lowered to protect your hearing."
- </string>
-
- <!-- Message shown in dialog when user's dose enters RS2 -->
- <string name="csd_entering_RS2_warning" product="default">
- "The level at which you are listening to media can result in hearing damage when sustained over long periods of time.\n\nContinuing to play at this level for long periods of time could damage your hearing."
+ "Keep listening at a high volume?\n\nHeadphone volume has been high for longer than recommended, which can damage your hearing"
</string>
<!-- Message shown in dialog when user is momentarily listening to unsafely loud content
over headphones -->
<string name="csd_momentary_exposure_warning" product="default">
- "Warning,\nYou are currently listening to loud content played at an unsafe level.\n\nContinuing to listen this loud will permanently damage your hearing."
+ "Loud sound detected\n\nHeadphone volume has been higher than recommended, which can damage your hearing"
</string>
<!-- Dialog title for dialog shown when the accessibility shortcut is activated, and we want
@@ -5912,11 +5901,12 @@
<!-- Error message. This text lets the user know that their current personal apps don't support the specific content. [CHAR LIMIT=NONE] -->
<string name="resolver_no_personal_apps_available">No personal apps</string>
-
+ <!-- Dialog title. User must choose to open content in a cross-profile app or cancel. [CHAR LIMIT=NONE] -->
+ <string name="miniresolver_open_work">Open work <xliff:g id="app" example="YouTube">%s</xliff:g>?</string>
<!-- Dialog title. User must choose between opening content in a cross-profile app or same-profile browser. [CHAR LIMIT=NONE] -->
- <string name="miniresolver_open_in_personal">Open personal <xliff:g id="app" example="YouTube">%s</xliff:g></string>
+ <string name="miniresolver_open_in_personal">Open in personal <xliff:g id="app" example="YouTube">%s</xliff:g>?</string>
<!-- Dialog title. User must choose between opening content in a cross-profile app or same-profile browser. [CHAR LIMIT=NONE] -->
- <string name="miniresolver_open_in_work">Open work <xliff:g id="app" example="YouTube">%s</xliff:g></string>
+ <string name="miniresolver_open_in_work">Open in work <xliff:g id="app" example="YouTube">%s</xliff:g>?</string>
<!-- Button option. Open the link in the personal browser. [CHAR LIMIT=NONE] -->
<string name="miniresolver_use_personal_browser">Use personal browser</string>
<!-- Button option. Open the link in the work browser. [CHAR LIMIT=NONE] -->
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index c91e3cb..73e3b41 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -480,6 +480,7 @@
<java-symbol type="bool" name="config_multiuserDelayUserDataLocking" />
<java-symbol type="bool" name="config_multiuserVisibleBackgroundUsers" />
<java-symbol type="bool" name="config_multiuserVisibleBackgroundUsersOnDefaultDisplay" />
+ <java-symbol type="bool" name="config_enableAppCloningBuildingBlocks" />
<java-symbol type="bool" name="config_enableTimeoutToDockUserWhenDocked" />
<java-symbol type="integer" name="config_userTypePackageWhitelistMode"/>
<java-symbol type="xml" name="config_user_types" />
@@ -1575,6 +1576,7 @@
<java-symbol type="id" name="open_cross_profile" />
<java-symbol type="string" name="miniresolver_open_in_personal" />
<java-symbol type="string" name="miniresolver_open_in_work" />
+ <java-symbol type="string" name="miniresolver_open_work" />
<java-symbol type="string" name="miniresolver_use_personal_browser" />
<java-symbol type="string" name="miniresolver_use_work_browser" />
<java-symbol type="id" name="button_open" />
@@ -1698,7 +1700,6 @@
<java-symbol type="bool" name="config_carDockEnablesAccelerometer" />
<java-symbol type="bool" name="config_customUserSwitchUi" />
<java-symbol type="bool" name="config_deskDockEnablesAccelerometer" />
- <java-symbol type="bool" name="config_deskRespectsNoSensorAndLockedWithoutAccelerometer" />
<java-symbol type="bool" name="config_disableMenuKeyInLockScreen" />
<java-symbol type="bool" name="config_enableCarDockHomeLaunch" />
<java-symbol type="bool" name="config_enableLockBeforeUnlockScreen" />
@@ -2020,7 +2021,6 @@
<java-symbol type="integer" name="config_notificationsBatteryMediumARGB" />
<java-symbol type="integer" name="config_notificationsBatteryNearlyFullLevel" />
<java-symbol type="integer" name="config_notificationServiceArchiveSize" />
- <java-symbol type="array" name="config_useFullScreenIntentPackages" />
<java-symbol type="integer" name="config_previousVibrationsDumpLimit" />
<java-symbol type="integer" name="config_defaultVibrationAmplitude" />
<java-symbol type="dimen" name="config_hapticChannelMaxVibrationAmplitude" />
@@ -2110,6 +2110,7 @@
<java-symbol type="string" name="data_usage_rapid_body" />
<java-symbol type="string" name="data_usage_rapid_app_body" />
<java-symbol type="string" name="default_wallpaper_component" />
+ <java-symbol type="array" name="cmf_default_wallpaper_component" />
<java-symbol type="string" name="device_storage_monitor_notification_channel" />
<java-symbol type="string" name="dlg_ok" />
<java-symbol type="string" name="dump_heap_notification" />
@@ -5119,4 +5120,6 @@
<java-symbol type="style" name="ThemeOverlay.DeviceDefault.Accent" />
<java-symbol type="style" name="ThemeOverlay.DeviceDefault.Accent.Light" />
<java-symbol type="style" name="ThemeOverlay.DeviceDefault.Dark.ActionBar.Accent" />
+
+ <java-symbol type="drawable" name="focus_event_pressed_key_background" />
</resources>
diff --git a/core/tests/BroadcastRadioTests/src/android/hardware/radio/TunerAdapterTest.java b/core/tests/BroadcastRadioTests/src/android/hardware/radio/TunerAdapterTest.java
index c7b82b1..6a6a951 100644
--- a/core/tests/BroadcastRadioTests/src/android/hardware/radio/TunerAdapterTest.java
+++ b/core/tests/BroadcastRadioTests/src/android/hardware/radio/TunerAdapterTest.java
@@ -750,6 +750,15 @@
}
@Test
+ public void onTuneFailed_withCanceledResult() throws Exception {
+ mTunerCallback.onTuneFailed(RadioTuner.TUNER_RESULT_CANCELED, FM_SELECTOR);
+
+ verify(mCallbackMock, timeout(CALLBACK_TIMEOUT_MS)).onTuneFailed(
+ RadioTuner.TUNER_RESULT_CANCELED, FM_SELECTOR);
+ verify(mCallbackMock, timeout(CALLBACK_TIMEOUT_MS)).onError(RadioTuner.ERROR_CANCELLED);
+ }
+
+ @Test
public void onProgramListChanged_forTunerCallbackAdapter() throws Exception {
mTunerCallback.onProgramListChanged();
diff --git a/core/tests/coretests/res/drawable-nodpi/animated_webp.webp b/core/tests/coretests/res/drawable-nodpi/animated_webp.webp
new file mode 100644
index 0000000..2d28dbf
--- /dev/null
+++ b/core/tests/coretests/res/drawable-nodpi/animated_webp.webp
Binary files differ
diff --git a/core/tests/coretests/src/android/credentials/CredentialManagerTest.java b/core/tests/coretests/src/android/credentials/CredentialManagerTest.java
index b0d5240..dc4c252 100644
--- a/core/tests/coretests/src/android/credentials/CredentialManagerTest.java
+++ b/core/tests/coretests/src/android/credentials/CredentialManagerTest.java
@@ -56,22 +56,20 @@
@RunWith(MockitoJUnitRunner.class)
public class CredentialManagerTest {
- @Mock
- private ICredentialManager mMockCredentialManagerService;
+ @Mock private ICredentialManager mMockCredentialManagerService;
- @Mock
- private Activity mMockActivity;
+ @Mock private Activity mMockActivity;
private static final int TEST_USER_ID = 1;
private static final CredentialProviderInfo TEST_CREDENTIAL_PROVIDER_INFO =
- new CredentialProviderInfo.Builder(new ServiceInfo())
- .setSystemProvider(true)
- .setOverrideLabel("test")
- .addCapabilities(Arrays.asList("passkey"))
- .setEnabled(true)
- .build();
+ new CredentialProviderInfo.Builder(new ServiceInfo())
+ .setSystemProvider(true)
+ .setOverrideLabel("test")
+ .addCapabilities(Arrays.asList("passkey"))
+ .setEnabled(true)
+ .build();
private static final List<CredentialProviderInfo> TEST_CREDENTIAL_PROVIDER_INFO_LIST =
- Arrays.asList(TEST_CREDENTIAL_PROVIDER_INFO);
+ Arrays.asList(TEST_CREDENTIAL_PROVIDER_INFO);
private GetCredentialRequest mGetRequest;
private CreateCredentialRequest mCreateRequest;
@@ -112,27 +110,43 @@
@Before
public void setup() {
- mGetRequest = new GetCredentialRequest.Builder(Bundle.EMPTY).addCredentialOption(
- new CredentialOption(Credential.TYPE_PASSWORD_CREDENTIAL, Bundle.EMPTY,
- Bundle.EMPTY, false)).build();
- mCreateRequest = new CreateCredentialRequest.Builder(
- Credential.TYPE_PASSWORD_CREDENTIAL,
- Bundle.EMPTY, Bundle.EMPTY)
- .setIsSystemProviderRequired(false)
- .setAlwaysSendAppInfoToProvider(false)
- .build();
+ mGetRequest =
+ new GetCredentialRequest.Builder(Bundle.EMPTY)
+ .addCredentialOption(
+ new CredentialOption(
+ Credential.TYPE_PASSWORD_CREDENTIAL,
+ Bundle.EMPTY,
+ Bundle.EMPTY,
+ false))
+ .build();
+ mCreateRequest =
+ new CreateCredentialRequest.Builder(
+ Credential.TYPE_PASSWORD_CREDENTIAL, Bundle.EMPTY, Bundle.EMPTY)
+ .setIsSystemProviderRequired(false)
+ .setAlwaysSendAppInfoToProvider(false)
+ .build();
mClearRequest = new ClearCredentialStateRequest(Bundle.EMPTY);
- final Slice slice = new Slice.Builder(Uri.parse("foo://bar"), null).addText("some text",
- null, List.of(Slice.HINT_TITLE)).build();
- mRegisterRequest = new RegisterCredentialDescriptionRequest(
- new CredentialDescription(Credential.TYPE_PASSWORD_CREDENTIAL,
- new HashSet<>(List.of("{ \"foo\": \"bar\" }")),
- List.of(new CredentialEntry(Credential.TYPE_PASSWORD_CREDENTIAL, slice))));
- mUnregisterRequest = new UnregisterCredentialDescriptionRequest(
- new CredentialDescription(Credential.TYPE_PASSWORD_CREDENTIAL,
- new HashSet<>(List.of("{ \"foo\": \"bar\" }")),
- List.of(new CredentialEntry(Credential.TYPE_PASSWORD_CREDENTIAL, slice))));
+ final Slice slice =
+ new Slice.Builder(Uri.parse("foo://bar"), null)
+ .addText("some text", null, List.of(Slice.HINT_TITLE))
+ .build();
+ mRegisterRequest =
+ new RegisterCredentialDescriptionRequest(
+ new CredentialDescription(
+ Credential.TYPE_PASSWORD_CREDENTIAL,
+ new HashSet<>(List.of("{ \"foo\": \"bar\" }")),
+ List.of(
+ new CredentialEntry(
+ Credential.TYPE_PASSWORD_CREDENTIAL, slice))));
+ mUnregisterRequest =
+ new UnregisterCredentialDescriptionRequest(
+ new CredentialDescription(
+ Credential.TYPE_PASSWORD_CREDENTIAL,
+ new HashSet<>(List.of("{ \"foo\": \"bar\" }")),
+ List.of(
+ new CredentialEntry(
+ Credential.TYPE_PASSWORD_CREDENTIAL, slice))));
final Context context = InstrumentationRegistry.getInstrumentation().getContext();
mCredentialManager = new CredentialManager(context, mMockCredentialManagerService);
@@ -143,56 +157,63 @@
@Test
public void testGetCredential_nullRequest() {
GetCredentialRequest nullRequest = null;
- assertThrows(NullPointerException.class,
- () -> mCredentialManager.getCredential(mMockActivity, nullRequest, null, mExecutor,
- result -> {
- }));
+ assertThrows(
+ NullPointerException.class,
+ () ->
+ mCredentialManager.getCredential(
+ mMockActivity, nullRequest, null, mExecutor, result -> {}));
}
@Test
public void testGetCredential_nullActivity() {
- assertThrows(NullPointerException.class,
- () -> mCredentialManager.getCredential(null, mGetRequest, null, mExecutor,
- result -> {
- }));
+ assertThrows(
+ NullPointerException.class,
+ () ->
+ mCredentialManager.getCredential(
+ null, mGetRequest, null, mExecutor, result -> {}));
}
@Test
public void testGetCredential_nullExecutor() {
- assertThrows(NullPointerException.class,
- () -> mCredentialManager.getCredential(mMockActivity, mGetRequest, null, null,
- result -> {
- }));
+ assertThrows(
+ NullPointerException.class,
+ () ->
+ mCredentialManager.getCredential(
+ mMockActivity, mGetRequest, null, null, result -> {}));
}
@Test
public void testGetCredential_nullCallback() {
- assertThrows(NullPointerException.class,
- () -> mCredentialManager.getCredential(mMockActivity, mGetRequest, null, null,
- null));
+ assertThrows(
+ NullPointerException.class,
+ () ->
+ mCredentialManager.getCredential(
+ mMockActivity, mGetRequest, null, null, null));
}
@Test
public void testGetCredential_noCredential() throws RemoteException {
- ArgumentCaptor<IGetCredentialCallback> callbackCaptor = ArgumentCaptor.forClass(
- IGetCredentialCallback.class);
- ArgumentCaptor<GetCredentialException> errorCaptor = ArgumentCaptor.forClass(
- GetCredentialException.class);
+ ArgumentCaptor<IGetCredentialCallback> callbackCaptor =
+ ArgumentCaptor.forClass(IGetCredentialCallback.class);
+ ArgumentCaptor<GetCredentialException> errorCaptor =
+ ArgumentCaptor.forClass(GetCredentialException.class);
- OutcomeReceiver<GetCredentialResponse, GetCredentialException> callback = mock(
- OutcomeReceiver.class);
+ OutcomeReceiver<GetCredentialResponse, GetCredentialException> callback =
+ mock(OutcomeReceiver.class);
- when(mMockCredentialManagerService.executeGetCredential(any(), callbackCaptor.capture(),
- any())).thenReturn(mock(ICancellationSignal.class));
+ when(mMockCredentialManagerService.executeGetCredential(
+ any(), callbackCaptor.capture(), any()))
+ .thenReturn(mock(ICancellationSignal.class));
mCredentialManager.getCredential(mMockActivity, mGetRequest, null, mExecutor, callback);
verify(mMockCredentialManagerService).executeGetCredential(any(), any(), eq(mPackageName));
- callbackCaptor.getValue().onError(GetCredentialException.TYPE_NO_CREDENTIAL,
- "no credential found");
+ callbackCaptor
+ .getValue()
+ .onError(GetCredentialException.TYPE_NO_CREDENTIAL, "no credential found");
verify(callback).onError(errorCaptor.capture());
- assertThat(errorCaptor.getValue().getType()).isEqualTo(
- GetCredentialException.TYPE_NO_CREDENTIAL);
+ assertThat(errorCaptor.getValue().getType())
+ .isEqualTo(GetCredentialException.TYPE_NO_CREDENTIAL);
}
@Test
@@ -200,9 +221,8 @@
final CancellationSignal cancellation = new CancellationSignal();
cancellation.cancel();
- mCredentialManager.getCredential(mMockActivity, mGetRequest, cancellation, mExecutor,
- result -> {
- });
+ mCredentialManager.getCredential(
+ mMockActivity, mGetRequest, cancellation, mExecutor, result -> {});
verify(mMockCredentialManagerService, never()).executeGetCredential(any(), any(), any());
}
@@ -212,14 +232,14 @@
final ICancellationSignal serviceSignal = mock(ICancellationSignal.class);
final CancellationSignal cancellation = new CancellationSignal();
- OutcomeReceiver<GetCredentialResponse, GetCredentialException> callback = mock(
- OutcomeReceiver.class);
+ OutcomeReceiver<GetCredentialResponse, GetCredentialException> callback =
+ mock(OutcomeReceiver.class);
- when(mMockCredentialManagerService.executeGetCredential(any(), any(), any())).thenReturn(
- serviceSignal);
+ when(mMockCredentialManagerService.executeGetCredential(any(), any(), any()))
+ .thenReturn(serviceSignal);
- mCredentialManager.getCredential(mMockActivity, mGetRequest, cancellation, mExecutor,
- callback);
+ mCredentialManager.getCredential(
+ mMockActivity, mGetRequest, cancellation, mExecutor, callback);
verify(mMockCredentialManagerService).executeGetCredential(any(), any(), eq(mPackageName));
@@ -231,16 +251,17 @@
public void testGetCredential_success() throws RemoteException {
final Credential cred = new Credential(Credential.TYPE_PASSWORD_CREDENTIAL, Bundle.EMPTY);
- ArgumentCaptor<IGetCredentialCallback> callbackCaptor = ArgumentCaptor.forClass(
- IGetCredentialCallback.class);
- ArgumentCaptor<GetCredentialResponse> responseCaptor = ArgumentCaptor.forClass(
- GetCredentialResponse.class);
+ ArgumentCaptor<IGetCredentialCallback> callbackCaptor =
+ ArgumentCaptor.forClass(IGetCredentialCallback.class);
+ ArgumentCaptor<GetCredentialResponse> responseCaptor =
+ ArgumentCaptor.forClass(GetCredentialResponse.class);
- OutcomeReceiver<GetCredentialResponse, GetCredentialException> callback = mock(
- OutcomeReceiver.class);
+ OutcomeReceiver<GetCredentialResponse, GetCredentialException> callback =
+ mock(OutcomeReceiver.class);
- when(mMockCredentialManagerService.executeGetCredential(any(), callbackCaptor.capture(),
- any())).thenReturn(mock(ICancellationSignal.class));
+ when(mMockCredentialManagerService.executeGetCredential(
+ any(), callbackCaptor.capture(), any()))
+ .thenReturn(mock(ICancellationSignal.class));
mCredentialManager.getCredential(mMockActivity, mGetRequest, null, mExecutor, callback);
verify(mMockCredentialManagerService).executeGetCredential(any(), any(), eq(mPackageName));
@@ -252,33 +273,38 @@
@Test
public void testCreateCredential_nullRequest() {
- assertThrows(NullPointerException.class,
- () -> mCredentialManager.createCredential(mMockActivity, null, null, mExecutor,
- result -> {
- }));
+ assertThrows(
+ NullPointerException.class,
+ () ->
+ mCredentialManager.createCredential(
+ mMockActivity, null, null, mExecutor, result -> {}));
}
@Test
public void testCreateCredential_nullActivity() {
- assertThrows(NullPointerException.class,
- () -> mCredentialManager.createCredential(null, mCreateRequest, null, mExecutor,
- result -> {
- }));
+ assertThrows(
+ NullPointerException.class,
+ () ->
+ mCredentialManager.createCredential(
+ null, mCreateRequest, null, mExecutor, result -> {}));
}
@Test
public void testCreateCredential_nullExecutor() {
- assertThrows(NullPointerException.class,
- () -> mCredentialManager.createCredential(mMockActivity, mCreateRequest, null, null,
- result -> {
- }));
+ assertThrows(
+ NullPointerException.class,
+ () ->
+ mCredentialManager.createCredential(
+ mMockActivity, mCreateRequest, null, null, result -> {}));
}
@Test
public void testCreateCredential_nullCallback() {
- assertThrows(NullPointerException.class,
- () -> mCredentialManager.createCredential(mMockActivity, mCreateRequest, null,
- mExecutor, null));
+ assertThrows(
+ NullPointerException.class,
+ () ->
+ mCredentialManager.createCredential(
+ mMockActivity, mCreateRequest, null, mExecutor, null));
}
@Test
@@ -286,9 +312,8 @@
final CancellationSignal cancellation = new CancellationSignal();
cancellation.cancel();
- mCredentialManager.createCredential(mMockActivity, mCreateRequest, cancellation, mExecutor,
- result -> {
- });
+ mCredentialManager.createCredential(
+ mMockActivity, mCreateRequest, cancellation, mExecutor, result -> {});
verify(mMockCredentialManagerService, never()).executeCreateCredential(any(), any(), any());
}
@@ -298,17 +323,17 @@
final ICancellationSignal serviceSignal = mock(ICancellationSignal.class);
final CancellationSignal cancellation = new CancellationSignal();
- OutcomeReceiver<CreateCredentialResponse, CreateCredentialException> callback = mock(
- OutcomeReceiver.class);
+ OutcomeReceiver<CreateCredentialResponse, CreateCredentialException> callback =
+ mock(OutcomeReceiver.class);
- when(mMockCredentialManagerService.executeCreateCredential(any(), any(), any())).thenReturn(
- serviceSignal);
+ when(mMockCredentialManagerService.executeCreateCredential(any(), any(), any()))
+ .thenReturn(serviceSignal);
- mCredentialManager.createCredential(mMockActivity, mCreateRequest, cancellation, mExecutor,
- callback);
+ mCredentialManager.createCredential(
+ mMockActivity, mCreateRequest, cancellation, mExecutor, callback);
- verify(mMockCredentialManagerService).executeCreateCredential(any(), any(),
- eq(mPackageName));
+ verify(mMockCredentialManagerService)
+ .executeCreateCredential(any(), any(), eq(mPackageName));
cancellation.cancel();
verify(serviceSignal).cancel();
@@ -316,26 +341,27 @@
@Test
public void testCreateCredential_failed() throws RemoteException {
- ArgumentCaptor<ICreateCredentialCallback> callbackCaptor = ArgumentCaptor.forClass(
- ICreateCredentialCallback.class);
- ArgumentCaptor<CreateCredentialException> errorCaptor = ArgumentCaptor.forClass(
- CreateCredentialException.class);
+ ArgumentCaptor<ICreateCredentialCallback> callbackCaptor =
+ ArgumentCaptor.forClass(ICreateCredentialCallback.class);
+ ArgumentCaptor<CreateCredentialException> errorCaptor =
+ ArgumentCaptor.forClass(CreateCredentialException.class);
- OutcomeReceiver<CreateCredentialResponse, CreateCredentialException> callback = mock(
- OutcomeReceiver.class);
+ OutcomeReceiver<CreateCredentialResponse, CreateCredentialException> callback =
+ mock(OutcomeReceiver.class);
- when(mMockCredentialManagerService.executeCreateCredential(any(), callbackCaptor.capture(),
- any())).thenReturn(mock(ICancellationSignal.class));
- mCredentialManager.createCredential(mMockActivity, mCreateRequest, null, mExecutor,
- callback);
- verify(mMockCredentialManagerService).executeCreateCredential(any(), any(),
- eq(mPackageName));
+ when(mMockCredentialManagerService.executeCreateCredential(
+ any(), callbackCaptor.capture(), any()))
+ .thenReturn(mock(ICancellationSignal.class));
+ mCredentialManager.createCredential(
+ mMockActivity, mCreateRequest, null, mExecutor, callback);
+ verify(mMockCredentialManagerService)
+ .executeCreateCredential(any(), any(), eq(mPackageName));
callbackCaptor.getValue().onError(CreateCredentialException.TYPE_UNKNOWN, "unknown error");
verify(callback).onError(errorCaptor.capture());
- assertThat(errorCaptor.getValue().getType()).isEqualTo(
- CreateCredentialException.TYPE_UNKNOWN);
+ assertThat(errorCaptor.getValue().getType())
+ .isEqualTo(CreateCredentialException.TYPE_UNKNOWN);
}
@Test
@@ -343,20 +369,21 @@
final Bundle responseData = new Bundle();
responseData.putString("foo", "bar");
- ArgumentCaptor<ICreateCredentialCallback> callbackCaptor = ArgumentCaptor.forClass(
- ICreateCredentialCallback.class);
- ArgumentCaptor<CreateCredentialResponse> responseCaptor = ArgumentCaptor.forClass(
- CreateCredentialResponse.class);
+ ArgumentCaptor<ICreateCredentialCallback> callbackCaptor =
+ ArgumentCaptor.forClass(ICreateCredentialCallback.class);
+ ArgumentCaptor<CreateCredentialResponse> responseCaptor =
+ ArgumentCaptor.forClass(CreateCredentialResponse.class);
- OutcomeReceiver<CreateCredentialResponse, CreateCredentialException> callback = mock(
- OutcomeReceiver.class);
+ OutcomeReceiver<CreateCredentialResponse, CreateCredentialException> callback =
+ mock(OutcomeReceiver.class);
- when(mMockCredentialManagerService.executeCreateCredential(any(), callbackCaptor.capture(),
- any())).thenReturn(mock(ICancellationSignal.class));
- mCredentialManager.createCredential(mMockActivity, mCreateRequest, null, mExecutor,
- callback);
- verify(mMockCredentialManagerService).executeCreateCredential(any(), any(),
- eq(mPackageName));
+ when(mMockCredentialManagerService.executeCreateCredential(
+ any(), callbackCaptor.capture(), any()))
+ .thenReturn(mock(ICancellationSignal.class));
+ mCredentialManager.createCredential(
+ mMockActivity, mCreateRequest, null, mExecutor, callback);
+ verify(mMockCredentialManagerService)
+ .executeCreateCredential(any(), any(), eq(mPackageName));
callbackCaptor.getValue().onResponse(new CreateCredentialResponse(responseData));
verify(callback).onResult(responseCaptor.capture());
@@ -366,23 +393,27 @@
@Test
public void testClearCredentialState_nullRequest() {
- assertThrows(NullPointerException.class,
- () -> mCredentialManager.clearCredentialState(null, null, mExecutor, result -> {
- }));
+ assertThrows(
+ NullPointerException.class,
+ () -> mCredentialManager.clearCredentialState(null, null, mExecutor, result -> {}));
}
@Test
public void testClearCredentialState_nullExecutor() {
- assertThrows(NullPointerException.class,
- () -> mCredentialManager.clearCredentialState(mClearRequest, null, null, result -> {
- }));
+ assertThrows(
+ NullPointerException.class,
+ () ->
+ mCredentialManager.clearCredentialState(
+ mClearRequest, null, null, result -> {}));
}
@Test
public void testClearCredentialState_nullCallback() {
- assertThrows(NullPointerException.class,
- () -> mCredentialManager.clearCredentialState(mClearRequest, null, mExecutor,
- null));
+ assertThrows(
+ NullPointerException.class,
+ () ->
+ mCredentialManager.clearCredentialState(
+ mClearRequest, null, mExecutor, null));
}
@Test
@@ -390,8 +421,8 @@
final CancellationSignal cancellation = new CancellationSignal();
cancellation.cancel();
- mCredentialManager.clearCredentialState(mClearRequest, cancellation, mExecutor, result -> {
- });
+ mCredentialManager.clearCredentialState(
+ mClearRequest, cancellation, mExecutor, result -> {});
verify(mMockCredentialManagerService, never()).clearCredentialState(any(), any(), any());
}
@@ -403,8 +434,8 @@
OutcomeReceiver<Void, ClearCredentialStateException> callback = mock(OutcomeReceiver.class);
- when(mMockCredentialManagerService.clearCredentialState(any(), any(), any())).thenReturn(
- serviceSignal);
+ when(mMockCredentialManagerService.clearCredentialState(any(), any(), any()))
+ .thenReturn(serviceSignal);
mCredentialManager.clearCredentialState(mClearRequest, cancellation, mExecutor, callback);
@@ -416,35 +447,38 @@
@Test
public void testClearCredential_failed() throws RemoteException {
- ArgumentCaptor<IClearCredentialStateCallback> callbackCaptor = ArgumentCaptor.forClass(
- IClearCredentialStateCallback.class);
- ArgumentCaptor<ClearCredentialStateException> errorCaptor = ArgumentCaptor.forClass(
- ClearCredentialStateException.class);
+ ArgumentCaptor<IClearCredentialStateCallback> callbackCaptor =
+ ArgumentCaptor.forClass(IClearCredentialStateCallback.class);
+ ArgumentCaptor<ClearCredentialStateException> errorCaptor =
+ ArgumentCaptor.forClass(ClearCredentialStateException.class);
OutcomeReceiver<Void, ClearCredentialStateException> callback = mock(OutcomeReceiver.class);
- when(mMockCredentialManagerService.clearCredentialState(any(), callbackCaptor.capture(),
- any())).thenReturn(mock(ICancellationSignal.class));
+ when(mMockCredentialManagerService.clearCredentialState(
+ any(), callbackCaptor.capture(), any()))
+ .thenReturn(mock(ICancellationSignal.class));
mCredentialManager.clearCredentialState(mClearRequest, null, mExecutor, callback);
verify(mMockCredentialManagerService).clearCredentialState(any(), any(), eq(mPackageName));
- callbackCaptor.getValue().onError(ClearCredentialStateException.TYPE_UNKNOWN,
- "unknown error");
+ callbackCaptor
+ .getValue()
+ .onError(ClearCredentialStateException.TYPE_UNKNOWN, "unknown error");
verify(callback).onError(errorCaptor.capture());
- assertThat(errorCaptor.getValue().getType()).isEqualTo(
- ClearCredentialStateException.TYPE_UNKNOWN);
+ assertThat(errorCaptor.getValue().getType())
+ .isEqualTo(ClearCredentialStateException.TYPE_UNKNOWN);
}
@Test
public void testClearCredential_success() throws RemoteException {
- ArgumentCaptor<IClearCredentialStateCallback> callbackCaptor = ArgumentCaptor.forClass(
- IClearCredentialStateCallback.class);
+ ArgumentCaptor<IClearCredentialStateCallback> callbackCaptor =
+ ArgumentCaptor.forClass(IClearCredentialStateCallback.class);
OutcomeReceiver<Void, ClearCredentialStateException> callback = mock(OutcomeReceiver.class);
- when(mMockCredentialManagerService.clearCredentialState(any(), callbackCaptor.capture(),
- any())).thenReturn(mock(ICancellationSignal.class));
+ when(mMockCredentialManagerService.clearCredentialState(
+ any(), callbackCaptor.capture(), any()))
+ .thenReturn(mock(ICancellationSignal.class));
mCredentialManager.clearCredentialState(mClearRequest, null, mExecutor, callback);
verify(mMockCredentialManagerService).clearCredentialState(any(), any(), eq(mPackageName));
@@ -464,27 +498,32 @@
@Test
public void testGetCredentialProviderServices_systemProviders() throws RemoteException {
- verifyGetCredentialProviderServices(CredentialManager.PROVIDER_FILTER_SYSTEM_PROVIDERS_ONLY);
+ verifyGetCredentialProviderServices(
+ CredentialManager.PROVIDER_FILTER_SYSTEM_PROVIDERS_ONLY);
}
@Test
public void testGetCredentialProviderServicesForTesting_allProviders() throws RemoteException {
- verifyGetCredentialProviderServicesForTesting(CredentialManager.PROVIDER_FILTER_ALL_PROVIDERS);
+ verifyGetCredentialProviderServicesForTesting(
+ CredentialManager.PROVIDER_FILTER_ALL_PROVIDERS);
}
@Test
public void testGetCredentialProviderServicesForTesting_userProviders() throws RemoteException {
- verifyGetCredentialProviderServicesForTesting(CredentialManager.PROVIDER_FILTER_USER_PROVIDERS_ONLY);
+ verifyGetCredentialProviderServicesForTesting(
+ CredentialManager.PROVIDER_FILTER_USER_PROVIDERS_ONLY);
}
@Test
- public void testGetCredentialProviderServicesForTesting_systemProviders() throws RemoteException {
- verifyGetCredentialProviderServicesForTesting(CredentialManager.PROVIDER_FILTER_SYSTEM_PROVIDERS_ONLY);
+ public void testGetCredentialProviderServicesForTesting_systemProviders()
+ throws RemoteException {
+ verifyGetCredentialProviderServicesForTesting(
+ CredentialManager.PROVIDER_FILTER_SYSTEM_PROVIDERS_ONLY);
}
private void verifyGetCredentialProviderServices(int testFilter) throws RemoteException {
- when(mMockCredentialManagerService.getCredentialProviderServices(
- TEST_USER_ID, testFilter)).thenReturn(TEST_CREDENTIAL_PROVIDER_INFO_LIST);
+ when(mMockCredentialManagerService.getCredentialProviderServices(TEST_USER_ID, testFilter))
+ .thenReturn(TEST_CREDENTIAL_PROVIDER_INFO_LIST);
List<CredentialProviderInfo> output =
mCredentialManager.getCredentialProviderServices(TEST_USER_ID, testFilter);
@@ -492,9 +531,10 @@
assertThat(output).containsExactlyElementsIn(TEST_CREDENTIAL_PROVIDER_INFO_LIST);
}
- private void verifyGetCredentialProviderServicesForTesting(int testFilter) throws RemoteException {
- when(mMockCredentialManagerService.getCredentialProviderServicesForTesting(
- testFilter)).thenReturn(TEST_CREDENTIAL_PROVIDER_INFO_LIST);
+ private void verifyGetCredentialProviderServicesForTesting(int testFilter)
+ throws RemoteException {
+ when(mMockCredentialManagerService.getCredentialProviderServicesForTesting(testFilter))
+ .thenReturn(TEST_CREDENTIAL_PROVIDER_INFO_LIST);
List<CredentialProviderInfo> output =
mCredentialManager.getCredentialProviderServicesForTesting(testFilter);
@@ -504,41 +544,45 @@
@Test
public void testSetEnabledProviders_nullProviders() {
- assertThrows(NullPointerException.class,
- () -> mCredentialManager.setEnabledProviders(null, 0, mExecutor, response -> {
- }));
-
+ assertThrows(
+ NullPointerException.class,
+ () ->
+ mCredentialManager.setEnabledProviders(
+ null, null, 0, mExecutor, response -> {}));
}
@Test
public void testSetEnabledProviders_nullExecutor() {
- assertThrows(NullPointerException.class,
- () -> mCredentialManager.setEnabledProviders(List.of("foo"), 0, null, response -> {
- }));
-
+ assertThrows(
+ NullPointerException.class,
+ () ->
+ mCredentialManager.setEnabledProviders(
+ List.of("foo"), List.of("foo"), 0, null, response -> {}));
}
@Test
public void testSetEnabledProviders_nullCallback() {
- assertThrows(NullPointerException.class,
- () -> mCredentialManager.setEnabledProviders(List.of("foo"), 0, mExecutor, null));
-
+ assertThrows(
+ NullPointerException.class,
+ () ->
+ mCredentialManager.setEnabledProviders(
+ List.of("foo"), List.of("foo"), 0, mExecutor, null));
}
@Test
public void testSetEnabledProviders_failed() throws RemoteException {
OutcomeReceiver<Void, SetEnabledProvidersException> callback = mock(OutcomeReceiver.class);
- ArgumentCaptor<ISetEnabledProvidersCallback> callbackCaptor = ArgumentCaptor.forClass(
- ISetEnabledProvidersCallback.class);
- ArgumentCaptor<SetEnabledProvidersException> errorCaptor = ArgumentCaptor.forClass(
- SetEnabledProvidersException.class);
+ ArgumentCaptor<ISetEnabledProvidersCallback> callbackCaptor =
+ ArgumentCaptor.forClass(ISetEnabledProvidersCallback.class);
+ ArgumentCaptor<SetEnabledProvidersException> errorCaptor =
+ ArgumentCaptor.forClass(SetEnabledProvidersException.class);
final List<String> providers = List.of("foo", "bar");
final int userId = 0;
- mCredentialManager.setEnabledProviders(providers, userId, mExecutor, callback);
- verify(mMockCredentialManagerService).setEnabledProviders(eq(providers), eq(0),
- callbackCaptor.capture());
+ mCredentialManager.setEnabledProviders(providers, providers, userId, mExecutor, callback);
+ verify(mMockCredentialManagerService)
+ .setEnabledProviders(eq(providers), eq(providers), eq(0), callbackCaptor.capture());
final String errorType = "unknown";
final String errorMessage = "Unknown error";
@@ -553,15 +597,18 @@
public void testSetEnabledProviders_success() throws RemoteException {
OutcomeReceiver<Void, SetEnabledProvidersException> callback = mock(OutcomeReceiver.class);
- ArgumentCaptor<ISetEnabledProvidersCallback> callbackCaptor = ArgumentCaptor.forClass(
- ISetEnabledProvidersCallback.class);
+ ArgumentCaptor<ISetEnabledProvidersCallback> callbackCaptor =
+ ArgumentCaptor.forClass(ISetEnabledProvidersCallback.class);
final List<String> providers = List.of("foo", "bar");
+ final List<String> primaryProviders = List.of("foo");
final int userId = 0;
- mCredentialManager.setEnabledProviders(providers, userId, mExecutor, callback);
+ mCredentialManager.setEnabledProviders(
+ primaryProviders, providers, userId, mExecutor, callback);
- verify(mMockCredentialManagerService).setEnabledProviders(eq(providers), eq(0),
- callbackCaptor.capture());
+ verify(mMockCredentialManagerService)
+ .setEnabledProviders(
+ eq(primaryProviders), eq(providers), eq(0), callbackCaptor.capture());
callbackCaptor.getValue().onResponse();
verify(callback).onResult(any());
@@ -569,27 +616,29 @@
@Test
public void testRegisterCredentialDescription_nullRequest() {
- assertThrows(NullPointerException.class,
+ assertThrows(
+ NullPointerException.class,
() -> mCredentialManager.registerCredentialDescription(null));
}
@Test
public void testRegisterCredentialDescription_success() throws RemoteException {
mCredentialManager.registerCredentialDescription(mRegisterRequest);
- verify(mMockCredentialManagerService).registerCredentialDescription(same(mRegisterRequest),
- eq(mPackageName));
+ verify(mMockCredentialManagerService)
+ .registerCredentialDescription(same(mRegisterRequest), eq(mPackageName));
}
@Test
public void testUnregisterCredentialDescription_nullRequest() {
- assertThrows(NullPointerException.class,
+ assertThrows(
+ NullPointerException.class,
() -> mCredentialManager.unregisterCredentialDescription(null));
}
@Test
public void testUnregisterCredentialDescription_success() throws RemoteException {
mCredentialManager.unregisterCredentialDescription(mUnregisterRequest);
- verify(mMockCredentialManagerService).unregisterCredentialDescription(
- same(mUnregisterRequest), eq(mPackageName));
+ verify(mMockCredentialManagerService)
+ .unregisterCredentialDescription(same(mUnregisterRequest), eq(mPackageName));
}
}
diff --git a/core/tests/coretests/src/android/graphics/ImageDecoderTest.java b/core/tests/coretests/src/android/graphics/ImageDecoderTest.java
new file mode 100644
index 0000000..8b3e6ba2
--- /dev/null
+++ b/core/tests/coretests/src/android/graphics/ImageDecoderTest.java
@@ -0,0 +1,80 @@
+/*
+ * 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 android.graphics;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.content.Context;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.SmallTest;
+import androidx.test.platform.app.InstrumentationRegistry;
+
+import com.android.frameworks.coretests.R;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.io.File;
+import java.io.IOException;
+
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class ImageDecoderTest {
+
+ private final Context mContext = InstrumentationRegistry.getInstrumentation().getContext();
+
+ @Test
+ public void onDecodeHeader_png_returnsPopulatedData() throws IOException {
+ ImageDecoder.Source src =
+ ImageDecoder.createSource(mContext.getResources(), R.drawable.gettysburg);
+ ImageDecoder.ImageInfo info = ImageDecoder.decodeHeader(src);
+ assertThat(info.getSize().getWidth()).isEqualTo(432);
+ assertThat(info.getSize().getHeight()).isEqualTo(291);
+ assertThat(info.getMimeType()).isEqualTo("image/png");
+ assertThat(info.getColorSpace()).isNotNull();
+ assertThat(info.getColorSpace().getModel()).isEqualTo(ColorSpace.Model.RGB);
+ assertThat(info.getColorSpace().getId()).isEqualTo(0);
+ assertThat(info.isAnimated()).isFalse();
+ }
+
+ @Test
+ public void onDecodeHeader_animatedWebP_returnsPopulatedData() throws IOException {
+ ImageDecoder.Source src =
+ ImageDecoder.createSource(mContext.getResources(), R.drawable.animated_webp);
+ ImageDecoder.ImageInfo info = ImageDecoder.decodeHeader(src);
+ assertThat(info.getSize().getWidth()).isEqualTo(278);
+ assertThat(info.getSize().getHeight()).isEqualTo(183);
+ assertThat(info.getMimeType()).isEqualTo("image/webp");
+ assertThat(info.getColorSpace()).isNotNull();
+ assertThat(info.getColorSpace().getModel()).isEqualTo(ColorSpace.Model.RGB);
+ assertThat(info.getColorSpace().getId()).isEqualTo(0);
+ assertThat(info.isAnimated()).isTrue();
+ }
+
+ @Test(expected = IOException.class)
+ public void onDecodeHeader_invalidSource_throwsException() throws IOException {
+ ImageDecoder.Source src = ImageDecoder.createSource(new File("/this/file/does/not/exist"));
+ ImageDecoder.decodeHeader(src);
+ }
+
+ @Test(expected = IOException.class)
+ public void onDecodeHeader_invalidResource_throwsException() throws IOException {
+ ImageDecoder.Source src =
+ ImageDecoder.createSource(mContext.getResources(), R.drawable.box);
+ ImageDecoder.decodeHeader(src);
+ }
+}
diff --git a/core/tests/coretests/src/android/os/ProcessTest.java b/core/tests/coretests/src/android/os/ProcessTest.java
index 52846df..b2ffdc0 100644
--- a/core/tests/coretests/src/android/os/ProcessTest.java
+++ b/core/tests/coretests/src/android/os/ProcessTest.java
@@ -73,6 +73,7 @@
}
public void testGetAdvertisedMem() {
+ assertTrue(Process.getAdvertisedMem() > 0);
assertTrue(Process.getTotalMemory() <= Process.getAdvertisedMem());
}
}
diff --git a/core/tests/coretests/src/android/text/DynamicLayoutOffsetMappingTest.java b/core/tests/coretests/src/android/text/DynamicLayoutOffsetMappingTest.java
index 76f4171..5939c06 100644
--- a/core/tests/coretests/src/android/text/DynamicLayoutOffsetMappingTest.java
+++ b/core/tests/coretests/src/android/text/DynamicLayoutOffsetMappingTest.java
@@ -119,6 +119,86 @@
assertLineRange(layout, /* lineBreaks */ 0, 5, 6, 8);
}
+ @Test
+ public void textWithOffsetMapping_blockBeforeTextChanged_deletion() {
+ final String text = "abcdef";
+ final SpannableStringBuilder spannable = new TestNoBeforeTextChangeSpannableString(text);
+ final CharSequence transformedText =
+ new TestOffsetMapping(spannable, 5, "\n\n");
+
+ final DynamicLayout layout = DynamicLayout.Builder.obtain(spannable, sTextPaint, WIDTH)
+ .setAlignment(ALIGN_NORMAL)
+ .setIncludePad(false)
+ .setDisplayText(transformedText)
+ .build();
+
+ // delete "cd", original text becomes "abef"
+ spannable.delete(2, 4);
+ assertThat(transformedText.toString()).isEqualTo("abe\n\nf");
+ assertLineRange(layout, /* lineBreaks */ 0, 4, 5, 6);
+
+ // delete "abe", original text becomes "f"
+ spannable.delete(0, 3);
+ assertThat(transformedText.toString()).isEqualTo("\n\nf");
+ assertLineRange(layout, /* lineBreaks */ 0, 1, 2, 3);
+ }
+
+ @Test
+ public void textWithOffsetMapping_blockBeforeTextChanged_insertion() {
+ final String text = "abcdef";
+ final SpannableStringBuilder spannable = new TestNoBeforeTextChangeSpannableString(text);
+ final CharSequence transformedText = new TestOffsetMapping(spannable, 3, "\n\n");
+
+ final DynamicLayout layout = DynamicLayout.Builder.obtain(spannable, sTextPaint, WIDTH)
+ .setAlignment(ALIGN_NORMAL)
+ .setIncludePad(false)
+ .setDisplayText(transformedText)
+ .build();
+
+ spannable.insert(3, "x");
+ assertThat(transformedText.toString()).isEqualTo("abcx\n\ndef");
+ assertLineRange(layout, /* lineBreaks */ 0, 5, 6, 9);
+
+ spannable.insert(5, "x");
+ assertThat(transformedText.toString()).isEqualTo("abcx\n\ndxef");
+ assertLineRange(layout, /* lineBreaks */ 0, 5, 6, 10);
+ }
+
+ @Test
+ public void textWithOffsetMapping_blockBeforeTextChanged_replace() {
+ final String text = "abcdef";
+ final SpannableStringBuilder spannable = new TestNoBeforeTextChangeSpannableString(text);
+ final CharSequence transformedText = new TestOffsetMapping(spannable, 3, "\n\n");
+
+ final DynamicLayout layout = DynamicLayout.Builder.obtain(spannable, sTextPaint, WIDTH)
+ .setAlignment(ALIGN_NORMAL)
+ .setIncludePad(false)
+ .setDisplayText(transformedText)
+ .build();
+
+ spannable.replace(2, 4, "xx");
+ assertThat(transformedText.toString()).isEqualTo("abxx\n\nef");
+ assertLineRange(layout, /* lineBreaks */ 0, 5, 6, 8);
+ }
+
+ @Test
+ public void textWithOffsetMapping_onlyCallOnTextChanged_notCrash() {
+ String text = "abcdef";
+ SpannableStringBuilder spannable = new SpannableStringBuilder(text);
+ CharSequence transformedText = new TestOffsetMapping(spannable, 3, "\n\n");
+
+ DynamicLayout.Builder.obtain(spannable, sTextPaint, WIDTH)
+ .setAlignment(ALIGN_NORMAL)
+ .setIncludePad(false)
+ .setDisplayText(transformedText)
+ .build();
+
+ TextWatcher[] textWatcher = spannable.getSpans(0, spannable.length(), TextWatcher.class);
+ assertThat(textWatcher.length).isEqualTo(1);
+
+ textWatcher[0].onTextChanged(spannable, 0, 2, 2);
+ }
+
private void assertLineRange(Layout layout, int... lineBreaks) {
final int lineCount = lineBreaks.length - 1;
assertThat(layout.getLineCount()).isEqualTo(lineCount);
@@ -129,6 +209,50 @@
}
/**
+ * A test SpannableStringBuilder that doesn't call beforeTextChanged. It's used to test
+ * DynamicLayout against some special cases where beforeTextChanged callback is not properly
+ * called.
+ */
+ private static class TestNoBeforeTextChangeSpannableString extends SpannableStringBuilder {
+
+ TestNoBeforeTextChangeSpannableString(CharSequence text) {
+ super(text);
+ }
+
+ @Override
+ public void setSpan(Object what, int start, int end, int flags) {
+ if (what instanceof TextWatcher) {
+ super.setSpan(new TestNoBeforeTextChangeWatcherWrapper((TextWatcher) what), start,
+ end, flags);
+ } else {
+ super.setSpan(what, start, end, flags);
+ }
+ }
+ }
+
+ /** A TextWatcherWrapper that blocks beforeTextChanged callback. */
+ private static class TestNoBeforeTextChangeWatcherWrapper implements TextWatcher {
+ private final TextWatcher mTextWatcher;
+
+ TestNoBeforeTextChangeWatcherWrapper(TextWatcher textWatcher) {
+ mTextWatcher = textWatcher;
+ }
+
+ @Override
+ public void beforeTextChanged(CharSequence s, int start, int count, int after) { }
+
+ @Override
+ public void onTextChanged(CharSequence s, int start, int before, int count) {
+ mTextWatcher.onTextChanged(s, start, before, count);
+ }
+
+ @Override
+ public void afterTextChanged(Editable s) {
+ mTextWatcher.afterTextChanged(s);
+ }
+ }
+
+ /**
* A test TransformedText that inserts some text at the given offset.
*/
private static class TestOffsetMapping implements OffsetMapping, CharSequence {
diff --git a/core/tests/coretests/src/android/text/method/InsertModeTransformationMethodTest.java b/core/tests/coretests/src/android/text/method/InsertModeTransformationMethodTest.java
index 7706d9a..9ef137b 100644
--- a/core/tests/coretests/src/android/text/method/InsertModeTransformationMethodTest.java
+++ b/core/tests/coretests/src/android/text/method/InsertModeTransformationMethodTest.java
@@ -224,6 +224,12 @@
assertThat(spans0to2.length).isEqualTo(1);
assertThat(spans0to2[0]).isEqualTo(span1);
+ // only span2 is in the range of [3, 4).
+ // note: span1 [0, 3) is not in the range because [3, 4) is not collapsed.
+ final TestSpan[] spans3to4 = transformedText.getSpans(3, 4, TestSpan.class);
+ assertThat(spans3to4.length).isEqualTo(1);
+ assertThat(spans3to4[0]).isEqualTo(span2);
+
// span1 and span2 are in the range of [1, 6).
final TestSpan[] spans1to6 = transformedText.getSpans(1, 6, TestSpan.class);
assertThat(spans1to6.length).isEqualTo(2);
@@ -262,7 +268,7 @@
text.setSpan(span2, 2, 4, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
text.setSpan(span3, 4, 5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
- // In the transformedText, the new ranges of the spans are:
+ // In the transformedText "abc\uFFFD def", the new ranges of the spans are:
// span1: [0, 3)
// span2: [2, 5)
// span3: [5, 6)
@@ -277,6 +283,12 @@
assertThat(spans0to2.length).isEqualTo(1);
assertThat(spans0to2[0]).isEqualTo(span1);
+ // only span2 is in the range of [3, 4).
+ // note: span1 [0, 3) is not in the range because [3, 4) is not collapsed.
+ final TestSpan[] spans3to4 = transformedText.getSpans(3, 4, TestSpan.class);
+ assertThat(spans3to4.length).isEqualTo(1);
+ assertThat(spans3to4[0]).isEqualTo(span2);
+
// span1 and span2 are in the range of [1, 5).
final TestSpan[] spans1to4 = transformedText.getSpans(1, 4, TestSpan.class);
assertThat(spans1to4.length).isEqualTo(2);
@@ -318,20 +330,143 @@
}
@Test
- public void transformedText_getSpanStartAndEnd() {
+ public void transformedText_getSpans_collapsedRange() {
final SpannableString text = new SpannableString(TEXT);
final TestSpan span1 = new TestSpan();
final TestSpan span2 = new TestSpan();
final TestSpan span3 = new TestSpan();
text.setSpan(span1, 0, 3, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+ text.setSpan(span2, 3, 3, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+ text.setSpan(span3, 3, 4, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+
+ // In the transformedText "abc\n\n def", the new ranges of the spans are:
+ // span1: [0, 3)
+ // span2: [3, 3)
+ // span3: [5, 6)
+ final InsertModeTransformationMethod transformationMethod =
+ new InsertModeTransformationMethod(3, false, null);
+ final Spanned transformedText =
+ (Spanned) transformationMethod.getTransformation(text, sView);
+
+ // only span1 is in the range of [0, 0).
+ final TestSpan[] spans0to0 = transformedText.getSpans(0, 0, TestSpan.class);
+ assertThat(spans0to0.length).isEqualTo(1);
+ assertThat(spans0to0[0]).isEqualTo(span1);
+
+ // span1 and span 2 are in the range of [3, 3).
+ final TestSpan[] spans3to3 = transformedText.getSpans(3, 3, TestSpan.class);
+ assertThat(spans3to3.length).isEqualTo(2);
+ assertThat(spans3to3[0]).isEqualTo(span1);
+ assertThat(spans3to3[1]).isEqualTo(span2);
+
+ // only the span2 with collapsed range is in the range of [3, 4).
+ final TestSpan[] spans3to4 = transformedText.getSpans(3, 4, TestSpan.class);
+ assertThat(spans3to4.length).isEqualTo(1);
+ assertThat(spans3to4[0]).isEqualTo(span2);
+
+ // no span is in the range of [4, 5). (span2 is not mistakenly included.)
+ final TestSpan[] spans4to5 = transformedText.getSpans(4, 5, TestSpan.class);
+ assertThat(spans4to5).isEmpty();
+
+ // only span3 is in the range of [4, 6). (span2 is not mistakenly included.)
+ final TestSpan[] spans4to6 = transformedText.getSpans(4, 6, TestSpan.class);
+ assertThat(spans4to6.length).isEqualTo(1);
+ assertThat(spans4to6[0]).isEqualTo(span3);
+
+ // no span is in the range of [4, 4).
+ final TestSpan[] spans4to4 = transformedText.getSpans(4, 4, TestSpan.class);
+ assertThat(spans4to4.length).isEqualTo(0);
+
+ // span3 is in the range of [5, 5).
+ final TestSpan[] spans5to5 = transformedText.getSpans(5, 5, TestSpan.class);
+ assertThat(spans5to5.length).isEqualTo(1);
+ assertThat(spans5to5[0]).isEqualTo(span3);
+
+ // span3 is in the range of [6, 6).
+ final TestSpan[] spans6to6 = transformedText.getSpans(6, 6, TestSpan.class);
+ assertThat(spans6to6.length).isEqualTo(1);
+ assertThat(spans6to6[0]).isEqualTo(span3);
+ }
+
+ @Test
+ public void transformedText_getSpans_collapsedRange_singleLine() {
+ final SpannableString text = new SpannableString(TEXT);
+ final TestSpan span1 = new TestSpan();
+ final TestSpan span2 = new TestSpan();
+ final TestSpan span3 = new TestSpan();
+
+ text.setSpan(span1, 0, 3, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+ text.setSpan(span2, 3, 3, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+ text.setSpan(span3, 3, 4, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+
+ // In the transformedText "abc\uFFFD def", the new ranges of the spans are:
+ // span1: [0, 3)
+ // span2: [3, 3)
+ // span3: [4, 5)
+ final InsertModeTransformationMethod transformationMethod =
+ new InsertModeTransformationMethod(3, true, null);
+ final Spanned transformedText =
+ (Spanned) transformationMethod.getTransformation(text, sView);
+
+ // only span1 is in the range of [0, 0).
+ final TestSpan[] spans0to0 = transformedText.getSpans(0, 0, TestSpan.class);
+ assertThat(spans0to0.length).isEqualTo(1);
+ assertThat(spans0to0[0]).isEqualTo(span1);
+
+ // span1 and span2 are in the range of [3, 3).
+ final TestSpan[] spans3to3 = transformedText.getSpans(3, 3, TestSpan.class);
+ assertThat(spans3to3.length).isEqualTo(2);
+ assertThat(spans3to3[0]).isEqualTo(span1);
+ assertThat(spans3to3[1]).isEqualTo(span2);
+
+ // only the span2 with collapsed range is in the range of [3, 4).
+ final TestSpan[] spans3to4 = transformedText.getSpans(3, 4, TestSpan.class);
+ assertThat(spans3to4.length).isEqualTo(1);
+ assertThat(spans3to4[0]).isEqualTo(span2);
+
+ // span3 is in the range of [4, 5). (span2 is not mistakenly included.)
+ final TestSpan[] spans4to5 = transformedText.getSpans(4, 5, TestSpan.class);
+ assertThat(spans4to5.length).isEqualTo(1);
+ assertThat(spans4to5[0]).isEqualTo(span3);
+
+ // only span3 is in the range of [4, 6). (span2 is not mistakenly included.)
+ final TestSpan[] spans4to6 = transformedText.getSpans(4, 6, TestSpan.class);
+ assertThat(spans4to6.length).isEqualTo(1);
+ assertThat(spans4to6[0]).isEqualTo(span3);
+
+ // span3 is in the range of [4, 4).
+ final TestSpan[] spans4to4 = transformedText.getSpans(4, 4, TestSpan.class);
+ assertThat(spans4to4.length).isEqualTo(1);
+ assertThat(spans4to4[0]).isEqualTo(span3);
+
+ // span3 is in the range of [5, 5).
+ final TestSpan[] spans5to5 = transformedText.getSpans(5, 5, TestSpan.class);
+ assertThat(spans5to5.length).isEqualTo(1);
+ assertThat(spans5to5[0]).isEqualTo(span3);
+ }
+
+ @Test
+ public void transformedText_getSpanStartAndEnd() {
+ final SpannableString text = new SpannableString(TEXT);
+ final TestSpan span1 = new TestSpan();
+ final TestSpan span2 = new TestSpan();
+ final TestSpan span3 = new TestSpan();
+ final TestSpan span4 = new TestSpan();
+ final TestSpan span5 = new TestSpan();
+
+ text.setSpan(span1, 0, 3, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
text.setSpan(span2, 2, 4, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
text.setSpan(span3, 4, 5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+ text.setSpan(span4, 3, 3, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+ text.setSpan(span5, 3, 4, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
// In the transformedText, the new ranges of the spans are:
// span1: [0, 3)
// span2: [2, 6)
// span3: [6, 7)
+ // span4: [3, 3)
+ // span5: [5, 6)
final InsertModeTransformationMethod transformationMethod =
new InsertModeTransformationMethod(3, false, null);
final Spanned transformedText =
@@ -345,6 +480,12 @@
assertThat(transformedText.getSpanStart(span3)).isEqualTo(6);
assertThat(transformedText.getSpanEnd(span3)).isEqualTo(7);
+
+ assertThat(transformedText.getSpanStart(span4)).isEqualTo(3);
+ assertThat(transformedText.getSpanEnd(span4)).isEqualTo(3);
+
+ assertThat(transformedText.getSpanStart(span5)).isEqualTo(5);
+ assertThat(transformedText.getSpanEnd(span5)).isEqualTo(6);
}
@Test
@@ -353,15 +494,21 @@
final TestSpan span1 = new TestSpan();
final TestSpan span2 = new TestSpan();
final TestSpan span3 = new TestSpan();
+ final TestSpan span4 = new TestSpan();
+ final TestSpan span5 = new TestSpan();
text.setSpan(span1, 0, 3, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
text.setSpan(span2, 2, 4, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
text.setSpan(span3, 4, 5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+ text.setSpan(span4, 3, 3, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+ text.setSpan(span5, 3, 4, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
// In the transformedText, the new ranges of the spans are:
// span1: [0, 3)
// span2: [2, 5)
// span3: [5, 6)
+ // span4: [3. 3)
+ // span5: [4, 5)
final InsertModeTransformationMethod transformationMethod =
new InsertModeTransformationMethod(3, true, null);
final Spanned transformedText =
@@ -376,6 +523,12 @@
assertThat(transformedText.getSpanStart(span3)).isEqualTo(5);
assertThat(transformedText.getSpanEnd(span3)).isEqualTo(6);
+ assertThat(transformedText.getSpanStart(span4)).isEqualTo(3);
+ assertThat(transformedText.getSpanEnd(span4)).isEqualTo(3);
+
+ assertThat(transformedText.getSpanStart(span5)).isEqualTo(4);
+ assertThat(transformedText.getSpanEnd(span5)).isEqualTo(5);
+
final ReplacementSpan[] replacementSpans =
transformedText.getSpans(0, 8, ReplacementSpan.class);
assertThat(transformedText.getSpanStart(replacementSpans[0])).isEqualTo(3);
diff --git a/core/tests/coretests/src/android/view/DisplayInfoTest.java b/core/tests/coretests/src/android/view/DisplayInfoTest.java
new file mode 100644
index 0000000..803d38c
--- /dev/null
+++ b/core/tests/coretests/src/android/view/DisplayInfoTest.java
@@ -0,0 +1,93 @@
+/*
+ * 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 android.view;
+
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.SmallTest;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+@SmallTest
+public class DisplayInfoTest {
+ private static final float FLOAT_EQUAL_DELTA = 0.0001f;
+
+ @Test
+ public void testDefaultDisplayInfosAreEqual() {
+ DisplayInfo displayInfo1 = new DisplayInfo();
+ DisplayInfo displayInfo2 = new DisplayInfo();
+
+ assertTrue(displayInfo1.equals(displayInfo2));
+ }
+
+ @Test
+ public void testDefaultDisplayInfoRefreshRateIs0() {
+ DisplayInfo displayInfo = new DisplayInfo();
+
+ assertEquals(0, displayInfo.getRefreshRate(), FLOAT_EQUAL_DELTA);
+ }
+
+ @Test
+ public void testRefreshRateOverride() {
+ DisplayInfo displayInfo = new DisplayInfo();
+
+ displayInfo.refreshRateOverride = 50;
+
+ assertEquals(50, displayInfo.getRefreshRate(), FLOAT_EQUAL_DELTA);
+
+ }
+
+ @Test
+ public void testRefreshRateOverride_keepsDisplyInfosEqual() {
+ Display.Mode mode = new Display.Mode(
+ /*modeId=*/1, /*width=*/1000, /*height=*/1000, /*refreshRate=*/120);
+ DisplayInfo displayInfo1 = new DisplayInfo();
+ setSupportedMode(displayInfo1, mode);
+
+ DisplayInfo displayInfo2 = new DisplayInfo();
+ setSupportedMode(displayInfo2, mode);
+ displayInfo2.refreshRateOverride = 120;
+
+ assertTrue(displayInfo1.equals(displayInfo2));
+ }
+
+ @Test
+ public void testRefreshRateOverride_makeDisplayInfosDifferent() {
+ Display.Mode mode = new Display.Mode(
+ /*modeId=*/1, /*width=*/1000, /*height=*/1000, /*refreshRate=*/120);
+ DisplayInfo displayInfo1 = new DisplayInfo();
+ setSupportedMode(displayInfo1, mode);
+
+ DisplayInfo displayInfo2 = new DisplayInfo();
+ setSupportedMode(displayInfo2, mode);
+ displayInfo2.refreshRateOverride = 90;
+
+ assertFalse(displayInfo1.equals(displayInfo2));
+ }
+
+ private void setSupportedMode(DisplayInfo info, Display.Mode mode) {
+ info.supportedModes = new Display.Mode[]{mode};
+ info.modeId = mode.getModeId();
+ }
+
+}
diff --git a/core/tests/coretests/src/android/view/ViewGroupTest.java b/core/tests/coretests/src/android/view/ViewGroupTest.java
index 506cc2d..b37c8fd 100644
--- a/core/tests/coretests/src/android/view/ViewGroupTest.java
+++ b/core/tests/coretests/src/android/view/ViewGroupTest.java
@@ -20,6 +20,7 @@
import static org.junit.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
@@ -87,6 +88,9 @@
viewGroup.dispatchTouchEvent(event);
verify(viewB).dispatchTouchEvent(event);
+ viewGroup.onResolvePointerIcon(event, 0 /* pointerIndex */);
+ verify(viewB).onResolvePointerIcon(event, 0);
+
event = MotionEvent.obtain(0 /* downTime */, 0 /* eventTime */,
MotionEvent.ACTION_POINTER_DOWN | (1 << MotionEvent.ACTION_POINTER_INDEX_SHIFT),
2 /* pointerCount */, properties, coords, 0 /* metaState */, 0 /* buttonState */,
@@ -95,7 +99,11 @@
viewGroup.dispatchTouchEvent(event);
verify(viewB).dispatchTouchEvent(event);
+ viewGroup.onResolvePointerIcon(event, 1 /* pointerIndex */);
+ verify(viewB).onResolvePointerIcon(event, 1);
+
verify(viewA, never()).dispatchTouchEvent(any());
+ verify(viewA, never()).onResolvePointerIcon(any(), anyInt());
}
/**
diff --git a/core/tests/coretests/src/android/view/autofill/AutofillFeatureFlagsTest.java b/core/tests/coretests/src/android/view/autofill/AutofillFeatureFlagsTest.java
index e03b722..f9b3239 100644
--- a/core/tests/coretests/src/android/view/autofill/AutofillFeatureFlagsTest.java
+++ b/core/tests/coretests/src/android/view/autofill/AutofillFeatureFlagsTest.java
@@ -51,42 +51,12 @@
assertThat(fillDialogHints[1]).isEqualTo("creditCardNumber");
}
- @Test
- public void testIsCredentialManagerEnabled() {
- setCredentialManagerEnabled(false);
- assertThat(AutofillFeatureFlags.isCredentialManagerEnabled()).isFalse();
- setCredentialManagerEnabled(true);
- assertThat(AutofillFeatureFlags.isCredentialManagerEnabled()).isTrue();
- }
-
- @Test
- public void testShouldIgnoreCredentialManagerViews() {
- setCredentialManagerEnabled(false);
- setIgnoreCredentialManagerViews(true);
- // Overall feature is disabled, so we shouldn't ignore views.
- assertThat(AutofillFeatureFlags.shouldIgnoreCredentialViews()).isFalse();
- setCredentialManagerEnabled(true);
- assertThat(AutofillFeatureFlags.shouldIgnoreCredentialViews()).isTrue();
- }
-
private static void setFillDialogHints(String value) {
setDeviceConfig(
AutofillFeatureFlags.DEVICE_CONFIG_AUTOFILL_DIALOG_HINTS,
value);
}
- private static void setCredentialManagerEnabled(boolean value) {
- setDeviceConfig(
- AutofillFeatureFlags.DEVICE_CONFIG_AUTOFILL_CREDENTIAL_MANAGER_ENABLED,
- String.valueOf(value));
- }
-
- private static void setIgnoreCredentialManagerViews(boolean value) {
- setDeviceConfig(
- AutofillFeatureFlags.DEVICE_CONFIG_AUTOFILL_CREDENTIAL_MANAGER_IGNORE_VIEWS,
- String.valueOf(value));
- }
-
private static void setDeviceConfig(String key, String value) {
DeviceConfig.setProperty(
DeviceConfig.NAMESPACE_AUTOFILL, key, value, /* makeDefault */ false);
diff --git a/core/tests/coretests/src/android/view/inputmethod/BaseInputConnectionTest.java b/core/tests/coretests/src/android/view/inputmethod/BaseInputConnectionTest.java
index b3886e8..f04f603 100644
--- a/core/tests/coretests/src/android/view/inputmethod/BaseInputConnectionTest.java
+++ b/core/tests/coretests/src/android/view/inputmethod/BaseInputConnectionTest.java
@@ -549,6 +549,14 @@
.isEqualTo(new SurroundingText("456", 0, 3, -1)))
.isTrue();
+ verifyContentEquals(mBaseInputConnection.getTextBeforeCursor(Integer.MAX_VALUE, 0), "123");
+ verifyContentEquals(mBaseInputConnection.getTextAfterCursor(Integer.MAX_VALUE, 0), "789");
+ assertThat(
+ mBaseInputConnection
+ .getSurroundingText(Integer.MAX_VALUE, Integer.MAX_VALUE, 0)
+ .isEqualTo(new SurroundingText("123456789", 3, 6, -1)))
+ .isTrue();
+
int cursorCapsMode =
TextUtils.getCapsMode(
"123456789",
@@ -618,6 +626,45 @@
}
@Test
+ public void testGetText_emptyText() {
+ // ""
+ prepareContent("", 0, 0, -1, -1);
+
+ verifyContentEquals(mBaseInputConnection.getTextBeforeCursor(1, 0), "");
+ verifyContentEquals(mBaseInputConnection.getTextAfterCursor(1, 0), "");
+ assertThat(mBaseInputConnection.getSelectedText(0)).isNull();
+
+ // This falls back to default implementation in {@code InputConnection}, which always return
+ // -1 for offset.
+ assertThat(
+ mBaseInputConnection
+ .getSurroundingText(1, 1, 0)
+ .isEqualTo(new SurroundingText("", 0, 0, -1)))
+ .isTrue();
+
+ verifyContentEquals(mBaseInputConnection.getTextBeforeCursor(0, 0), "");
+ verifyContentEquals(mBaseInputConnection.getTextAfterCursor(0, 0), "");
+ assertThat(mBaseInputConnection.getSelectedText(0)).isNull();
+ // This falls back to default implementation in {@code InputConnection}, which always return
+ // -1 for offset.
+ assertThat(
+ mBaseInputConnection
+ .getSurroundingText(0, 0, 0)
+ .isEqualTo(new SurroundingText("", 0, 0, -1)))
+ .isTrue();
+
+ verifyContentEquals(mBaseInputConnection.getTextBeforeCursor(Integer.MAX_VALUE, 0), "");
+ verifyContentEquals(mBaseInputConnection.getTextAfterCursor(Integer.MAX_VALUE, 0), "");
+ assertThat(mBaseInputConnection.getSelectedText(0)).isNull();
+ assertThat(
+ mBaseInputConnection
+ .getSurroundingText(Integer.MAX_VALUE, Integer.MAX_VALUE, 0)
+ .isEqualTo(new SurroundingText("", 0, 0, -1)))
+ .isTrue();
+ }
+
+
+ @Test
public void testReplaceText_toEditorWithoutSelectionAndComposing() {
// before replace: "|"
// after replace: "text1|"
diff --git a/core/tests/coretests/src/android/view/stylus/HandwritingInitiatorTest.java b/core/tests/coretests/src/android/view/stylus/HandwritingInitiatorTest.java
index c0125af..34eac35 100644
--- a/core/tests/coretests/src/android/view/stylus/HandwritingInitiatorTest.java
+++ b/core/tests/coretests/src/android/view/stylus/HandwritingInitiatorTest.java
@@ -17,6 +17,7 @@
package android.view.stylus;
import static android.view.MotionEvent.ACTION_DOWN;
+import static android.view.MotionEvent.ACTION_HOVER_MOVE;
import static android.view.MotionEvent.ACTION_MOVE;
import static android.view.MotionEvent.ACTION_UP;
import static android.view.stylus.HandwritingTestUtil.createView;
@@ -26,6 +27,7 @@
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyFloat;
import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.reset;
@@ -42,6 +44,7 @@
import android.view.HandwritingInitiator;
import android.view.InputDevice;
import android.view.MotionEvent;
+import android.view.PointerIcon;
import android.view.View;
import android.view.ViewConfiguration;
import android.view.ViewGroup;
@@ -115,6 +118,7 @@
HW_BOUNDS_OFFSETS_BOTTOM_PX);
mHandwritingInitiator.updateHandwritingAreasForView(mTestView1);
mHandwritingInitiator.updateHandwritingAreasForView(mTestView2);
+ doReturn(true).when(mHandwritingInitiator).tryAcceptStylusHandwritingDelegation(any());
}
@Test
@@ -486,6 +490,112 @@
}
@Test
+ public void onResolvePointerIcon_withinHWArea_showPointerIcon() {
+ MotionEvent hoverEvent = createStylusHoverEvent(sHwArea1.centerX(), sHwArea1.centerY());
+ PointerIcon icon = mHandwritingInitiator.onResolvePointerIcon(mContext, hoverEvent);
+ assertThat(icon.getType()).isEqualTo(PointerIcon.TYPE_HANDWRITING);
+ }
+
+ @Test
+ public void onResolvePointerIcon_withinExtendedHWArea_showPointerIcon() {
+ int x = sHwArea1.left - HW_BOUNDS_OFFSETS_LEFT_PX / 2;
+ int y = sHwArea1.top - HW_BOUNDS_OFFSETS_TOP_PX / 2;
+ MotionEvent hoverEvent = createStylusHoverEvent(x, y);
+
+ PointerIcon icon = mHandwritingInitiator.onResolvePointerIcon(mContext, hoverEvent);
+ assertThat(icon.getType()).isEqualTo(PointerIcon.TYPE_HANDWRITING);
+ }
+
+ @Test
+ public void onResolvePointerIcon_afterHandwriting_hidePointerIconForConnectedView() {
+ // simulate the case where sTestView1 is focused.
+ mHandwritingInitiator.onInputConnectionCreated(mTestView1);
+ injectStylusEvent(mHandwritingInitiator, sHwArea1.centerX(), sHwArea1.centerY(),
+ /* exceedsHWSlop */ true);
+ // Verify that handwriting started for sTestView1.
+ verify(mHandwritingInitiator, times(1)).startHandwriting(mTestView1);
+
+ MotionEvent hoverEvent1 = createStylusHoverEvent(sHwArea1.centerX(), sHwArea1.centerY());
+ PointerIcon icon1 = mHandwritingInitiator.onResolvePointerIcon(mContext, hoverEvent1);
+ // After handwriting is initiated for the connected view, hide the hover icon.
+ assertThat(icon1).isNull();
+
+ MotionEvent hoverEvent2 = createStylusHoverEvent(sHwArea2.centerX(), sHwArea2.centerY());
+ PointerIcon icon2 = mHandwritingInitiator.onResolvePointerIcon(mContext, hoverEvent2);
+ // Now stylus is hovering on another editor, show the hover icon.
+ assertThat(icon2.getType()).isEqualTo(PointerIcon.TYPE_HANDWRITING);
+
+ // After the hover icon is displayed again, it will show hover icon for the connected view
+ // again.
+ PointerIcon icon3 = mHandwritingInitiator.onResolvePointerIcon(mContext, hoverEvent1);
+ assertThat(icon3.getType()).isEqualTo(PointerIcon.TYPE_HANDWRITING);
+ }
+
+ @Test
+ public void onResolvePointerIcon_afterHandwriting_hidePointerIconForDelegatorView() {
+ // Set mTextView2 to be the delegate of mTestView1.
+ mTestView2.setIsHandwritingDelegate(true);
+
+ mTestView1.setHandwritingDelegatorCallback(
+ () -> mHandwritingInitiator.onInputConnectionCreated(mTestView2));
+
+ injectStylusEvent(mHandwritingInitiator, sHwArea1.centerX(), sHwArea1.centerY(),
+ /* exceedsHWSlop */ true);
+ // Prerequisite check, verify that handwriting started for delegateView.
+ verify(mHandwritingInitiator, times(1)).tryAcceptStylusHandwritingDelegation(mTestView2);
+
+ MotionEvent hoverEvent = createStylusHoverEvent(sHwArea2.centerX(), sHwArea2.centerY());
+ PointerIcon icon = mHandwritingInitiator.onResolvePointerIcon(mContext, hoverEvent);
+ // After handwriting is initiated for the connected view, hide the hover icon.
+ assertThat(icon).isNull();
+ }
+
+ @Test
+ public void onResolvePointerIcon_showHoverIconAfterTap() {
+ // Simulate the case where sTestView1 is focused.
+ mHandwritingInitiator.onInputConnectionCreated(mTestView1);
+ injectStylusEvent(mHandwritingInitiator, sHwArea1.centerX(), sHwArea1.centerY(),
+ /* exceedsHWSlop */ true);
+ // Verify that handwriting started for sTestView1.
+ verify(mHandwritingInitiator, times(1)).startHandwriting(mTestView1);
+
+ MotionEvent hoverEvent1 = createStylusHoverEvent(sHwArea1.centerX(), sHwArea1.centerY());
+ PointerIcon icon1 = mHandwritingInitiator.onResolvePointerIcon(mContext, hoverEvent1);
+ // After handwriting is initiated for the connected view, hide the hover icon.
+ assertThat(icon1).isNull();
+
+ // When exceedsHwSlop is false, it simulates a tap.
+ injectStylusEvent(mHandwritingInitiator, sHwArea1.centerX(), sHwArea1.centerY(),
+ /* exceedsHWSlop */ false);
+
+ PointerIcon icon2 = mHandwritingInitiator.onResolvePointerIcon(mContext, hoverEvent1);
+ assertThat(icon2.getType()).isEqualTo(PointerIcon.TYPE_HANDWRITING);
+ }
+
+ @Test
+ public void onResolvePointerIcon_showHoverIconAfterFocusChange() {
+ // Simulate the case where sTestView1 is focused.
+ mHandwritingInitiator.onInputConnectionCreated(mTestView1);
+ injectStylusEvent(mHandwritingInitiator, sHwArea1.centerX(), sHwArea1.centerY(),
+ /* exceedsHWSlop */ true);
+ // Verify that handwriting started for sTestView1.
+ verify(mHandwritingInitiator, times(1)).startHandwriting(mTestView1);
+
+ MotionEvent hoverEvent1 = createStylusHoverEvent(sHwArea1.centerX(), sHwArea1.centerY());
+ PointerIcon icon1 = mHandwritingInitiator.onResolvePointerIcon(mContext, hoverEvent1);
+ // After handwriting is initiated for the connected view, hide the hover icon.
+ assertThat(icon1).isNull();
+
+ // Simulate that focus is switched to mTestView2 first and then switched back.
+ mHandwritingInitiator.onInputConnectionCreated(mTestView2);
+ mHandwritingInitiator.onInputConnectionCreated(mTestView1);
+
+ PointerIcon icon2 = mHandwritingInitiator.onResolvePointerIcon(mContext, hoverEvent1);
+ // After the change of focus, hover icon shows again.
+ assertThat(icon2.getType()).isEqualTo(PointerIcon.TYPE_HANDWRITING);
+ }
+
+ @Test
public void autoHandwriting_whenDisabled_wontStartHW() {
View mockView = createView(sHwArea1, false /* autoHandwritingEnabled */,
true /* isStylusHandwritingAvailable */);
@@ -657,6 +767,35 @@
return canvas;
}
+ /**
+ * Inject {@link MotionEvent}s to the {@link HandwritingInitiator}.
+ * @param x the x coordinate of the first {@link MotionEvent}.
+ * @param y the y coordinate of the first {@link MotionEvent}.
+ * @param exceedsHWSlop whether the injected {@link MotionEvent} movements exceed the
+ * handwriting slop. If true, it simulates handwriting. Otherwise, it
+ * simulates a tap/click,
+ */
+ private void injectStylusEvent(HandwritingInitiator handwritingInitiator, int x, int y,
+ boolean exceedsHWSlop) {
+ MotionEvent event1 = createStylusEvent(ACTION_DOWN, x, y, 0);
+
+ if (exceedsHWSlop) {
+ x += mHandwritingSlop * 2;
+ } else {
+ x += mHandwritingSlop / 2;
+ }
+ MotionEvent event2 = createStylusEvent(ACTION_MOVE, x, y, 0);
+ MotionEvent event3 = createStylusEvent(ACTION_UP, x, y, 0);
+
+ handwritingInitiator.onTouchEvent(event1);
+ handwritingInitiator.onTouchEvent(event2);
+ handwritingInitiator.onTouchEvent(event3);
+ }
+
+ private MotionEvent createStylusHoverEvent(int x, int y) {
+ return createStylusEvent(ACTION_HOVER_MOVE, x, y, /* eventTime */ 0);
+ }
+
private MotionEvent createStylusEvent(int action, int x, int y, long eventTime) {
MotionEvent.PointerProperties[] properties = MotionEvent.PointerProperties.createArray(1);
properties[0].toolType = MotionEvent.TOOL_TYPE_STYLUS;
@@ -668,6 +807,6 @@
return MotionEvent.obtain(0 /* downTime */, eventTime /* eventTime */, action, 1,
properties, coords, 0 /* metaState */, 0 /* buttonState */, 1 /* xPrecision */,
1 /* yPrecision */, 0 /* deviceId */, 0 /* edgeFlags */,
- InputDevice.SOURCE_TOUCHSCREEN, 0 /* flags */);
+ InputDevice.SOURCE_STYLUS, 0 /* flags */);
}
}
diff --git a/core/tests/coretests/src/android/widget/RemoteViewsTest.java b/core/tests/coretests/src/android/widget/RemoteViewsTest.java
index 31c5a76..963014e 100644
--- a/core/tests/coretests/src/android/widget/RemoteViewsTest.java
+++ b/core/tests/coretests/src/android/widget/RemoteViewsTest.java
@@ -24,6 +24,10 @@
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
import android.app.ActivityOptions;
import android.app.PendingIntent;
@@ -33,6 +37,8 @@
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
+import android.graphics.drawable.Icon;
+import android.net.Uri;
import android.os.AsyncTask;
import android.os.Binder;
import android.os.Looper;
@@ -58,6 +64,7 @@
import java.util.Arrays;
import java.util.Map;
import java.util.concurrent.CountDownLatch;
+import java.util.function.Consumer;
/**
* Tests for RemoteViews.
@@ -703,4 +710,61 @@
return null;
}
}
+
+ @Test
+ public void visitUris() {
+ RemoteViews views = new RemoteViews(mPackage, R.layout.remote_views_test);
+
+ final Uri imageUri = Uri.parse("content://media/image");
+ final Icon icon1 = Icon.createWithContentUri("content://media/icon1");
+ final Icon icon2 = Icon.createWithContentUri("content://media/icon2");
+ final Icon icon3 = Icon.createWithContentUri("content://media/icon3");
+ final Icon icon4 = Icon.createWithContentUri("content://media/icon4");
+ views.setImageViewUri(R.id.image, imageUri);
+ views.setTextViewCompoundDrawables(R.id.text, icon1, icon2, icon3, icon4);
+
+ Consumer<Uri> visitor = (Consumer<Uri>) spy(Consumer.class);
+ views.visitUris(visitor);
+ verify(visitor, times(1)).accept(eq(imageUri));
+ verify(visitor, times(1)).accept(eq(icon1.getUri()));
+ verify(visitor, times(1)).accept(eq(icon2.getUri()));
+ verify(visitor, times(1)).accept(eq(icon3.getUri()));
+ verify(visitor, times(1)).accept(eq(icon4.getUri()));
+ }
+
+ @Test
+ public void visitUris_separateOrientation() {
+ final RemoteViews landscape = new RemoteViews(mPackage, R.layout.remote_views_test);
+ final Uri imageUriL = Uri.parse("content://landscape/image");
+ final Icon icon1L = Icon.createWithContentUri("content://landscape/icon1");
+ final Icon icon2L = Icon.createWithContentUri("content://landscape/icon2");
+ final Icon icon3L = Icon.createWithContentUri("content://landscape/icon3");
+ final Icon icon4L = Icon.createWithContentUri("content://landscape/icon4");
+ landscape.setImageViewUri(R.id.image, imageUriL);
+ landscape.setTextViewCompoundDrawables(R.id.text, icon1L, icon2L, icon3L, icon4L);
+
+ final RemoteViews portrait = new RemoteViews(mPackage, 33);
+ final Uri imageUriP = Uri.parse("content://portrait/image");
+ final Icon icon1P = Icon.createWithContentUri("content://portrait/icon1");
+ final Icon icon2P = Icon.createWithContentUri("content://portrait/icon2");
+ final Icon icon3P = Icon.createWithContentUri("content://portrait/icon3");
+ final Icon icon4P = Icon.createWithContentUri("content://portrait/icon4");
+ portrait.setImageViewUri(R.id.image, imageUriP);
+ portrait.setTextViewCompoundDrawables(R.id.text, icon1P, icon2P, icon3P, icon4P);
+
+ RemoteViews views = new RemoteViews(landscape, portrait);
+
+ Consumer<Uri> visitor = (Consumer<Uri>) spy(Consumer.class);
+ views.visitUris(visitor);
+ verify(visitor, times(1)).accept(eq(imageUriL));
+ verify(visitor, times(1)).accept(eq(icon1L.getUri()));
+ verify(visitor, times(1)).accept(eq(icon2L.getUri()));
+ verify(visitor, times(1)).accept(eq(icon3L.getUri()));
+ verify(visitor, times(1)).accept(eq(icon4L.getUri()));
+ verify(visitor, times(1)).accept(eq(imageUriP));
+ verify(visitor, times(1)).accept(eq(icon1P.getUri()));
+ verify(visitor, times(1)).accept(eq(icon2P.getUri()));
+ verify(visitor, times(1)).accept(eq(icon3P.getUri()));
+ verify(visitor, times(1)).accept(eq(icon4P.getUri()));
+ }
}
diff --git a/core/tests/coretests/src/com/android/internal/inputmethod/InputConnectionWrapperTest.java b/core/tests/coretests/src/com/android/internal/inputmethod/InputConnectionWrapperTest.java
new file mode 100644
index 0000000..a626294
--- /dev/null
+++ b/core/tests/coretests/src/com/android/internal/inputmethod/InputConnectionWrapperTest.java
@@ -0,0 +1,45 @@
+/*
+ * 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.inputmethod;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.platform.test.annotations.Presubmit;
+import android.view.inputmethod.InputConnection;
+import android.view.inputmethod.InputConnectionWrapper;
+
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.Arrays;
+import java.util.stream.Collectors;
+
+@SmallTest
+@Presubmit
+@RunWith(AndroidJUnit4.class)
+public class InputConnectionWrapperTest {
+ @Test
+ public void verifyAllMethodsWrapped() {
+ final var notWrapped = Arrays.stream(InputConnectionWrapper.class.getMethods()).filter(
+ method -> method.isDefault() && method.getDeclaringClass() == InputConnection.class
+ ).collect(Collectors.toList());
+ assertThat(notWrapped).isEmpty();
+ }
+}
diff --git a/core/tests/coretests/src/com/android/internal/util/LatencyTrackerTest.java b/core/tests/coretests/src/com/android/internal/util/LatencyTrackerTest.java
index 645324d..584ad20 100644
--- a/core/tests/coretests/src/com/android/internal/util/LatencyTrackerTest.java
+++ b/core/tests/coretests/src/com/android/internal/util/LatencyTrackerTest.java
@@ -28,12 +28,12 @@
import android.provider.DeviceConfig;
import androidx.test.ext.junit.runners.AndroidJUnit4;
-import androidx.test.filters.SmallTest;
import com.android.internal.util.LatencyTracker.ActionProperties;
import com.google.common.truth.Expect;
+import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
@@ -48,7 +48,6 @@
import java.util.Map;
import java.util.stream.Collectors;
-@SmallTest
@RunWith(AndroidJUnit4.class)
public class LatencyTrackerTest {
private static final String ENUM_NAME_PREFIX = "UIACTION_LATENCY_REPORTED__ACTION__";
@@ -65,6 +64,11 @@
mLatencyTracker = FakeLatencyTracker.create();
}
+ @After
+ public void tearDown() {
+ mLatencyTracker.stopListeningForLatencyTrackerConfigChanges();
+ }
+
@Test
public void testCujsMapToEnumsCorrectly() {
List<Field> actions = getAllActionFields();
diff --git a/core/tests/coretests/testdoubles/src/com/android/internal/util/FakeLatencyTracker.java b/core/tests/coretests/testdoubles/src/com/android/internal/util/FakeLatencyTracker.java
index 61e976b..76e69bf 100644
--- a/core/tests/coretests/testdoubles/src/com/android/internal/util/FakeLatencyTracker.java
+++ b/core/tests/coretests/testdoubles/src/com/android/internal/util/FakeLatencyTracker.java
@@ -25,8 +25,6 @@
import android.util.Log;
import android.util.SparseArray;
-import androidx.annotation.Nullable;
-
import com.android.internal.annotations.GuardedBy;
import com.google.common.collect.ImmutableMap;
@@ -51,15 +49,17 @@
private final List<String> mPerfettoTraceNamesTriggered;
private final AtomicReference<SparseArray<ActionProperties>> mLastPropertiesUpdate =
new AtomicReference<>();
- @Nullable
- @GuardedBy("mLock")
- private Callable<Boolean> mShouldClosePropertiesUpdatedCallable = null;
+ private final AtomicReference<Callable<Boolean>> mShouldClosePropertiesUpdatedCallable =
+ new AtomicReference<>();
private final ConditionVariable mDeviceConfigPropertiesUpdated = new ConditionVariable();
public static FakeLatencyTracker create() throws Exception {
Log.i(TAG, "create");
disableForAllActions();
+ Log.i(TAG, "done disabling all actions");
FakeLatencyTracker fakeLatencyTracker = new FakeLatencyTracker();
+ Log.i(TAG, "done creating tracker object");
+ fakeLatencyTracker.startListeningForLatencyTrackerConfigChanges();
// always return the fake in the disabled state and let the client control the desired state
fakeLatencyTracker.waitForGlobalEnabledState(false);
fakeLatencyTracker.waitForAllPropertiesEnableState(false);
@@ -131,27 +131,25 @@
@Override
public void onDeviceConfigPropertiesUpdated(SparseArray<ActionProperties> actionProperties) {
Log.d(TAG, "onDeviceConfigPropertiesUpdated: " + actionProperties);
+
mLastPropertiesUpdate.set(actionProperties);
- synchronized (mLock) {
- if (mShouldClosePropertiesUpdatedCallable != null) {
- try {
- boolean shouldClosePropertiesUpdated =
- mShouldClosePropertiesUpdatedCallable.call();
- Log.i(TAG, "shouldClosePropertiesUpdatedCallable callable result="
- + shouldClosePropertiesUpdated);
- if (shouldClosePropertiesUpdated) {
- Log.i(TAG, "shouldClosePropertiesUpdatedCallable=true, opening condition");
- mShouldClosePropertiesUpdatedCallable = null;
- mDeviceConfigPropertiesUpdated.open();
- }
- } catch (Exception e) {
- Log.e(TAG, "exception when calling callable", e);
- throw new RuntimeException(e);
+ Callable<Boolean> shouldClosePropertiesUpdated =
+ mShouldClosePropertiesUpdatedCallable.get();
+ if (shouldClosePropertiesUpdated != null) {
+ try {
+ boolean result = shouldClosePropertiesUpdated.call();
+ Log.i(TAG, "shouldClosePropertiesUpdatedCallable callable result=" + result);
+ if (result) {
+ mShouldClosePropertiesUpdatedCallable.set(null);
+ mDeviceConfigPropertiesUpdated.open();
}
- } else {
- Log.i(TAG, "no conditional callable set, opening condition");
- mDeviceConfigPropertiesUpdated.open();
+ } catch (Exception e) {
+ Log.e(TAG, "exception when calling callable", e);
+ throw new RuntimeException(e);
}
+ } else {
+ Log.i(TAG, "no conditional callable set, opening condition");
+ mDeviceConfigPropertiesUpdated.open();
}
}
@@ -175,107 +173,82 @@
public void waitForAllPropertiesEnableState(boolean enabledState) throws Exception {
Log.i(TAG, "waitForAllPropertiesEnableState: enabledState=" + enabledState);
- synchronized (mLock) {
- Log.i(TAG, "closing condition");
- mDeviceConfigPropertiesUpdated.close();
- // Update the callable to only close the properties updated condition when all the
- // desired properties have been updated. The DeviceConfig callbacks may happen multiple
- // times so testing the resulting updates is required.
- mShouldClosePropertiesUpdatedCallable = () -> {
- Log.i(TAG, "verifying if last properties update has all properties enable="
- + enabledState);
- SparseArray<ActionProperties> newProperties = mLastPropertiesUpdate.get();
- if (newProperties != null) {
- for (int i = 0; i < newProperties.size(); i++) {
- if (newProperties.get(i).isEnabled() != enabledState) {
- return false;
- }
+ // Update the callable to only close the properties updated condition when all the
+ // desired properties have been updated. The DeviceConfig callbacks may happen multiple
+ // times so testing the resulting updates is required.
+ waitForPropertiesCondition(() -> {
+ Log.i(TAG, "verifying if last properties update has all properties enable="
+ + enabledState);
+ SparseArray<ActionProperties> newProperties = mLastPropertiesUpdate.get();
+ if (newProperties != null) {
+ for (int i = 0; i < newProperties.size(); i++) {
+ if (newProperties.get(i).isEnabled() != enabledState) {
+ return false;
}
}
- return true;
- };
- if (mShouldClosePropertiesUpdatedCallable.call()) {
- return;
}
- }
- Log.i(TAG, "waiting for condition");
- mDeviceConfigPropertiesUpdated.block();
+ return true;
+ });
}
public void waitForMatchingActionProperties(ActionProperties actionProperties)
throws Exception {
Log.i(TAG, "waitForMatchingActionProperties: actionProperties=" + actionProperties);
- synchronized (mLock) {
- Log.i(TAG, "closing condition");
- mDeviceConfigPropertiesUpdated.close();
- // Update the callable to only close the properties updated condition when all the
- // desired properties have been updated. The DeviceConfig callbacks may happen multiple
- // times so testing the resulting updates is required.
- mShouldClosePropertiesUpdatedCallable = () -> {
- Log.i(TAG, "verifying if last properties update contains matching property ="
- + actionProperties);
- SparseArray<ActionProperties> newProperties = mLastPropertiesUpdate.get();
- if (newProperties != null) {
- if (newProperties.size() > 0) {
- return newProperties.get(actionProperties.getAction()).equals(
- actionProperties);
- }
+ // Update the callable to only close the properties updated condition when all the
+ // desired properties have been updated. The DeviceConfig callbacks may happen multiple
+ // times so testing the resulting updates is required.
+ waitForPropertiesCondition(() -> {
+ Log.i(TAG, "verifying if last properties update contains matching property ="
+ + actionProperties);
+ SparseArray<ActionProperties> newProperties = mLastPropertiesUpdate.get();
+ if (newProperties != null) {
+ if (newProperties.size() > 0) {
+ return newProperties.get(actionProperties.getAction()).equals(
+ actionProperties);
}
- return false;
- };
- if (mShouldClosePropertiesUpdatedCallable.call()) {
- return;
}
- }
- Log.i(TAG, "waiting for condition");
- mDeviceConfigPropertiesUpdated.block();
+ return false;
+ });
}
public void waitForActionEnabledState(int action, boolean enabledState) throws Exception {
Log.i(TAG, "waitForActionEnabledState:"
+ " action=" + action + ", enabledState=" + enabledState);
- synchronized (mLock) {
- Log.i(TAG, "closing condition");
- mDeviceConfigPropertiesUpdated.close();
- // Update the callable to only close the properties updated condition when all the
- // desired properties have been updated. The DeviceConfig callbacks may happen multiple
- // times so testing the resulting updates is required.
- mShouldClosePropertiesUpdatedCallable = () -> {
- Log.i(TAG, "verifying if last properties update contains action=" + action
- + ", enabledState=" + enabledState);
- SparseArray<ActionProperties> newProperties = mLastPropertiesUpdate.get();
- if (newProperties != null) {
- if (newProperties.size() > 0) {
- return newProperties.get(action).isEnabled() == enabledState;
- }
+ // Update the callable to only close the properties updated condition when all the
+ // desired properties have been updated. The DeviceConfig callbacks may happen multiple
+ // times so testing the resulting updates is required.
+ waitForPropertiesCondition(() -> {
+ Log.i(TAG, "verifying if last properties update contains action=" + action
+ + ", enabledState=" + enabledState);
+ SparseArray<ActionProperties> newProperties = mLastPropertiesUpdate.get();
+ if (newProperties != null) {
+ if (newProperties.size() > 0) {
+ return newProperties.get(action).isEnabled() == enabledState;
}
- return false;
- };
- if (mShouldClosePropertiesUpdatedCallable.call()) {
- return;
}
- }
- Log.i(TAG, "waiting for condition");
- mDeviceConfigPropertiesUpdated.block();
+ return false;
+ });
}
public void waitForGlobalEnabledState(boolean enabledState) throws Exception {
Log.i(TAG, "waitForGlobalEnabledState: enabledState=" + enabledState);
- synchronized (mLock) {
- Log.i(TAG, "closing condition");
- mDeviceConfigPropertiesUpdated.close();
- // Update the callable to only close the properties updated condition when all the
- // desired properties have been updated. The DeviceConfig callbacks may happen multiple
- // times so testing the resulting updates is required.
- mShouldClosePropertiesUpdatedCallable = () -> {
- //noinspection deprecation
- return isEnabled() == enabledState;
- };
- if (mShouldClosePropertiesUpdatedCallable.call()) {
- return;
- }
+ // Update the callable to only close the properties updated condition when all the
+ // desired properties have been updated. The DeviceConfig callbacks may happen multiple
+ // times so testing the resulting updates is required.
+ waitForPropertiesCondition(() -> {
+ //noinspection deprecation
+ return isEnabled() == enabledState;
+ });
+ }
+
+ public void waitForPropertiesCondition(Callable<Boolean> shouldClosePropertiesUpdatedCallable)
+ throws Exception {
+ mShouldClosePropertiesUpdatedCallable.set(shouldClosePropertiesUpdatedCallable);
+ mDeviceConfigPropertiesUpdated.close();
+ if (!shouldClosePropertiesUpdatedCallable.call()) {
+ Log.i(TAG, "waiting for mDeviceConfigPropertiesUpdated condition");
+ mDeviceConfigPropertiesUpdated.block();
}
- Log.i(TAG, "waiting for condition");
- mDeviceConfigPropertiesUpdated.block();
+ Log.i(TAG, "waitForPropertiesCondition: returning");
}
}
diff --git a/graphics/java/android/graphics/ImageDecoder.java b/graphics/java/android/graphics/ImageDecoder.java
index dd4b58e..b2da233 100644
--- a/graphics/java/android/graphics/ImageDecoder.java
+++ b/graphics/java/android/graphics/ImageDecoder.java
@@ -627,11 +627,19 @@
*/
public static class ImageInfo {
private final Size mSize;
- private ImageDecoder mDecoder;
+ private final boolean mIsAnimated;
+ private final String mMimeType;
+ private final ColorSpace mColorSpace;
- private ImageInfo(@NonNull ImageDecoder decoder) {
- mSize = new Size(decoder.mWidth, decoder.mHeight);
- mDecoder = decoder;
+ private ImageInfo(
+ @NonNull Size size,
+ boolean isAnimated,
+ @NonNull String mimeType,
+ @Nullable ColorSpace colorSpace) {
+ mSize = size;
+ mIsAnimated = isAnimated;
+ mMimeType = mimeType;
+ mColorSpace = colorSpace;
}
/**
@@ -647,7 +655,7 @@
*/
@NonNull
public String getMimeType() {
- return mDecoder.getMimeType();
+ return mMimeType;
}
/**
@@ -657,7 +665,7 @@
* return an {@link AnimatedImageDrawable}.</p>
*/
public boolean isAnimated() {
- return mDecoder.mAnimated;
+ return mIsAnimated;
}
/**
@@ -669,7 +677,7 @@
*/
@Nullable
public ColorSpace getColorSpace() {
- return mDecoder.getColorSpace();
+ return mColorSpace;
}
};
@@ -1798,12 +1806,39 @@
private void callHeaderDecoded(@Nullable OnHeaderDecodedListener listener,
@NonNull Source src) {
if (listener != null) {
- ImageInfo info = new ImageInfo(this);
- try {
- listener.onHeaderDecoded(this, info, src);
- } finally {
- info.mDecoder = null;
- }
+ ImageInfo info =
+ new ImageInfo(
+ new Size(mWidth, mHeight), mAnimated, getMimeType(), getColorSpace());
+ listener.onHeaderDecoded(this, info, src);
+ }
+ }
+
+ /**
+ * Return {@link ImageInfo} from a {@code Source}.
+ *
+ * <p>Returns the same {@link ImageInfo} object that a usual decoding process would return as
+ * part of {@link OnHeaderDecodedListener}.
+ *
+ * @param src representing the encoded image.
+ * @return ImageInfo describing the image.
+ * @throws IOException if {@code src} is not found, is an unsupported format, or cannot be
+ * decoded for any reason.
+ * @hide
+ */
+ @WorkerThread
+ @NonNull
+ public static ImageInfo decodeHeader(@NonNull Source src) throws IOException {
+ Trace.traceBegin(Trace.TRACE_TAG_RESOURCES, "ImageDecoder#decodeHeader");
+ try (ImageDecoder decoder = src.createImageDecoder(true /*preferAnimation*/)) {
+ // We don't want to leak decoder so resolve all properties immediately.
+ return new ImageInfo(
+ new Size(decoder.mWidth, decoder.mHeight),
+ decoder.mAnimated,
+ decoder.getMimeType(),
+ decoder.getColorSpace());
+ } finally {
+ // Close the ImageDecoder#decodeHeader trace.
+ Trace.traceEnd(Trace.TRACE_TAG_RESOURCES);
}
}
diff --git a/graphics/java/android/graphics/RuntimeShader.java b/graphics/java/android/graphics/RuntimeShader.java
index 9c36fc3..3e64579 100644
--- a/graphics/java/android/graphics/RuntimeShader.java
+++ b/graphics/java/android/graphics/RuntimeShader.java
@@ -19,6 +19,7 @@
import android.annotation.ColorInt;
import android.annotation.ColorLong;
import android.annotation.NonNull;
+import android.util.ArrayMap;
import android.view.Window;
import libcore.util.NativeAllocationRegistry;
@@ -256,6 +257,12 @@
private long mNativeInstanceRuntimeShaderBuilder;
/**
+ * For tracking GC usage. Keep a java-side reference for reachable objects to
+ * enable better heap tracking & tooling support
+ */
+ private ArrayMap<String, Shader> mShaderUniforms = new ArrayMap<>();
+
+ /**
* Creates a new RuntimeShader.
*
* @param shader The text of AGSL shader program to run.
@@ -490,6 +497,7 @@
if (shader == null) {
throw new NullPointerException("The shader parameter must not be null");
}
+ mShaderUniforms.put(shaderName, shader);
nativeUpdateShader(
mNativeInstanceRuntimeShaderBuilder, shaderName, shader.getNativeInstance());
discardNativeInstance();
@@ -511,6 +519,7 @@
throw new NullPointerException("The shader parameter must not be null");
}
+ mShaderUniforms.put(shaderName, shader);
nativeUpdateShader(mNativeInstanceRuntimeShaderBuilder, shaderName,
shader.getNativeInstanceWithDirectSampling());
discardNativeInstance();
diff --git a/libs/WindowManager/Jetpack/src/androidx/window/extensions/area/WindowAreaComponentImpl.java b/libs/WindowManager/Jetpack/src/androidx/window/extensions/area/WindowAreaComponentImpl.java
index abf2301..b374ae3 100644
--- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/area/WindowAreaComponentImpl.java
+++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/area/WindowAreaComponentImpl.java
@@ -324,12 +324,12 @@
synchronized (mLock) {
if (stateStatus == SESSION_STATE_INACTIVE) {
// If the last reported session status was VISIBLE
- // then the INVISIBLE state should be dispatched before INACTIVE
+ // then the ACTIVE state should be dispatched before INACTIVE
// due to not having a good mechanism to know when
// the content is no longer visible before it's fully removed
if (getLastReportedRearDisplayPresentationStatus()
== SESSION_STATE_CONTENT_VISIBLE) {
- consumer.accept(SESSION_STATE_CONTENT_INVISIBLE);
+ consumer.accept(SESSION_STATE_ACTIVE);
}
mRearDisplayPresentationController = null;
}
diff --git a/libs/WindowManager/Shell/proto/wm_shell_transition_trace.proto b/libs/WindowManager/Shell/proto/wm_shell_transition_trace.proto
index 6e01101..c82a70c 100644
--- a/libs/WindowManager/Shell/proto/wm_shell_transition_trace.proto
+++ b/libs/WindowManager/Shell/proto/wm_shell_transition_trace.proto
@@ -37,6 +37,9 @@
required fixed64 magic_number = 1;
repeated Transition transitions = 2;
repeated HandlerMapping handlerMappings = 3;
+ /* offset between real-time clock and elapsed time clock in nanoseconds.
+ Calculated as: 1000000 * System.currentTimeMillis() - SystemClock.elapsedRealtimeNanos() */
+ optional fixed64 real_to_elapsed_time_offset_nanos = 4;
}
message Transition {
diff --git a/libs/WindowManager/Shell/res/drawable-night/reachability_education_ic_left_hand.xml b/libs/WindowManager/Shell/res/drawable-night/reachability_education_ic_left_hand.xml
new file mode 100644
index 0000000..fbcf6d7
--- /dev/null
+++ b/libs/WindowManager/Shell/res/drawable-night/reachability_education_ic_left_hand.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ 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.
+ -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="20dp"
+ android:height="20dp"
+ android:viewportWidth="960"
+ android:viewportHeight="960">
+ <group android:scaleX="-1" android:translateX="960">
+ <path
+ android:fillColor="?android:attr/textColorSecondary"
+ android:pathData="M432.46,48Q522,48 585,110.92Q648,173.83 648,264Q648,314 627.5,358.5Q607,403 566,432L528,432L528,370Q551,349 563.5,321.5Q576,294 576,263.78Q576,204.39 534,162.2Q492,120 432,120Q372,120 330,162Q288,204 288,264.31Q288,295 300,323Q312,351 336,370L336,456Q280,430 248,378Q216,326 216,264Q216,173.83 278.97,110.92Q341.94,48 432.46,48ZM414,864Q399.53,864 386.77,859Q374,854 363,843L144,624L211,557Q225,543 243,538Q261,533 279,538L336,552L336,288Q337,248 364.57,220Q392.14,192 432.07,192Q472,192 500,219.84Q528,247.68 528,288L528,432L576,432Q576,432 576,432Q576,432 576,432L715,497Q744,511 758,538Q772,565 767,596L737,802Q732,828 711.76,846Q691.52,864 666,864L414,864ZM414,792L666,792L698,569Q698,569 698,569Q698,569 698,569L559,504L456,504L456,288Q456,278 449,271Q442,264 432,264Q422,264 415,271Q408,278 408,288L408,644L262,608L246,624L414,792ZM666,792L414,792L414,792L414,792L414,792L414,792Q414,792 422,792Q430,792 439.5,792Q449,792 454.43,792Q459.86,792 459.86,792L459.86,792L529,792L666,792Q666,792 666,792Q666,792 666,792L666,792Z"/>
+ </group>
+</vector>
\ No newline at end of file
diff --git a/libs/WindowManager/Shell/res/drawable-night/reachability_education_ic_right_hand.xml b/libs/WindowManager/Shell/res/drawable-night/reachability_education_ic_right_hand.xml
new file mode 100644
index 0000000..d36df4b
--- /dev/null
+++ b/libs/WindowManager/Shell/res/drawable-night/reachability_education_ic_right_hand.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ 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.
+ -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="20dp"
+ android:height="20dp"
+ android:viewportWidth="960"
+ android:viewportHeight="960">
+ <path
+ android:fillColor="?android:attr/textColorSecondary"
+ android:pathData="M432.46,48Q522,48 585,110.92Q648,173.83 648,264Q648,314 627.5,358.5Q607,403 566,432L528,432L528,370Q551,349 563.5,321.5Q576,294 576,263.78Q576,204.39 534,162.2Q492,120 432,120Q372,120 330,162Q288,204 288,264.31Q288,295 300,323Q312,351 336,370L336,456Q280,430 248,378Q216,326 216,264Q216,173.83 278.97,110.92Q341.94,48 432.46,48ZM414,864Q399.53,864 386.77,859Q374,854 363,843L144,624L211,557Q225,543 243,538Q261,533 279,538L336,552L336,288Q337,248 364.57,220Q392.14,192 432.07,192Q472,192 500,219.84Q528,247.68 528,288L528,432L576,432Q576,432 576,432Q576,432 576,432L715,497Q744,511 758,538Q772,565 767,596L737,802Q732,828 711.76,846Q691.52,864 666,864L414,864ZM414,792L666,792L698,569Q698,569 698,569Q698,569 698,569L559,504L456,504L456,288Q456,278 449,271Q442,264 432,264Q422,264 415,271Q408,278 408,288L408,644L262,608L246,624L414,792ZM666,792L414,792L414,792L414,792L414,792L414,792Q414,792 422,792Q430,792 439.5,792Q449,792 454.43,792Q459.86,792 459.86,792L459.86,792L529,792L666,792Q666,792 666,792Q666,792 666,792L666,792Z"/>
+</vector>
\ No newline at end of file
diff --git a/libs/WindowManager/Shell/res/drawable/reachability_education_ic_left_hand.xml b/libs/WindowManager/Shell/res/drawable/reachability_education_ic_left_hand.xml
index 029d838..05d243d 100644
--- a/libs/WindowManager/Shell/res/drawable/reachability_education_ic_left_hand.xml
+++ b/libs/WindowManager/Shell/res/drawable/reachability_education_ic_left_hand.xml
@@ -18,11 +18,10 @@
android:width="20dp"
android:height="20dp"
android:viewportWidth="960"
- android:viewportHeight="960"
- android:tint="?attr/colorControlNormal">
+ android:viewportHeight="960">
<group android:scaleX="-1" android:translateX="960">
<path
- android:fillColor="?android:attr/textColorSecondary"
+ android:fillColor="?android:attr/textColorSecondaryInverse"
android:pathData="M432.46,48Q522,48 585,110.92Q648,173.83 648,264Q648,314 627.5,358.5Q607,403 566,432L528,432L528,370Q551,349 563.5,321.5Q576,294 576,263.78Q576,204.39 534,162.2Q492,120 432,120Q372,120 330,162Q288,204 288,264.31Q288,295 300,323Q312,351 336,370L336,456Q280,430 248,378Q216,326 216,264Q216,173.83 278.97,110.92Q341.94,48 432.46,48ZM414,864Q399.53,864 386.77,859Q374,854 363,843L144,624L211,557Q225,543 243,538Q261,533 279,538L336,552L336,288Q337,248 364.57,220Q392.14,192 432.07,192Q472,192 500,219.84Q528,247.68 528,288L528,432L576,432Q576,432 576,432Q576,432 576,432L715,497Q744,511 758,538Q772,565 767,596L737,802Q732,828 711.76,846Q691.52,864 666,864L414,864ZM414,792L666,792L698,569Q698,569 698,569Q698,569 698,569L559,504L456,504L456,288Q456,278 449,271Q442,264 432,264Q422,264 415,271Q408,278 408,288L408,644L262,608L246,624L414,792ZM666,792L414,792L414,792L414,792L414,792L414,792Q414,792 422,792Q430,792 439.5,792Q449,792 454.43,792Q459.86,792 459.86,792L459.86,792L529,792L666,792Q666,792 666,792Q666,792 666,792L666,792Z"/>
</group>
</vector>
\ No newline at end of file
diff --git a/libs/WindowManager/Shell/res/drawable/reachability_education_ic_right_hand.xml b/libs/WindowManager/Shell/res/drawable/reachability_education_ic_right_hand.xml
index 592f899..7bf243f 100644
--- a/libs/WindowManager/Shell/res/drawable/reachability_education_ic_right_hand.xml
+++ b/libs/WindowManager/Shell/res/drawable/reachability_education_ic_right_hand.xml
@@ -18,9 +18,8 @@
android:width="20dp"
android:height="20dp"
android:viewportWidth="960"
- android:viewportHeight="960"
- android:tint="?attr/colorControlNormal">
+ android:viewportHeight="960">
<path
- android:fillColor="?android:attr/textColorSecondary"
+ android:fillColor="?android:attr/textColorSecondaryInverse"
android:pathData="M432.46,48Q522,48 585,110.92Q648,173.83 648,264Q648,314 627.5,358.5Q607,403 566,432L528,432L528,370Q551,349 563.5,321.5Q576,294 576,263.78Q576,204.39 534,162.2Q492,120 432,120Q372,120 330,162Q288,204 288,264.31Q288,295 300,323Q312,351 336,370L336,456Q280,430 248,378Q216,326 216,264Q216,173.83 278.97,110.92Q341.94,48 432.46,48ZM414,864Q399.53,864 386.77,859Q374,854 363,843L144,624L211,557Q225,543 243,538Q261,533 279,538L336,552L336,288Q337,248 364.57,220Q392.14,192 432.07,192Q472,192 500,219.84Q528,247.68 528,288L528,432L576,432Q576,432 576,432Q576,432 576,432L715,497Q744,511 758,538Q772,565 767,596L737,802Q732,828 711.76,846Q691.52,864 666,864L414,864ZM414,792L666,792L698,569Q698,569 698,569Q698,569 698,569L559,504L456,504L456,288Q456,278 449,271Q442,264 432,264Q422,264 415,271Q408,278 408,288L408,644L262,608L246,624L414,792ZM666,792L414,792L414,792L414,792L414,792L414,792Q414,792 422,792Q430,792 439.5,792Q449,792 454.43,792Q459.86,792 459.86,792L459.86,792L529,792L666,792Q666,792 666,792Q666,792 666,792L666,792Z"/>
</vector>
\ No newline at end of file
diff --git a/libs/WindowManager/Shell/res/values-night/styles.xml b/libs/WindowManager/Shell/res/values-night/styles.xml
new file mode 100644
index 0000000..758c99d
--- /dev/null
+++ b/libs/WindowManager/Shell/res/values-night/styles.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android">
+
+ <style name="ReachabilityEduHandLayout">
+ <item name="android:focusable">false</item>
+ <item name="android:focusableInTouchMode">false</item>
+ <item name="android:background">@android:color/transparent</item>
+ <item name="android:contentDescription">@string/restart_button_description</item>
+ <item name="android:visibility">invisible</item>
+ <item name="android:lineSpacingExtra">-1sp</item>
+ <item name="android:textSize">12sp</item>
+ <item name="android:textAlignment">center</item>
+ <item name="android:textColor">?android:attr/textColorPrimary</item>
+ <item name="android:textAppearance">
+ @*android:style/TextAppearance.DeviceDefault.Body2
+ </item>
+ </style>
+
+</resources>
\ No newline at end of file
diff --git a/libs/WindowManager/Shell/res/values/colors.xml b/libs/WindowManager/Shell/res/values/colors.xml
index 54a8f33..3386148 100644
--- a/libs/WindowManager/Shell/res/values/colors.xml
+++ b/libs/WindowManager/Shell/res/values/colors.xml
@@ -67,4 +67,6 @@
<color name="desktop_mode_caption_menu_text_color">#191C1D</color>
<color name="desktop_mode_caption_menu_buttons_color_inactive">#191C1D</color>
<color name="desktop_mode_caption_menu_buttons_color_active">#00677E</color>
+ <color name="desktop_mode_resize_veil_light">#EFF1F2</color>
+ <color name="desktop_mode_resize_veil_dark">#1C1C17</color>
</resources>
diff --git a/libs/WindowManager/Shell/res/values/styles.xml b/libs/WindowManager/Shell/res/values/styles.xml
index ee80c472..2b38888 100644
--- a/libs/WindowManager/Shell/res/values/styles.xml
+++ b/libs/WindowManager/Shell/res/values/styles.xml
@@ -160,7 +160,7 @@
<item name="android:lineSpacingExtra">-1sp</item>
<item name="android:textSize">12sp</item>
<item name="android:textAlignment">center</item>
- <item name="android:textColor">?android:attr/textColorSecondary</item>
+ <item name="android:textColor">?android:attr/textColorPrimaryInverse</item>
<item name="android:textAppearance">
@*android:style/TextAppearance.DeviceDefault.Body2
</item>
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/activityembedding/ActivityEmbeddingAnimationSpec.java b/libs/WindowManager/Shell/src/com/android/wm/shell/activityembedding/ActivityEmbeddingAnimationSpec.java
index 19eff0e..1793a3d 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/activityembedding/ActivityEmbeddingAnimationSpec.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/activityembedding/ActivityEmbeddingAnimationSpec.java
@@ -255,7 +255,7 @@
private boolean shouldShowBackdrop(@NonNull TransitionInfo info,
@NonNull TransitionInfo.Change change) {
final Animation a = loadAttributeAnimation(info, change, WALLPAPER_TRANSITION_NONE,
- mTransitionAnimation);
+ mTransitionAnimation, false);
return a != null && a.getShowBackdrop();
}
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/Bubble.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/Bubble.java
index 24fd86b..102f2cb 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/Bubble.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/Bubble.java
@@ -300,7 +300,9 @@
getShortcutId(),
getIcon(),
getUser().getIdentifier(),
- getPackageName());
+ getPackageName(),
+ getTitle(),
+ isImportantConversation());
}
@Override
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleExpandedView.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleExpandedView.java
index 6c482c8..adc0c9c 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleExpandedView.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleExpandedView.java
@@ -27,6 +27,7 @@
import static com.android.wm.shell.bubbles.BubbleDebugConfig.TAG_BUBBLES;
import static com.android.wm.shell.bubbles.BubbleDebugConfig.TAG_WITH_CLASS_NAME;
import static com.android.wm.shell.bubbles.BubblePositioner.MAX_HEIGHT;
+import static com.android.wm.shell.transition.Transitions.ENABLE_SHELL_TRANSITIONS;
import android.annotation.NonNull;
import android.annotation.SuppressLint;
@@ -214,9 +215,6 @@
ActivityOptions options = ActivityOptions.makeCustomAnimation(getContext(),
0 /* enterResId */, 0 /* exitResId */);
- Rect launchBounds = new Rect();
- mTaskView.getBoundsOnScreen(launchBounds);
-
// TODO: I notice inconsistencies in lifecycle
// Post to keep the lifecycle normal
post(() -> {
@@ -225,6 +223,9 @@
+ getBubbleKey());
}
try {
+ Rect launchBounds = new Rect();
+ mTaskView.getBoundsOnScreen(launchBounds);
+
options.setTaskAlwaysOnTop(true);
options.setLaunchedFromBubble(true);
options.setPendingIntentBackgroundActivityStartMode(
@@ -478,7 +479,7 @@
void applyThemeAttrs() {
final TypedArray ta = mContext.obtainStyledAttributes(new int[]{
android.R.attr.dialogCornerRadius,
- android.R.attr.colorBackgroundFloating});
+ com.android.internal.R.attr.materialColorSurfaceBright});
boolean supportsRoundedCorners = ScreenDecorationsUtils.supportsRoundedCornersOnWindows(
mContext.getResources());
mCornerRadius = supportsRoundedCorners ? ta.getDimensionPixelSize(0, 0) : 0;
@@ -1057,13 +1058,21 @@
Log.d(TAG, "cleanUpExpandedState: bubble=" + getBubbleKey() + " task=" + mTaskId);
}
if (getTaskId() != INVALID_TASK_ID) {
- try {
- ActivityTaskManager.getService().removeTask(getTaskId());
- } catch (RemoteException e) {
- Log.w(TAG, e.getMessage());
+ // Ensure the task is removed from WM
+ if (ENABLE_SHELL_TRANSITIONS) {
+ if (mTaskView != null) {
+ mTaskView.removeTask();
+ }
+ } else {
+ try {
+ ActivityTaskManager.getService().removeTask(getTaskId());
+ } catch (RemoteException e) {
+ Log.w(TAG, e.getMessage());
+ }
}
}
if (mTaskView != null) {
+ // Release the surface & other task view related things
mTaskView.release();
removeView(mTaskView);
mTaskView = null;
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/common/bubbles/BubbleInfo.java b/libs/WindowManager/Shell/src/com/android/wm/shell/common/bubbles/BubbleInfo.java
index d27d05b..21355a3 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/common/bubbles/BubbleInfo.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/common/bubbles/BubbleInfo.java
@@ -30,9 +30,6 @@
*/
public class BubbleInfo implements Parcelable {
- // TODO(b/269672147): needs a title string for a11y & that comes from notification
- // TODO(b/269671451): needs whether the bubble is an 'important person' or not
-
private String mKey; // Same key as the Notification
private int mFlags; // Flags from BubbleMetadata
@Nullable
@@ -46,24 +43,32 @@
*/
@Nullable
private Icon mIcon;
+ @Nullable
+ private String mTitle;
+ private boolean mIsImportantConversation;
public BubbleInfo(String key, int flags, @Nullable String shortcutId, @Nullable Icon icon,
- int userId, String packageName) {
+ int userId, String packageName, @Nullable String title,
+ boolean isImportantConversation) {
mKey = key;
mFlags = flags;
mShortcutId = shortcutId;
mIcon = icon;
mUserId = userId;
mPackageName = packageName;
+ mTitle = title;
+ mIsImportantConversation = isImportantConversation;
}
- public BubbleInfo(Parcel source) {
+ private BubbleInfo(Parcel source) {
mKey = source.readString();
mFlags = source.readInt();
mShortcutId = source.readString();
mIcon = source.readTypedObject(Icon.CREATOR);
mUserId = source.readInt();
mPackageName = source.readString();
+ mTitle = source.readString();
+ mIsImportantConversation = source.readBoolean();
}
public String getKey() {
@@ -92,6 +97,15 @@
return mPackageName;
}
+ @Nullable
+ public String getTitle() {
+ return mTitle;
+ }
+
+ public boolean isImportantConversation() {
+ return mIsImportantConversation;
+ }
+
/**
* Whether this bubble is currently being hidden from the stack.
*/
@@ -141,11 +155,13 @@
parcel.writeTypedObject(mIcon, flags);
parcel.writeInt(mUserId);
parcel.writeString(mPackageName);
+ parcel.writeString(mTitle);
+ parcel.writeBoolean(mIsImportantConversation);
}
@NonNull
public static final Creator<BubbleInfo> CREATOR =
- new Creator<BubbleInfo>() {
+ new Creator<>() {
public BubbleInfo createFromParcel(Parcel source) {
return new BubbleInfo(source);
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java b/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java
index e7dede7..2832c55 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java
@@ -412,7 +412,10 @@
/** Releases and re-inflates {@link DividerView} on the root surface. */
public void update(SurfaceControl.Transaction t) {
- if (!mInitialized) return;
+ if (!mInitialized) {
+ init();
+ return;
+ }
mSplitWindowManager.release(t);
mImePositionProcessor.reset();
mSplitWindowManager.init(this, mInsetsState);
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 838e37a..2bbd870 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
@@ -47,6 +47,8 @@
import com.android.wm.shell.sysui.ShellInit;
import com.android.wm.shell.transition.Transitions;
+import dagger.Lazy;
+
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.HashSet;
@@ -55,8 +57,6 @@
import java.util.function.Consumer;
import java.util.function.Predicate;
-import dagger.Lazy;
-
/**
* Controller to show/update compat UI components on Tasks based on whether the foreground
* activities are in compatibility mode.
@@ -284,13 +284,18 @@
ShellTaskOrganizer.TaskListener taskListener) {
CompatUIWindowManager layout = mActiveCompatLayouts.get(taskInfo.taskId);
if (layout != null) {
- // UI already exists, update the UI layout.
- if (!layout.updateCompatInfo(taskInfo, taskListener,
- showOnDisplay(layout.getDisplayId()))) {
- // The layout is no longer eligible to be shown, remove from active layouts.
+ if (layout.needsToBeRecreated(taskInfo, taskListener)) {
mActiveCompatLayouts.remove(taskInfo.taskId);
+ layout.release();
+ } else {
+ // UI already exists, update the UI layout.
+ if (!layout.updateCompatInfo(taskInfo, taskListener,
+ showOnDisplay(layout.getDisplayId()))) {
+ // The layout is no longer eligible to be shown, remove from active layouts.
+ mActiveCompatLayouts.remove(taskInfo.taskId);
+ }
+ return;
}
- return;
}
// Create a new UI layout.
@@ -433,13 +438,18 @@
private void createOrUpdateReachabilityEduLayout(TaskInfo taskInfo,
ShellTaskOrganizer.TaskListener taskListener) {
if (mActiveReachabilityEduLayout != null) {
- // UI already exists, update the UI layout.
- if (!mActiveReachabilityEduLayout.updateCompatInfo(taskInfo, taskListener,
- showOnDisplay(mActiveReachabilityEduLayout.getDisplayId()))) {
- // The layout is no longer eligible to be shown, remove from active layouts.
+ if (mActiveReachabilityEduLayout.needsToBeRecreated(taskInfo, taskListener)) {
+ mActiveReachabilityEduLayout.release();
mActiveReachabilityEduLayout = null;
+ } else {
+ // UI already exists, update the UI layout.
+ if (!mActiveReachabilityEduLayout.updateCompatInfo(taskInfo, taskListener,
+ showOnDisplay(mActiveReachabilityEduLayout.getDisplayId()))) {
+ // The layout is no longer eligible to be shown, remove from active layouts.
+ mActiveReachabilityEduLayout = null;
+ }
+ return;
}
- return;
}
// Create a new UI layout.
final Context context = getOrCreateDisplayContext(taskInfo.displayId);
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUILayout.java b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUILayout.java
index f65c26a..d44b4d8 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUILayout.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUILayout.java
@@ -21,7 +21,6 @@
import android.app.TaskInfo.CameraCompatControlState;
import android.content.Context;
import android.util.AttributeSet;
-import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageButton;
import android.widget.LinearLayout;
@@ -113,14 +112,6 @@
}
@Override
- public boolean onInterceptTouchEvent(MotionEvent ev) {
- if (ev.getAction() == MotionEvent.ACTION_DOWN) {
- mWindowManager.relayout();
- }
- return super.onInterceptTouchEvent(ev);
- }
-
- @Override
protected void onFinishInflate() {
super.onFinishInflate();
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIWindowManager.java b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIWindowManager.java
index 6592292..065806d 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIWindowManager.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIWindowManager.java
@@ -22,7 +22,6 @@
import static android.app.TaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_SUGGESTED;
import static android.window.TaskConstants.TASK_CHILD_LAYER_COMPAT_UI;
-import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.TaskInfo;
import android.app.TaskInfo.CameraCompatControlState;
@@ -53,9 +52,6 @@
private final Consumer<Pair<TaskInfo, ShellTaskOrganizer.TaskListener>> mOnRestartButtonClicked;
- @NonNull
- private TaskInfo mTaskInfo;
-
// Remember the last reported states in case visibility changes due to keyguard or IME updates.
@VisibleForTesting
boolean mHasSizeCompat;
@@ -77,7 +73,6 @@
CompatUIHintsState compatUIHintsState, CompatUIConfiguration compatUIConfiguration,
Consumer<Pair<TaskInfo, ShellTaskOrganizer.TaskListener>> onRestartButtonClicked) {
super(context, taskInfo, syncQueue, taskListener, displayLayout);
- mTaskInfo = taskInfo;
mCallback = callback;
mHasSizeCompat = taskInfo.topActivityInSizeCompat;
mCameraCompatControlState = taskInfo.cameraCompatControlState;
@@ -129,7 +124,6 @@
@Override
public boolean updateCompatInfo(TaskInfo taskInfo, ShellTaskOrganizer.TaskListener taskListener,
boolean canShow) {
- mTaskInfo = taskInfo;
final boolean prevHasSizeCompat = mHasSizeCompat;
final int prevCameraCompatControlState = mCameraCompatControlState;
mHasSizeCompat = taskInfo.topActivityInSizeCompat;
@@ -149,7 +143,7 @@
/** Called when the restart button is clicked. */
void onRestartButtonClicked() {
- mOnRestartButtonClicked.accept(Pair.create(mTaskInfo, getTaskListener()));
+ mOnRestartButtonClicked.accept(Pair.create(getLastTaskInfo(), getTaskListener()));
}
/** Called when the camera treatment button is clicked. */
@@ -210,14 +204,7 @@
: taskStableBounds.right - taskBounds.left - mLayout.getMeasuredWidth();
final int positionY = taskStableBounds.bottom - taskBounds.top
- mLayout.getMeasuredHeight();
- // To secure a proper visualisation, we hide the layout while updating the position of
- // the {@link SurfaceControl} it belongs.
- final int oldVisibility = mLayout.getVisibility();
- if (oldVisibility == View.VISIBLE) {
- mLayout.setVisibility(View.GONE);
- }
updateSurfacePosition(positionX, positionY);
- mLayout.setVisibility(oldVisibility);
}
private void updateVisibilityOfViews() {
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIWindowManagerAbstract.java b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIWindowManagerAbstract.java
index 9c4e79c..180498c 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIWindowManagerAbstract.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIWindowManagerAbstract.java
@@ -26,6 +26,7 @@
import static com.android.internal.annotations.VisibleForTesting.Visibility.PRIVATE;
import static com.android.internal.annotations.VisibleForTesting.Visibility.PROTECTED;
+import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.TaskInfo;
import android.content.Context;
@@ -65,6 +66,9 @@
private DisplayLayout mDisplayLayout;
private final Rect mStableBounds;
+ @NonNull
+ private TaskInfo mTaskInfo;
+
/**
* Utility class for adding and releasing a View hierarchy for this {@link
* WindowlessWindowManager} to {@code mLeash}.
@@ -83,6 +87,7 @@
SyncTransactionQueue syncQueue, ShellTaskOrganizer.TaskListener taskListener,
DisplayLayout displayLayout) {
super(taskInfo.configuration, null /* rootSurface */, null /* hostInputToken */);
+ mTaskInfo = taskInfo;
mContext = context;
mSyncQueue = syncQueue;
mTaskConfig = taskInfo.configuration;
@@ -95,6 +100,17 @@
}
/**
+ * @return {@code true} if the instance of the specific {@link CompatUIWindowManagerAbstract}
+ * for the current task id needs to be recreated loading the related resources. This happens
+ * if the user switches between Light/Dark mode, if the device is docked/undocked or if the
+ * user switches between multi-window mode to fullscreen where the
+ * {@link ShellTaskOrganizer.TaskListener} implementation is different.
+ */
+ boolean needsToBeRecreated(TaskInfo taskInfo, ShellTaskOrganizer.TaskListener taskListener) {
+ return hasUiModeChanged(mTaskInfo, taskInfo) || hasTaskListenerChanged(taskListener);
+ }
+
+ /**
* Returns the z-order of this window which will be passed to the {@link SurfaceControl} once
* {@link #attachToParentSurface} is called.
*
@@ -195,6 +211,7 @@
@VisibleForTesting(visibility = PROTECTED)
public boolean updateCompatInfo(TaskInfo taskInfo,
ShellTaskOrganizer.TaskListener taskListener, boolean canShow) {
+ mTaskInfo = taskInfo;
final Configuration prevTaskConfig = mTaskConfig;
final ShellTaskOrganizer.TaskListener prevTaskListener = mTaskListener;
mTaskConfig = taskInfo.configuration;
@@ -315,6 +332,11 @@
updateSurfacePosition();
}
+ @Nullable
+ protected TaskInfo getLastTaskInfo() {
+ return mTaskInfo;
+ }
+
/**
* Called following a change in the task bounds, display layout stable bounds, or the layout
* direction.
@@ -402,4 +424,12 @@
protected final String getTag() {
return getClass().getSimpleName();
}
+
+ protected boolean hasTaskListenerChanged(ShellTaskOrganizer.TaskListener newTaskListener) {
+ return !mTaskListener.equals(newTaskListener);
+ }
+
+ protected static boolean hasUiModeChanged(TaskInfo currentTaskInfo, TaskInfo newTaskInfo) {
+ return currentTaskInfo.configuration.uiMode != newTaskInfo.configuration.uiMode;
+ }
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/LetterboxEduWindowManager.java b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/LetterboxEduWindowManager.java
index 959c50d..9a67258 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/LetterboxEduWindowManager.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/LetterboxEduWindowManager.java
@@ -19,7 +19,6 @@
import static android.provider.Settings.Secure.LAUNCHER_TASKBAR_EDUCATION_SHOWING;
import static android.window.TaskConstants.TASK_CHILD_LAYER_COMPAT_UI;
-import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.TaskInfo;
import android.content.Context;
@@ -69,9 +68,6 @@
@VisibleForTesting
LetterboxEduDialogLayout mLayout;
- @NonNull
- private TaskInfo mTaskInfo;
-
/**
* The vertical margin between the dialog container and the task stable bounds (excluding
* insets).
@@ -99,7 +95,6 @@
DialogAnimationController<LetterboxEduDialogLayout> animationController,
DockStateReader dockStateReader, CompatUIConfiguration compatUIConfiguration) {
super(context, taskInfo, syncQueue, taskListener, displayLayout);
- mTaskInfo = taskInfo;
mTransitions = transitions;
mOnDismissCallback = onDismissCallback;
mAnimationController = animationController;
@@ -197,7 +192,7 @@
mLayout.setDismissOnClickListener(null);
mAnimationController.startExitAnimation(mLayout, () -> {
release();
- mOnDismissCallback.accept(Pair.create(mTaskInfo, getTaskListener()));
+ mOnDismissCallback.accept(Pair.create(getLastTaskInfo(), getTaskListener()));
});
}
@@ -210,7 +205,6 @@
@Override
public boolean updateCompatInfo(TaskInfo taskInfo, ShellTaskOrganizer.TaskListener taskListener,
boolean canShow) {
- mTaskInfo = taskInfo;
mEligibleForLetterboxEducation = taskInfo.topActivityEligibleForLetterboxEducation;
return super.updateCompatInfo(taskInfo, taskListener, canShow);
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/ReachabilityEduWindowManager.java b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/ReachabilityEduWindowManager.java
index a18ab91..95bb1fe 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/ReachabilityEduWindowManager.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/ReachabilityEduWindowManager.java
@@ -20,7 +20,6 @@
import static android.view.WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;
import static android.window.TaskConstants.TASK_CHILD_LAYER_COMPAT_UI;
-import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.TaskInfo;
import android.content.Context;
@@ -52,9 +51,6 @@
private final ShellExecutor mMainExecutor;
- @NonNull
- private TaskInfo mTaskInfo;
-
private boolean mIsActivityLetterboxed;
private int mLetterboxVerticalPosition;
@@ -86,7 +82,6 @@
ShellTaskOrganizer.TaskListener taskListener, DisplayLayout displayLayout,
CompatUIConfiguration compatUIConfiguration, ShellExecutor mainExecutor) {
super(context, taskInfo, syncQueue, taskListener, displayLayout);
- mTaskInfo = taskInfo;
mIsActivityLetterboxed = taskInfo.isLetterboxDoubleTapEnabled;
mLetterboxVerticalPosition = taskInfo.topActivityLetterboxVerticalPosition;
mLetterboxHorizontalPosition = taskInfo.topActivityLetterboxHorizontalPosition;
@@ -136,7 +131,6 @@
@Override
public boolean updateCompatInfo(TaskInfo taskInfo, ShellTaskOrganizer.TaskListener taskListener,
boolean canShow) {
- mTaskInfo = taskInfo;
final boolean prevIsActivityLetterboxed = mIsActivityLetterboxed;
final int prevLetterboxVerticalPosition = mLetterboxVerticalPosition;
final int prevLetterboxHorizontalPosition = mLetterboxHorizontalPosition;
@@ -222,14 +216,14 @@
if (mLayout == null) {
return;
}
-
+ final TaskInfo lastTaskInfo = getLastTaskInfo();
final boolean eligibleForDisplayHorizontalEducation = mForceUpdate
- || !mCompatUIConfiguration.hasSeenHorizontalReachabilityEducation(mTaskInfo)
+ || !mCompatUIConfiguration.hasSeenHorizontalReachabilityEducation(lastTaskInfo)
|| (mHasUserDoubleTapped
&& (mLetterboxHorizontalPosition == REACHABILITY_LEFT_OR_UP_POSITION
|| mLetterboxHorizontalPosition == REACHABILITY_RIGHT_OR_BOTTOM_POSITION));
final boolean eligibleForDisplayVerticalEducation = mForceUpdate
- || !mCompatUIConfiguration.hasSeenVerticalReachabilityEducation(mTaskInfo)
+ || !mCompatUIConfiguration.hasSeenVerticalReachabilityEducation(lastTaskInfo)
|| (mHasUserDoubleTapped
&& (mLetterboxVerticalPosition == REACHABILITY_LEFT_OR_UP_POSITION
|| mLetterboxVerticalPosition == REACHABILITY_RIGHT_OR_BOTTOM_POSITION));
@@ -241,7 +235,7 @@
mLayout.handleVisibility(eligibleForDisplayHorizontalEducation,
eligibleForDisplayVerticalEducation,
mLetterboxVerticalPosition, mLetterboxHorizontalPosition, availableWidth,
- availableHeight, mCompatUIConfiguration, mTaskInfo);
+ availableHeight, mCompatUIConfiguration, lastTaskInfo);
if (!mHasLetterboxSizeChanged) {
updateHideTime();
mMainExecutor.executeDelayed(this::hideReachability, DISAPPEAR_DELAY_MS);
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/RestartDialogWindowManager.java b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/RestartDialogWindowManager.java
index 51e5141..a770da2 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/RestartDialogWindowManager.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/RestartDialogWindowManager.java
@@ -19,7 +19,6 @@
import static android.provider.Settings.Secure.LAUNCHER_TASKBAR_EDUCATION_SHOWING;
import static android.window.TaskConstants.TASK_CHILD_LAYER_COMPAT_UI;
-import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.TaskInfo;
import android.content.Context;
@@ -67,9 +66,6 @@
*/
private final int mDialogVerticalMargin;
- @NonNull
- private TaskInfo mTaskInfo;
-
@Nullable
@VisibleForTesting
RestartDialogLayout mLayout;
@@ -95,7 +91,6 @@
DialogAnimationController<RestartDialogLayout> animationController,
CompatUIConfiguration compatUIConfiguration) {
super(context, taskInfo, syncQueue, taskListener, displayLayout);
- mTaskInfo = taskInfo;
mTransitions = transitions;
mOnDismissCallback = onDismissCallback;
mOnRestartCallback = onRestartCallback;
@@ -125,7 +120,7 @@
protected boolean eligibleToShowLayout() {
// We don't show this dialog if the user has explicitly selected so clicking on a checkbox.
return mRequestRestartDialog && !isTaskbarEduShowing() && (mLayout != null
- || mCompatUIConfiguration.shouldShowRestartDialogAgain(mTaskInfo));
+ || mCompatUIConfiguration.shouldShowRestartDialogAgain(getLastTaskInfo()));
}
@Override
@@ -143,18 +138,6 @@
mRequestRestartDialog = enabled;
}
- @Override
- public boolean updateCompatInfo(TaskInfo taskInfo, ShellTaskOrganizer.TaskListener taskListener,
- boolean canShow) {
- mTaskInfo = taskInfo;
- return super.updateCompatInfo(taskInfo, taskListener, canShow);
- }
-
- boolean needsToBeRecreated(TaskInfo taskInfo, ShellTaskOrganizer.TaskListener taskListener) {
- return taskInfo.configuration.uiMode != mTaskInfo.configuration.uiMode
- || !getTaskListener().equals(taskListener);
- }
-
private void updateDialogMargins() {
if (mLayout == null) {
return;
@@ -191,6 +174,7 @@
// Dialog has already been released.
return;
}
+ final TaskInfo lastTaskInfo = getLastTaskInfo();
mLayout.setDismissOnClickListener(this::onDismiss);
mLayout.setRestartOnClickListener(dontShowAgain -> {
if (mLayout != null) {
@@ -200,9 +184,9 @@
});
}
if (dontShowAgain) {
- mCompatUIConfiguration.setDontShowRestartDialogAgain(mTaskInfo);
+ mCompatUIConfiguration.setDontShowRestartDialogAgain(lastTaskInfo);
}
- mOnRestartCallback.accept(Pair.create(mTaskInfo, getTaskListener()));
+ mOnRestartCallback.accept(Pair.create(lastTaskInfo, getTaskListener()));
});
// Focus on the dialog title for accessibility.
mLayout.getDialogTitle().sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED);
@@ -216,7 +200,7 @@
mLayout.setDismissOnClickListener(null);
mAnimationController.startExitAnimation(mLayout, () -> {
release();
- mOnDismissCallback.accept(Pair.create(mTaskInfo, getTaskListener()));
+ mOnDismissCallback.accept(Pair.create(getLastTaskInfo(), getTaskListener()));
});
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeTaskRepository.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeTaskRepository.kt
index 00cc57f..3ab175d 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeTaskRepository.kt
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeTaskRepository.kt
@@ -23,6 +23,8 @@
import androidx.core.util.forEach
import androidx.core.util.keyIterator
import androidx.core.util.valueIterator
+import com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_DESKTOP_MODE
+import com.android.wm.shell.util.KtProtoLog
import java.util.concurrent.Executor
import java.util.function.Consumer
@@ -140,6 +142,12 @@
val added = displayData.getOrCreate(displayId).activeTasks.add(taskId)
if (added) {
+ KtProtoLog.d(
+ WM_SHELL_DESKTOP_MODE,
+ "DesktopTaskRepo: add active task=%d displayId=%d",
+ taskId,
+ displayId
+ )
activeTasksListeners.onEach { it.onActiveTasksChanged(displayId) }
}
return added
@@ -158,6 +166,9 @@
result = true
}
}
+ if (result) {
+ KtProtoLog.d(WM_SHELL_DESKTOP_MODE, "DesktopTaskRepo: remove active task=%d", taskId)
+ }
return result
}
@@ -221,6 +232,17 @@
displayData[displayId]?.visibleTasks?.remove(taskId)
}
val newCount = getVisibleTaskCount(displayId)
+
+ if (prevCount != newCount) {
+ KtProtoLog.d(
+ WM_SHELL_DESKTOP_MODE,
+ "DesktopTaskRepo: update task visibility taskId=%d visible=%b displayId=%d",
+ taskId,
+ visible,
+ displayId
+ )
+ }
+
// Check if count changed and if there was no tasks or this is the first task
if (prevCount != newCount && (prevCount == 0 || newCount == 0)) {
notifyVisibleTaskListeners(displayId, newCount > 0)
@@ -244,6 +266,11 @@
* Add (or move if it already exists) the task to the top of the ordered list.
*/
fun addOrMoveFreeformTaskToTop(taskId: Int) {
+ KtProtoLog.d(
+ WM_SHELL_DESKTOP_MODE,
+ "DesktopTaskRepo: add or move task to top taskId=%d",
+ taskId
+ )
if (freeformTasksInZOrder.contains(taskId)) {
freeformTasksInZOrder.remove(taskId)
}
@@ -254,6 +281,11 @@
* Remove the task from the ordered list.
*/
fun removeFreeformTask(taskId: Int) {
+ KtProtoLog.d(
+ WM_SHELL_DESKTOP_MODE,
+ "DesktopTaskRepo: remove freeform task from ordered list taskId=%d",
+ taskId
+ )
freeformTasksInZOrder.remove(taskId)
}
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 b310938..91bb155 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
@@ -39,7 +39,6 @@
import android.window.WindowContainerToken
import android.window.WindowContainerTransaction
import androidx.annotation.BinderThread
-import com.android.internal.protolog.common.ProtoLog
import com.android.wm.shell.RootTaskDisplayAreaOrganizer
import com.android.wm.shell.ShellTaskOrganizer
import com.android.wm.shell.common.DisplayController
@@ -56,6 +55,7 @@
import com.android.wm.shell.sysui.ShellInit
import com.android.wm.shell.sysui.ShellSharedConstants
import com.android.wm.shell.transition.Transitions
+import com.android.wm.shell.util.KtProtoLog
import java.util.concurrent.Executor
import java.util.function.Consumer
@@ -91,7 +91,7 @@
}
private fun onInit() {
- ProtoLog.d(WM_SHELL_DESKTOP_MODE, "Initialize DesktopTasksController")
+ KtProtoLog.d(WM_SHELL_DESKTOP_MODE, "Initialize DesktopTasksController")
shellController.addExternalInterface(
ShellSharedConstants.KEY_EXTRA_SHELL_DESKTOP_MODE,
{ createExternalInterface() },
@@ -102,7 +102,7 @@
/** Show all tasks, that are part of the desktop, on top of launcher */
fun showDesktopApps(displayId: Int) {
- ProtoLog.v(WM_SHELL_DESKTOP_MODE, "showDesktopApps")
+ KtProtoLog.v(WM_SHELL_DESKTOP_MODE, "DesktopTasksController: showDesktopApps")
val wct = WindowContainerTransaction()
// TODO(b/278084491): pass in display id
bringDesktopAppsToFront(displayId, wct)
@@ -130,8 +130,11 @@
/** Move a task to desktop */
fun moveToDesktop(task: RunningTaskInfo) {
- ProtoLog.v(WM_SHELL_DESKTOP_MODE, "moveToDesktop: %d", task.taskId)
-
+ KtProtoLog.v(
+ WM_SHELL_DESKTOP_MODE,
+ "DesktopTasksController: moveToDesktop taskId=%d",
+ task.taskId
+ )
val wct = WindowContainerTransaction()
// Bring other apps to front first
bringDesktopAppsToFront(task.displayId, wct)
@@ -147,10 +150,12 @@
* Moves a single task to freeform and sets the taskBounds to the passed in bounds,
* startBounds
*/
- fun moveToFreeform(
- taskInfo: RunningTaskInfo,
- startBounds: Rect
- ) {
+ fun moveToFreeform(taskInfo: RunningTaskInfo, startBounds: Rect) {
+ KtProtoLog.v(
+ WM_SHELL_DESKTOP_MODE,
+ "DesktopTasksController: moveToFreeform with bounds taskId=%d",
+ taskInfo.taskId
+ )
val wct = WindowContainerTransaction()
moveHomeTaskToFront(wct)
addMoveToDesktopChanges(wct, taskInfo.getToken())
@@ -165,10 +170,12 @@
}
/** Brings apps to front and sets freeform task bounds */
- private fun moveToDesktopWithAnimation(
- taskInfo: RunningTaskInfo,
- freeformBounds: Rect
- ) {
+ private fun moveToDesktopWithAnimation(taskInfo: RunningTaskInfo, freeformBounds: Rect) {
+ KtProtoLog.v(
+ WM_SHELL_DESKTOP_MODE,
+ "DesktopTasksController: moveToDesktop with animation taskId=%d",
+ taskInfo.taskId
+ )
val wct = WindowContainerTransaction()
bringDesktopAppsToFront(taskInfo.displayId, wct)
addMoveToDesktopChanges(wct, taskInfo.getToken())
@@ -190,7 +197,11 @@
/** Move a task to fullscreen */
fun moveToFullscreen(task: RunningTaskInfo) {
- ProtoLog.v(WM_SHELL_DESKTOP_MODE, "moveToFullscreen: %d", task.taskId)
+ KtProtoLog.v(
+ WM_SHELL_DESKTOP_MODE,
+ "DesktopTasksController: moveToFullscreen taskId=%d",
+ task.taskId
+ )
val wct = WindowContainerTransaction()
addMoveToFullscreenChanges(wct, task.token)
@@ -206,6 +217,11 @@
* status bar area
*/
fun cancelMoveToFreeform(task: RunningTaskInfo, position: Point) {
+ KtProtoLog.v(
+ WM_SHELL_DESKTOP_MODE,
+ "DesktopTasksController: cancelMoveToFreeform taskId=%d",
+ task.taskId
+ )
val wct = WindowContainerTransaction()
addMoveToFullscreenChanges(wct, task.token)
if (Transitions.ENABLE_SHELL_TRANSITIONS) {
@@ -218,6 +234,11 @@
}
private fun moveToFullscreenWithAnimation(task: RunningTaskInfo, position: Point) {
+ KtProtoLog.v(
+ WM_SHELL_DESKTOP_MODE,
+ "DesktopTasksController: moveToFullscreen with animation taskId=%d",
+ task.taskId
+ )
val wct = WindowContainerTransaction()
addMoveToFullscreenChanges(wct, task.token)
@@ -230,8 +251,14 @@
}
}
- /** Move a task to the front **/
+ /** Move a task to the front */
fun moveTaskToFront(taskInfo: RunningTaskInfo) {
+ KtProtoLog.v(
+ WM_SHELL_DESKTOP_MODE,
+ "DesktopTasksController: moveTaskToFront taskId=%d",
+ taskInfo.taskId
+ )
+
val wct = WindowContainerTransaction()
wct.reorder(taskInfo.token, true)
if (Transitions.ENABLE_SHELL_TRANSITIONS) {
@@ -255,10 +282,10 @@
fun moveToNextDisplay(taskId: Int) {
val task = shellTaskOrganizer.getRunningTaskInfo(taskId)
if (task == null) {
- ProtoLog.w(WM_SHELL_DESKTOP_MODE, "moveToNextDisplay: taskId=%d not found", taskId)
+ KtProtoLog.w(WM_SHELL_DESKTOP_MODE, "moveToNextDisplay: taskId=%d not found", taskId)
return
}
- ProtoLog.v(WM_SHELL_DESKTOP_MODE, "moveToNextDisplay: taskId=%d taskDisplayId=%d",
+ KtProtoLog.v(WM_SHELL_DESKTOP_MODE, "moveToNextDisplay: taskId=%d taskDisplayId=%d",
taskId, task.displayId)
val displayIds = rootTaskDisplayAreaOrganizer.displayIds.sorted()
@@ -269,7 +296,7 @@
newDisplayId = displayIds.firstOrNull { displayId -> displayId < task.displayId }
}
if (newDisplayId == null) {
- ProtoLog.w(WM_SHELL_DESKTOP_MODE, "moveToNextDisplay: next display not found")
+ KtProtoLog.w(WM_SHELL_DESKTOP_MODE, "moveToNextDisplay: next display not found")
return
}
moveToDisplay(task, newDisplayId)
@@ -281,17 +308,17 @@
* No-op if task is already on that display per [RunningTaskInfo.displayId].
*/
private fun moveToDisplay(task: RunningTaskInfo, displayId: Int) {
- ProtoLog.v(WM_SHELL_DESKTOP_MODE, "moveToDisplay: taskId=%d displayId=%d",
+ KtProtoLog.v(WM_SHELL_DESKTOP_MODE, "moveToDisplay: taskId=%d displayId=%d",
task.taskId, displayId)
if (task.displayId == displayId) {
- ProtoLog.d(WM_SHELL_DESKTOP_MODE, "moveToDisplay: task already on display")
+ KtProtoLog.d(WM_SHELL_DESKTOP_MODE, "moveToDisplay: task already on display")
return
}
val displayAreaInfo = rootTaskDisplayAreaOrganizer.getDisplayAreaInfo(displayId)
if (displayAreaInfo == null) {
- ProtoLog.w(WM_SHELL_DESKTOP_MODE, "moveToDisplay: display not found")
+ KtProtoLog.w(WM_SHELL_DESKTOP_MODE, "moveToDisplay: display not found")
return
}
@@ -316,7 +343,7 @@
}
private fun bringDesktopAppsToFront(displayId: Int, wct: WindowContainerTransaction) {
- ProtoLog.v(WM_SHELL_DESKTOP_MODE, "bringDesktopAppsToFront")
+ KtProtoLog.v(WM_SHELL_DESKTOP_MODE, "DesktopTasksController: bringDesktopAppsToFront")
val activeTasks = desktopModeTaskRepository.getActiveTasks(displayId)
// First move home to front and then other tasks on top of it
@@ -397,9 +424,9 @@
if (task.windowingMode == WINDOWING_MODE_FULLSCREEN) {
// If there are any visible desktop tasks, switch the task to freeform
if (activeTasks.any { desktopModeTaskRepository.isVisibleTask(it) }) {
- ProtoLog.d(
+ KtProtoLog.d(
WM_SHELL_DESKTOP_MODE,
- "DesktopTasksController#handleRequest: switch fullscreen task to freeform," +
+ "DesktopTasksController: switch fullscreen task to freeform on transition" +
" taskId=%d",
task.taskId
)
@@ -414,9 +441,9 @@
// If no visible desktop tasks, switch this task to freeform as the transition came
// outside of this controller
if (activeTasks.none { desktopModeTaskRepository.isVisibleTask(it) }) {
- ProtoLog.d(
+ KtProtoLog.d(
WM_SHELL_DESKTOP_MODE,
- "DesktopTasksController#handleRequest: switch freeform task to fullscreen," +
+ "DesktopTasksController: switch freeform task to fullscreen oon transition" +
" taskId=%d",
task.taskId
)
@@ -627,8 +654,6 @@
}
}
-
-
/** The interface for calls from outside the host process. */
@BinderThread
private class IDesktopModeImpl(private var controller: DesktopTasksController?) :
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 ccbb9cf..a3803ed 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/freeform/OWNERS
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/freeform/OWNERS
@@ -1,3 +1,4 @@
# WM shell sub-module freeform owners
atsjenk@google.com
+jorgegil@google.com
madym@google.com
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipAnimationController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipAnimationController.java
index 1d7e649..bbfeb90 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipAnimationController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipAnimationController.java
@@ -52,7 +52,7 @@
*/
public class PipAnimationController {
static final float FRACTION_START = 0f;
- private static final float FRACTION_END = 1f;
+ static final float FRACTION_END = 1f;
public static final int ANIM_TYPE_BOUNDS = 0;
public static final int ANIM_TYPE_ALPHA = 1;
@@ -718,7 +718,9 @@
.round(tx, leash, sourceBounds, bounds)
.shadow(tx, leash, shouldApplyShadowRadius());
}
- tx.apply();
+ if (!handlePipTransaction(leash, tx, bounds, 1f /* alpha */)) {
+ tx.apply();
+ }
}
private Rect computeInsets(float fraction) {
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipBoundsAlgorithm.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipBoundsAlgorithm.java
index 24d0b99..f51eb52 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipBoundsAlgorithm.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipBoundsAlgorithm.java
@@ -180,6 +180,35 @@
return null;
}
+
+ /**
+ * Returns the source hint rect if it is valid (if provided and is contained by the current
+ * task bounds, while not smaller than the destination bounds).
+ */
+ @Nullable
+ public static Rect getValidSourceHintRect(PictureInPictureParams params, Rect sourceBounds,
+ Rect destinationBounds) {
+ Rect sourceRectHint = getValidSourceHintRect(params, sourceBounds);
+ if (!isSourceRectHintValidForEnterPip(sourceRectHint, destinationBounds)) {
+ sourceRectHint = null;
+ }
+ return sourceRectHint;
+ }
+
+ /**
+ * This is a situation in which the source rect hint on at least one axis is smaller
+ * than the destination bounds, which represents a problem because we would have to scale
+ * up that axis to fit the bounds. So instead, just fallback to the non-source hint
+ * animation in this case.
+ *
+ * @return {@code false} if the given source is too small to use for the entering animation.
+ */
+ static boolean isSourceRectHintValidForEnterPip(Rect sourceRectHint, Rect destinationBounds) {
+ return sourceRectHint != null
+ && sourceRectHint.width() > destinationBounds.width()
+ && sourceRectHint.height() > destinationBounds.height();
+ }
+
public float getDefaultAspectRatio() {
return mDefaultAspectRatio;
}
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 6cedcf5..8709eab 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
@@ -828,6 +828,7 @@
private void onEndOfSwipePipToHomeTransition() {
if (Transitions.ENABLE_SHELL_TRANSITIONS) {
+ mPipTransitionController.setEnterAnimationType(ANIM_TYPE_BOUNDS);
return;
}
@@ -1657,8 +1658,8 @@
"%s: Abort animation, invalid leash", TAG);
return null;
}
- if (isInPipDirection(direction)
- && !isSourceRectHintValidForEnterPip(sourceHintRect, destinationBounds)) {
+ if (isInPipDirection(direction) && !PipBoundsAlgorithm
+ .isSourceRectHintValidForEnterPip(sourceHintRect, destinationBounds)) {
// The given source rect hint is too small for enter PiP animation, reset it to null.
sourceHintRect = null;
}
@@ -1757,20 +1758,6 @@
}
/**
- * This is a situation in which the source rect hint on at least one axis is smaller
- * than the destination bounds, which represents a problem because we would have to scale
- * up that axis to fit the bounds. So instead, just fallback to the non-source hint
- * animation in this case.
- *
- * @return {@code false} if the given source is too small to use for the entering animation.
- */
- private boolean isSourceRectHintValidForEnterPip(Rect sourceRectHint, Rect destinationBounds) {
- return sourceRectHint != null
- && sourceRectHint.width() > destinationBounds.width()
- && sourceRectHint.height() > destinationBounds.height();
- }
-
- /**
* Sync with {@link SplitScreenController} on destination bounds if PiP is going to
* split screen.
*
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransition.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransition.java
index 98db707..db516c0 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransition.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransition.java
@@ -45,7 +45,6 @@
import android.app.ActivityManager;
import android.app.TaskInfo;
import android.content.Context;
-import android.graphics.Matrix;
import android.graphics.Point;
import android.graphics.Rect;
import android.os.IBinder;
@@ -109,6 +108,17 @@
/** Whether the PIP window has fade out for fixed rotation. */
private boolean mHasFadeOut;
+ /** Used for setting transform to a transaction from animator. */
+ private final PipAnimationController.PipTransactionHandler mTransactionConsumer =
+ new PipAnimationController.PipTransactionHandler() {
+ @Override
+ public boolean handlePipTransaction(SurfaceControl leash,
+ SurfaceControl.Transaction tx, Rect destinationBounds, float alpha) {
+ // Only set the operation to transaction but do not apply.
+ return true;
+ }
+ };
+
public PipTransition(Context context,
@NonNull ShellInit shellInit,
@NonNull ShellTaskOrganizer shellTaskOrganizer,
@@ -338,7 +348,7 @@
@Override
public void onFinishResize(TaskInfo taskInfo, Rect destinationBounds,
@PipAnimationController.TransitionDirection int direction,
- @Nullable SurfaceControl.Transaction tx) {
+ @NonNull SurfaceControl.Transaction tx) {
final boolean enteringPip = isInPipDirection(direction);
if (enteringPip) {
mPipTransitionState.setTransitionState(ENTERED_PIP);
@@ -348,13 +358,15 @@
// (likely a remote like launcher), so don't fire the finish-callback here -- wait until
// the exit transition is merged.
if ((mExitTransition == null || isAnimatingLocally()) && mFinishCallback != null) {
+ final SurfaceControl leash = mPipOrganizer.getSurfaceControl();
+ final boolean hasValidLeash = leash != null && leash.isValid();
WindowContainerTransaction wct = null;
if (isOutPipDirection(direction)) {
// Only need to reset surface properties. The server-side operations were already
// done at the start. But if it is running fixed rotation, there will be a seamless
// display transition later. So the last rotation transform needs to be kept to
// avoid flickering, and then the display transition will reset the transform.
- if (tx != null && !mInFixedRotation) {
+ if (!mInFixedRotation && mFinishTransaction != null) {
mFinishTransaction.merge(tx);
}
} else {
@@ -363,27 +375,36 @@
// If we are animating from fullscreen using a bounds animation, then reset the
// activity windowing mode, and set the task bounds to the final bounds
wct.setActivityWindowingMode(taskInfo.token, WINDOWING_MODE_UNDEFINED);
- wct.scheduleFinishEnterPip(taskInfo.token, destinationBounds);
wct.setBounds(taskInfo.token, destinationBounds);
} else {
wct.setBounds(taskInfo.token, null /* bounds */);
}
- if (tx != null) {
- wct.setBoundsChangeTransaction(taskInfo.token, tx);
+ // Reset the scale with bounds change synchronously.
+ if (hasValidLeash) {
+ mSurfaceTransactionHelper.crop(tx, leash, destinationBounds)
+ .resetScale(tx, leash, destinationBounds)
+ .round(tx, leash, true /* applyCornerRadius */);
}
+ wct.setBoundsChangeTransaction(taskInfo.token, tx);
}
- final SurfaceControl leash = mPipOrganizer.getSurfaceControl();
final int displayRotation = taskInfo.getConfiguration().windowConfiguration
.getDisplayRotation();
if (enteringPip && mInFixedRotation && mEndFixedRotation != displayRotation
- && leash != null && leash.isValid()) {
+ && hasValidLeash) {
// Launcher may update the Shelf height during the animation, which will update the
// destination bounds. Because this is in fixed rotation, We need to make sure the
// finishTransaction is using the updated bounds in the display rotation.
+ final PipAnimationController.PipTransitionAnimator<?> animator =
+ mPipAnimationController.getCurrentAnimator();
final Rect displayBounds = mPipDisplayLayoutState.getDisplayBounds();
final Rect finishBounds = new Rect(destinationBounds);
rotateBounds(finishBounds, displayBounds, mEndFixedRotation, displayRotation);
- mSurfaceTransactionHelper.crop(mFinishTransaction, leash, finishBounds);
+ if (!finishBounds.equals(animator.getEndValue())) {
+ ProtoLog.w(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
+ "%s: Destination bounds were changed during animation", TAG);
+ rotateBounds(finishBounds, displayBounds, mEndFixedRotation, displayRotation);
+ mSurfaceTransactionHelper.crop(mFinishTransaction, leash, finishBounds);
+ }
}
mFinishTransaction = null;
callFinishCallback(wct);
@@ -470,6 +491,7 @@
@NonNull Transitions.TransitionFinishCallback finishCallback,
@NonNull TaskInfo taskInfo, @Nullable TransitionInfo.Change pipTaskChange) {
TransitionInfo.Change pipChange = pipTaskChange;
+ SurfaceControl activitySc = null;
if (mCurrentPipTaskToken == null) {
ProtoLog.w(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
"%s: There is no existing PiP Task for TRANSIT_EXIT_PIP", TAG);
@@ -482,6 +504,7 @@
if (mCurrentPipTaskToken.equals(change.getLastParent())) {
// Find the activity that is exiting PiP.
pipChange = change;
+ activitySc = change.getLeash();
break;
}
}
@@ -498,17 +521,36 @@
// case it may not be in the screen coordinate.
// Reparent the pip leash to the root with max layer so that we can animate it outside of
// parent crop, and make sure it is not covered by other windows.
- final SurfaceControl pipLeash = pipChange.getLeash();
- final int rootIdx = TransitionUtil.rootIndexFor(pipChange, info);
- startTransaction.reparent(pipLeash, info.getRoot(rootIdx).getLeash());
+ final TransitionInfo.Root root = TransitionUtil.getRootFor(pipChange, info);
+ final SurfaceControl pipLeash;
+ if (activitySc != null) {
+ // Use a local leash to animate activity in case the activity has letterbox which may
+ // be broken by PiP animation, e.g. always end at 0,0 in parent and unable to include
+ // letterbox area in crop bounds.
+ final SurfaceControl activitySurface = pipChange.getLeash();
+ pipLeash = new SurfaceControl.Builder()
+ .setName(activitySc + "_pip-leash")
+ .setContainerLayer()
+ .setHidden(false)
+ .setParent(root.getLeash())
+ .build();
+ startTransaction.reparent(activitySurface, pipLeash);
+ // Put the activity at local position with offset in case it is letterboxed.
+ final Point activityOffset = pipChange.getEndRelOffset();
+ startTransaction.setPosition(activitySc, activityOffset.x, activityOffset.y);
+ } else {
+ pipLeash = pipChange.getLeash();
+ startTransaction.reparent(pipLeash, root.getLeash());
+ }
startTransaction.setLayer(pipLeash, Integer.MAX_VALUE);
// Note: because of this, the bounds to animate should be translated to the root coordinate.
- final Point offset = info.getRoot(rootIdx).getOffset();
+ final Point offset = root.getOffset();
final Rect currentBounds = mPipBoundsState.getBounds();
currentBounds.offset(-offset.x, -offset.y);
startTransaction.setPosition(pipLeash, currentBounds.left, currentBounds.top);
final WindowContainerToken pipTaskToken = pipChange.getContainer();
+ final boolean useLocalLeash = activitySc != null;
final boolean toFullscreen = pipChange.getEndAbsBounds().equals(
mPipBoundsState.getDisplayBounds());
mFinishCallback = (wct, wctCB) -> {
@@ -518,6 +560,14 @@
wct.setBounds(pipTaskToken, null);
mPipOrganizer.applyWindowingModeChangeOnExit(wct, TRANSITION_DIRECTION_LEAVE_PIP);
}
+ if (useLocalLeash) {
+ if (mPipAnimationController.isAnimating()) {
+ mPipAnimationController.getCurrentAnimator().end();
+ }
+ // Make sure the animator don't use the released leash, e.g. mergeAnimation.
+ mPipAnimationController.resetAnimatorState();
+ finishTransaction.remove(pipLeash);
+ }
finishCallback.onTransitionFinished(wct, wctCB);
};
mFinishTransaction = finishTransaction;
@@ -545,7 +595,8 @@
// Set the initial frame as scaling the end to the start.
final Rect destinationBounds = new Rect(pipChange.getEndAbsBounds());
destinationBounds.offset(-offset.x, -offset.y);
- startTransaction.setWindowCrop(pipLeash, destinationBounds);
+ startTransaction.setWindowCrop(pipLeash, destinationBounds.width(),
+ destinationBounds.height());
mSurfaceTransactionHelper.scale(startTransaction, pipLeash, destinationBounds,
currentBounds);
startTransaction.apply();
@@ -635,9 +686,11 @@
private void startExpandAnimation(final TaskInfo taskInfo, final SurfaceControl leash,
final Rect baseBounds, final Rect startBounds, final Rect endBounds,
final int rotationDelta) {
+ final Rect sourceHintRect = PipBoundsAlgorithm.getValidSourceHintRect(
+ taskInfo.pictureInPictureParams, endBounds);
final PipAnimationController.PipTransitionAnimator animator =
mPipAnimationController.getAnimator(taskInfo, leash, baseBounds, startBounds,
- endBounds, null /* sourceHintRect */, TRANSITION_DIRECTION_LEAVE_PIP,
+ endBounds, sourceHintRect, TRANSITION_DIRECTION_LEAVE_PIP,
0 /* startingAngle */, rotationDelta);
animator.setTransitionDirection(TRANSITION_DIRECTION_LEAVE_PIP)
.setPipAnimationCallback(mPipAnimationCallback)
@@ -764,16 +817,12 @@
final Rect currentBounds = taskInfo.configuration.windowConfiguration.getBounds();
int rotationDelta = deltaRotation(startRotation, endRotation);
Rect sourceHintRect = PipBoundsAlgorithm.getValidSourceHintRect(
- taskInfo.pictureInPictureParams, currentBounds);
+ taskInfo.pictureInPictureParams, currentBounds, destinationBounds);
if (rotationDelta != Surface.ROTATION_0 && mInFixedRotation) {
// Need to get the bounds of new rotation in old rotation for fixed rotation,
computeEnterPipRotatedBounds(rotationDelta, startRotation, endRotation, taskInfo,
destinationBounds, sourceHintRect);
}
- // Set corner radius for entering pip.
- mSurfaceTransactionHelper
- .crop(finishTransaction, leash, destinationBounds)
- .round(finishTransaction, leash, true /* applyCornerRadius */);
if (!mPipOrganizer.shouldAttachMenuEarly()) {
mTransitions.getMainExecutor().executeDelayed(
() -> mPipMenuController.attach(leash), 0);
@@ -782,41 +831,11 @@
if (taskInfo.pictureInPictureParams != null
&& taskInfo.pictureInPictureParams.isAutoEnterEnabled()
&& mPipTransitionState.getInSwipePipToHomeTransition()) {
- final SurfaceControl swipePipToHomeOverlay = mPipOrganizer.mSwipePipToHomeOverlay;
- startTransaction.setMatrix(leash, Matrix.IDENTITY_MATRIX, new float[9])
- .setPosition(leash, destinationBounds.left, destinationBounds.top)
- .setWindowCrop(leash, destinationBounds.width(), destinationBounds.height());
- if (swipePipToHomeOverlay != null) {
- // Launcher fade in the overlay on top of the fullscreen Task. It is possible we
- // reparent the PIP activity to a new PIP task (in case there are other activities
- // in the original Task), so we should also reparent the overlay to the PIP task.
- startTransaction.reparent(swipePipToHomeOverlay, leash)
- .setLayer(swipePipToHomeOverlay, Integer.MAX_VALUE);
- mPipOrganizer.mSwipePipToHomeOverlay = null;
- }
- startTransaction.apply();
- if (rotationDelta != Surface.ROTATION_0 && mInFixedRotation) {
- // For fixed rotation, set the destination bounds to the new rotation coordinates
- // at the end.
- destinationBounds.set(mPipBoundsAlgorithm.getEntryDestinationBounds());
- }
- mPipBoundsState.setBounds(destinationBounds);
- onFinishResize(taskInfo, destinationBounds, TRANSITION_DIRECTION_TO_PIP, null /* tx */);
- sendOnPipTransitionFinished(TRANSITION_DIRECTION_TO_PIP);
- if (swipePipToHomeOverlay != null) {
- mPipOrganizer.fadeOutAndRemoveOverlay(swipePipToHomeOverlay,
- null /* callback */, false /* withStartDelay */);
- }
- mPipTransitionState.setInSwipePipToHomeTransition(false);
+ handleSwipePipToHomeTransition(startTransaction, finishTransaction, leash,
+ sourceHintRect, destinationBounds, rotationDelta, taskInfo);
return;
}
- if (rotationDelta != Surface.ROTATION_0) {
- Matrix tmpTransform = new Matrix();
- tmpTransform.postRotate(rotationDelta);
- startTransaction.setMatrix(leash, tmpTransform, new float[9]);
- }
-
final int enterAnimationType = mEnterAnimationType;
if (enterAnimationType == ANIM_TYPE_ALPHA) {
startTransaction.setAlpha(leash, 0f);
@@ -850,11 +869,13 @@
} else if (enterAnimationType == ANIM_TYPE_ALPHA) {
animator = mPipAnimationController.getAnimator(taskInfo, leash, destinationBounds,
0f, 1f);
+ mSurfaceTransactionHelper
+ .crop(finishTransaction, leash, destinationBounds)
+ .round(finishTransaction, leash, true /* applyCornerRadius */);
} else {
throw new RuntimeException("Unrecognized animation type: " + enterAnimationType);
}
animator.setTransitionDirection(TRANSITION_DIRECTION_TO_PIP)
- .setPipTransactionHandler(mPipOrganizer.getPipTransactionHandler())
.setPipAnimationCallback(mPipAnimationCallback)
.setDuration(mEnterExitAnimationDuration);
if (rotationDelta != Surface.ROTATION_0 && mInFixedRotation) {
@@ -863,7 +884,15 @@
// ComputeRotatedBounds has changed the DisplayLayout without affecting the animation.
animator.setDestinationBounds(mPipBoundsAlgorithm.getEntryDestinationBounds());
}
- animator.start();
+ // Keep the last appearance when finishing the transition. The transform will be reset when
+ // setting bounds.
+ animator.setPipTransactionHandler(mTransactionConsumer).applySurfaceControlTransaction(
+ leash, finishTransaction, PipAnimationController.FRACTION_END);
+ // Remove the workaround after fixing ClosePipBySwipingDownTest that detects the shadow
+ // as unexpected visible.
+ finishTransaction.setShadowRadius(leash, 0);
+ // Start to animate enter PiP.
+ animator.setPipTransactionHandler(mPipOrganizer.getPipTransactionHandler()).start();
}
/** Computes destination bounds in old rotation and updates source hint rect if available. */
@@ -885,6 +914,51 @@
}
}
+ private void handleSwipePipToHomeTransition(
+ @NonNull SurfaceControl.Transaction startTransaction,
+ @NonNull SurfaceControl.Transaction finishTransaction,
+ @NonNull SurfaceControl leash, @Nullable Rect sourceHintRect,
+ @NonNull Rect destinationBounds, int rotationDelta,
+ @NonNull ActivityManager.RunningTaskInfo pipTaskInfo) {
+ final SurfaceControl swipePipToHomeOverlay = mPipOrganizer.mSwipePipToHomeOverlay;
+ if (swipePipToHomeOverlay != null) {
+ // Launcher fade in the overlay on top of the fullscreen Task. It is possible we
+ // reparent the PIP activity to a new PIP task (in case there are other activities
+ // in the original Task), so we should also reparent the overlay to the PIP task.
+ startTransaction.reparent(swipePipToHomeOverlay, leash)
+ .setLayer(swipePipToHomeOverlay, Integer.MAX_VALUE);
+ mPipOrganizer.mSwipePipToHomeOverlay = null;
+ }
+
+ Rect sourceBounds = pipTaskInfo.configuration.windowConfiguration.getBounds();
+ if (!Transitions.SHELL_TRANSITIONS_ROTATION && rotationDelta % 2 == 1) {
+ // PipController#startSwipePipToHome has updated the display layout to new rotation,
+ // so flip the source bounds to match the same orientation.
+ sourceBounds = new Rect(0, 0, sourceBounds.height(), sourceBounds.width());
+ }
+ final PipAnimationController.PipTransitionAnimator animator =
+ mPipAnimationController.getAnimator(pipTaskInfo, leash, sourceBounds, sourceBounds,
+ destinationBounds, sourceHintRect, TRANSITION_DIRECTION_TO_PIP,
+ 0 /* startingAngle */, 0 /* rotationDelta */)
+ .setPipTransactionHandler(mTransactionConsumer)
+ .setTransitionDirection(TRANSITION_DIRECTION_TO_PIP);
+ // The start state is the end state for swipe-auto-pip.
+ startTransaction.merge(finishTransaction);
+ animator.applySurfaceControlTransaction(leash, startTransaction,
+ PipAnimationController.FRACTION_END);
+ startTransaction.apply();
+
+ mPipBoundsState.setBounds(destinationBounds);
+ final SurfaceControl.Transaction tx = new SurfaceControl.Transaction();
+ onFinishResize(pipTaskInfo, destinationBounds, TRANSITION_DIRECTION_TO_PIP, tx);
+ sendOnPipTransitionFinished(TRANSITION_DIRECTION_TO_PIP);
+ if (swipePipToHomeOverlay != null) {
+ mPipOrganizer.fadeOutAndRemoveOverlay(swipePipToHomeOverlay,
+ null /* callback */, false /* withStartDelay */);
+ }
+ mPipTransitionState.setInSwipePipToHomeTransition(false);
+ }
+
private void startExitToSplitAnimation(@NonNull TransitionInfo info,
@NonNull SurfaceControl.Transaction startTransaction,
@NonNull SurfaceControl.Transaction finishTransaction,
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentsTransitionHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentsTransitionHandler.java
index 3e568e9..387d390 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentsTransitionHandler.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentsTransitionHandler.java
@@ -431,6 +431,11 @@
" adding opening taskId=%d", taskInfo.taskId);
mOpeningTasks.add(new TaskState(change, target.leash));
}
+ } else if (TransitionUtil.isDividerBar(change)) {
+ final RemoteAnimationTarget target = TransitionUtil.newTarget(change,
+ info.getChanges().size() - i, info, t, mLeashMap);
+ // Add this as a app and we will separate them on launcher side by window type.
+ apps.add(target);
}
}
t.apply();
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java
index af52350..c654c1b 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java
@@ -337,6 +337,11 @@
return isTaskInSplitScreen(taskId) && isSplitScreenVisible();
}
+ /** Check whether the task is the single-top root or the root of one of the stages. */
+ public boolean isTaskRootOrStageRoot(int taskId) {
+ return mStageCoordinator.isRootOrStageRoot(taskId);
+ }
+
public @SplitPosition int getSplitPosition(int taskId) {
return mStageCoordinator.getSplitPosition(taskId);
}
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 e5ae10c..749549d 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
@@ -377,6 +377,13 @@
return STAGE_TYPE_UNDEFINED;
}
+ boolean isRootOrStageRoot(int taskId) {
+ if (mRootTaskInfo != null && mRootTaskInfo.taskId == taskId) {
+ return true;
+ }
+ return mMainStage.isRootTaskId(taskId) || mSideStage.isRootTaskId(taskId);
+ }
+
boolean moveToStage(ActivityManager.RunningTaskInfo task, @SplitPosition int stagePosition,
WindowContainerTransaction wct) {
prepareEnterSplitScreen(wct, task, stagePosition);
@@ -482,8 +489,6 @@
}
final WindowContainerTransaction wct = new WindowContainerTransaction();
- final WindowContainerTransaction evictWct = new WindowContainerTransaction();
- prepareEvictChildTasks(position, evictWct);
options = resolveStartStage(STAGE_TYPE_UNDEFINED, position, options, null /* wct */);
wct.sendPendingIntent(intent, fillInIntent, options);
@@ -494,12 +499,7 @@
prepareEnterSplitScreen(wct, null /* taskInfo */, position);
mSplitTransitions.startEnterTransition(TRANSIT_TO_FRONT, wct, null, this,
- null /* consumedCallback */,
- (finishWct, finishT) -> {
- if (!evictWct.isEmpty()) {
- finishWct.merge(evictWct, true);
- }
- } /* finishedCallback */, extraTransitType);
+ null /* consumedCallback */, null /* finishedCallback */, extraTransitType);
}
/** Launches an activity into split by legacy transition. */
@@ -1476,6 +1476,8 @@
mSideStage.removeAllTasks(wct, false /* toTop */);
mMainStage.deactivate(wct, false /* toTop */);
}
+ wct.setReparentLeafTaskIfRelaunch(mRootTaskInfo.token,
+ false /* reparentLeafTaskIfRelaunch */);
}
private void prepareEnterSplitScreen(WindowContainerTransaction wct) {
@@ -1509,7 +1511,6 @@
if (taskInfo != null) {
wct.startTask(taskInfo.taskId,
resolveStartStage(STAGE_TYPE_UNDEFINED, startPosition, null, wct));
- targetStage.evictAllChildren(wct);
}
// If running background, we need to reparent current top visible task to another stage
// and evict all tasks current under its.
@@ -1519,7 +1520,6 @@
updateWindowBounds(mSplitLayout, wct);
final StageTaskListener anotherStage = targetStage == mMainStage
? mSideStage : mMainStage;
- anotherStage.evictAllChildren(wct);
anotherStage.reparentTopTask(wct);
wct.reorder(mRootTaskInfo.token, true);
setRootForceTranslucent(false, wct);
@@ -1538,13 +1538,14 @@
mSideStage.addTask(taskInfo, wct);
}
mMainStage.activate(wct, true /* includingTopTask */);
+ mSplitLayout.resetDividerPosition();
updateWindowBounds(mSplitLayout, wct);
wct.reorder(mRootTaskInfo.token, true);
setRootForceTranslucent(false, wct);
}
void finishEnterSplitScreen(SurfaceControl.Transaction t) {
- mSplitLayout.init();
+ mSplitLayout.update(t);
setDividerVisibility(true, t);
// Ensure divider surface are re-parented back into the hierarchy at the end of the
// transition. See Transition#buildFinishTransaction for more detail.
@@ -1776,7 +1777,10 @@
});
}
- void onChildTaskAppeared(StageListenerImpl stageListener, int taskId) {
+ /** Callback when split roots have child task appeared under it, this is a little different from
+ * #onStageHasChildrenChanged because this would be called every time child task appeared.
+ * NOTICE: This only be called on legacy transition. */
+ private void onChildTaskAppeared(StageListenerImpl stageListener, int taskId) {
// Handle entering split screen while there is a split pair running in the background.
if (stageListener == mSideStageListener && !isSplitScreenVisible() && isSplitActive()
&& mSplitRequest == null) {
@@ -1822,6 +1826,8 @@
wct.setForceTranslucent(mRootTaskInfo.token, translucent);
}
+ /** Callback when split roots visiblility changed.
+ * NOTICE: This only be called on legacy transition. */
private void onStageVisibilityChanged(StageListenerImpl stageListener) {
// If split didn't active, just ignore this callback because we should already did these
// on #applyExitSplitScreen.
@@ -1963,6 +1969,8 @@
}
}
+ /** Callback when split roots have child or haven't under it.
+ * NOTICE: This only be called on legacy transition. */
private void onStageHasChildrenChanged(StageListenerImpl stageListener) {
final boolean hasChildren = stageListener.mHasChildren;
final boolean isSideStage = stageListener == mSideStageListener;
@@ -2327,6 +2335,15 @@
// the remote handler.
return null;
}
+
+ if ((mMainStage.containsTask(triggerTask.taskId)
+ && mMainStage.getChildCount() == 1)
+ || (mSideStage.containsTask(triggerTask.taskId)
+ && mSideStage.getChildCount() == 1)) {
+ // A splitting task is opening to fullscreen causes one side of the split empty,
+ // so appends operations to exit split.
+ prepareExitSplitScreen(STAGE_TYPE_UNDEFINED, out);
+ }
}
} else {
if (isOpening && getStageOfTask(triggerTask) != null) {
@@ -2409,9 +2426,23 @@
if (isOpeningType(change.getMode())) {
// Split is opened by someone so set it as visible.
setSplitsVisible(true);
+ // TODO(b/275664132): Find a way to integrate this with finishWct.
+ // This is setting the flag to a task and not interfering with the
+ // transition.
+ final WindowContainerTransaction wct = new WindowContainerTransaction();
+ wct.setReparentLeafTaskIfRelaunch(mRootTaskInfo.token,
+ false /* reparentLeafTaskIfRelaunch */);
+ mTaskOrganizer.applyTransaction(wct);
} else if (isClosingType(change.getMode())) {
// Split is closed by someone so set it as invisible.
setSplitsVisible(false);
+ // TODO(b/275664132): Find a way to integrate this with finishWct.
+ // This is setting the flag to a task and not interfering with the
+ // transition.
+ final WindowContainerTransaction wct = new WindowContainerTransaction();
+ wct.setReparentLeafTaskIfRelaunch(mRootTaskInfo.token,
+ true /* reparentLeafTaskIfRelaunch */);
+ mTaskOrganizer.applyTransaction(wct);
}
continue;
}
@@ -2530,7 +2561,7 @@
boolean shouldAnimate = true;
if (mSplitTransitions.isPendingEnter(transition)) {
shouldAnimate = startPendingEnterAnimation(
- transition, info, startTransaction, finishTransaction);
+ mSplitTransitions.mPendingEnter, info, startTransaction, finishTransaction);
} else if (mSplitTransitions.isPendingDismiss(transition)) {
shouldAnimate = startPendingDismissAnimation(
mSplitTransitions.mPendingDismiss, info, startTransaction, finishTransaction);
@@ -2566,7 +2597,8 @@
}
}
- private boolean startPendingEnterAnimation(@NonNull IBinder transition,
+ private boolean startPendingEnterAnimation(
+ @NonNull SplitScreenTransitions.TransitSession enterTransition,
@NonNull TransitionInfo info, @NonNull SurfaceControl.Transaction t,
@NonNull SurfaceControl.Transaction finishT) {
// First, verify that we actually have opened apps in both splits.
@@ -2577,9 +2609,11 @@
final ActivityManager.RunningTaskInfo taskInfo = change.getTaskInfo();
if (taskInfo == null || !taskInfo.hasParentTask()) continue;
final @StageType int stageType = getStageType(getStageOfTask(taskInfo));
- if (stageType == STAGE_TYPE_MAIN) {
+ if (stageType == STAGE_TYPE_MAIN
+ && (isOpeningType(change.getMode()) || change.getMode() == TRANSIT_CHANGE)) {
+ // Includes TRANSIT_CHANGE to cover reparenting top-most task to split.
mainChild = change;
- } else if (stageType == STAGE_TYPE_SIDE) {
+ } else if (stageType == STAGE_TYPE_SIDE && isOpeningType(change.getMode())) {
sideChild = change;
}
}
@@ -2598,7 +2632,10 @@
final int dismissTop = mainChild != null ? STAGE_TYPE_MAIN :
(sideChild != null ? STAGE_TYPE_SIDE : STAGE_TYPE_UNDEFINED);
mSplitTransitions.mPendingEnter.cancel(
- (cancelWct, cancelT) -> prepareExitSplitScreen(dismissTop, cancelWct));
+ (cancelWct, cancelT) -> {
+ mSideStage.removeAllTasks(cancelWct, dismissTop == STAGE_TYPE_SIDE);
+ mMainStage.deactivate(cancelWct, dismissTop == STAGE_TYPE_MAIN);
+ });
return true;
}
}
@@ -2620,6 +2657,17 @@
+ " before startAnimation().");
}
+ final TransitionInfo.Change finalMainChild = mainChild;
+ final TransitionInfo.Change finalSideChild = sideChild;
+ enterTransition.setFinishedCallback((callbackWct, callbackT) -> {
+ if (finalMainChild != null) {
+ mMainStage.evictOtherChildren(callbackWct, finalMainChild.getTaskInfo().taskId);
+ }
+ if (finalSideChild != null) {
+ mSideStage.evictOtherChildren(callbackWct, finalSideChild.getTaskInfo().taskId);
+ }
+ });
+
finishEnterSplitScreen(finishT);
addDividerBarToTransition(info, true /* show */);
return true;
@@ -2788,8 +2836,8 @@
}
/** Call this when starting the open-recents animation while split-screen is active. */
- public void onRecentsInSplitAnimationStart(@NonNull SurfaceControl.Transaction t) {
- setDividerVisibility(false, t);
+ public void onRecentsInSplitAnimationStart(TransitionInfo info) {
+ addDividerBarToTransition(info, false /* show */);
}
/** Call this when the recents animation during split-screen finishes. */
@@ -2806,21 +2854,15 @@
|| mSideStage.containsContainer(container))) {
updateSurfaceBounds(mSplitLayout, finishT,
false /* applyResizingOffset */);
+ finishT.reparent(mSplitLayout.getDividerLeash(), mRootTaskLeash);
setDividerVisibility(true, finishT);
return;
}
}
- // TODO(b/275664132): Remove dismissing split screen here to fit in back-to-split support.
- // Dismiss the split screen if it's not returning to split.
- prepareExitSplitScreen(STAGE_TYPE_UNDEFINED, finishWct);
- for (TransitionInfo.Change change : info.getChanges()) {
- if (change.getTaskInfo() != null && TransitionUtil.isClosingType(change.getMode())) {
- finishT.setCrop(change.getLeash(), null).hide(change.getLeash());
- }
- }
setSplitsVisible(false);
- setDividerVisibility(false, finishT);
+ finishWct.setReparentLeafTaskIfRelaunch(mRootTaskInfo.token,
+ true /* reparentLeafTaskIfRelaunch */);
logExit(EXIT_REASON_UNKNOWN);
}
@@ -2892,6 +2934,7 @@
}
if (!isSplitScreenVisible()) {
// If split running background, exit split first.
+ // TODO(b/280392203) : skip doing this on shell transition once this bug is fixed.
exitSplitScreen(null /* childrenToTop */, EXIT_REASON_RECREATE_SPLIT);
}
mLogger.enterRequestedByDrag(position, dragSessionId);
@@ -2903,6 +2946,7 @@
public void onRequestToSplit(InstanceId sessionId, int enterReason) {
if (!isSplitScreenVisible()) {
// If split running background, exit split first.
+ // TODO(b/280392203) : skip doing this on shell transition once this bug is fixed.
exitSplitScreen(null /* childrenToTop */, EXIT_REASON_RECREATE_SPLIT);
}
mLogger.enterRequested(sessionId, enterReason);
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageTaskListener.java b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageTaskListener.java
index 18b09b0..e2e9270 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageTaskListener.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageTaskListener.java
@@ -286,6 +286,10 @@
}
}
+ boolean isRootTaskId(int taskId) {
+ return mRootTaskInfo != null && mRootTaskInfo.taskId == taskId;
+ }
+
void onResizing(Rect newBounds, Rect sideBounds, SurfaceControl.Transaction t, int offsetX,
int offsetY, boolean immediately) {
if (mSplitDecorManager != null && mRootTaskInfo != null) {
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/taskview/TaskView.java b/libs/WindowManager/Shell/src/com/android/wm/shell/taskview/TaskView.java
index e4d8c32..4faa929 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/taskview/TaskView.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/taskview/TaskView.java
@@ -177,6 +177,13 @@
}
/**
+ * Call to remove the task from window manager. This task will not appear in recents.
+ */
+ public void removeTask() {
+ mTaskViewTaskController.removeTask();
+ }
+
+ /**
* Release this container if it is initialized.
*/
public void release() {
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/taskview/TaskViewTaskController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/taskview/TaskViewTaskController.java
index 2ab4c75..1bbd367 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/taskview/TaskViewTaskController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/taskview/TaskViewTaskController.java
@@ -31,6 +31,7 @@
import android.graphics.Rect;
import android.os.Binder;
import android.util.CloseGuard;
+import android.util.Slog;
import android.view.SurfaceControl;
import android.window.WindowContainerToken;
import android.window.WindowContainerTransaction;
@@ -49,6 +50,8 @@
*/
public class TaskViewTaskController implements ShellTaskOrganizer.TaskListener {
+ private static final String TAG = TaskViewTaskController.class.getSimpleName();
+
private final CloseGuard mGuard = new CloseGuard();
private final ShellTaskOrganizer mTaskOrganizer;
@@ -102,7 +105,7 @@
}
/** Until all users are converted, we may have mixed-use (eg. Car). */
- private boolean isUsingShellTransitions() {
+ public boolean isUsingShellTransitions() {
return mTaskViewTransitions != null && mTaskViewTransitions.isEnabled();
}
@@ -401,6 +404,20 @@
mSyncQueue.queue(wct);
}
+ /**
+ * Call to remove the task from window manager. This task will not appear in recents.
+ */
+ void removeTask() {
+ if (mTaskToken == null) {
+ // Call to remove task before we have one, do nothing
+ Slog.w(TAG, "Trying to remove a task that was never added? (no taskToken)");
+ return;
+ }
+ WindowContainerTransaction wct = new WindowContainerTransaction();
+ wct.removeTask(mTaskToken);
+ mTaskViewTransitions.closeTaskView(wct, this);
+ }
+
/** Should be called when the client surface is destroyed. */
public void surfaceDestroyed() {
mSurfaceCreated = false;
@@ -444,7 +461,7 @@
return;
}
- finishTransaction.reparent(mTaskLeash, null).apply();
+ finishTransaction.reparent(mTaskLeash, null);
if (mListener != null) {
final int taskId = mTaskInfo.taskId;
@@ -481,16 +498,17 @@
if (mSurfaceCreated) {
// Surface is ready, so just reparent the task to this surface control
startTransaction.reparent(mTaskLeash, mSurfaceControl)
- .show(mTaskLeash)
- .apply();
+ .show(mTaskLeash);
// Also reparent on finishTransaction since the finishTransaction will reparent back
// to its "original" parent by default.
+ Rect boundsOnScreen = mTaskViewBase.getCurrentBoundsOnScreen();
finishTransaction.reparent(mTaskLeash, mSurfaceControl)
.setPosition(mTaskLeash, 0, 0)
- .apply();
- mTaskViewTransitions.updateBoundsState(this, mTaskViewBase.getCurrentBoundsOnScreen());
+ // TODO: maybe once b/280900002 is fixed this will be unnecessary
+ .setWindowCrop(mTaskLeash, boundsOnScreen.width(), boundsOnScreen.height());
+ mTaskViewTransitions.updateBoundsState(this, boundsOnScreen);
mTaskViewTransitions.updateVisibilityState(this, true /* visible */);
- wct.setBounds(mTaskToken, mTaskViewBase.getCurrentBoundsOnScreen());
+ wct.setBounds(mTaskToken, boundsOnScreen);
} else {
// The surface has already been destroyed before the task has appeared,
// so go ahead and hide the task entirely
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/taskview/TaskViewTransitions.java b/libs/WindowManager/Shell/src/com/android/wm/shell/taskview/TaskViewTransitions.java
index 2faed3a..fe2faaf 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/taskview/TaskViewTransitions.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/taskview/TaskViewTransitions.java
@@ -17,6 +17,7 @@
package com.android.wm.shell.taskview;
import static android.view.WindowManager.TRANSIT_CHANGE;
+import static android.view.WindowManager.TRANSIT_CLOSE;
import static android.view.WindowManager.TRANSIT_OPEN;
import static android.view.WindowManager.TRANSIT_TO_BACK;
import static android.view.WindowManager.TRANSIT_TO_FRONT;
@@ -201,6 +202,13 @@
startNextTransition();
}
+ void closeTaskView(@NonNull WindowContainerTransaction wct,
+ @NonNull TaskViewTaskController taskView) {
+ updateVisibilityState(taskView, false /* visible */);
+ mPending.add(new PendingTransition(TRANSIT_CLOSE, wct, taskView, null /* cookie */));
+ startNextTransition();
+ }
+
void setTaskViewVisible(TaskViewTaskController taskView, boolean visible) {
if (mTaskViews.get(taskView) == null) return;
if (mTaskViews.get(taskView).mVisible == visible) return;
@@ -297,6 +305,11 @@
if (TransitionUtil.isClosingType(chg.getMode())) {
final boolean isHide = chg.getMode() == TRANSIT_TO_BACK;
TaskViewTaskController tv = findTaskView(chg.getTaskInfo());
+ if (tv == null && !isHide) {
+ // TaskView can be null when closing
+ changesHandled++;
+ continue;
+ }
if (tv == null) {
if (pending != null) {
Slog.w(TAG, "Found a non-TaskView task in a TaskView Transition. This "
@@ -350,7 +363,8 @@
continue;
}
startTransaction.reparent(chg.getLeash(), tv.getSurfaceControl());
- finishTransaction.reparent(chg.getLeash(), tv.getSurfaceControl());
+ finishTransaction.reparent(chg.getLeash(), tv.getSurfaceControl())
+ .setPosition(chg.getLeash(), 0, 0);
changesHandled++;
}
}
@@ -364,7 +378,6 @@
}
// No animation, just show it immediately.
startTransaction.apply();
- finishTransaction.apply();
finishCallback.onTransitionFinished(wct, null /* wctCB */);
startNextTransition();
return true;
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 4942932..6fa1861 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
@@ -150,9 +150,9 @@
@Override
public WindowContainerTransaction handleRequest(@NonNull IBinder transition,
@NonNull TransitionRequestInfo request) {
- if (mPipHandler.requestHasPipEnter(request) && mSplitHandler.isSplitScreenVisible()) {
+ if (mPipHandler.requestHasPipEnter(request) && mSplitHandler.isSplitActive()) {
ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, " Got a PiP-enter request while "
- + "Split-Screen is foreground, so treat it as Mixed.");
+ + "Split-Screen is active, so treat it as Mixed.");
if (request.getRemoteTransition() != null) {
throw new IllegalStateException("Unexpected remote transition in"
+ "pip-enter-from-split request");
@@ -524,7 +524,7 @@
finishCallback.onTransitionFinished(wct, wctCB);
};
mixed.mInFlightSubAnimations = 1;
- mSplitHandler.onRecentsInSplitAnimationStart(startTransaction);
+ mSplitHandler.onRecentsInSplitAnimationStart(info);
final boolean handled = mixed.mLeftoversHandler.startAnimation(mixed.mTransition, info,
startTransaction, finishTransaction, finishCB);
if (!handled) {
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 1ee52ae..21dca95 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
@@ -24,6 +24,7 @@
import static android.app.ActivityOptions.ANIM_SCENE_TRANSITION;
import static android.app.ActivityOptions.ANIM_THUMBNAIL_SCALE_DOWN;
import static android.app.ActivityOptions.ANIM_THUMBNAIL_SCALE_UP;
+import static android.app.WindowConfiguration.ACTIVITY_TYPE_DREAM;
import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;
import static android.app.admin.DevicePolicyManager.ACTION_DEVICE_POLICY_RESOURCE_UPDATED;
import static android.app.admin.DevicePolicyManager.EXTRA_RESOURCE_TYPE;
@@ -36,12 +37,8 @@
import static android.view.WindowManager.LayoutParams.ROTATION_ANIMATION_SEAMLESS;
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_KEYGUARD_UNOCCLUDE;
-import static android.view.WindowManager.TRANSIT_OPEN;
import static android.view.WindowManager.TRANSIT_RELAUNCH;
-import static android.view.WindowManager.TRANSIT_TO_BACK;
-import static android.view.WindowManager.TRANSIT_TO_FRONT;
import static android.window.TransitionInfo.FLAG_BACK_GESTURE_ANIMATED;
import static android.window.TransitionInfo.FLAG_CROSS_PROFILE_OWNER_THUMBNAIL;
import static android.window.TransitionInfo.FLAG_CROSS_PROFILE_WORK_THUMBNAIL;
@@ -92,7 +89,6 @@
import android.view.SurfaceControl;
import android.view.SurfaceSession;
import android.view.WindowManager;
-import android.view.WindowManager.TransitionType;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.Transformation;
@@ -329,6 +325,8 @@
@ColorInt int backgroundColorForTransition = 0;
final int wallpaperTransit = getWallpaperTransitType(info);
boolean isDisplayRotationAnimationStarted = false;
+ final boolean isDreamTransition = isDreamTransition(info);
+
for (int i = info.getChanges().size() - 1; i >= 0; --i) {
final TransitionInfo.Change change = info.getChanges().get(i);
if (change.hasAllFlags(FLAG_IN_TASK_WITH_EMBEDDED_ACTIVITY
@@ -343,9 +341,10 @@
continue;
}
final boolean isTask = change.getTaskInfo() != null;
+ final int mode = change.getMode();
boolean isSeamlessDisplayChange = false;
- if (change.getMode() == TRANSIT_CHANGE && (change.getFlags() & FLAG_IS_DISPLAY) != 0) {
+ if (mode == TRANSIT_CHANGE && change.hasFlags(FLAG_IS_DISPLAY)) {
if (info.getType() == TRANSIT_CHANGE) {
final int anim = getRotationAnimationHint(change, info, mDisplayController);
isSeamlessDisplayChange = anim == ROTATION_ANIMATION_SEAMLESS;
@@ -361,7 +360,7 @@
}
}
- if (change.getMode() == TRANSIT_CHANGE) {
+ if (mode == TRANSIT_CHANGE) {
// If task is child task, only set position in parent and update crop when needed.
if (isTask && change.getParent() != null
&& info.getChange(change.getParent()).getTaskInfo() != null) {
@@ -410,8 +409,7 @@
// Hide the invisible surface directly without animating it if there is a display
// rotation animation playing.
- if (isDisplayRotationAnimationStarted && TransitionUtil.isClosingType(
- change.getMode())) {
+ if (isDisplayRotationAnimationStarted && TransitionUtil.isClosingType(mode)) {
startTransaction.hide(change.getLeash());
continue;
}
@@ -424,16 +422,12 @@
// Don't animate anything that isn't independent.
if (!TransitionInfo.isIndependent(change, info)) continue;
- Animation a = loadAnimation(info, change, wallpaperTransit);
+ Animation a = loadAnimation(info, change, wallpaperTransit, isDreamTransition);
if (a != null) {
if (isTask) {
- final @TransitionType int type = info.getType();
- final boolean isOpenOrCloseTransition = type == TRANSIT_OPEN
- || type == TRANSIT_CLOSE
- || type == TRANSIT_TO_FRONT
- || type == TRANSIT_TO_BACK;
final boolean isTranslucent = (change.getFlags() & FLAG_TRANSLUCENT) != 0;
- if (isOpenOrCloseTransition && !isTranslucent
+ if (!isTranslucent && TransitionUtil.isOpenOrCloseMode(mode)
+ && TransitionUtil.isOpenOrCloseMode(info.getType())
&& wallpaperTransit == WALLPAPER_TRANSITION_NONE) {
// Use the overview background as the background for the animation
final Context uiContext = ActivityThread.currentActivityThread()
@@ -458,7 +452,7 @@
backgroundColorForTransition);
if (!isTask && a.hasExtension()) {
- if (!TransitionUtil.isOpeningType(change.getMode())) {
+ if (!TransitionUtil.isOpeningType(mode)) {
// Can screenshot now (before startTransaction is applied)
edgeExtendWindow(change, a, startTransaction, finishTransaction);
} else {
@@ -469,7 +463,7 @@
}
}
- final Rect clipRect = TransitionUtil.isClosingType(change.getMode())
+ final Rect clipRect = TransitionUtil.isClosingType(mode)
? new Rect(mRotator.getEndBoundsInStartRotation(change))
: new Rect(change.getEndAbsBounds());
clipRect.offsetTo(0, 0);
@@ -519,6 +513,18 @@
return true;
}
+ private static boolean isDreamTransition(@NonNull TransitionInfo info) {
+ for (int i = info.getChanges().size() - 1; i >= 0; --i) {
+ final TransitionInfo.Change change = info.getChanges().get(i);
+ if (change.getTaskInfo() != null
+ && change.getTaskInfo().topActivityType == ACTIVITY_TYPE_DREAM) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
@Override
public void mergeAnimation(@NonNull IBinder transition, @NonNull TransitionInfo info,
@NonNull SurfaceControl.Transaction t, @NonNull IBinder mergeTarget,
@@ -572,7 +578,8 @@
@Nullable
private Animation loadAnimation(@NonNull TransitionInfo info,
- @NonNull TransitionInfo.Change change, int wallpaperTransit) {
+ @NonNull TransitionInfo.Change change, int wallpaperTransit,
+ boolean isDreamTransition) {
Animation a;
final int type = info.getType();
@@ -630,7 +637,8 @@
// If there's a scene-transition, then jump-cut.
return null;
} else {
- a = loadAttributeAnimation(info, change, wallpaperTransit, mTransitionAnimation);
+ a = loadAttributeAnimation(
+ info, change, wallpaperTransit, mTransitionAnimation, isDreamTransition);
}
if (a != null) {
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Tracer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Tracer.java
index 0cede90..e27e4f9 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Tracer.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Tracer.java
@@ -28,7 +28,6 @@
import android.util.Log;
import com.android.internal.util.TraceBuffer;
-import com.android.wm.shell.nano.HandlerMapping;
import com.android.wm.shell.sysui.ShellCommandHandler;
import com.google.protobuf.nano.MessageNano;
@@ -41,6 +40,7 @@
import java.util.HashMap;
import java.util.Map;
import java.util.Queue;
+import java.util.concurrent.TimeUnit;
/**
* Helper class to collect and dump transition traces.
@@ -241,6 +241,10 @@
new com.android.wm.shell.nano.WmShellTransitionTraceProto();
proto.magicNumber = MAGIC_NUMBER_VALUE;
writeHandlerMappingToProto(proto);
+ long timeOffsetNs =
+ TimeUnit.MILLISECONDS.toNanos(System.currentTimeMillis())
+ - SystemClock.elapsedRealtimeNanos();
+ proto.realToElapsedTimeOffsetNanos = timeOffsetNs;
int pid = android.os.Process.myPid();
LogAndPrintln.i(pw, "Writing file to " + file.getAbsolutePath()
+ " from process " + pid);
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/TransitionAnimationHelper.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/TransitionAnimationHelper.java
index 0f4645c..19d8384 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/TransitionAnimationHelper.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/TransitionAnimationHelper.java
@@ -18,7 +18,6 @@
import static android.app.ActivityOptions.ANIM_FROM_STYLE;
import static android.app.ActivityOptions.ANIM_NONE;
-import static android.app.WindowConfiguration.ACTIVITY_TYPE_DREAM;
import static android.view.WindowManager.TRANSIT_CLOSE;
import static android.view.WindowManager.TRANSIT_OPEN;
import static android.view.WindowManager.TRANSIT_TO_BACK;
@@ -63,7 +62,7 @@
@Nullable
public static Animation loadAttributeAnimation(@NonNull TransitionInfo info,
@NonNull TransitionInfo.Change change, int wallpaperTransit,
- @NonNull TransitionAnimation transitionAnimation) {
+ @NonNull TransitionAnimation transitionAnimation, boolean isDreamTransition) {
final int type = info.getType();
final int changeMode = change.getMode();
final int changeFlags = change.getFlags();
@@ -71,11 +70,9 @@
final boolean isTask = change.getTaskInfo() != null;
final TransitionInfo.AnimationOptions options = info.getAnimationOptions();
final int overrideType = options != null ? options.getType() : ANIM_NONE;
- final boolean isDream =
- isTask && change.getTaskInfo().topActivityType == ACTIVITY_TYPE_DREAM;
int animAttr = 0;
boolean translucent = false;
- if (isDream) {
+ if (isDreamTransition) {
if (type == TRANSIT_OPEN) {
animAttr = enter
? R.styleable.WindowAnimation_dreamActivityOpenEnterAnimation
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java
index a73ab77..ab27c55 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java
@@ -19,8 +19,6 @@
import static android.view.WindowManager.TRANSIT_CHANGE;
import static android.view.WindowManager.TRANSIT_CLOSE;
import static android.view.WindowManager.TRANSIT_FIRST_CUSTOM;
-import static android.view.WindowManager.TRANSIT_FLAG_KEYGUARD_GOING_AWAY;
-import static android.view.WindowManager.TRANSIT_KEYGUARD_UNOCCLUDE;
import static android.view.WindowManager.TRANSIT_OPEN;
import static android.view.WindowManager.TRANSIT_SLEEP;
import static android.view.WindowManager.TRANSIT_TO_BACK;
@@ -503,7 +501,9 @@
*/
private static void setupAnimHierarchy(@NonNull TransitionInfo info,
@NonNull SurfaceControl.Transaction t, @NonNull SurfaceControl.Transaction finishT) {
- boolean isOpening = isOpeningType(info.getType());
+ final int type = info.getType();
+ final boolean isOpening = isOpeningType(type);
+ final boolean isClosing = isClosingType(type);
for (int i = 0; i < info.getRootCount(); ++i) {
t.show(info.getRoot(i).getLeash());
}
@@ -556,7 +556,13 @@
layer = zSplitLine + numChanges - i;
}
} else { // CHANGE or other
- layer = zSplitLine + numChanges - i;
+ if (isClosing) {
+ // Put below CLOSE mode.
+ layer = zSplitLine - i;
+ } else {
+ // Put above CLOSE mode.
+ layer = zSplitLine + numChanges - i;
+ }
}
t.setLayer(leash, layer);
}
@@ -851,14 +857,13 @@
active.mStartT, active.mFinishT, (wct, cb) -> onFinish(active, wct, cb));
if (consumed) {
ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, " animated by firstHandler");
+ mTracer.logDispatched(active.mInfo.getDebugId(), active.mHandler);
return;
}
}
// Otherwise give every other handler a chance
active.mHandler = dispatchTransition(active.mToken, active.mInfo, active.mStartT,
active.mFinishT, (wct, cb) -> onFinish(active, wct, cb), active.mHandler);
-
- mTracer.logDispatched(active.mInfo.getDebugId(), active.mHandler);
}
/**
@@ -877,6 +882,7 @@
if (consumed) {
ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, " animated by %s",
mHandlers.get(i));
+ mTracer.logDispatched(info.getDebugId(), mHandlers.get(i));
return mHandlers.get(i);
}
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/unfold/UnfoldBackgroundController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/unfold/UnfoldBackgroundController.java
index 96657af..9d4e6b4 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/unfold/UnfoldBackgroundController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/unfold/UnfoldBackgroundController.java
@@ -20,6 +20,7 @@
import static android.graphics.Color.green;
import static android.graphics.Color.red;
+import android.annotation.ColorRes;
import android.annotation.NonNull;
import android.content.Context;
import android.view.SurfaceControl;
@@ -33,10 +34,14 @@
private static final int BACKGROUND_LAYER_Z_INDEX = -1;
private final float[] mBackgroundColor;
+ private final float[] mSplitScreenBackgroundColor;
+ private float[] mBackgroundColorSet;
private SurfaceControl mBackgroundLayer;
+ private boolean mSplitScreenVisible = false;
public UnfoldBackgroundController(@NonNull Context context) {
- mBackgroundColor = getBackgroundColor(context);
+ mBackgroundColor = getRGBColorFromId(context, R.color.unfold_background);
+ mSplitScreenBackgroundColor = getRGBColorFromId(context, R.color.split_divider_background);
}
/**
@@ -44,7 +49,14 @@
* @param transaction where we should add the background if it is not added
*/
public void ensureBackground(@NonNull SurfaceControl.Transaction transaction) {
- if (mBackgroundLayer != null) return;
+ float[] expectedColor = getCurrentBackgroundColor();
+ if (mBackgroundLayer != null) {
+ if (mBackgroundColorSet != expectedColor) {
+ transaction.setColor(mBackgroundLayer, expectedColor);
+ mBackgroundColorSet = expectedColor;
+ }
+ return;
+ }
SurfaceControl.Builder colorLayerBuilder = new SurfaceControl.Builder()
.setName("app-unfold-background")
@@ -53,9 +65,10 @@
mBackgroundLayer = colorLayerBuilder.build();
transaction
- .setColor(mBackgroundLayer, mBackgroundColor)
+ .setColor(mBackgroundLayer, expectedColor)
.show(mBackgroundLayer)
.setLayer(mBackgroundLayer, BACKGROUND_LAYER_Z_INDEX);
+ mBackgroundColorSet = expectedColor;
}
/**
@@ -70,8 +83,25 @@
mBackgroundLayer = null;
}
- private float[] getBackgroundColor(Context context) {
- int colorInt = context.getResources().getColor(R.color.unfold_background);
+ /**
+ * Expected to be called whenever split screen visibility changes.
+ *
+ * @param visible True when split screen is visible
+ */
+ public void onSplitVisibilityChanged(boolean visible) {
+ mSplitScreenVisible = visible;
+ }
+
+ private float[] getCurrentBackgroundColor() {
+ if (mSplitScreenVisible) {
+ return mSplitScreenBackgroundColor;
+ } else {
+ return mBackgroundColor;
+ }
+ }
+
+ private float[] getRGBColorFromId(Context context, @ColorRes int id) {
+ int colorInt = context.getResources().getColor(id);
return new float[]{
(float) red(colorInt) / 255.0F,
(float) green(colorInt) / 255.0F,
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/unfold/animation/SplitTaskUnfoldAnimator.java b/libs/WindowManager/Shell/src/com/android/wm/shell/unfold/animation/SplitTaskUnfoldAnimator.java
index 2f0c964..123bf3b 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/unfold/animation/SplitTaskUnfoldAnimator.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/unfold/animation/SplitTaskUnfoldAnimator.java
@@ -292,6 +292,11 @@
.setCornerRadius(context.mLeash, 0.0F);
}
+ @Override
+ public void onSplitVisibilityChanged(boolean visible) {
+ mUnfoldBackgroundController.onSplitVisibilityChanged(visible);
+ }
+
private class AnimationContext {
final SurfaceControl mLeash;
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/util/KtProtoLog.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/util/KtProtoLog.kt
new file mode 100644
index 0000000..9b48a54
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/util/KtProtoLog.kt
@@ -0,0 +1,74 @@
+/*
+ * 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.wm.shell.util
+
+import android.util.Log
+import com.android.internal.protolog.common.IProtoLogGroup
+import com.android.wm.shell.protolog.ShellProtoLogImpl
+
+/**
+ * Log messages using an API similar to [com.android.internal.protolog.common.ProtoLog]. Useful for
+ * logging from Kotlin classes as ProtoLog does not have support for Kotlin.
+ *
+ * All messages are logged to logcat if logging is enabled for that [IProtoLogGroup].
+ */
+// TODO(b/168581922): remove once ProtoLog adds support for Kotlin
+class KtProtoLog {
+ companion object {
+ /** @see [com.android.internal.protolog.common.ProtoLog.d] */
+ fun d(group: IProtoLogGroup, messageString: String, vararg args: Any) {
+ if (ShellProtoLogImpl.isEnabled(group)) {
+ Log.d(group.tag, String.format(messageString, *args))
+ }
+ }
+
+ /** @see [com.android.internal.protolog.common.ProtoLog.v] */
+ fun v(group: IProtoLogGroup, messageString: String, vararg args: Any) {
+ if (ShellProtoLogImpl.isEnabled(group)) {
+ Log.v(group.tag, String.format(messageString, *args))
+ }
+ }
+
+ /** @see [com.android.internal.protolog.common.ProtoLog.i] */
+ fun i(group: IProtoLogGroup, messageString: String, vararg args: Any) {
+ if (ShellProtoLogImpl.isEnabled(group)) {
+ Log.i(group.tag, String.format(messageString, *args))
+ }
+ }
+
+ /** @see [com.android.internal.protolog.common.ProtoLog.w] */
+ fun w(group: IProtoLogGroup, messageString: String, vararg args: Any) {
+ if (ShellProtoLogImpl.isEnabled(group)) {
+ Log.w(group.tag, String.format(messageString, *args))
+ }
+ }
+
+ /** @see [com.android.internal.protolog.common.ProtoLog.e] */
+ fun e(group: IProtoLogGroup, messageString: String, vararg args: Any) {
+ if (ShellProtoLogImpl.isEnabled(group)) {
+ Log.e(group.tag, String.format(messageString, *args))
+ }
+ }
+
+ /** @see [com.android.internal.protolog.common.ProtoLog.wtf] */
+ fun wtf(group: IProtoLogGroup, messageString: String, vararg args: Any) {
+ if (ShellProtoLogImpl.isEnabled(group)) {
+ Log.wtf(group.tag, String.format(messageString, *args))
+ }
+ }
+ }
+}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/util/TransitionUtil.java b/libs/WindowManager/Shell/src/com/android/wm/shell/util/TransitionUtil.java
index 67a26fc..402b0ce 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/util/TransitionUtil.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/util/TransitionUtil.java
@@ -68,6 +68,12 @@
return type == TRANSIT_CLOSE || type == TRANSIT_TO_BACK;
}
+ /** Returns {@code true} if the transition is opening or closing mode. */
+ public static boolean isOpenOrCloseMode(@TransitionInfo.TransitionMode int mode) {
+ return mode == TRANSIT_OPEN || mode == TRANSIT_CLOSE
+ || mode == TRANSIT_TO_FRONT || mode == TRANSIT_TO_BACK;
+ }
+
/** Returns {@code true} if the transition has a display change. */
public static boolean hasDisplayChange(@NonNull TransitionInfo info) {
for (int i = info.getChanges().size() - 1; i >= 0; --i) {
@@ -110,6 +116,11 @@
&& !change.hasFlags(FLAG_IN_TASK_WITH_EMBEDDED_ACTIVITY);
}
+ /** Returns `true` if `change` is the divider. */
+ public static boolean isDividerBar(TransitionInfo.Change change) {
+ return isNonApp(change) && change.hasFlags(FLAG_IS_DIVIDER_BAR);
+ }
+
/** Returns `true` if `change` is only re-ordering. */
public static boolean isOrderOnly(TransitionInfo.Change change) {
return change.getMode() == TRANSIT_CHANGE
@@ -175,6 +186,14 @@
t.setPosition(leash, absBounds.left - info.getRoot(rootIdx).getOffset().x,
absBounds.top - info.getRoot(rootIdx).getOffset().y);
+ if (isDividerBar(change)) {
+ if (isOpeningType(mode)) {
+ t.setAlpha(leash, 0.f);
+ }
+ t.setLayer(leash, Integer.MAX_VALUE);
+ return;
+ }
+
// Put all the OPEN/SHOW on top
if (TransitionUtil.isOpeningType(mode)) {
if (isOpening) {
@@ -245,6 +264,10 @@
*/
public static RemoteAnimationTarget newTarget(TransitionInfo.Change change, int order,
SurfaceControl leash) {
+ if (isDividerBar(change)) {
+ return getDividerTarget(change, leash);
+ }
+
int taskId;
boolean isNotInRecents;
ActivityManager.RunningTaskInfo taskInfo;
@@ -284,8 +307,7 @@
new Rect(change.getStartAbsBounds()),
taskInfo,
change.getAllowEnterPip(),
- (change.getFlags() & FLAG_IS_DIVIDER_BAR) != 0
- ? TYPE_DOCK_DIVIDER : INVALID_WINDOW_TYPE
+ INVALID_WINDOW_TYPE
);
target.setWillShowImeOnTarget(
(change.getFlags() & TransitionInfo.FLAG_WILL_IME_SHOWN) != 0);
@@ -293,6 +315,17 @@
return target;
}
+ private static RemoteAnimationTarget getDividerTarget(TransitionInfo.Change change,
+ SurfaceControl leash) {
+ return new RemoteAnimationTarget(-1 /* taskId */, newModeToLegacyMode(change.getMode()),
+ leash, false /* isTranslucent */, null /* clipRect */,
+ null /* contentInsets */, Integer.MAX_VALUE /* prefixOrderIndex */,
+ new android.graphics.Point(0, 0) /* position */, change.getStartAbsBounds(),
+ change.getStartAbsBounds(), new WindowConfiguration(), true, null /* startLeash */,
+ null /* startBounds */, null /* taskInfo */, false /* allowEnterPip */,
+ TYPE_DOCK_DIVIDER);
+ }
+
/**
* Finds the "correct" root idx for a change. The change's end display is prioritized, then
* the start display. If there is no display, it will fallback on the 0th root in the
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/CaptionWindowDecorViewModel.java b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/CaptionWindowDecorViewModel.java
index 2bb3cce..39fb793 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/CaptionWindowDecorViewModel.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/CaptionWindowDecorViewModel.java
@@ -22,7 +22,6 @@
import android.app.ActivityManager.RunningTaskInfo;
import android.content.Context;
-import android.graphics.Rect;
import android.os.Handler;
import android.os.IBinder;
import android.util.SparseArray;
@@ -186,8 +185,9 @@
mSyncQueue);
mWindowDecorByTaskId.put(taskInfo.taskId, windowDecoration);
- final DragPositioningCallback dragPositioningCallback = createDragPositioningCallback(
- windowDecoration, taskInfo);
+ final DragPositioningCallback dragPositioningCallback =
+ new FluidResizeTaskPositioner(mTaskOrganizer, windowDecoration, mDisplayController,
+ null /* disallowedAreaForEndBounds */);
final CaptionTouchEventListener touchEventListener =
new CaptionTouchEventListener(taskInfo, dragPositioningCallback);
windowDecoration.setCaptionListeners(touchEventListener, touchEventListener);
@@ -198,17 +198,6 @@
setupCaptionColor(taskInfo, windowDecoration);
}
- private FluidResizeTaskPositioner createDragPositioningCallback(
- CaptionWindowDecoration windowDecoration, RunningTaskInfo taskInfo) {
- final int screenWidth = mDisplayController.getDisplayLayout(taskInfo.displayId).width();
- final int statusBarHeight = mDisplayController.getDisplayLayout(taskInfo.displayId)
- .stableInsets().top;
- final Rect disallowedAreaForEndBounds = new Rect(0, 0, screenWidth,
- statusBarHeight);
- return new FluidResizeTaskPositioner(mTaskOrganizer, windowDecoration,
- mDisplayController, disallowedAreaForEndBounds);
- }
-
private class CaptionTouchEventListener implements
View.OnClickListener, View.OnTouchListener, DragDetector.MotionEventHandler {
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 0b82184..54babce 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
@@ -760,6 +760,10 @@
private boolean shouldShowWindowDecor(RunningTaskInfo taskInfo) {
if (taskInfo.getWindowingMode() == WINDOWING_MODE_FREEFORM) return true;
+ if (mSplitScreenController.isPresent()
+ && mSplitScreenController.get().isTaskRootOrStageRoot(taskInfo.taskId)) {
+ return false;
+ }
return DesktopModeStatus.isProto2Enabled()
&& taskInfo.getActivityType() == ACTIVITY_TYPE_STANDARD
&& mDisplayController.getDisplayContext(taskInfo.displayId)
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/FluidResizeTaskPositioner.java b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/FluidResizeTaskPositioner.java
index 9bcb77f..9f79d21 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/FluidResizeTaskPositioner.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/FluidResizeTaskPositioner.java
@@ -21,6 +21,8 @@
import android.view.SurfaceControl;
import android.window.WindowContainerTransaction;
+import androidx.annotation.Nullable;
+
import com.android.wm.shell.ShellTaskOrganizer;
import com.android.wm.shell.common.DisplayController;
@@ -42,24 +44,24 @@
private final Rect mRepositionTaskBounds = new Rect();
// If a task move (not resize) finishes in this region, the positioner will not attempt to
// finalize the bounds there using WCT#setBounds
- private final Rect mDisallowedAreaForEndBounds = new Rect();
+ private final Rect mDisallowedAreaForEndBounds;
private boolean mHasDragResized;
private int mCtrlType;
FluidResizeTaskPositioner(ShellTaskOrganizer taskOrganizer, WindowDecoration windowDecoration,
- DisplayController displayController, Rect disallowedAreaForEndBounds) {
+ DisplayController displayController, @Nullable Rect disallowedAreaForEndBounds) {
this(taskOrganizer, windowDecoration, displayController, disallowedAreaForEndBounds,
dragStartListener -> {}, SurfaceControl.Transaction::new);
}
FluidResizeTaskPositioner(ShellTaskOrganizer taskOrganizer, WindowDecoration windowDecoration,
- DisplayController displayController, Rect disallowedAreaForEndBounds,
+ DisplayController displayController, @Nullable Rect disallowedAreaForEndBounds,
DragPositioningCallbackUtility.DragStartListener dragStartListener,
Supplier<SurfaceControl.Transaction> supplier) {
mTaskOrganizer = taskOrganizer;
mWindowDecoration = windowDecoration;
mDisplayController = displayController;
- mDisallowedAreaForEndBounds.set(disallowedAreaForEndBounds);
+ mDisallowedAreaForEndBounds = new Rect(disallowedAreaForEndBounds);
mDragStartListener = dragStartListener;
mTransactionSupplier = supplier;
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/ResizeVeil.java b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/ResizeVeil.java
index fa2d7a8..4899453 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/ResizeVeil.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/ResizeVeil.java
@@ -19,8 +19,10 @@
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ValueAnimator;
+import android.annotation.ColorRes;
import android.app.ActivityManager.RunningTaskInfo;
import android.content.Context;
+import android.content.res.Configuration;
import android.graphics.PixelFormat;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
@@ -109,6 +111,10 @@
t.reparent(mVeilSurface, parentSurface);
mParentSurface = parentSurface;
}
+
+ int backgroundColorId = getBackgroundColorId();
+ mViewHost.getView().setBackgroundColor(mContext.getColor(backgroundColorId));
+
t.show(mVeilSurface)
.apply();
final ValueAnimator animator = new ValueAnimator();
@@ -158,6 +164,17 @@
animator.start();
}
+ @ColorRes
+ private int getBackgroundColorId() {
+ Configuration configuration = mContext.getResources().getConfiguration();
+ if ((configuration.uiMode & Configuration.UI_MODE_NIGHT_MASK)
+ == Configuration.UI_MODE_NIGHT_YES) {
+ return R.color.desktop_mode_resize_veil_dark;
+ } else {
+ return R.color.desktop_mode_resize_veil_light;
+ }
+ }
+
/**
* Dispose of veil when it is no longer needed, likely on close of its container decor.
*/
diff --git a/libs/WindowManager/Shell/tests/OWNERS b/libs/WindowManager/Shell/tests/OWNERS
index 64dfc3e..deebad5 100644
--- a/libs/WindowManager/Shell/tests/OWNERS
+++ b/libs/WindowManager/Shell/tests/OWNERS
@@ -8,3 +8,4 @@
hwwang@google.com
chenghsiuchang@google.com
atsjenk@google.com
+jorgegil@google.com
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/common/bubbles/BubbleInfoTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/common/bubbles/BubbleInfoTest.kt
new file mode 100644
index 0000000..432909f
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/common/bubbles/BubbleInfoTest.kt
@@ -0,0 +1,52 @@
+/*
+ * 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.wm.shell.common.bubbles
+
+import android.os.Parcel
+import android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE
+import android.testing.AndroidTestingRunner
+import androidx.test.filters.SmallTest
+import com.android.wm.shell.ShellTestCase
+import com.google.common.truth.Truth.assertThat
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@SmallTest
+@RunWith(AndroidTestingRunner::class)
+class BubbleInfoTest : ShellTestCase() {
+
+ @Test
+ fun bubbleInfo() {
+ val bubbleInfo =
+ BubbleInfo("key", 0, "shortcut id", null, 6, "com.some.package", "title", true)
+ val parcel = Parcel.obtain()
+ bubbleInfo.writeToParcel(parcel, PARCELABLE_WRITE_RETURN_VALUE)
+ parcel.setDataPosition(0)
+
+ val bubbleInfoFromParcel = BubbleInfo.CREATOR.createFromParcel(parcel)
+
+ assertThat(bubbleInfo.key).isEqualTo(bubbleInfoFromParcel.key)
+ assertThat(bubbleInfo.flags).isEqualTo(bubbleInfoFromParcel.flags)
+ assertThat(bubbleInfo.shortcutId).isEqualTo(bubbleInfoFromParcel.shortcutId)
+ assertThat(bubbleInfo.icon).isEqualTo(bubbleInfoFromParcel.icon)
+ assertThat(bubbleInfo.userId).isEqualTo(bubbleInfoFromParcel.userId)
+ assertThat(bubbleInfo.packageName).isEqualTo(bubbleInfoFromParcel.packageName)
+ assertThat(bubbleInfo.title).isEqualTo(bubbleInfoFromParcel.title)
+ assertThat(bubbleInfo.isImportantConversation)
+ .isEqualTo(bubbleInfoFromParcel.isImportantConversation)
+ }
+}
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUIWindowManagerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUIWindowManagerTest.java
index 4de5298..78c3cbd 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUIWindowManagerTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUIWindowManagerTest.java
@@ -28,7 +28,6 @@
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.anyBoolean;
-import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.clearInvocations;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
@@ -37,6 +36,7 @@
import android.app.ActivityManager;
import android.app.TaskInfo;
+import android.content.res.Configuration;
import android.graphics.Rect;
import android.testing.AndroidTestingRunner;
import android.util.Pair;
@@ -362,14 +362,14 @@
mWindowManager.updateVisibility(/* canShow= */ false);
verify(mWindowManager, never()).createLayout(anyBoolean());
- verify(mLayout, atLeastOnce()).setVisibility(View.GONE);
+ verify(mLayout).setVisibility(View.GONE);
// Show button.
doReturn(View.GONE).when(mLayout).getVisibility();
mWindowManager.updateVisibility(/* canShow= */ true);
verify(mWindowManager, never()).createLayout(anyBoolean());
- verify(mLayout, atLeastOnce()).setVisibility(View.VISIBLE);
+ verify(mLayout).setVisibility(View.VISIBLE);
}
@Test
@@ -455,12 +455,21 @@
verify(mLayout).setCameraCompatHintVisibility(/* show= */ true);
}
+ @Test
+ public void testWhenDockedStateHasChanged_needsToBeRecreated() {
+ ActivityManager.RunningTaskInfo newTaskInfo = new ActivityManager.RunningTaskInfo();
+ newTaskInfo.configuration.uiMode |= Configuration.UI_MODE_TYPE_DESK;
+
+ Assert.assertTrue(mWindowManager.needsToBeRecreated(newTaskInfo, mTaskListener));
+ }
+
private static TaskInfo createTaskInfo(boolean hasSizeCompat,
@TaskInfo.CameraCompatControlState int cameraCompatControlState) {
ActivityManager.RunningTaskInfo taskInfo = new ActivityManager.RunningTaskInfo();
taskInfo.taskId = TASK_ID;
taskInfo.topActivityInSizeCompat = hasSizeCompat;
taskInfo.cameraCompatControlState = cameraCompatControlState;
+ taskInfo.configuration.uiMode &= ~Configuration.UI_MODE_TYPE_DESK;
return taskInfo;
}
}
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/ReachabilityEduWindowManagerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/ReachabilityEduWindowManagerTest.java
index 5bcc72e..973a99c 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/ReachabilityEduWindowManagerTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/ReachabilityEduWindowManagerTest.java
@@ -21,6 +21,7 @@
import android.app.ActivityManager;
import android.app.TaskInfo;
+import android.content.res.Configuration;
import android.testing.AndroidTestingRunner;
import androidx.test.filters.SmallTest;
@@ -31,6 +32,8 @@
import com.android.wm.shell.common.DisplayLayout;
import com.android.wm.shell.common.SyncTransactionQueue;
+import junit.framework.Assert;
+
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -46,63 +49,61 @@
@RunWith(AndroidTestingRunner.class)
@SmallTest
public class ReachabilityEduWindowManagerTest extends ShellTestCase {
-
- private static final int USER_ID = 1;
- private static final int TASK_ID = 1;
-
@Mock
private SyncTransactionQueue mSyncTransactionQueue;
@Mock
private ShellTaskOrganizer.TaskListener mTaskListener;
@Mock
- private CompatUIController.CompatUICallback mCallback;
- @Mock
private CompatUIConfiguration mCompatUIConfiguration;
@Mock
private DisplayLayout mDisplayLayout;
-
private TestShellExecutor mExecutor;
+ private TaskInfo mTaskInfo;
+ private ReachabilityEduWindowManager mWindowManager;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mExecutor = new TestShellExecutor();
+ mTaskInfo = new ActivityManager.RunningTaskInfo();
+ mTaskInfo.configuration.uiMode =
+ (mTaskInfo.configuration.uiMode & ~Configuration.UI_MODE_NIGHT_MASK)
+ | Configuration.UI_MODE_NIGHT_NO;
+ mTaskInfo.configuration.uiMode =
+ (mTaskInfo.configuration.uiMode & ~Configuration.UI_MODE_TYPE_MASK)
+ | Configuration.UI_MODE_TYPE_NORMAL;
+ mWindowManager = createReachabilityEduWindowManager(mTaskInfo);
}
@Test
public void testCreateLayout_notEligible_doesNotCreateLayout() {
- final ReachabilityEduWindowManager windowManager = createReachabilityEduWindowManager(
- createTaskInfo(/* userId= */ USER_ID, /*isLetterboxDoubleTapEnabled */ false));
+ assertFalse(mWindowManager.createLayout(/* canShow= */ true));
- assertFalse(windowManager.createLayout(/* canShow= */ true));
+ assertNull(mWindowManager.mLayout);
+ }
- assertNull(windowManager.mLayout);
+ @Test
+ public void testWhenDockedStateHasChanged_needsToBeRecreated() {
+ ActivityManager.RunningTaskInfo newTaskInfo = new ActivityManager.RunningTaskInfo();
+ newTaskInfo.configuration.uiMode =
+ (newTaskInfo.configuration.uiMode & ~Configuration.UI_MODE_TYPE_MASK)
+ | Configuration.UI_MODE_TYPE_DESK;
+
+ Assert.assertTrue(mWindowManager.needsToBeRecreated(newTaskInfo, mTaskListener));
+ }
+
+ @Test
+ public void testWhenDarkLightThemeHasChanged_needsToBeRecreated() {
+ ActivityManager.RunningTaskInfo newTaskInfo = new ActivityManager.RunningTaskInfo();
+ mTaskInfo.configuration.uiMode =
+ (mTaskInfo.configuration.uiMode & ~Configuration.UI_MODE_NIGHT_MASK)
+ | Configuration.UI_MODE_NIGHT_YES;
+
+ Assert.assertTrue(mWindowManager.needsToBeRecreated(newTaskInfo, mTaskListener));
}
private ReachabilityEduWindowManager createReachabilityEduWindowManager(TaskInfo taskInfo) {
return new ReachabilityEduWindowManager(mContext, taskInfo, mSyncTransactionQueue,
mTaskListener, mDisplayLayout, mCompatUIConfiguration, mExecutor);
}
-
- private static TaskInfo createTaskInfo(int userId, boolean isLetterboxDoubleTapEnabled) {
- return createTaskInfo(userId, /* isLetterboxDoubleTapEnabled */ isLetterboxDoubleTapEnabled,
- /* topActivityLetterboxVerticalPosition */ -1,
- /* topActivityLetterboxHorizontalPosition */ -1,
- /* topActivityLetterboxWidth */ -1,
- /* topActivityLetterboxHeight */ -1);
- }
-
- private static TaskInfo createTaskInfo(int userId, boolean isLetterboxDoubleTapEnabled,
- int topActivityLetterboxVerticalPosition, int topActivityLetterboxHorizontalPosition,
- int topActivityLetterboxWidth, int topActivityLetterboxHeight) {
- ActivityManager.RunningTaskInfo taskInfo = new ActivityManager.RunningTaskInfo();
- taskInfo.userId = userId;
- taskInfo.taskId = TASK_ID;
- taskInfo.isLetterboxDoubleTapEnabled = isLetterboxDoubleTapEnabled;
- taskInfo.topActivityLetterboxVerticalPosition = topActivityLetterboxVerticalPosition;
- taskInfo.topActivityLetterboxHorizontalPosition = topActivityLetterboxHorizontalPosition;
- taskInfo.topActivityLetterboxWidth = topActivityLetterboxWidth;
- taskInfo.topActivityLetterboxHeight = topActivityLetterboxHeight;
- return taskInfo;
- }
}
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/RestartDialogWindowManagerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/RestartDialogWindowManagerTest.java
new file mode 100644
index 0000000..9f109a1
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/RestartDialogWindowManagerTest.java
@@ -0,0 +1,97 @@
+/*
+ * 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.wm.shell.compatui;
+
+import android.app.ActivityManager;
+import android.app.TaskInfo;
+import android.content.res.Configuration;
+import android.testing.AndroidTestingRunner;
+import android.util.Pair;
+
+import androidx.test.filters.SmallTest;
+
+import com.android.wm.shell.ShellTaskOrganizer;
+import com.android.wm.shell.ShellTestCase;
+import com.android.wm.shell.common.DisplayLayout;
+import com.android.wm.shell.common.SyncTransactionQueue;
+import com.android.wm.shell.transition.Transitions;
+
+import junit.framework.Assert;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+import java.util.function.Consumer;
+
+/**
+ * Tests for {@link RestartDialogWindowManager}.
+ *
+ * Build/Install/Run:
+ * atest WMShellUnitTests:RestartDialogWindowManagerTest
+ */
+@RunWith(AndroidTestingRunner.class)
+@SmallTest
+public class RestartDialogWindowManagerTest extends ShellTestCase {
+
+ @Mock
+ private SyncTransactionQueue mSyncTransactionQueue;
+ @Mock private ShellTaskOrganizer.TaskListener mTaskListener;
+ @Mock private CompatUIConfiguration mCompatUIConfiguration;
+ @Mock private Transitions mTransitions;
+ @Mock private Consumer<Pair<TaskInfo, ShellTaskOrganizer.TaskListener>> mOnRestartCallback;
+ @Mock private Consumer<Pair<TaskInfo, ShellTaskOrganizer.TaskListener>> mOnDismissCallback;
+ private RestartDialogWindowManager mWindowManager;
+ private TaskInfo mTaskInfo;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+ mTaskInfo = new ActivityManager.RunningTaskInfo();
+ mTaskInfo.configuration.uiMode =
+ (mTaskInfo.configuration.uiMode & ~Configuration.UI_MODE_NIGHT_MASK)
+ | Configuration.UI_MODE_NIGHT_NO;
+ mTaskInfo.configuration.uiMode =
+ (mTaskInfo.configuration.uiMode & ~Configuration.UI_MODE_TYPE_MASK)
+ | Configuration.UI_MODE_TYPE_NORMAL;
+ mWindowManager = new RestartDialogWindowManager(mContext, mTaskInfo, mSyncTransactionQueue,
+ mTaskListener, new DisplayLayout(), mTransitions, mOnRestartCallback,
+ mOnDismissCallback, mCompatUIConfiguration);
+ }
+
+ @Test
+ public void testWhenDockedStateHasChanged_needsToBeRecreated() {
+ ActivityManager.RunningTaskInfo newTaskInfo = new ActivityManager.RunningTaskInfo();
+ newTaskInfo.configuration.uiMode =
+ (newTaskInfo.configuration.uiMode & ~Configuration.UI_MODE_TYPE_MASK)
+ | Configuration.UI_MODE_TYPE_DESK;
+
+ Assert.assertTrue(mWindowManager.needsToBeRecreated(newTaskInfo, mTaskListener));
+ }
+
+ @Test
+ public void testWhenDarkLightThemeHasChanged_needsToBeRecreated() {
+ ActivityManager.RunningTaskInfo newTaskInfo = new ActivityManager.RunningTaskInfo();
+ mTaskInfo.configuration.uiMode =
+ (mTaskInfo.configuration.uiMode & ~Configuration.UI_MODE_NIGHT_MASK)
+ | Configuration.UI_MODE_NIGHT_YES;
+
+ Assert.assertTrue(mWindowManager.needsToBeRecreated(newTaskInfo, mTaskListener));
+ }
+}
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/SplitTransitionTests.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/SplitTransitionTests.java
index 92cbf7f..b76d2dc 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/SplitTransitionTests.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/SplitTransitionTests.java
@@ -273,7 +273,7 @@
// simulate the start of recents transition
mMainStage.onTaskVanished(mMainChild);
mSideStage.onTaskVanished(mSideChild);
- mStageCoordinator.onRecentsInSplitAnimationStart(mock(SurfaceControl.Transaction.class));
+ mStageCoordinator.onRecentsInSplitAnimationStart(mock(TransitionInfo.class));
assertTrue(mStageCoordinator.isSplitScreenVisible());
// Make sure it cleans-up if recents doesn't restore
@@ -307,7 +307,7 @@
// simulate the start of recents transition
mMainStage.onTaskVanished(mMainChild);
mSideStage.onTaskVanished(mSideChild);
- mStageCoordinator.onRecentsInSplitAnimationStart(mock(SurfaceControl.Transaction.class));
+ mStageCoordinator.onRecentsInSplitAnimationStart(mock(TransitionInfo.class));
assertTrue(mStageCoordinator.isSplitScreenVisible());
// Make sure we remain in split after recents restores.
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/StageCoordinatorTests.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/StageCoordinatorTests.java
index d27064d..44a0ede 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/StageCoordinatorTests.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/StageCoordinatorTests.java
@@ -158,8 +158,6 @@
verify(mStageCoordinator).prepareEnterSplitScreen(eq(wct), eq(task),
eq(SPLIT_POSITION_BOTTOM_OR_RIGHT));
verify(mMainStage).reparentTopTask(eq(wct));
- verify(mMainStage).evictAllChildren(eq(wct));
- verify(mSideStage).evictAllChildren(eq(wct));
verify(mSplitLayout).resetDividerPosition();
assertEquals(SPLIT_POSITION_BOTTOM_OR_RIGHT, mStageCoordinator.getSideStagePosition());
assertEquals(SPLIT_POSITION_TOP_OR_LEFT, mStageCoordinator.getMainStagePosition());
@@ -178,7 +176,6 @@
mStageCoordinator.moveToStage(task, SPLIT_POSITION_BOTTOM_OR_RIGHT, wct);
verify(mStageCoordinator).prepareEnterSplitScreen(eq(wct), eq(task),
eq(SPLIT_POSITION_BOTTOM_OR_RIGHT));
- verify(mMainStage).evictAllChildren(eq(wct));
assertEquals(SPLIT_POSITION_BOTTOM_OR_RIGHT, mStageCoordinator.getMainStagePosition());
assertEquals(SPLIT_POSITION_TOP_OR_LEFT, mStageCoordinator.getSideStagePosition());
}
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/taskview/TaskViewTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/taskview/TaskViewTest.java
index 0a515cd..81fc843 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/taskview/TaskViewTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/taskview/TaskViewTest.java
@@ -520,4 +520,28 @@
verify(mTaskViewTransitions).updateVisibilityState(eq(mTaskViewTaskController), eq(false));
verify(mTaskViewTransitions, never()).updateBoundsState(eq(mTaskViewTaskController), any());
}
+
+ @Test
+ public void testRemoveTaskView_noTask() {
+ assumeTrue(Transitions.ENABLE_SHELL_TRANSITIONS);
+
+ mTaskView.removeTask();
+ verify(mTaskViewTransitions, never()).closeTaskView(any(), any());
+ }
+
+ @Test
+ public void testRemoveTaskView() {
+ assumeTrue(Transitions.ENABLE_SHELL_TRANSITIONS);
+
+ mTaskView.surfaceCreated(mock(SurfaceHolder.class));
+ WindowContainerTransaction wct = new WindowContainerTransaction();
+ mTaskViewTaskController.prepareOpenAnimation(true /* newTask */,
+ new SurfaceControl.Transaction(), new SurfaceControl.Transaction(), mTaskInfo,
+ mLeash, wct);
+
+ verify(mViewListener).onTaskCreated(eq(mTaskInfo.taskId), any());
+
+ mTaskView.removeTask();
+ verify(mTaskViewTransitions).closeTaskView(any(), eq(mTaskViewTaskController));
+ }
}
diff --git a/libs/hwui/Android.bp b/libs/hwui/Android.bp
index 34af1f9..db58147 100644
--- a/libs/hwui/Android.bp
+++ b/libs/hwui/Android.bp
@@ -129,6 +129,7 @@
"libandroidfw",
"libcrypto",
"libsync",
+ "libui",
],
static_libs: [
"libEGL_blobCache",
diff --git a/libs/hwui/hwui/Bitmap.cpp b/libs/hwui/hwui/Bitmap.cpp
index b3eaa0c..92d875b 100644
--- a/libs/hwui/hwui/Bitmap.cpp
+++ b/libs/hwui/hwui/Bitmap.cpp
@@ -18,6 +18,10 @@
#include "HardwareBitmapUploader.h"
#include "Properties.h"
#ifdef __ANDROID__ // Layoutlib does not support render thread
+#include <private/android/AHardwareBufferHelpers.h>
+#include <ui/GraphicBuffer.h>
+#include <ui/GraphicBufferMapper.h>
+
#include "renderthread/RenderProxy.h"
#endif
#include "utils/Color.h"
@@ -51,6 +55,34 @@
namespace android {
+#ifdef __ANDROID__
+static uint64_t AHardwareBuffer_getAllocationSize(AHardwareBuffer* aHardwareBuffer) {
+ GraphicBuffer* buffer = AHardwareBuffer_to_GraphicBuffer(aHardwareBuffer);
+ auto& mapper = GraphicBufferMapper::get();
+ uint64_t size = 0;
+ auto err = mapper.getAllocationSize(buffer->handle, &size);
+ if (err == OK) {
+ if (size > 0) {
+ return size;
+ } else {
+ ALOGW("Mapper returned size = 0 for buffer format: 0x%x size: %d x %d", buffer->format,
+ buffer->width, buffer->height);
+ // Fall-through to estimate
+ }
+ }
+
+ // Estimation time!
+ // Stride could be = 0 if it's ill-defined (eg, compressed buffer), in which case we use the
+ // width of the buffer instead
+ size = std::max(buffer->width, buffer->stride) * buffer->height;
+ // Require bpp to be at least 1. This is too low for many formats, but it's better than 0
+ // Also while we could make increasingly better estimates, the reality is that mapper@4
+ // should be common enough at this point that we won't ever hit this anyway
+ size *= std::max(1u, bytesPerPixel(buffer->format));
+ return size;
+}
+#endif
+
bool Bitmap::computeAllocationSize(size_t rowBytes, int height, size_t* size) {
return 0 <= height && height <= std::numeric_limits<size_t>::max() &&
!__builtin_mul_overflow(rowBytes, (size_t)height, size) &&
@@ -261,6 +293,7 @@
, mPalette(palette)
, mPaletteGenerationId(getGenerationID()) {
mPixelStorage.hardware.buffer = buffer;
+ mPixelStorage.hardware.size = AHardwareBuffer_getAllocationSize(buffer);
AHardwareBuffer_acquire(buffer);
setImmutable(); // HW bitmaps are always immutable
mImage = SkImage::MakeFromAHardwareBuffer(buffer, mInfo.alphaType(), mInfo.refColorSpace());
@@ -317,6 +350,10 @@
return mPixelStorage.heap.size;
case PixelStorageType::Ashmem:
return mPixelStorage.ashmem.size;
+#ifdef __ANDROID__
+ case PixelStorageType::Hardware:
+ return mPixelStorage.hardware.size;
+#endif
default:
return rowBytes() * height();
}
diff --git a/libs/hwui/hwui/Bitmap.h b/libs/hwui/hwui/Bitmap.h
index 912d311..dd344e2 100644
--- a/libs/hwui/hwui/Bitmap.h
+++ b/libs/hwui/hwui/Bitmap.h
@@ -221,6 +221,7 @@
#ifdef __ANDROID__ // Layoutlib does not support hardware acceleration
struct {
AHardwareBuffer* buffer;
+ uint64_t size;
} hardware;
#endif
} mPixelStorage;
diff --git a/libs/hwui/renderthread/HintSessionWrapper.cpp b/libs/hwui/renderthread/HintSessionWrapper.cpp
index 8c9f65f..597cbf7 100644
--- a/libs/hwui/renderthread/HintSessionWrapper.cpp
+++ b/libs/hwui/renderthread/HintSessionWrapper.cpp
@@ -20,11 +20,14 @@
#include <private/performance_hint_private.h>
#include <utils/Log.h>
+#include <chrono>
#include <vector>
#include "../Properties.h"
#include "thread/CommonPool.h"
+using namespace std::chrono_literals;
+
namespace android {
namespace uirenderer {
namespace renderthread {
@@ -96,10 +99,25 @@
}
bool HintSessionWrapper::init() {
- // If it already exists, broke last time we tried this, shouldn't be running, or
+ if (mHintSession != nullptr) return true;
+
+ // If we're waiting for the session
+ if (mHintSessionFuture.valid()) {
+ // If the session is here
+ if (mHintSessionFuture.wait_for(0s) == std::future_status::ready) {
+ mHintSession = mHintSessionFuture.get();
+ if (mHintSession != nullptr) {
+ mSessionValid = true;
+ return true;
+ }
+ }
+ return false;
+ }
+
+ // If it broke last time we tried this, shouldn't be running, or
// has bad argument values, don't even bother
- if (mHintSession != nullptr || !mSessionValid || !Properties::useHintManager ||
- !Properties::isDrawingEnabled() || mUiThreadId < 0 || mRenderThreadId < 0) {
+ if (!mSessionValid || !Properties::useHintManager || !Properties::isDrawingEnabled() ||
+ mUiThreadId < 0 || mRenderThreadId < 0) {
return false;
}
@@ -118,15 +136,14 @@
// Use a placeholder target value to initialize,
// this will always be replaced elsewhere before it gets used
int64_t defaultTargetDurationNanos = 16666667;
- mHintSession =
- gAPH_createSessionFn(manager, tids.data(), tids.size(), defaultTargetDurationNanos);
-
- mSessionValid = !!mHintSession;
- return mSessionValid;
+ mHintSessionFuture = CommonPool::async([=, tids = std::move(tids)] {
+ return gAPH_createSessionFn(manager, tids.data(), tids.size(), defaultTargetDurationNanos);
+ });
+ return false;
}
void HintSessionWrapper::updateTargetWorkDuration(long targetWorkDurationNanos) {
- if (mHintSession == nullptr) return;
+ if (!init()) return;
targetWorkDurationNanos = targetWorkDurationNanos * Properties::targetCpuTimePercentage / 100;
if (targetWorkDurationNanos != mLastTargetWorkDuration &&
targetWorkDurationNanos > kSanityCheckLowerBound &&
@@ -138,7 +155,7 @@
}
void HintSessionWrapper::reportActualWorkDuration(long actualDurationNanos) {
- if (mHintSession == nullptr) return;
+ if (!init()) return;
if (actualDurationNanos > kSanityCheckLowerBound &&
actualDurationNanos < kSanityCheckUpperBound) {
gAPH_reportActualWorkDurationFn(mHintSession, actualDurationNanos);
@@ -146,7 +163,7 @@
}
void HintSessionWrapper::sendLoadResetHint() {
- if (mHintSession == nullptr) return;
+ if (!init()) return;
nsecs_t now = systemTime();
if (now - mLastFrameNotification > kResetHintTimeout) {
gAPH_sendHintFn(mHintSession, static_cast<int>(SessionHint::CPU_LOAD_RESET));
@@ -155,7 +172,7 @@
}
void HintSessionWrapper::sendLoadIncreaseHint() {
- if (mHintSession == nullptr) return;
+ if (!init()) return;
gAPH_sendHintFn(mHintSession, static_cast<int>(SessionHint::CPU_LOAD_UP));
}
diff --git a/libs/hwui/renderthread/HintSessionWrapper.h b/libs/hwui/renderthread/HintSessionWrapper.h
index f2f1298..b7a433f 100644
--- a/libs/hwui/renderthread/HintSessionWrapper.h
+++ b/libs/hwui/renderthread/HintSessionWrapper.h
@@ -18,6 +18,8 @@
#include <android/performance_hint.h>
+#include <future>
+
#include "utils/TimeUtils.h"
namespace android {
@@ -38,6 +40,7 @@
private:
APerformanceHintSession* mHintSession = nullptr;
+ std::future<APerformanceHintSession*> mHintSessionFuture;
nsecs_t mLastFrameNotification = 0;
nsecs_t mLastTargetWorkDuration = 0;
diff --git a/libs/hwui/renderthread/VulkanSurface.cpp b/libs/hwui/renderthread/VulkanSurface.cpp
index 10f4567..3168cb0 100644
--- a/libs/hwui/renderthread/VulkanSurface.cpp
+++ b/libs/hwui/renderthread/VulkanSurface.cpp
@@ -375,6 +375,14 @@
}
}
+void VulkanSurface::invalidateBuffers() {
+ for (uint32_t i = 0; i < mWindowInfo.bufferCount; i++) {
+ VulkanSurface::NativeBufferInfo& bufferInfo = mNativeBuffers[i];
+ bufferInfo.hasValidContents = false;
+ bufferInfo.lastPresentedCount = 0;
+ }
+}
+
VulkanSurface::NativeBufferInfo* VulkanSurface::dequeueNativeBuffer() {
// Set the mCurrentBufferInfo to invalid in case of error and only reset it to the correct
// value at the end of the function if everything dequeued correctly.
@@ -407,6 +415,10 @@
// new NativeBufferInfo storage will be populated lazily as we dequeue each new buffer.
mWindowInfo.actualSize = actualSize;
releaseBuffers();
+ } else {
+ // A change in transform means we need to repaint the entire buffer area as the damage
+ // rects have just moved about.
+ invalidateBuffers();
}
if (transformHint != mWindowInfo.transform) {
diff --git a/libs/hwui/renderthread/VulkanSurface.h b/libs/hwui/renderthread/VulkanSurface.h
index 6f528010..116075c 100644
--- a/libs/hwui/renderthread/VulkanSurface.h
+++ b/libs/hwui/renderthread/VulkanSurface.h
@@ -116,6 +116,7 @@
WindowInfo* outWindowInfo);
static bool UpdateWindow(ANativeWindow* window, const WindowInfo& windowInfo);
void releaseBuffers();
+ void invalidateBuffers();
// TODO: This number comes from ui/BufferQueueDefs. We're not pulling the
// header in so that we don't need to depend on libui, but we should share
diff --git a/libs/input/PointerController.cpp b/libs/input/PointerController.cpp
index 88e3519..e21d6fb 100644
--- a/libs/input/PointerController.cpp
+++ b/libs/input/PointerController.cpp
@@ -45,14 +45,13 @@
// --- PointerController::DisplayInfoListener ---
void PointerController::DisplayInfoListener::onWindowInfosChanged(
- const std::vector<android::gui::WindowInfo>&,
- const std::vector<android::gui::DisplayInfo>& displayInfos) {
+ const gui::WindowInfosUpdate& update) {
std::scoped_lock lock(mLock);
if (mPointerController == nullptr) return;
// PointerController uses DisplayInfoListener's lock.
base::ScopedLockAssertion assumeLocked(mPointerController->getLock());
- mPointerController->onDisplayInfosChangedLocked(displayInfos);
+ mPointerController->onDisplayInfosChangedLocked(update.displayInfos);
}
void PointerController::DisplayInfoListener::onPointerControllerDestroyed() {
diff --git a/libs/input/PointerController.h b/libs/input/PointerController.h
index ca14b6e..62ee743 100644
--- a/libs/input/PointerController.h
+++ b/libs/input/PointerController.h
@@ -19,6 +19,7 @@
#include <PointerControllerInterface.h>
#include <gui/DisplayEventReceiver.h>
+#include <gui/WindowInfosUpdate.h>
#include <input/DisplayViewport.h>
#include <input/Input.h>
#include <utils/BitSet.h>
@@ -114,8 +115,7 @@
class DisplayInfoListener : public gui::WindowInfosListener {
public:
explicit DisplayInfoListener(PointerController* pc) : mPointerController(pc){};
- void onWindowInfosChanged(const std::vector<android::gui::WindowInfo>&,
- const std::vector<android::gui::DisplayInfo>&) override;
+ void onWindowInfosChanged(const gui::WindowInfosUpdate&) override;
void onPointerControllerDestroyed();
// This lock is also used by PointerController. See PointerController::getLock().
diff --git a/libs/input/tests/PointerController_test.cpp b/libs/input/tests/PointerController_test.cpp
index 2378d42..8574751 100644
--- a/libs/input/tests/PointerController_test.cpp
+++ b/libs/input/tests/PointerController_test.cpp
@@ -343,7 +343,7 @@
localListenerCopy = registeredListener;
}
EXPECT_EQ(nullptr, registeredListener) << "WindowInfosListener was not unregistered";
- localListenerCopy->onWindowInfosChanged({}, {});
+ localListenerCopy->onWindowInfosChanged({{}, {}, 0, 0});
}
} // namespace android
diff --git a/media/aidl/android/media/soundtrigger_middleware/ISoundTriggerMiddlewareService.aidl b/media/aidl/android/media/soundtrigger_middleware/ISoundTriggerMiddlewareService.aidl
index 531b3ae..bc6a259 100644
--- a/media/aidl/android/media/soundtrigger_middleware/ISoundTriggerMiddlewareService.aidl
+++ b/media/aidl/android/media/soundtrigger_middleware/ISoundTriggerMiddlewareService.aidl
@@ -80,14 +80,16 @@
* This implies that the caller must clear its caller identity to protect from the case where
* it resides in the same process as the callee.
* - The identity of the entity on behalf of which module operations are to be performed.
- *
+ * @param isTrusted - {@code true} if the middleware should not audit data delivery, since the
+ * callback is being delivered to another trusted component which will audit access.
* listModules() must be called prior to calling this method and the provided handle must be
* one of the handles from the returned list.
*/
ISoundTriggerModule attachAsMiddleman(int handle,
in Identity middlemanIdentity,
in Identity originatorIdentity,
- ISoundTriggerCallback callback);
+ ISoundTriggerCallback callback,
+ boolean isTrusted);
/**
* Attach an injection interface interface to the ST mock HAL.
diff --git a/media/aidl/android/media/soundtrigger_middleware/ISoundTriggerModule.aidl b/media/aidl/android/media/soundtrigger_middleware/ISoundTriggerModule.aidl
index 18688ce..4bdefd0 100644
--- a/media/aidl/android/media/soundtrigger_middleware/ISoundTriggerModule.aidl
+++ b/media/aidl/android/media/soundtrigger_middleware/ISoundTriggerModule.aidl
@@ -79,8 +79,9 @@
*
* May throw a ServiceSpecificException with an RESOURCE_CONTENTION status to indicate that
* resources required for starting the model are currently consumed by other clients.
+ * @return - A token delivered along with future recognition events.
*/
- void startRecognition(int modelHandle, in RecognitionConfig config);
+ IBinder startRecognition(int modelHandle, in RecognitionConfig config);
/**
* Stop a recognition of a previously active recognition. Will NOT generate a recognition event.
diff --git a/media/aidl/android/media/soundtrigger_middleware/PhraseRecognitionEventSys.aidl b/media/aidl/android/media/soundtrigger_middleware/PhraseRecognitionEventSys.aidl
index 6c912ed..58aed4a 100644
--- a/media/aidl/android/media/soundtrigger_middleware/PhraseRecognitionEventSys.aidl
+++ b/media/aidl/android/media/soundtrigger_middleware/PhraseRecognitionEventSys.aidl
@@ -21,6 +21,7 @@
* Wrapper to android.media.soundtrigger.RecognitionEvent providing additional fields used by the
* framework.
*/
+@JavaDerive(equals = true, toString = true)
parcelable PhraseRecognitionEventSys {
PhraseRecognitionEvent phraseRecognitionEvent;
@@ -33,4 +34,9 @@
*/
// @ElapsedRealtimeLong
long halEventReceivedMillis = -1;
+ /**
+ * Token relating this event to a particular recognition session, returned by
+ * {@link ISoundTriggerModule.startRecognition(int, RecognitionConfig}
+ */
+ IBinder token;
}
diff --git a/media/aidl/android/media/soundtrigger_middleware/RecognitionEventSys.aidl b/media/aidl/android/media/soundtrigger_middleware/RecognitionEventSys.aidl
index 84e327d..dc22f68 100644
--- a/media/aidl/android/media/soundtrigger_middleware/RecognitionEventSys.aidl
+++ b/media/aidl/android/media/soundtrigger_middleware/RecognitionEventSys.aidl
@@ -21,6 +21,7 @@
* Wrapper to android.media.soundtrigger.RecognitionEvent providing additional fields used by the
* framework.
*/
+@JavaDerive(equals = true, toString = true)
parcelable RecognitionEventSys {
RecognitionEvent recognitionEvent;
@@ -33,4 +34,9 @@
*/
// @ElapsedRealtimeLong
long halEventReceivedMillis = -1;
+ /**
+ * Token relating this event to a particular recognition session, returned by
+ * {@link ISoundTriggerModule.startRecognition(int, RecognitionConfig}
+ */
+ IBinder token;
}
diff --git a/media/java/android/media/MediaRoute2Info.java b/media/java/android/media/MediaRoute2Info.java
index c5202dc..7e238e4 100644
--- a/media/java/android/media/MediaRoute2Info.java
+++ b/media/java/android/media/MediaRoute2Info.java
@@ -126,6 +126,12 @@
TYPE_REMOTE_TV,
TYPE_REMOTE_SPEAKER,
TYPE_REMOTE_AUDIO_VIDEO_RECEIVER,
+ TYPE_REMOTE_TABLET,
+ TYPE_REMOTE_TABLET_DOCKED,
+ TYPE_REMOTE_COMPUTER,
+ TYPE_REMOTE_GAME_CONSOLE,
+ TYPE_REMOTE_CAR,
+ TYPE_REMOTE_SMARTWATCH,
TYPE_GROUP
})
@Retention(RetentionPolicy.SOURCE)
@@ -247,6 +253,72 @@
public static final int TYPE_REMOTE_AUDIO_VIDEO_RECEIVER = 1003;
/**
+ * Indicates the route is a remote tablet.
+ *
+ * <p>A remote device uses a routing protocol managed by the application, as opposed to the
+ * routing being done by the system.
+ *
+ * @see #getType
+ * @hide
+ */
+ public static final int TYPE_REMOTE_TABLET = 1004;
+
+ /**
+ * Indicates the route is a remote docked tablet.
+ *
+ * <p>A remote device uses a routing protocol managed by the application, as opposed to the
+ * routing being done by the system.
+ *
+ * @see #getType
+ * @hide
+ */
+ public static final int TYPE_REMOTE_TABLET_DOCKED = 1005;
+
+ /**
+ * Indicates the route is a remote computer.
+ *
+ * <p>A remote device uses a routing protocol managed by the application, as opposed to the
+ * routing being done by the system.
+ *
+ * @see #getType
+ * @hide
+ */
+ public static final int TYPE_REMOTE_COMPUTER = 1006;
+
+ /**
+ * Indicates the route is a remote gaming console.
+ *
+ * <p>A remote device uses a routing protocol managed by the application, as opposed to the
+ * routing being done by the system.
+ *
+ * @see #getType
+ * @hide
+ */
+ public static final int TYPE_REMOTE_GAME_CONSOLE = 1007;
+
+ /**
+ * Indicates the route is a remote car.
+ *
+ * <p>A remote device uses a routing protocol managed by the application, as opposed to the
+ * routing being done by the system.
+ *
+ * @see #getType
+ * @hide
+ */
+ public static final int TYPE_REMOTE_CAR = 1008;
+
+ /**
+ * Indicates the route is a remote smartwatch.
+ *
+ * <p>A remote device uses a routing protocol managed by the application, as opposed to the
+ * routing being done by the system.
+ *
+ * @see #getType
+ * @hide
+ */
+ public static final int TYPE_REMOTE_SMARTWATCH = 1009;
+
+ /**
* Indicates the route is a group of devices.
*
* @see #getType
@@ -450,6 +522,14 @@
return mFeatures;
}
+ // TODO (b/278728942): Add the following once the symbols are published in the SDK. Until then,
+ // adding them would cause the generated link to be broken.
+ // @see #TYPE_REMOTE_TABLET
+ // @see #TYPE_REMOTE_TABLET_DOCKED
+ // @see #TYPE_REMOTE_COMPUTER
+ // @see #TYPE_REMOTE_GAME_CONSOLE
+ // @see #TYPE_REMOTE_CAR
+ // @see #TYPE_REMOTE_SMARTWATCH
/**
* Returns the type of this route.
*
@@ -838,6 +918,18 @@
return "REMOTE_SPEAKER";
case TYPE_REMOTE_AUDIO_VIDEO_RECEIVER:
return "REMOTE_AUDIO_VIDEO_RECEIVER";
+ case TYPE_REMOTE_TABLET:
+ return "REMOTE_TABLET";
+ case TYPE_REMOTE_TABLET_DOCKED:
+ return "REMOTE_TABLET_DOCKED";
+ case TYPE_REMOTE_COMPUTER:
+ return "REMOTE_COMPUTER";
+ case TYPE_REMOTE_GAME_CONSOLE:
+ return "REMOTE_GAME_CONSOLE";
+ case TYPE_REMOTE_CAR:
+ return "REMOTE_CAR";
+ case TYPE_REMOTE_SMARTWATCH:
+ return "REMOTE_SMARTWATCH";
case TYPE_GROUP:
return "GROUP";
case TYPE_UNKNOWN:
diff --git a/media/java/android/media/audiopolicy/AudioProductStrategy.java b/media/java/android/media/audiopolicy/AudioProductStrategy.java
index 0289aa3..3394dd0 100644
--- a/media/java/android/media/audiopolicy/AudioProductStrategy.java
+++ b/media/java/android/media/audiopolicy/AudioProductStrategy.java
@@ -203,10 +203,16 @@
AudioProductStrategy thatStrategy = (AudioProductStrategy) o;
- return mName == thatStrategy.mName && mId == thatStrategy.mId
+ return mId == thatStrategy.mId
+ && Objects.equals(mName, thatStrategy.mName)
&& Arrays.equals(mAudioAttributesGroups, thatStrategy.mAudioAttributesGroups);
}
+ @Override
+ public int hashCode() {
+ return Objects.hash(mId, mName, Arrays.hashCode(mAudioAttributesGroups));
+ }
+
/**
* @param name of the product strategy
* @param id of the product strategy
@@ -460,6 +466,12 @@
&& Arrays.equals(mAudioAttributes, thatAag.mAudioAttributes);
}
+ @Override
+ public int hashCode() {
+ return Objects.hash(mVolumeGroupId, mLegacyStreamType,
+ Arrays.hashCode(mAudioAttributes));
+ }
+
public int getStreamType() {
return mLegacyStreamType;
}
diff --git a/media/java/android/media/soundtrigger/SoundTriggerInstrumentation.java b/media/java/android/media/soundtrigger/SoundTriggerInstrumentation.java
index 3dfc587..c376f25 100644
--- a/media/java/android/media/soundtrigger/SoundTriggerInstrumentation.java
+++ b/media/java/android/media/soundtrigger/SoundTriggerInstrumentation.java
@@ -66,6 +66,8 @@
@GuardedBy("mLock")
private IBinder mClientToken = null;
+ private final ISoundTriggerService mService;
+
private final GlobalCallback mClientCallback;
private final Executor mGlobalCallbackExecutor;
@@ -562,6 +564,7 @@
@NonNull GlobalCallback callback) {
mClientCallback = Objects.requireNonNull(callback);
mGlobalCallbackExecutor = Objects.requireNonNull(executor);
+ mService = service;
try {
service.attachInjection(new Injection());
} catch (RemoteException e) {
@@ -651,5 +654,24 @@
}
}
}
+
+ /**
+ * Simulate a phone call for {@link com.android.server.soundtrigger.SoundTriggerService}.
+ * If the phone call state changes, the service will be notified to respond.
+ * The service should pause recognition for the duration of the call.
+ *
+ * @param isInPhoneCall - {@code true} to cause the SoundTriggerService to
+ * see the phone call state as off-hook. {@code false} to cause the service to
+ * see the state as normal.
+ * @hide
+ */
+ @TestApi
+ public void setInPhoneCallState(boolean isInPhoneCall) {
+ try {
+ mService.setInPhoneCallState(isInPhoneCall);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
}
diff --git a/media/java/android/media/tv/AdBuffer.java b/media/java/android/media/tv/AdBuffer.java
index 230d763..f2b772f 100644
--- a/media/java/android/media/tv/AdBuffer.java
+++ b/media/java/android/media/tv/AdBuffer.java
@@ -22,6 +22,8 @@
import android.os.Parcelable;
import android.os.SharedMemory;
+import java.io.IOException;
+
/**
* Buffer for advertisement data.
*/
@@ -57,6 +59,16 @@
this.mFlags = flags;
}
+ /** @hide **/
+ public static AdBuffer dupAdBuffer(AdBuffer buffer) throws IOException {
+ if (buffer == null) {
+ return null;
+ }
+ return new AdBuffer(buffer.mId, buffer.mMimeType,
+ SharedMemory.fromFileDescriptor(buffer.mBuffer.getFdDup()), buffer.mOffset,
+ buffer.mLength, buffer.mPresentationTimeUs, buffer.mFlags);
+ }
+
/**
* Gets corresponding AD request ID.
*
diff --git a/media/java/android/media/tv/AdRequest.java b/media/java/android/media/tv/AdRequest.java
index d8cddfc..5f6b2b5 100644
--- a/media/java/android/media/tv/AdRequest.java
+++ b/media/java/android/media/tv/AdRequest.java
@@ -72,6 +72,22 @@
private final Bundle mMetadata;
private final Uri mUri;
+ /**
+ * The key for video metadata.
+ *
+ * @see #getMetadata()
+ * @hide
+ */
+ public static final String KEY_VIDEO_METADATA = "key_video_metadata";
+
+ /**
+ * The key for audio metadata.
+ *
+ * @see #getMetadata()
+ * @hide
+ */
+ public static final String KEY_AUDIO_METADATA = "key_audio_metadata";
+
public AdRequest(int id, @RequestType int requestType,
@Nullable ParcelFileDescriptor fileDescriptor, long startTime, long stopTime,
long echoInterval, @Nullable String mediaFileType, @NonNull Bundle metadata) {
diff --git a/media/java/android/media/tv/TvInputManager.java b/media/java/android/media/tv/TvInputManager.java
index f344fd3..631ab9a 100644
--- a/media/java/android/media/tv/TvInputManager.java
+++ b/media/java/android/media/tv/TvInputManager.java
@@ -3737,6 +3737,10 @@
mService.notifyAdBufferReady(mToken, buffer, mUserId);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
+ } finally {
+ if (buffer != null) {
+ buffer.getSharedMemory().close();
+ }
}
}
diff --git a/media/java/android/media/tv/interactive/TvInteractiveAppManager.java b/media/java/android/media/tv/interactive/TvInteractiveAppManager.java
index 06d1acd..7cce84a 100755
--- a/media/java/android/media/tv/interactive/TvInteractiveAppManager.java
+++ b/media/java/android/media/tv/interactive/TvInteractiveAppManager.java
@@ -1608,6 +1608,10 @@
mService.notifyAdBufferConsumed(mToken, buffer, mUserId);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
+ } finally {
+ if (buffer != null) {
+ buffer.getSharedMemory().close();
+ }
}
}
diff --git a/media/java/android/media/tv/interactive/TvInteractiveAppService.java b/media/java/android/media/tv/interactive/TvInteractiveAppService.java
index 06dfe4f..ec85cc7 100755
--- a/media/java/android/media/tv/interactive/TvInteractiveAppService.java
+++ b/media/java/android/media/tv/interactive/TvInteractiveAppService.java
@@ -69,6 +69,7 @@
import com.android.internal.os.SomeArgs;
+import java.io.IOException;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
@@ -1973,9 +1974,9 @@
"notifyAdBufferReady(buffer=" + buffer + ")");
}
if (mSessionCallback != null) {
- mSessionCallback.onAdBufferReady(buffer);
+ mSessionCallback.onAdBufferReady(AdBuffer.dupAdBuffer(buffer));
}
- } catch (RemoteException e) {
+ } catch (RemoteException | IOException e) {
Log.w(TAG, "error in notifyAdBuffer", e);
}
}
diff --git a/media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioProductStrategyTest.java b/media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioProductStrategyTest.java
index b66545a..266faae 100644
--- a/media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioProductStrategyTest.java
+++ b/media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioProductStrategyTest.java
@@ -29,11 +29,14 @@
import android.media.AudioSystem;
import android.media.audiopolicy.AudioProductStrategy;
import android.media.audiopolicy.AudioVolumeGroup;
+import android.os.Parcel;
import android.platform.test.annotations.Presubmit;
import android.util.Log;
import androidx.test.ext.junit.runners.AndroidJUnit4;
+import com.google.common.testing.EqualsTester;
+
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -231,4 +234,26 @@
}
}
}
+
+ @Test
+ public void testEquals() {
+ final EqualsTester equalsTester = new EqualsTester();
+
+ AudioProductStrategy.getAudioProductStrategies().forEach(
+ strategy -> equalsTester.addEqualityGroup(strategy,
+ writeToAndFromParcel(strategy)));
+
+ equalsTester.testEquals();
+ }
+
+ private static AudioProductStrategy writeToAndFromParcel(
+ AudioProductStrategy audioProductStrategy) {
+ Parcel parcel = Parcel.obtain();
+ audioProductStrategy.writeToParcel(parcel, /*flags=*/0);
+ parcel.setDataPosition(0);
+ AudioProductStrategy unmarshalledAudioProductStrategy =
+ AudioProductStrategy.CREATOR.createFromParcel(parcel);
+ parcel.recycle();
+ return unmarshalledAudioProductStrategy;
+ }
}
diff --git a/packages/CredentialManager/profile.txt.prof b/packages/CredentialManager/profile.txt.prof
index 16f8798..afe066b 100644
--- a/packages/CredentialManager/profile.txt.prof
+++ b/packages/CredentialManager/profile.txt.prof
@@ -1,82 +1,5 @@
-HPLandroidx/compose/animation/core/FloatSpringSpec;->getValueFromNanos(JFFF)F
-HPLandroidx/compose/animation/core/FloatSpringSpec;->getVelocityFromNanos(JFFF)F
-HPLandroidx/compose/animation/core/SpringSimulation;->updateValues-IJZedt4$animation_core_release(FFJ)J
-HPLandroidx/compose/animation/core/VectorConvertersKt$FloatToVector$2;->invoke(Landroidx/compose/animation/core/AnimationVector1D;)Ljava/lang/Float;
-HPLandroidx/compose/animation/core/VectorizedSpringSpec;->getValueFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
-HPLandroidx/compose/animation/core/VectorizedSpringSpec;->getVelocityFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
-HPLandroidx/compose/foundation/ImageKt;->Image(Landroidx/compose/ui/graphics/painter/Painter;Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/ColorFilter;Landroidx/compose/runtime/Composer;II)V
-HPLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->waitForUpOrCancellation(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Landroidx/compose/ui/input/pointer/PointerEventPass;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;->createItem-HK0c1C0(ILjava/lang/Object;Ljava/util/List;)Landroidx/compose/foundation/lazy/LazyMeasuredItem;
-HPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1;->invoke-0kLqBqw(Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScope;J)Landroidx/compose/foundation/lazy/LazyListMeasureResult;
-HPLandroidx/compose/foundation/lazy/LazyListMeasureKt;->measureLazyList-jIHJTys(ILandroidx/compose/foundation/lazy/LazyMeasuredItemProvider;IIIIIIFJZLjava/util/List;Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;ZLandroidx/compose/ui/unit/Density;Landroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;Landroidx/compose/foundation/lazy/LazyListBeyondBoundsInfo;ILkotlin/jvm/functions/Function3;)Landroidx/compose/foundation/lazy/LazyListMeasureResult;
-HPLandroidx/compose/foundation/lazy/LazyListPositionedItem;->place(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
-HPLandroidx/compose/foundation/lazy/LazyMeasuredItem;-><init>(ILjava/util/List;ZLandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;Landroidx/compose/ui/unit/LayoutDirection;ZIILandroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;IJLjava/lang/Object;)V
-HPLandroidx/compose/foundation/lazy/layout/DefaultLazyLayoutItemsProvider;->getKey(I)Ljava/lang/Object;
-HPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;->getContent(ILjava/lang/Object;)Lkotlin/jvm/functions/Function2;
-HPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->measure-0kLqBqw(IJ)Ljava/util/List;
-HPLandroidx/compose/runtime/ComposerKt;->removeCurrentGroup(Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V
-HPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->isValid(Landroidx/compose/runtime/DerivedState;Landroidx/compose/runtime/snapshots/Snapshot;)Z
-HPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->readableHash(Landroidx/compose/runtime/DerivedState;Landroidx/compose/runtime/snapshots/Snapshot;)I
-HPLandroidx/compose/runtime/DerivedSnapshotState;->currentRecord(Landroidx/compose/runtime/DerivedSnapshotState$ResultRecord;Landroidx/compose/runtime/snapshots/Snapshot;ZLkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/DerivedSnapshotState$ResultRecord;
-HPLandroidx/compose/runtime/DerivedSnapshotState;->getValue()Ljava/lang/Object;
-HPLandroidx/compose/runtime/SlotWriter$groupSlots$1;->hasNext()Z
-HPLandroidx/compose/runtime/SlotWriter$groupSlots$1;->next()Ljava/lang/Object;
-HPLandroidx/compose/runtime/SlotWriter;->access$dataIndexToDataAddress(Landroidx/compose/runtime/SlotWriter;I)I
-HPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1$unregisterApplyObserver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1$unregisterApplyObserver$1;->invoke(Ljava/util/Set;Landroidx/compose/runtime/snapshots/Snapshot;)V
-HPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt;->intersects$SnapshotStateKt__SnapshotFlowKt(Ljava/util/Set;Ljava/util/Set;)Z
-HPLandroidx/compose/runtime/snapshots/SnapshotKt;->current(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/Snapshot;)Landroidx/compose/runtime/snapshots/StateRecord;
-HPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap$derivedStateEnterObserver$1;->invoke(Landroidx/compose/runtime/State;)V
-HPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap$derivedStateExitObserver$1;->invoke(Landroidx/compose/runtime/State;)V
-HPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap$derivedStateExitObserver$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->access$getDeriveStateScopeCount$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;)I
-HPLandroidx/compose/ui/Modifier$Node;->detach$ui_release()V
-HPLandroidx/compose/ui/geometry/OffsetKt;->isFinite-k-4lQ0M(J)Z
-HPLandroidx/compose/ui/graphics/Matrix;->map-MK-Hz9U([FJ)J
-HPLandroidx/compose/ui/input/pointer/InternalPointerEvent;->issuesEnterExitEvent-0FcD4WY(J)Z
-HPLandroidx/compose/ui/input/pointer/MotionEventAdapter;->convertToPointerInputEvent$ui_release(Landroid/view/MotionEvent;Landroidx/compose/ui/input/pointer/PositionCalculator;)Landroidx/compose/ui/input/pointer/PointerInputEvent;
-HPLandroidx/compose/ui/input/pointer/MotionEventAdapter;->createPointerInputEventData(Landroidx/compose/ui/input/pointer/PositionCalculator;Landroid/view/MotionEvent;IZ)Landroidx/compose/ui/input/pointer/PointerInputEventData;
-HPLandroidx/compose/ui/input/pointer/Node;->buildCache(Ljava/util/Map;Landroidx/compose/ui/layout/LayoutCoordinates;Landroidx/compose/ui/input/pointer/InternalPointerEvent;Z)Z
-HPLandroidx/compose/ui/input/pointer/Node;->cleanUpHits(Landroidx/compose/ui/input/pointer/InternalPointerEvent;)V
-HPLandroidx/compose/ui/input/pointer/Node;->dispatchFinalEventPass(Landroidx/compose/ui/input/pointer/InternalPointerEvent;)Z
-HPLandroidx/compose/ui/input/pointer/Node;->dispatchMainEventPass(Ljava/util/Map;Landroidx/compose/ui/layout/LayoutCoordinates;Landroidx/compose/ui/input/pointer/InternalPointerEvent;Z)Z
-HPLandroidx/compose/ui/input/pointer/PointerId;-><init>(J)V
-HPLandroidx/compose/ui/input/pointer/PointerId;->equals-impl(JLjava/lang/Object;)Z
-HPLandroidx/compose/ui/input/pointer/PointerInputChange;-><init>(JJJZJJZZIJ)V
-HPLandroidx/compose/ui/input/pointer/PointerInputChange;->copy-OHpmEuE$default(Landroidx/compose/ui/input/pointer/PointerInputChange;JJJZJJZILjava/util/List;JILjava/lang/Object;)Landroidx/compose/ui/input/pointer/PointerInputChange;
-HPLandroidx/compose/ui/input/pointer/PointerInputChange;->copy-OHpmEuE(JJJZJJZILjava/util/List;J)Landroidx/compose/ui/input/pointer/PointerInputChange;
-HPLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer;->produce(Landroidx/compose/ui/input/pointer/PointerInputEvent;Landroidx/compose/ui/input/pointer/PositionCalculator;)Landroidx/compose/ui/input/pointer/InternalPointerEvent;
-HPLandroidx/compose/ui/input/pointer/PointerInputEventProcessor;->process-BIzXfog(Landroidx/compose/ui/input/pointer/PointerInputEvent;Landroidx/compose/ui/input/pointer/PositionCalculator;Z)I
-HPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;->offerPointerEvent(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;)V
-HPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;->dispatchPointerEvent(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;)V
-HPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;->onPointerEvent-H0pRuoY(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;J)V
-HPLandroidx/compose/ui/node/AlignmentLines;->reset$ui_release()V
-HPLandroidx/compose/ui/node/BackwardsCompatNode;->onPointerEvent-H0pRuoY(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;J)V
-HPLandroidx/compose/ui/node/InnerNodeCoordinator;->hitTestChild-YqVAtuI(Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V
-HPLandroidx/compose/ui/node/LayoutNode;->detach$ui_release()V
-HPLandroidx/compose/ui/node/NodeChain;->detach$ui_release()V
-HPLandroidx/compose/ui/node/NodeCoordinator;->ancestorToLocal-R5De75A(Landroidx/compose/ui/node/NodeCoordinator;J)J
-HPLandroidx/compose/ui/node/NodeCoordinator;->detach()V
-HPLandroidx/compose/ui/node/NodeCoordinator;->findCommonAncestor$ui_release(Landroidx/compose/ui/node/NodeCoordinator;)Landroidx/compose/ui/node/NodeCoordinator;
-HPLandroidx/compose/ui/node/NodeCoordinator;->fromParentPosition-MK-Hz9U(J)J
-HPLandroidx/compose/ui/node/NodeCoordinator;->hitTestChild-YqVAtuI(Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V
-HPLandroidx/compose/ui/node/NodeCoordinator;->localPositionOf-R5De75A(Landroidx/compose/ui/layout/LayoutCoordinates;J)J
-HPLandroidx/compose/ui/node/PointerInputModifierNodeKt;->isAttached(Landroidx/compose/ui/node/PointerInputModifierNode;)Z
-HPLandroidx/compose/ui/platform/AndroidComposeView;->handleMotionEvent-8iAsVTc(Landroid/view/MotionEvent;)I
-HPLandroidx/compose/ui/platform/AndroidComposeView;->screenToLocal-MK-Hz9U(J)J
-HPLandroidx/compose/ui/platform/AndroidComposeView;->sendMotionEvent-8iAsVTc(Landroid/view/MotionEvent;)I
-HPLandroidx/compose/ui/platform/CalculateMatrixToWindowApi29;->calculateMatrixToWindow-EL8BTi8(Landroid/view/View;[F)V
-HPLandroidx/compose/ui/platform/LayerMatrixCache;->calculateInverseMatrix-bWbORWo(Ljava/lang/Object;)[F
-HPLandroidx/compose/ui/platform/LayerMatrixCache;->calculateMatrix-GrdbGEg(Ljava/lang/Object;)[F
-HPLandroidx/compose/ui/platform/RenderNodeLayer;->mapOffset-8S9VItk(JZ)J
-HPLandroidx/compose/ui/platform/ShapeContainingUtilKt;->cornersFit(Landroidx/compose/ui/geometry/RoundRect;)Z
-HPLandroidx/compose/ui/platform/ShapeContainingUtilKt;->isInRoundedRect(Landroidx/compose/ui/graphics/Outline$Rounded;FFLandroidx/compose/ui/graphics/Path;Landroidx/compose/ui/graphics/Path;)Z
-HPLandroidx/compose/ui/unit/IntOffsetKt;->minus-Nv-tHpc(JJ)J
-HPLcom/android/credentialmanager/common/material/SwipeableState$animateInternalToOffset$2$1;->invoke(Landroidx/compose/animation/core/Animatable;)V
-HPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$CredentialEntryRow$2;->invoke(Landroidx/compose/runtime/Composer;I)V
-HPLkotlinx/coroutines/JobSupport;->cancelMakeCompleting(Ljava/lang/Object;)Ljava/lang/Object;
-HPLkotlinx/coroutines/channels/AbstractSendChannel;->offerInternal(Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->get(I)Z
+HPLandroidx/emoji2/text/MetadataRepo;->constructIndex(Landroidx/emoji2/text/flatbuffer/MetadataList;)V
HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda0;-><init>(Landroidx/activity/ComponentActivity;)V
HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda1;-><init>(Landroidx/activity/ComponentActivity;)V
HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda2;-><init>(Landroidx/activity/ComponentActivity;)V
@@ -90,6 +13,7 @@
HSPLandroidx/activity/ComponentActivity$4;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
HSPLandroidx/activity/ComponentActivity$5;-><init>(Landroidx/activity/ComponentActivity;)V
HSPLandroidx/activity/ComponentActivity$5;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
+HSPLandroidx/activity/ComponentActivity$Api19Impl;->cancelPendingInputEvents(Landroid/view/View;)V
HSPLandroidx/activity/ComponentActivity$Api33Impl;->getOnBackInvokedDispatcher(Landroid/app/Activity;)Landroid/window/OnBackInvokedDispatcher;
HSPLandroidx/activity/ComponentActivity$ReportFullyDrawnExecutorApi16Impl;-><init>(Landroidx/activity/ComponentActivity;)V
HSPLandroidx/activity/ComponentActivity$ReportFullyDrawnExecutorApi16Impl;->onDraw()V
@@ -101,8 +25,8 @@
HSPLandroidx/activity/ComponentActivity;->ensureViewModelStore()V
HSPLandroidx/activity/ComponentActivity;->getActivityResultRegistry()Landroidx/activity/result/ActivityResultRegistry;
HSPLandroidx/activity/ComponentActivity;->getDefaultViewModelCreationExtras()Landroidx/lifecycle/viewmodel/CreationExtras;
-HSPLandroidx/activity/ComponentActivity;->getDefaultViewModelProviderFactory()Landroidx/lifecycle/ViewModelProvider$Factory;
HSPLandroidx/activity/ComponentActivity;->getLifecycle()Landroidx/lifecycle/Lifecycle;
+HSPLandroidx/activity/ComponentActivity;->getOnBackPressedDispatcher()Landroidx/activity/OnBackPressedDispatcher;
HSPLandroidx/activity/ComponentActivity;->getSavedStateRegistry()Landroidx/savedstate/SavedStateRegistry;
HSPLandroidx/activity/ComponentActivity;->getViewModelStore()Landroidx/lifecycle/ViewModelStore;
HSPLandroidx/activity/ComponentActivity;->initViewTreeOwners()V
@@ -111,15 +35,31 @@
HSPLandroidx/activity/ComponentActivity;->setContentView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V
HSPLandroidx/activity/FullyDrawnReporter$$ExternalSyntheticLambda0;-><init>(Landroidx/activity/FullyDrawnReporter;)V
HSPLandroidx/activity/FullyDrawnReporter;-><init>(Ljava/util/concurrent/Executor;Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/activity/OnBackPressedDispatcher$$ExternalSyntheticLambda1;-><init>(Landroidx/activity/OnBackPressedDispatcher;)V
-HSPLandroidx/activity/OnBackPressedDispatcher$$ExternalSyntheticLambda2;-><init>(Landroidx/activity/OnBackPressedDispatcher;)V
-HSPLandroidx/activity/OnBackPressedDispatcher$$ExternalSyntheticThrowCCEIfNotNull0;->m(Ljava/lang/Object;)V
-HSPLandroidx/activity/OnBackPressedDispatcher$Api33Impl$$ExternalSyntheticLambda0;-><init>(Ljava/lang/Runnable;)V
-HSPLandroidx/activity/OnBackPressedDispatcher$Api33Impl;->createOnBackInvokedCallback(Ljava/lang/Runnable;)Landroid/window/OnBackInvokedCallback;
+HSPLandroidx/activity/OnBackPressedCallback;-><init>(Z)V
+HSPLandroidx/activity/OnBackPressedCallback;->addCancellable(Landroidx/activity/Cancellable;)V
+HSPLandroidx/activity/OnBackPressedCallback;->isEnabled()Z
+HSPLandroidx/activity/OnBackPressedCallback;->removeCancellable(Landroidx/activity/Cancellable;)V
+HSPLandroidx/activity/OnBackPressedCallback;->setEnabledChangedCallback$activity_release(Lkotlin/jvm/functions/Function0;)V
+HSPLandroidx/activity/OnBackPressedDispatcher$1;-><init>(Landroidx/activity/OnBackPressedDispatcher;)V
+HSPLandroidx/activity/OnBackPressedDispatcher$2;-><init>(Landroidx/activity/OnBackPressedDispatcher;)V
+HSPLandroidx/activity/OnBackPressedDispatcher$Api33Impl$$ExternalSyntheticLambda0;-><init>(Lkotlin/jvm/functions/Function0;)V
+HSPLandroidx/activity/OnBackPressedDispatcher$Api33Impl;-><clinit>()V
+HSPLandroidx/activity/OnBackPressedDispatcher$Api33Impl;-><init>()V
+HSPLandroidx/activity/OnBackPressedDispatcher$Api33Impl;->createOnBackInvokedCallback(Lkotlin/jvm/functions/Function0;)Landroid/window/OnBackInvokedCallback;
+HSPLandroidx/activity/OnBackPressedDispatcher$Api33Impl;->registerOnBackInvokedCallback(Ljava/lang/Object;ILjava/lang/Object;)V
+HSPLandroidx/activity/OnBackPressedDispatcher$Api33Impl;->unregisterOnBackInvokedCallback(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLandroidx/activity/OnBackPressedDispatcher$LifecycleOnBackPressedCancellable;-><init>(Landroidx/activity/OnBackPressedDispatcher;Landroidx/lifecycle/Lifecycle;Landroidx/activity/OnBackPressedCallback;)V
+HSPLandroidx/activity/OnBackPressedDispatcher$LifecycleOnBackPressedCancellable;->cancel()V
+HSPLandroidx/activity/OnBackPressedDispatcher$LifecycleOnBackPressedCancellable;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
+HSPLandroidx/activity/OnBackPressedDispatcher$OnBackPressedCancellable;-><init>(Landroidx/activity/OnBackPressedDispatcher;Landroidx/activity/OnBackPressedCallback;)V
+HSPLandroidx/activity/OnBackPressedDispatcher$OnBackPressedCancellable;->cancel()V
HSPLandroidx/activity/OnBackPressedDispatcher;-><init>(Ljava/lang/Runnable;)V
+HSPLandroidx/activity/OnBackPressedDispatcher;->access$getOnBackPressedCallbacks$p(Landroidx/activity/OnBackPressedDispatcher;)Lkotlin/collections/ArrayDeque;
+HSPLandroidx/activity/OnBackPressedDispatcher;->addCallback(Landroidx/lifecycle/LifecycleOwner;Landroidx/activity/OnBackPressedCallback;)V
+HSPLandroidx/activity/OnBackPressedDispatcher;->addCancellableCallback$activity_release(Landroidx/activity/OnBackPressedCallback;)Landroidx/activity/Cancellable;
HSPLandroidx/activity/OnBackPressedDispatcher;->hasEnabledCallbacks()Z
HSPLandroidx/activity/OnBackPressedDispatcher;->setOnBackInvokedDispatcher(Landroid/window/OnBackInvokedDispatcher;)V
-HSPLandroidx/activity/OnBackPressedDispatcher;->updateBackInvokedCallbackState()V
+HSPLandroidx/activity/OnBackPressedDispatcher;->updateBackInvokedCallbackState$activity_release()V
HSPLandroidx/activity/ViewTreeFullyDrawnReporterOwner;->set(Landroid/view/View;Landroidx/activity/FullyDrawnReporterOwner;)V
HSPLandroidx/activity/ViewTreeOnBackPressedDispatcherOwner;->set(Landroid/view/View;Landroidx/activity/OnBackPressedDispatcherOwner;)V
HSPLandroidx/activity/compose/ActivityResultLauncherHolder;-><init>()V
@@ -151,8 +91,10 @@
HSPLandroidx/activity/compose/ManagedActivityResultLauncher;-><init>(Landroidx/activity/compose/ActivityResultLauncherHolder;Landroidx/compose/runtime/State;)V
HSPLandroidx/activity/contextaware/ContextAwareHelper;-><init>()V
HSPLandroidx/activity/contextaware/ContextAwareHelper;->addOnContextAvailableListener(Landroidx/activity/contextaware/OnContextAvailableListener;)V
+HSPLandroidx/activity/contextaware/ContextAwareHelper;->clearAvailableContext()V
HSPLandroidx/activity/contextaware/ContextAwareHelper;->dispatchOnContextAvailable(Landroid/content/Context;)V
HSPLandroidx/activity/result/ActivityResultLauncher;-><init>()V
+HSPLandroidx/activity/result/ActivityResultRegistry$$ExternalSyntheticThrowCCEIfNotNull0;->m(Ljava/lang/Object;)V
HSPLandroidx/activity/result/ActivityResultRegistry$3;-><init>(Landroidx/activity/result/ActivityResultRegistry;Ljava/lang/String;Landroidx/activity/result/contract/ActivityResultContract;)V
HSPLandroidx/activity/result/ActivityResultRegistry$3;->unregister()V
HSPLandroidx/activity/result/ActivityResultRegistry$CallbackAndContract;-><init>(Landroidx/activity/result/ActivityResultCallback;Landroidx/activity/result/contract/ActivityResultContract;)V
@@ -163,10 +105,6 @@
HSPLandroidx/activity/result/ActivityResultRegistry;->registerKey(Ljava/lang/String;)V
HSPLandroidx/activity/result/ActivityResultRegistry;->unregister(Ljava/lang/String;)V
HSPLandroidx/activity/result/contract/ActivityResultContract;-><init>()V
-HSPLandroidx/activity/result/contract/ActivityResultContracts$StartIntentSenderForResult$Companion;-><init>()V
-HSPLandroidx/activity/result/contract/ActivityResultContracts$StartIntentSenderForResult$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/activity/result/contract/ActivityResultContracts$StartIntentSenderForResult;-><clinit>()V
-HSPLandroidx/activity/result/contract/ActivityResultContracts$StartIntentSenderForResult;-><init>()V
HSPLandroidx/arch/core/executor/ArchTaskExecutor$$ExternalSyntheticLambda0;-><init>()V
HSPLandroidx/arch/core/executor/ArchTaskExecutor$$ExternalSyntheticLambda1;-><init>()V
HSPLandroidx/arch/core/executor/ArchTaskExecutor;-><clinit>()V
@@ -184,6 +122,8 @@
HSPLandroidx/arch/core/internal/FastSafeIterableMap;->putIfAbsent(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/arch/core/internal/FastSafeIterableMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/arch/core/internal/SafeIterableMap$AscendingIterator;-><init>(Landroidx/arch/core/internal/SafeIterableMap$Entry;Landroidx/arch/core/internal/SafeIterableMap$Entry;)V
+HSPLandroidx/arch/core/internal/SafeIterableMap$DescendingIterator;-><init>(Landroidx/arch/core/internal/SafeIterableMap$Entry;Landroidx/arch/core/internal/SafeIterableMap$Entry;)V
+HSPLandroidx/arch/core/internal/SafeIterableMap$DescendingIterator;->forward(Landroidx/arch/core/internal/SafeIterableMap$Entry;)Landroidx/arch/core/internal/SafeIterableMap$Entry;
HSPLandroidx/arch/core/internal/SafeIterableMap$Entry;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
HSPLandroidx/arch/core/internal/SafeIterableMap$Entry;->getKey()Ljava/lang/Object;
HSPLandroidx/arch/core/internal/SafeIterableMap$Entry;->getValue()Ljava/lang/Object;
@@ -194,8 +134,13 @@
HSPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->supportRemove(Landroidx/arch/core/internal/SafeIterableMap$Entry;)V
HSPLandroidx/arch/core/internal/SafeIterableMap$ListIterator;-><init>(Landroidx/arch/core/internal/SafeIterableMap$Entry;Landroidx/arch/core/internal/SafeIterableMap$Entry;)V
HSPLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->hasNext()Z
+HSPLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->next()Ljava/lang/Object;
+HSPLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->next()Ljava/util/Map$Entry;
+HSPLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->nextNode()Landroidx/arch/core/internal/SafeIterableMap$Entry;
+HSPLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->supportRemove(Landroidx/arch/core/internal/SafeIterableMap$Entry;)V
HSPLandroidx/arch/core/internal/SafeIterableMap$SupportRemove;-><init>()V
HSPLandroidx/arch/core/internal/SafeIterableMap;-><init>()V
+HSPLandroidx/arch/core/internal/SafeIterableMap;->descendingIterator()Ljava/util/Iterator;
HSPLandroidx/arch/core/internal/SafeIterableMap;->eldest()Ljava/util/Map$Entry;
HSPLandroidx/arch/core/internal/SafeIterableMap;->get(Ljava/lang/Object;)Landroidx/arch/core/internal/SafeIterableMap$Entry;
HSPLandroidx/arch/core/internal/SafeIterableMap;->iterator()Ljava/util/Iterator;
@@ -228,6 +173,33 @@
HSPLandroidx/collection/internal/ContainerHelpersKt;->idealIntArraySize(I)I
HSPLandroidx/collection/internal/Lock;-><init>()V
HSPLandroidx/collection/internal/LruHashMap;-><init>(IF)V
+HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$1;-><clinit>()V
+HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$1;-><init>()V
+HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$1;->invoke-8_81llA(J)Landroidx/compose/animation/core/AnimationVector4D;
+HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$2;-><init>(Landroidx/compose/ui/graphics/colorspace/ColorSpace;)V
+HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1;-><clinit>()V
+HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1;-><init>()V
+HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1;->invoke(Landroidx/compose/ui/graphics/colorspace/ColorSpace;)Landroidx/compose/animation/core/TwoWayConverter;
+HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/ColorVectorConverterKt;-><clinit>()V
+HSPLandroidx/compose/animation/ColorVectorConverterKt;->access$getM1$p()[F
+HSPLandroidx/compose/animation/ColorVectorConverterKt;->access$multiplyColumn(IFFF[F)F
+HSPLandroidx/compose/animation/ColorVectorConverterKt;->getVectorConverter(Landroidx/compose/ui/graphics/Color$Companion;)Lkotlin/jvm/functions/Function1;
+HSPLandroidx/compose/animation/ColorVectorConverterKt;->multiplyColumn(IFFF[F)F
+HSPLandroidx/compose/animation/FlingCalculator;-><init>(FLandroidx/compose/ui/unit/Density;)V
+HSPLandroidx/compose/animation/FlingCalculator;->computeDeceleration(Landroidx/compose/ui/unit/Density;)F
+HSPLandroidx/compose/animation/FlingCalculatorKt;-><clinit>()V
+HSPLandroidx/compose/animation/FlingCalculatorKt;->access$computeDeceleration(FF)F
+HSPLandroidx/compose/animation/FlingCalculatorKt;->computeDeceleration(FF)F
+HSPLandroidx/compose/animation/SingleValueAnimationKt;-><clinit>()V
+HSPLandroidx/compose/animation/SingleValueAnimationKt;->animateColorAsState-KTwxG1Y(JLandroidx/compose/animation/core/AnimationSpec;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State;
+HSPLandroidx/compose/animation/SingleValueAnimationKt;->animateColorAsState-euL9pac(JLandroidx/compose/animation/core/AnimationSpec;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State;
+HSPLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;-><clinit>()V
+HSPLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;-><init>(Landroidx/compose/ui/unit/Density;)V
+HSPLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec_androidKt;-><clinit>()V
+HSPLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec_androidKt;->getPlatformFlingScrollFriction()F
+HSPLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec_androidKt;->rememberSplineBasedDecay(Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/core/DecayAnimationSpec;
HSPLandroidx/compose/animation/core/Animatable$runAnimation$2$1;-><init>(Landroidx/compose/animation/core/Animatable;Landroidx/compose/animation/core/AnimationState;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/internal/Ref$BooleanRef;)V
HSPLandroidx/compose/animation/core/Animatable$runAnimation$2$1;->invoke(Landroidx/compose/animation/core/AnimationScope;)V
HSPLandroidx/compose/animation/core/Animatable$runAnimation$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
@@ -270,7 +242,11 @@
HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/animation/core/AnimateAsStateKt;-><clinit>()V
+HSPLandroidx/compose/animation/core/AnimateAsStateKt;->access$animateValueAsState$lambda$4(Landroidx/compose/runtime/State;)Lkotlin/jvm/functions/Function1;
+HSPLandroidx/compose/animation/core/AnimateAsStateKt;->access$animateValueAsState$lambda$6(Landroidx/compose/runtime/State;)Landroidx/compose/animation/core/AnimationSpec;
HSPLandroidx/compose/animation/core/AnimateAsStateKt;->animateFloatAsState(FLandroidx/compose/animation/core/AnimationSpec;FLjava/lang/String;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State;
+HSPLandroidx/compose/animation/core/AnimateAsStateKt;->animateValueAsState$lambda$4(Landroidx/compose/runtime/State;)Lkotlin/jvm/functions/Function1;
+HSPLandroidx/compose/animation/core/AnimateAsStateKt;->animateValueAsState$lambda$6(Landroidx/compose/runtime/State;)Landroidx/compose/animation/core/AnimationSpec;
HSPLandroidx/compose/animation/core/AnimateAsStateKt;->animateValueAsState(Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverter;Landroidx/compose/animation/core/AnimationSpec;Ljava/lang/Object;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State;
HSPLandroidx/compose/animation/core/Animation;->isFinishedFromNanos(J)Z
HSPLandroidx/compose/animation/core/AnimationEndReason;->$values()[Landroidx/compose/animation/core/AnimationEndReason;
@@ -292,6 +268,8 @@
HSPLandroidx/compose/animation/core/AnimationScope;->setRunning$animation_core_release(Z)V
HSPLandroidx/compose/animation/core/AnimationScope;->setValue$animation_core_release(Ljava/lang/Object;)V
HSPLandroidx/compose/animation/core/AnimationScope;->setVelocityVector$animation_core_release(Landroidx/compose/animation/core/AnimationVector;)V
+HSPLandroidx/compose/animation/core/AnimationSpecKt;->access$convert(Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;)Landroidx/compose/animation/core/AnimationVector;
+HSPLandroidx/compose/animation/core/AnimationSpecKt;->convert(Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;)Landroidx/compose/animation/core/AnimationVector;
HSPLandroidx/compose/animation/core/AnimationSpecKt;->spring$default(FFLjava/lang/Object;ILjava/lang/Object;)Landroidx/compose/animation/core/SpringSpec;
HSPLandroidx/compose/animation/core/AnimationSpecKt;->spring(FFLjava/lang/Object;)Landroidx/compose/animation/core/SpringSpec;
HSPLandroidx/compose/animation/core/AnimationState;-><clinit>()V
@@ -320,26 +298,54 @@
HSPLandroidx/compose/animation/core/AnimationVector1D;->newVector$animation_core_release()Landroidx/compose/animation/core/AnimationVector;
HSPLandroidx/compose/animation/core/AnimationVector1D;->reset$animation_core_release()V
HSPLandroidx/compose/animation/core/AnimationVector1D;->set$animation_core_release(IF)V
+HSPLandroidx/compose/animation/core/AnimationVector4D;-><clinit>()V
+HSPLandroidx/compose/animation/core/AnimationVector4D;-><init>(FFFF)V
+HSPLandroidx/compose/animation/core/AnimationVector4D;->getSize$animation_core_release()I
+HSPLandroidx/compose/animation/core/AnimationVector4D;->newVector$animation_core_release()Landroidx/compose/animation/core/AnimationVector4D;
+HSPLandroidx/compose/animation/core/AnimationVector4D;->newVector$animation_core_release()Landroidx/compose/animation/core/AnimationVector;
+HSPLandroidx/compose/animation/core/AnimationVector4D;->set$animation_core_release(IF)V
HSPLandroidx/compose/animation/core/AnimationVector;-><clinit>()V
HSPLandroidx/compose/animation/core/AnimationVector;-><init>()V
HSPLandroidx/compose/animation/core/AnimationVector;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/animation/core/AnimationVectorsKt;->copy(Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
HSPLandroidx/compose/animation/core/AnimationVectorsKt;->copyFrom(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)V
HSPLandroidx/compose/animation/core/AnimationVectorsKt;->newInstance(Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
+HSPLandroidx/compose/animation/core/ComplexDouble;-><init>(DD)V
+HSPLandroidx/compose/animation/core/ComplexDouble;->access$get_imaginary$p(Landroidx/compose/animation/core/ComplexDouble;)D
+HSPLandroidx/compose/animation/core/ComplexDouble;->access$get_real$p(Landroidx/compose/animation/core/ComplexDouble;)D
+HSPLandroidx/compose/animation/core/ComplexDouble;->access$set_imaginary$p(Landroidx/compose/animation/core/ComplexDouble;D)V
+HSPLandroidx/compose/animation/core/ComplexDouble;->access$set_real$p(Landroidx/compose/animation/core/ComplexDouble;D)V
+HSPLandroidx/compose/animation/core/ComplexDouble;->getReal()D
+HSPLandroidx/compose/animation/core/ComplexDoubleKt;->complexQuadraticFormula(DDD)Lkotlin/Pair;
+HSPLandroidx/compose/animation/core/ComplexDoubleKt;->complexSqrt(D)Landroidx/compose/animation/core/ComplexDouble;
+HSPLandroidx/compose/animation/core/CubicBezierEasing;-><clinit>()V
HSPLandroidx/compose/animation/core/CubicBezierEasing;-><init>(FFFF)V
HSPLandroidx/compose/animation/core/CubicBezierEasing;->equals(Ljava/lang/Object;)Z
HSPLandroidx/compose/animation/core/CubicBezierEasing;->evaluateCubic(FFF)F
HSPLandroidx/compose/animation/core/CubicBezierEasing;->transform(F)F
+HSPLandroidx/compose/animation/core/DecayAnimationSpecImpl;-><init>(Landroidx/compose/animation/core/FloatDecayAnimationSpec;)V
+HSPLandroidx/compose/animation/core/DecayAnimationSpecKt;->generateDecayAnimationSpec(Landroidx/compose/animation/core/FloatDecayAnimationSpec;)Landroidx/compose/animation/core/DecayAnimationSpec;
HSPLandroidx/compose/animation/core/EasingKt$LinearEasing$1;-><clinit>()V
HSPLandroidx/compose/animation/core/EasingKt$LinearEasing$1;-><init>()V
HSPLandroidx/compose/animation/core/EasingKt;-><clinit>()V
+HSPLandroidx/compose/animation/core/EasingKt;->getFastOutLinearInEasing()Landroidx/compose/animation/core/Easing;
HSPLandroidx/compose/animation/core/EasingKt;->getFastOutSlowInEasing()Landroidx/compose/animation/core/Easing;
HSPLandroidx/compose/animation/core/EasingKt;->getLinearEasing()Landroidx/compose/animation/core/Easing;
+HSPLandroidx/compose/animation/core/FloatSpringSpec;-><clinit>()V
+HSPLandroidx/compose/animation/core/FloatSpringSpec;-><init>(FFF)V
+HSPLandroidx/compose/animation/core/FloatSpringSpec;-><init>(FFFILkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/animation/core/FloatSpringSpec;->getDurationNanos(FFF)J
+HSPLandroidx/compose/animation/core/FloatSpringSpec;->getEndVelocity(FFF)F
+HSPLandroidx/compose/animation/core/FloatSpringSpec;->getValueFromNanos(JFFF)F
+HSPLandroidx/compose/animation/core/FloatSpringSpec;->getVelocityFromNanos(JFFF)F
HSPLandroidx/compose/animation/core/FloatTweenSpec;-><clinit>()V
HSPLandroidx/compose/animation/core/FloatTweenSpec;-><init>(IILandroidx/compose/animation/core/Easing;)V
HSPLandroidx/compose/animation/core/FloatTweenSpec;->clampPlayTime(J)J
HSPLandroidx/compose/animation/core/FloatTweenSpec;->getValueFromNanos(JFFF)F
HSPLandroidx/compose/animation/core/FloatTweenSpec;->getVelocityFromNanos(JFFF)F
+HSPLandroidx/compose/animation/core/Motion;->constructor-impl(J)J
+HSPLandroidx/compose/animation/core/Motion;->getValue-impl(J)F
+HSPLandroidx/compose/animation/core/Motion;->getVelocity-impl(J)F
HSPLandroidx/compose/animation/core/MutatePriority;->$values()[Landroidx/compose/animation/core/MutatePriority;
HSPLandroidx/compose/animation/core/MutatePriority;-><clinit>()V
HSPLandroidx/compose/animation/core/MutatePriority;-><init>(Ljava/lang/String;I)V
@@ -356,9 +362,34 @@
HSPLandroidx/compose/animation/core/MutatorMutex;->mutate$default(Landroidx/compose/animation/core/MutatorMutex;Landroidx/compose/animation/core/MutatePriority;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/animation/core/MutatorMutex;->mutate(Landroidx/compose/animation/core/MutatePriority;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
HSPLandroidx/compose/animation/core/MutatorMutex;->tryMutateOrCancel(Landroidx/compose/animation/core/MutatorMutex$Mutator;)V
+HSPLandroidx/compose/animation/core/SpringEstimationKt$estimateCriticallyDamped$fn$1;-><init>(DDDD)V
+HSPLandroidx/compose/animation/core/SpringEstimationKt$estimateCriticallyDamped$fn$1;->invoke(D)Ljava/lang/Double;
+HSPLandroidx/compose/animation/core/SpringEstimationKt$estimateCriticallyDamped$fn$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/SpringEstimationKt$estimateCriticallyDamped$fnPrime$1;-><init>(DDD)V
+HSPLandroidx/compose/animation/core/SpringEstimationKt$estimateCriticallyDamped$fnPrime$1;->invoke(D)Ljava/lang/Double;
+HSPLandroidx/compose/animation/core/SpringEstimationKt$estimateCriticallyDamped$fnPrime$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/SpringEstimationKt;->estimateAnimationDurationMillis(DDDDD)J
+HSPLandroidx/compose/animation/core/SpringEstimationKt;->estimateAnimationDurationMillis(FFFFF)J
+HSPLandroidx/compose/animation/core/SpringEstimationKt;->estimateCriticallyDamped$t2Iterate(DD)D
+HSPLandroidx/compose/animation/core/SpringEstimationKt;->estimateCriticallyDamped(Lkotlin/Pair;DDD)D
+HSPLandroidx/compose/animation/core/SpringEstimationKt;->estimateDurationInternal(Lkotlin/Pair;DDDD)J
+HSPLandroidx/compose/animation/core/SpringSimulation;-><init>(F)V
+HSPLandroidx/compose/animation/core/SpringSimulation;->getDampingRatio()F
+HSPLandroidx/compose/animation/core/SpringSimulation;->getStiffness()F
+HSPLandroidx/compose/animation/core/SpringSimulation;->init()V
+HSPLandroidx/compose/animation/core/SpringSimulation;->setDampingRatio(F)V
+HSPLandroidx/compose/animation/core/SpringSimulation;->setFinalPosition(F)V
+HSPLandroidx/compose/animation/core/SpringSimulation;->setStiffness(F)V
+HSPLandroidx/compose/animation/core/SpringSimulation;->updateValues-IJZedt4$animation_core_release(FFJ)J
+HSPLandroidx/compose/animation/core/SpringSimulationKt;-><clinit>()V
+HSPLandroidx/compose/animation/core/SpringSimulationKt;->Motion(FF)J
+HSPLandroidx/compose/animation/core/SpringSimulationKt;->getUNSET()F
+HSPLandroidx/compose/animation/core/SpringSpec;-><clinit>()V
HSPLandroidx/compose/animation/core/SpringSpec;-><init>(FFLjava/lang/Object;)V
HSPLandroidx/compose/animation/core/SpringSpec;-><init>(FFLjava/lang/Object;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/animation/core/SpringSpec;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/animation/core/SpringSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedAnimationSpec;
+HSPLandroidx/compose/animation/core/SpringSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedSpringSpec;
HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$4;-><init>(Lkotlin/coroutines/Continuation;)V
HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$4;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$6$1;-><init>(Landroidx/compose/animation/core/AnimationState;)V
@@ -387,6 +418,7 @@
HSPLandroidx/compose/animation/core/TargetBasedAnimation;->getValueFromNanos(J)Ljava/lang/Object;
HSPLandroidx/compose/animation/core/TargetBasedAnimation;->getVelocityVectorFromNanos(J)Landroidx/compose/animation/core/AnimationVector;
HSPLandroidx/compose/animation/core/TargetBasedAnimation;->isInfinite()Z
+HSPLandroidx/compose/animation/core/TweenSpec;-><clinit>()V
HSPLandroidx/compose/animation/core/TweenSpec;-><init>(IILandroidx/compose/animation/core/Easing;)V
HSPLandroidx/compose/animation/core/TweenSpec;-><init>(IILandroidx/compose/animation/core/Easing;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/animation/core/TweenSpec;->equals(Ljava/lang/Object;)Z
@@ -413,6 +445,8 @@
HSPLandroidx/compose/animation/core/VectorConvertersKt$FloatToVector$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/animation/core/VectorConvertersKt$FloatToVector$2;-><clinit>()V
HSPLandroidx/compose/animation/core/VectorConvertersKt$FloatToVector$2;-><init>()V
+HSPLandroidx/compose/animation/core/VectorConvertersKt$FloatToVector$2;->invoke(Landroidx/compose/animation/core/AnimationVector1D;)Ljava/lang/Float;
+HSPLandroidx/compose/animation/core/VectorConvertersKt$FloatToVector$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/animation/core/VectorConvertersKt$IntOffsetToVector$1;-><clinit>()V
HSPLandroidx/compose/animation/core/VectorConvertersKt$IntOffsetToVector$1;-><init>()V
HSPLandroidx/compose/animation/core/VectorConvertersKt$IntOffsetToVector$2;-><clinit>()V
@@ -450,6 +484,11 @@
HSPLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter(Lkotlin/jvm/internal/IntCompanionObject;)Landroidx/compose/animation/core/TwoWayConverter;
HSPLandroidx/compose/animation/core/VectorConvertersKt;->lerp(FFF)F
HSPLandroidx/compose/animation/core/VectorizedAnimationSpec;->getEndVelocity(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
+HSPLandroidx/compose/animation/core/VectorizedAnimationSpecKt$createSpringAnimations$2;-><init>(FF)V
+HSPLandroidx/compose/animation/core/VectorizedAnimationSpecKt$createSpringAnimations$2;->get(I)Landroidx/compose/animation/core/FloatAnimationSpec;
+HSPLandroidx/compose/animation/core/VectorizedAnimationSpecKt$createSpringAnimations$2;->get(I)Landroidx/compose/animation/core/FloatSpringSpec;
+HSPLandroidx/compose/animation/core/VectorizedAnimationSpecKt;->access$createSpringAnimations(Landroidx/compose/animation/core/AnimationVector;FF)Landroidx/compose/animation/core/Animations;
+HSPLandroidx/compose/animation/core/VectorizedAnimationSpecKt;->createSpringAnimations(Landroidx/compose/animation/core/AnimationVector;FF)Landroidx/compose/animation/core/Animations;
HSPLandroidx/compose/animation/core/VectorizedDurationBasedAnimationSpec;->getDurationNanos(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)J
HSPLandroidx/compose/animation/core/VectorizedFiniteAnimationSpec;->isInfinite()Z
HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec$1;-><init>(Landroidx/compose/animation/core/FloatAnimationSpec;)V
@@ -457,8 +496,18 @@
HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;-><clinit>()V
HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;-><init>(Landroidx/compose/animation/core/Animations;)V
HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;-><init>(Landroidx/compose/animation/core/FloatAnimationSpec;)V
+HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->getDurationNanos(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)J
+HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->getEndVelocity(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->getValueFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->getVelocityFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
+HSPLandroidx/compose/animation/core/VectorizedSpringSpec;-><clinit>()V
+HSPLandroidx/compose/animation/core/VectorizedSpringSpec;-><init>(FFLandroidx/compose/animation/core/AnimationVector;)V
+HSPLandroidx/compose/animation/core/VectorizedSpringSpec;-><init>(FFLandroidx/compose/animation/core/Animations;)V
+HSPLandroidx/compose/animation/core/VectorizedSpringSpec;->getDurationNanos(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)J
+HSPLandroidx/compose/animation/core/VectorizedSpringSpec;->getEndVelocity(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
+HSPLandroidx/compose/animation/core/VectorizedSpringSpec;->getValueFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
+HSPLandroidx/compose/animation/core/VectorizedSpringSpec;->getVelocityFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
+HSPLandroidx/compose/animation/core/VectorizedSpringSpec;->isInfinite()Z
HSPLandroidx/compose/animation/core/VectorizedTweenSpec;-><clinit>()V
HSPLandroidx/compose/animation/core/VectorizedTweenSpec;-><init>(IILandroidx/compose/animation/core/Easing;)V
HSPLandroidx/compose/animation/core/VectorizedTweenSpec;->getDelayMillis()I
@@ -473,6 +522,57 @@
HSPLandroidx/compose/animation/core/VisibilityThresholdsKt;->getVisibilityThreshold(Landroidx/compose/ui/unit/IntOffset$Companion;)J
HSPLandroidx/compose/animation/core/VisibilityThresholdsKt;->getVisibilityThreshold(Landroidx/compose/ui/unit/IntSize$Companion;)J
HSPLandroidx/compose/animation/core/VisibilityThresholdsKt;->getVisibilityThreshold(Lkotlin/jvm/internal/IntCompanionObject;)I
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1$1;-><init>(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1$1;->invoke(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;-><init>(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;->invoke(Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$onNewSize$1;-><init>(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)V
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$onNewSize$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$onNewSize$1;->invoke-ozmzZPI(J)V
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;-><init>(Landroid/content/Context;Landroidx/compose/foundation/OverscrollConfiguration;)V
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$animateToRelease(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)V
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getBottomEffect$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect;
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getBottomEffectNegation$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect;
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getContainerSize$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)J
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getLeftEffect$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect;
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getLeftEffectNegation$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect;
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getRightEffect$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect;
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getRightEffectNegation$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect;
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getTopEffect$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect;
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getTopEffectNegation$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect;
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$invalidateOverscroll(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)V
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$setContainerSize$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;J)V
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->animateToRelease()V
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->drawOverscroll(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->getEffectModifier()Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->invalidateOverscroll()V
+HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1$1;-><init>(Landroidx/compose/ui/layout/Placeable;I)V
+HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
+HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1;-><clinit>()V
+HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1;-><init>()V
+HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1;->invoke-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2$1;-><init>(Landroidx/compose/ui/layout/Placeable;I)V
+HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
+HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2;-><clinit>()V
+HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2;-><init>()V
+HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2;->invoke-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/foundation/AndroidOverscrollKt;-><clinit>()V
+HSPLandroidx/compose/foundation/AndroidOverscrollKt;->access$getStretchOverscrollNonClippingLayer$p()Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/AndroidOverscrollKt;->rememberOverscrollEffect(Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/OverscrollEffect;
+HSPLandroidx/compose/foundation/Api31Impl;-><clinit>()V
+HSPLandroidx/compose/foundation/Api31Impl;-><init>()V
+HSPLandroidx/compose/foundation/Api31Impl;->create(Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/widget/EdgeEffect;
+HSPLandroidx/compose/foundation/Api31Impl;->getDistance(Landroid/widget/EdgeEffect;)F
HSPLandroidx/compose/foundation/Background;-><init>(Landroidx/compose/ui/graphics/Color;Landroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Shape;Lkotlin/jvm/functions/Function1;)V
HSPLandroidx/compose/foundation/Background;-><init>(Landroidx/compose/ui/graphics/Color;Landroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Shape;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/foundation/Background;-><init>(Landroidx/compose/ui/graphics/Color;Landroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Shape;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
@@ -483,19 +583,25 @@
HSPLandroidx/compose/foundation/BackgroundKt;->background-bw27NRU$default(Landroidx/compose/ui/Modifier;JLandroidx/compose/ui/graphics/Shape;ILjava/lang/Object;)Landroidx/compose/ui/Modifier;
HSPLandroidx/compose/foundation/BackgroundKt;->background-bw27NRU(Landroidx/compose/ui/Modifier;JLandroidx/compose/ui/graphics/Shape;)Landroidx/compose/ui/Modifier;
HSPLandroidx/compose/foundation/CanvasKt;->Canvas(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/foundation/CheckScrollableContainerConstraintsKt;->checkScrollableContainerConstraints-K40F9xA(JLandroidx/compose/foundation/gestures/Orientation;)V
HSPLandroidx/compose/foundation/ClickableKt$PressedInteractionSourceDisposableEffect$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/runtime/MutableState;Ljava/util/Map;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V
+HSPLandroidx/compose/foundation/ClickableKt$PressedInteractionSourceDisposableEffect$1$invoke$$inlined$onDispose$1;->dispose()V
HSPLandroidx/compose/foundation/ClickableKt$PressedInteractionSourceDisposableEffect$1;-><init>(Landroidx/compose/runtime/MutableState;Ljava/util/Map;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V
HSPLandroidx/compose/foundation/ClickableKt$PressedInteractionSourceDisposableEffect$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult;
HSPLandroidx/compose/foundation/ClickableKt$PressedInteractionSourceDisposableEffect$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/ClickableKt$clickable$4$1$1$1;-><init>(Landroidx/compose/ui/input/ScrollContainerInfo;)V
HSPLandroidx/compose/foundation/ClickableKt$clickable$4$1$1;-><init>(Landroidx/compose/runtime/MutableState;)V
-HSPLandroidx/compose/foundation/ClickableKt$clickable$4$1$1;->invoke(Landroidx/compose/ui/input/ScrollContainerInfo;)V
-HSPLandroidx/compose/foundation/ClickableKt$clickable$4$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/ClickableKt$clickable$4$delayPressInteraction$1$1;-><clinit>()V
-HSPLandroidx/compose/foundation/ClickableKt$clickable$4$delayPressInteraction$1$1;-><init>()V
-HSPLandroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1$1;-><init>(ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/ClickableKt$clickable$4$1$1;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V
+HSPLandroidx/compose/foundation/ClickableKt$clickable$4$delayPressInteraction$1$1;-><init>(Landroidx/compose/runtime/MutableState;Lkotlin/jvm/functions/Function0;)V
+HSPLandroidx/compose/foundation/ClickableKt$clickable$4$delayPressInteraction$1$1;->invoke()Ljava/lang/Boolean;
+HSPLandroidx/compose/foundation/ClickableKt$clickable$4$delayPressInteraction$1$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1$1;-><init>(ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1$1;->invoke-d-4ec7I(Landroidx/compose/foundation/gestures/PressGestureScope;JLkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1$2;-><init>(ZLandroidx/compose/runtime/State;)V
-HSPLandroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1;-><init>(Landroidx/compose/runtime/MutableState;ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1$2;->invoke-k-4lQ0M(J)V
+HSPLandroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1;-><init>(Landroidx/compose/runtime/MutableState;ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V
HSPLandroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
HSPLandroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1;->invoke(Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
HSPLandroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
@@ -508,42 +614,81 @@
HSPLandroidx/compose/foundation/ClickableKt$genericClickableWithoutGesture$clickSemantics$1;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V
HSPLandroidx/compose/foundation/ClickableKt$genericClickableWithoutGesture$clickSemantics$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/foundation/ClickableKt$genericClickableWithoutGesture$detectPressAndClickFromKey$1;-><init>(ZLjava/util/Map;Landroidx/compose/runtime/State;Lkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function0;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V
+HSPLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2$delayJob$1;-><init>(Landroidx/compose/runtime/State;JLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2$delayJob$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2$delayJob$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2;-><init>(Landroidx/compose/foundation/gestures/PressGestureScope;JLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/foundation/ClickableKt;->PressedInteractionSourceDisposableEffect(Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/MutableState;Ljava/util/Map;Landroidx/compose/runtime/Composer;I)V
HSPLandroidx/compose/foundation/ClickableKt;->clickable-O2vRcR0$default(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/Indication;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;ILjava/lang/Object;)Landroidx/compose/ui/Modifier;
HSPLandroidx/compose/foundation/ClickableKt;->clickable-O2vRcR0(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/Indication;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;)Landroidx/compose/ui/Modifier;
HSPLandroidx/compose/foundation/ClickableKt;->genericClickableWithoutGesture-bdNGguI(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/Indication;Lkotlinx/coroutines/CoroutineScope;Ljava/util/Map;Landroidx/compose/runtime/State;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;)Landroidx/compose/ui/Modifier;
HSPLandroidx/compose/foundation/ClickableKt;->genericClickableWithoutGesture_bdNGguI$clickSemantics(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/semantics/Role;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Ljava/lang/String;ZLkotlin/jvm/functions/Function0;)Landroidx/compose/ui/Modifier;
HSPLandroidx/compose/foundation/ClickableKt;->genericClickableWithoutGesture_bdNGguI$detectPressAndClickFromKey(Landroidx/compose/ui/Modifier;ZLjava/util/Map;Landroidx/compose/runtime/State;Lkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function0;Landroidx/compose/foundation/interaction/MutableInteractionSource;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/ClickableKt;->handlePressInteraction-EPk0efs(Landroidx/compose/foundation/gestures/PressGestureScope;JLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/Clickable_androidKt$isComposeRootInScrollableContainer$1;-><init>(Landroid/view/View;)V
+HSPLandroidx/compose/foundation/Clickable_androidKt$isComposeRootInScrollableContainer$1;->invoke()Ljava/lang/Boolean;
+HSPLandroidx/compose/foundation/Clickable_androidKt$isComposeRootInScrollableContainer$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/foundation/Clickable_androidKt;-><clinit>()V
+HSPLandroidx/compose/foundation/Clickable_androidKt;->access$isInScrollableViewGroup(Landroid/view/View;)Z
+HSPLandroidx/compose/foundation/Clickable_androidKt;->isComposeRootInScrollableContainer(Landroidx/compose/runtime/Composer;I)Lkotlin/jvm/functions/Function0;
+HSPLandroidx/compose/foundation/Clickable_androidKt;->isInScrollableViewGroup(Landroid/view/View;)Z
+HSPLandroidx/compose/foundation/ClipScrollableContainerKt$HorizontalScrollableClipModifier$1;-><init>()V
+HSPLandroidx/compose/foundation/ClipScrollableContainerKt$VerticalScrollableClipModifier$1;-><init>()V
+HSPLandroidx/compose/foundation/ClipScrollableContainerKt$VerticalScrollableClipModifier$1;->createOutline-Pq9zytI(JLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)Landroidx/compose/ui/graphics/Outline;
+HSPLandroidx/compose/foundation/ClipScrollableContainerKt;-><clinit>()V
+HSPLandroidx/compose/foundation/ClipScrollableContainerKt;->clipScrollableContainer(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/gestures/Orientation;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/ClipScrollableContainerKt;->getMaxSupportedElevation()F
HSPLandroidx/compose/foundation/DarkThemeKt;->isSystemInDarkTheme(Landroidx/compose/runtime/Composer;I)Z
HSPLandroidx/compose/foundation/DarkTheme_androidKt;->_isSystemInDarkTheme(Landroidx/compose/runtime/Composer;I)Z
+HSPLandroidx/compose/foundation/DrawOverscrollModifier;-><init>(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/foundation/DrawOverscrollModifier;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
+HSPLandroidx/compose/foundation/DrawOverscrollModifier;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/foundation/EdgeEffectCompat;-><clinit>()V
+HSPLandroidx/compose/foundation/EdgeEffectCompat;-><init>()V
+HSPLandroidx/compose/foundation/EdgeEffectCompat;->create(Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/widget/EdgeEffect;
+HSPLandroidx/compose/foundation/EdgeEffectCompat;->getDistanceCompat(Landroid/widget/EdgeEffect;)F
+HSPLandroidx/compose/foundation/FocusableKt$focusGroup$1;-><clinit>()V
+HSPLandroidx/compose/foundation/FocusableKt$focusGroup$1;-><init>()V
+HSPLandroidx/compose/foundation/FocusableKt$focusGroup$1;->invoke(Landroidx/compose/ui/focus/FocusProperties;)V
+HSPLandroidx/compose/foundation/FocusableKt$focusGroup$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/foundation/FocusableKt$focusable$2$1$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V
+HSPLandroidx/compose/foundation/FocusableKt$focusable$2$1$1$invoke$$inlined$onDispose$1;->dispose()V
HSPLandroidx/compose/foundation/FocusableKt$focusable$2$1$1;-><init>(Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V
HSPLandroidx/compose/foundation/FocusableKt$focusable$2$1$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult;
HSPLandroidx/compose/foundation/FocusableKt$focusable$2$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/foundation/FocusableKt$focusable$2$2$invoke$$inlined$onDispose$1;-><init>()V
+HSPLandroidx/compose/foundation/FocusableKt$focusable$2$2$invoke$$inlined$onDispose$1;->dispose()V
HSPLandroidx/compose/foundation/FocusableKt$focusable$2$2;-><init>(ZLkotlinx/coroutines/CoroutineScope;Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V
HSPLandroidx/compose/foundation/FocusableKt$focusable$2$2;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult;
HSPLandroidx/compose/foundation/FocusableKt$focusable$2$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$3$1;-><init>(Landroidx/compose/ui/focus/FocusRequester;Landroidx/compose/runtime/MutableState;)V
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$3;-><init>(Landroidx/compose/runtime/MutableState;Landroidx/compose/ui/focus/FocusRequester;)V
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$3;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$4$1;-><init>(Landroidx/compose/runtime/MutableState;)V
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$4$1;->invoke(Landroidx/compose/foundation/lazy/layout/PinnableParent;)V
+HSPLandroidx/compose/foundation/FocusableKt$focusable$2$3$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/runtime/MutableState;)V
+HSPLandroidx/compose/foundation/FocusableKt$focusable$2$3$1$invoke$$inlined$onDispose$1;->dispose()V
+HSPLandroidx/compose/foundation/FocusableKt$focusable$2$3$1;-><init>(Landroidx/compose/ui/layout/PinnableContainer;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;)V
+HSPLandroidx/compose/foundation/FocusableKt$focusable$2$3$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult;
+HSPLandroidx/compose/foundation/FocusableKt$focusable$2$3$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/FocusableKt$focusable$2$4$1$1;-><init>(Landroidx/compose/ui/focus/FocusRequester;Landroidx/compose/runtime/MutableState;)V
+HSPLandroidx/compose/foundation/FocusableKt$focusable$2$4$1;-><init>(Landroidx/compose/runtime/MutableState;Landroidx/compose/ui/focus/FocusRequester;)V
+HSPLandroidx/compose/foundation/FocusableKt$focusable$2$4$1;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V
HSPLandroidx/compose/foundation/FocusableKt$focusable$2$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$5$3;-><init>(Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$5$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$5$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$5;-><init>(Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/relocation/BringIntoViewRequester;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V
+HSPLandroidx/compose/foundation/FocusableKt$focusable$2$5$2;-><init>(Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/FocusableKt$focusable$2$5$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/foundation/FocusableKt$focusable$2$5$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/FocusableKt$focusable$2$5;-><init>(Landroidx/compose/ui/layout/PinnableContainer;Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/relocation/BringIntoViewRequester;)V
HSPLandroidx/compose/foundation/FocusableKt$focusable$2$5;->invoke(Landroidx/compose/ui/focus/FocusState;)V
HSPLandroidx/compose/foundation/FocusableKt$focusable$2$5;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/foundation/FocusableKt$focusable$2;-><init>(Landroidx/compose/foundation/interaction/MutableInteractionSource;Z)V
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2;->access$invoke$lambda$3(Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/lazy/layout/PinnableParent;)V
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2;->access$invoke$lambda$5(Landroidx/compose/runtime/MutableState;)Z
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2;->access$invoke$lambda$6(Landroidx/compose/runtime/MutableState;Z)V
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2;->invoke$lambda$3(Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/lazy/layout/PinnableParent;)V
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2;->invoke$lambda$5(Landroidx/compose/runtime/MutableState;)Z
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2;->invoke$lambda$6(Landroidx/compose/runtime/MutableState;Z)V
+HSPLandroidx/compose/foundation/FocusableKt$focusable$2;->access$invoke$lambda$10(Landroidx/compose/runtime/MutableState;Landroidx/compose/ui/layout/PinnableContainer$PinnedHandle;)V
+HSPLandroidx/compose/foundation/FocusableKt$focusable$2;->access$invoke$lambda$2(Landroidx/compose/runtime/MutableState;)Z
+HSPLandroidx/compose/foundation/FocusableKt$focusable$2;->access$invoke$lambda$3(Landroidx/compose/runtime/MutableState;Z)V
+HSPLandroidx/compose/foundation/FocusableKt$focusable$2;->access$invoke$lambda$9(Landroidx/compose/runtime/MutableState;)Landroidx/compose/ui/layout/PinnableContainer$PinnedHandle;
+HSPLandroidx/compose/foundation/FocusableKt$focusable$2;->invoke$lambda$10(Landroidx/compose/runtime/MutableState;Landroidx/compose/ui/layout/PinnableContainer$PinnedHandle;)V
+HSPLandroidx/compose/foundation/FocusableKt$focusable$2;->invoke$lambda$2(Landroidx/compose/runtime/MutableState;)Z
+HSPLandroidx/compose/foundation/FocusableKt$focusable$2;->invoke$lambda$3(Landroidx/compose/runtime/MutableState;Z)V
+HSPLandroidx/compose/foundation/FocusableKt$focusable$2;->invoke$lambda$9(Landroidx/compose/runtime/MutableState;)Landroidx/compose/ui/layout/PinnableContainer$PinnedHandle;
HSPLandroidx/compose/foundation/FocusableKt$focusable$2;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier;
HSPLandroidx/compose/foundation/FocusableKt$focusable$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/foundation/FocusableKt$focusableInNonTouchMode$2$1;-><init>(Landroidx/compose/ui/input/InputModeManager;)V
@@ -553,11 +698,24 @@
HSPLandroidx/compose/foundation/FocusableKt$focusableInNonTouchMode$2;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier;
HSPLandroidx/compose/foundation/FocusableKt$focusableInNonTouchMode$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/foundation/FocusableKt;-><clinit>()V
-HSPLandroidx/compose/foundation/FocusableKt;->access$onPinnableParentAvailable(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/FocusableKt;->focusGroup(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
HSPLandroidx/compose/foundation/FocusableKt;->focusable(Landroidx/compose/ui/Modifier;ZLandroidx/compose/foundation/interaction/MutableInteractionSource;)Landroidx/compose/ui/Modifier;
HSPLandroidx/compose/foundation/FocusableKt;->focusableInNonTouchMode(Landroidx/compose/ui/Modifier;ZLandroidx/compose/foundation/interaction/MutableInteractionSource;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/FocusableKt;->onPinnableParentAvailable(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/FocusedBoundsKt$ModifierLocalFocusedBoundsObserver$1;-><clinit>()V
+HSPLandroidx/compose/foundation/FocusedBoundsKt$ModifierLocalFocusedBoundsObserver$1;-><init>()V
+HSPLandroidx/compose/foundation/FocusedBoundsKt$ModifierLocalFocusedBoundsObserver$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/foundation/FocusedBoundsKt$ModifierLocalFocusedBoundsObserver$1;->invoke()Lkotlin/jvm/functions/Function1;
+HSPLandroidx/compose/foundation/FocusedBoundsKt$onFocusedBoundsChanged$2;-><init>(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/foundation/FocusedBoundsKt$onFocusedBoundsChanged$2;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/FocusedBoundsKt$onFocusedBoundsChanged$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/FocusedBoundsKt;-><clinit>()V
+HSPLandroidx/compose/foundation/FocusedBoundsKt;->getModifierLocalFocusedBoundsObserver()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
+HSPLandroidx/compose/foundation/FocusedBoundsKt;->onFocusedBoundsChanged(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/FocusedBoundsObserverModifier;-><init>(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/foundation/FocusedBoundsObserverModifier;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
+HSPLandroidx/compose/foundation/FocusedBoundsObserverModifier;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V
HSPLandroidx/compose/foundation/HoverableKt$hoverable$2$1$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V
+HSPLandroidx/compose/foundation/HoverableKt$hoverable$2$1$1$invoke$$inlined$onDispose$1;->dispose()V
HSPLandroidx/compose/foundation/HoverableKt$hoverable$2$1$1;-><init>(Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V
HSPLandroidx/compose/foundation/HoverableKt$hoverable$2$1$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult;
HSPLandroidx/compose/foundation/HoverableKt$hoverable$2$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
@@ -573,9 +731,21 @@
HSPLandroidx/compose/foundation/HoverableKt$hoverable$2$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/foundation/HoverableKt$hoverable$2$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/foundation/HoverableKt$hoverable$2;-><init>(Landroidx/compose/foundation/interaction/MutableInteractionSource;Z)V
+HSPLandroidx/compose/foundation/HoverableKt$hoverable$2;->access$invoke$tryEmitExit(Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V
+HSPLandroidx/compose/foundation/HoverableKt$hoverable$2;->invoke$lambda$1(Landroidx/compose/runtime/MutableState;)Landroidx/compose/foundation/interaction/HoverInteraction$Enter;
+HSPLandroidx/compose/foundation/HoverableKt$hoverable$2;->invoke$tryEmitExit(Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V
HSPLandroidx/compose/foundation/HoverableKt$hoverable$2;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier;
HSPLandroidx/compose/foundation/HoverableKt$hoverable$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/foundation/HoverableKt;->hoverable(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/MutableInteractionSource;Z)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/ImageKt$Image$2$measure$1;-><clinit>()V
+HSPLandroidx/compose/foundation/ImageKt$Image$2$measure$1;-><init>()V
+HSPLandroidx/compose/foundation/ImageKt$Image$2$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
+HSPLandroidx/compose/foundation/ImageKt$Image$2$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/ImageKt$Image$2;-><clinit>()V
+HSPLandroidx/compose/foundation/ImageKt$Image$2;-><init>()V
+HSPLandroidx/compose/foundation/ImageKt$Image$2;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/foundation/ImageKt;->Image(Landroidx/compose/ui/graphics/painter/Painter;Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/ColorFilter;Landroidx/compose/runtime/Composer;II)V
+HSPLandroidx/compose/foundation/ImageKt;->Image-5h-nEew(Landroidx/compose/ui/graphics/ImageBitmap;Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/ColorFilter;ILandroidx/compose/runtime/Composer;II)V
HSPLandroidx/compose/foundation/IndicationKt$LocalIndication$1;-><clinit>()V
HSPLandroidx/compose/foundation/IndicationKt$LocalIndication$1;-><init>()V
HSPLandroidx/compose/foundation/IndicationKt$indication$2;-><init>(Landroidx/compose/foundation/Indication;Landroidx/compose/foundation/interaction/InteractionSource;)V
@@ -595,15 +765,37 @@
HSPLandroidx/compose/foundation/MutatorMutex$mutateWith$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/foundation/MutatorMutex$mutateWith$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
HSPLandroidx/compose/foundation/MutatorMutex$mutateWith$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/MutatorMutex;-><clinit>()V
HSPLandroidx/compose/foundation/MutatorMutex;-><init>()V
HSPLandroidx/compose/foundation/MutatorMutex;->access$getCurrentMutator$p(Landroidx/compose/foundation/MutatorMutex;)Ljava/util/concurrent/atomic/AtomicReference;
HSPLandroidx/compose/foundation/MutatorMutex;->access$getMutex$p(Landroidx/compose/foundation/MutatorMutex;)Lkotlinx/coroutines/sync/Mutex;
HSPLandroidx/compose/foundation/MutatorMutex;->access$tryMutateOrCancel(Landroidx/compose/foundation/MutatorMutex;Landroidx/compose/foundation/MutatorMutex$Mutator;)V
HSPLandroidx/compose/foundation/MutatorMutex;->mutateWith(Ljava/lang/Object;Landroidx/compose/foundation/MutatePriority;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
HSPLandroidx/compose/foundation/MutatorMutex;->tryMutateOrCancel(Landroidx/compose/foundation/MutatorMutex$Mutator;)V
-HSPLandroidx/compose/foundation/PinnableParentConsumer;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/foundation/PinnableParentConsumer;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/foundation/PinnableParentConsumer;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V
+HSPLandroidx/compose/foundation/OverscrollConfiguration;-><clinit>()V
+HSPLandroidx/compose/foundation/OverscrollConfiguration;-><init>(JLandroidx/compose/foundation/layout/PaddingValues;)V
+HSPLandroidx/compose/foundation/OverscrollConfiguration;-><init>(JLandroidx/compose/foundation/layout/PaddingValues;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/foundation/OverscrollConfiguration;-><init>(JLandroidx/compose/foundation/layout/PaddingValues;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/foundation/OverscrollConfiguration;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/foundation/OverscrollConfiguration;->getGlowColor-0d7_KjU()J
+HSPLandroidx/compose/foundation/OverscrollConfigurationKt$LocalOverscrollConfiguration$1;-><clinit>()V
+HSPLandroidx/compose/foundation/OverscrollConfigurationKt$LocalOverscrollConfiguration$1;-><init>()V
+HSPLandroidx/compose/foundation/OverscrollConfigurationKt$LocalOverscrollConfiguration$1;->invoke()Landroidx/compose/foundation/OverscrollConfiguration;
+HSPLandroidx/compose/foundation/OverscrollConfigurationKt$LocalOverscrollConfiguration$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/foundation/OverscrollConfigurationKt;-><clinit>()V
+HSPLandroidx/compose/foundation/OverscrollConfigurationKt;->getLocalOverscrollConfiguration()Landroidx/compose/runtime/ProvidableCompositionLocal;
+HSPLandroidx/compose/foundation/OverscrollKt;->overscroll(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/OverscrollEffect;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/gestures/AndroidConfig;-><clinit>()V
+HSPLandroidx/compose/foundation/gestures/AndroidConfig;-><init>()V
+HSPLandroidx/compose/foundation/gestures/AndroidScrollable_androidKt;->platformScrollConfig(Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/gestures/ScrollConfig;
+HSPLandroidx/compose/foundation/gestures/BringIntoViewRequestPriorityQueue;-><init>()V
+HSPLandroidx/compose/foundation/gestures/ContentInViewModifier$WhenMappings;-><clinit>()V
+HSPLandroidx/compose/foundation/gestures/ContentInViewModifier$modifier$1;-><init>(Landroidx/compose/foundation/gestures/ContentInViewModifier;)V
+HSPLandroidx/compose/foundation/gestures/ContentInViewModifier;-><init>(Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/gestures/ScrollableState;Z)V
+HSPLandroidx/compose/foundation/gestures/ContentInViewModifier;->compareTo-TemP2vQ(JJ)I
+HSPLandroidx/compose/foundation/gestures/ContentInViewModifier;->getModifier()Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/gestures/ContentInViewModifier;->onPlaced(Landroidx/compose/ui/layout/LayoutCoordinates;)V
+HSPLandroidx/compose/foundation/gestures/ContentInViewModifier;->onRemeasured-ozmzZPI(J)V
HSPLandroidx/compose/foundation/gestures/DefaultDraggableState$drag$2;-><init>(Landroidx/compose/foundation/gestures/DefaultDraggableState;Landroidx/compose/foundation/MutatePriority;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V
HSPLandroidx/compose/foundation/gestures/DefaultDraggableState$drag$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
HSPLandroidx/compose/foundation/gestures/DefaultDraggableState$drag$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
@@ -616,14 +808,33 @@
HSPLandroidx/compose/foundation/gestures/DefaultDraggableState;->access$getScrollMutex$p(Landroidx/compose/foundation/gestures/DefaultDraggableState;)Landroidx/compose/foundation/MutatorMutex;
HSPLandroidx/compose/foundation/gestures/DefaultDraggableState;->drag(Landroidx/compose/foundation/MutatePriority;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
HSPLandroidx/compose/foundation/gestures/DefaultDraggableState;->getOnDelta()Lkotlin/jvm/functions/Function1;
+HSPLandroidx/compose/foundation/gestures/DefaultFlingBehavior;-><init>(Landroidx/compose/animation/core/DecayAnimationSpec;Landroidx/compose/ui/MotionDurationScale;)V
+HSPLandroidx/compose/foundation/gestures/DefaultFlingBehavior;-><init>(Landroidx/compose/animation/core/DecayAnimationSpec;Landroidx/compose/ui/MotionDurationScale;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scrollScope$1;-><init>(Landroidx/compose/foundation/gestures/DefaultScrollableState;)V
+HSPLandroidx/compose/foundation/gestures/DefaultScrollableState;-><init>(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/foundation/gestures/DragGestureDetectorKt$HorizontalPointerDirectionConfig$1;-><init>()V
+HSPLandroidx/compose/foundation/gestures/DragGestureDetectorKt$VerticalPointerDirectionConfig$1;-><init>()V
+HSPLandroidx/compose/foundation/gestures/DragGestureDetectorKt;-><clinit>()V
+HSPLandroidx/compose/foundation/gestures/DragGestureDetectorKt;->access$isPointerUp-DmW0f2w(Landroidx/compose/ui/input/pointer/PointerEvent;J)Z
+HSPLandroidx/compose/foundation/gestures/DragGestureDetectorKt;->isPointerUp-DmW0f2w(Landroidx/compose/ui/input/pointer/PointerEvent;J)Z
+HSPLandroidx/compose/foundation/gestures/DragGestureDetectorKt;->pointerSlop-E8SPZFQ(Landroidx/compose/ui/platform/ViewConfiguration;I)F
+HSPLandroidx/compose/foundation/gestures/DragGestureDetectorKt;->toPointerDirectionConfig(Landroidx/compose/foundation/gestures/Orientation;)Landroidx/compose/foundation/gestures/PointerDirectionConfig;
HSPLandroidx/compose/foundation/gestures/DragLogic;-><init>(Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V
HSPLandroidx/compose/foundation/gestures/DraggableKt$awaitDownAndSlop$1;-><init>(Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/gestures/DraggableKt$awaitDownAndSlop$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/DraggableKt$awaitDownAndSlop$postPointerSlop$1;-><init>(Landroidx/compose/ui/input/pointer/util/VelocityTracker;Lkotlin/jvm/internal/Ref$LongRef;)V
HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$1;-><init>(Lkotlin/coroutines/Continuation;)V
HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$3;-><clinit>()V
HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$3;-><init>()V
+HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$3;->invoke(Landroidx/compose/ui/input/pointer/PointerInputChange;)Ljava/lang/Boolean;
+HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$4;-><init>(Z)V
+HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$4;->invoke()Ljava/lang/Boolean;
+HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$4;->invoke()Ljava/lang/Object;
HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$5;-><init>(Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/gestures/Orientation;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$6;-><init>(Lkotlin/coroutines/Continuation;)V
HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$1$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V
+HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$1$1$invoke$$inlined$onDispose$1;->dispose()V
HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$1$1;-><init>(Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V
HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$1$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult;
HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
@@ -650,25 +861,90 @@
HSPLandroidx/compose/foundation/gestures/DraggableKt;->access$awaitDownAndSlop(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/ui/input/pointer/util/VelocityTracker;Landroidx/compose/foundation/gestures/Orientation;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
HSPLandroidx/compose/foundation/gestures/DraggableKt;->awaitDownAndSlop(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/ui/input/pointer/util/VelocityTracker;Landroidx/compose/foundation/gestures/Orientation;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
HSPLandroidx/compose/foundation/gestures/DraggableKt;->draggable$default(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/gestures/DraggableState;Landroidx/compose/foundation/gestures/Orientation;ZLandroidx/compose/foundation/interaction/MutableInteractionSource;ZLkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;ZILjava/lang/Object;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/gestures/DraggableKt;->draggable$default(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/gestures/DraggableState;Lkotlin/jvm/functions/Function1;Landroidx/compose/foundation/gestures/Orientation;ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;ZILjava/lang/Object;)Landroidx/compose/ui/Modifier;
HSPLandroidx/compose/foundation/gestures/DraggableKt;->draggable(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/gestures/DraggableState;Landroidx/compose/foundation/gestures/Orientation;ZLandroidx/compose/foundation/interaction/MutableInteractionSource;ZLkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Z)Landroidx/compose/ui/Modifier;
HSPLandroidx/compose/foundation/gestures/DraggableKt;->draggable(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/gestures/DraggableState;Lkotlin/jvm/functions/Function1;Landroidx/compose/foundation/gestures/Orientation;ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Z)Landroidx/compose/ui/Modifier;
HSPLandroidx/compose/foundation/gestures/DraggableState;->drag$default(Landroidx/compose/foundation/gestures/DraggableState;Landroidx/compose/foundation/MutatePriority;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/ForEachGestureKt$awaitAllPointersUp$3;-><init>(Lkotlin/coroutines/Continuation;)V
HSPLandroidx/compose/foundation/gestures/ForEachGestureKt$awaitEachGesture$2;-><init>(Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V
HSPLandroidx/compose/foundation/gestures/ForEachGestureKt$awaitEachGesture$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
HSPLandroidx/compose/foundation/gestures/ForEachGestureKt$awaitEachGesture$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/ForEachGestureKt;->allPointersUp(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;)Z
+HSPLandroidx/compose/foundation/gestures/ForEachGestureKt;->awaitAllPointersUp(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
HSPLandroidx/compose/foundation/gestures/ForEachGestureKt;->awaitEachGesture(Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/ModifierLocalScrollableContainerProvider;-><clinit>()V
+HSPLandroidx/compose/foundation/gestures/ModifierLocalScrollableContainerProvider;-><init>()V
+HSPLandroidx/compose/foundation/gestures/ModifierLocalScrollableContainerProvider;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
+HSPLandroidx/compose/foundation/gestures/ModifierLocalScrollableContainerProvider;->getValue()Ljava/lang/Boolean;
+HSPLandroidx/compose/foundation/gestures/ModifierLocalScrollableContainerProvider;->getValue()Ljava/lang/Object;
HSPLandroidx/compose/foundation/gestures/Orientation;->$values()[Landroidx/compose/foundation/gestures/Orientation;
HSPLandroidx/compose/foundation/gestures/Orientation;-><clinit>()V
HSPLandroidx/compose/foundation/gestures/Orientation;-><init>(Ljava/lang/String;I)V
+HSPLandroidx/compose/foundation/gestures/Orientation;->values()[Landroidx/compose/foundation/gestures/Orientation;
HSPLandroidx/compose/foundation/gestures/PressGestureScopeImpl$reset$1;-><init>(Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/gestures/PressGestureScopeImpl$reset$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/PressGestureScopeImpl$tryAwaitRelease$1;-><init>(Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/gestures/PressGestureScopeImpl$tryAwaitRelease$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/foundation/gestures/PressGestureScopeImpl;-><init>(Landroidx/compose/ui/unit/Density;)V
+HSPLandroidx/compose/foundation/gestures/PressGestureScopeImpl;->release()V
HSPLandroidx/compose/foundation/gestures/PressGestureScopeImpl;->reset(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/PressGestureScopeImpl;->tryAwaitRelease(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/ScrollDraggableState;-><init>(Landroidx/compose/runtime/State;)V
+HSPLandroidx/compose/foundation/gestures/ScrollableDefaults;-><clinit>()V
+HSPLandroidx/compose/foundation/gestures/ScrollableDefaults;-><init>()V
+HSPLandroidx/compose/foundation/gestures/ScrollableDefaults;->flingBehavior(Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/gestures/FlingBehavior;
+HSPLandroidx/compose/foundation/gestures/ScrollableDefaults;->overscrollEffect(Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/OverscrollEffect;
+HSPLandroidx/compose/foundation/gestures/ScrollableDefaults;->reverseDirection(Landroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/foundation/gestures/Orientation;Z)Z
+HSPLandroidx/compose/foundation/gestures/ScrollableKt$DefaultScrollMotionDurationScale$1;-><init>()V
+HSPLandroidx/compose/foundation/gestures/ScrollableKt$ModifierLocalScrollableContainer$1;-><clinit>()V
+HSPLandroidx/compose/foundation/gestures/ScrollableKt$ModifierLocalScrollableContainer$1;-><init>()V
+HSPLandroidx/compose/foundation/gestures/ScrollableKt$ModifierLocalScrollableContainer$1;->invoke()Ljava/lang/Boolean;
+HSPLandroidx/compose/foundation/gestures/ScrollableKt$ModifierLocalScrollableContainer$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/ScrollableKt$NoOpScrollScope$1;-><init>()V
+HSPLandroidx/compose/foundation/gestures/ScrollableKt$awaitScrollEvent$1;-><init>(Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/gestures/ScrollableKt$awaitScrollEvent$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/ScrollableKt$mouseWheelScroll$1$1;-><init>(Landroidx/compose/foundation/gestures/ScrollConfig;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/gestures/ScrollableKt$mouseWheelScroll$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/foundation/gestures/ScrollableKt$mouseWheelScroll$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/ScrollableKt$mouseWheelScroll$1;-><init>(Landroidx/compose/foundation/gestures/ScrollConfig;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/gestures/ScrollableKt$mouseWheelScroll$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/foundation/gestures/ScrollableKt$mouseWheelScroll$1;->invoke(Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/ScrollableKt$mouseWheelScroll$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/ScrollableKt$mouseWheelScroll$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$1;-><clinit>()V
+HSPLandroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$1;-><init>()V
+HSPLandroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$2$1;-><init>(Landroidx/compose/runtime/State;)V
+HSPLandroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$3$1;-><init>(Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/gestures/ScrollableKt$scrollable$2;-><init>(Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/gestures/ScrollableState;ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/OverscrollEffect;Z)V
+HSPLandroidx/compose/foundation/gestures/ScrollableKt$scrollable$2;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/gestures/ScrollableKt$scrollable$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/ScrollableKt$scrollableNestedScrollConnection$1;-><init>(Landroidx/compose/runtime/State;Z)V
+HSPLandroidx/compose/foundation/gestures/ScrollableKt;-><clinit>()V
+HSPLandroidx/compose/foundation/gestures/ScrollableKt;->access$awaitScrollEvent(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/ScrollableKt;->access$getNoOpScrollScope$p()Landroidx/compose/foundation/gestures/ScrollScope;
+HSPLandroidx/compose/foundation/gestures/ScrollableKt;->access$pointerScrollable(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/gestures/Orientation;ZLandroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/OverscrollEffect;ZLandroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/gestures/ScrollableKt;->access$scrollableNestedScrollConnection(Landroidx/compose/runtime/State;Z)Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection;
+HSPLandroidx/compose/foundation/gestures/ScrollableKt;->awaitScrollEvent(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/ScrollableKt;->getDefaultScrollMotionDurationScale()Landroidx/compose/ui/MotionDurationScale;
+HSPLandroidx/compose/foundation/gestures/ScrollableKt;->getModifierLocalScrollableContainer()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
+HSPLandroidx/compose/foundation/gestures/ScrollableKt;->mouseWheelScroll(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/State;Landroidx/compose/foundation/gestures/ScrollConfig;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/gestures/ScrollableKt;->pointerScrollable(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/gestures/Orientation;ZLandroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/OverscrollEffect;ZLandroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/gestures/ScrollableKt;->scrollable(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/OverscrollEffect;ZZLandroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/interaction/MutableInteractionSource;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/gestures/ScrollableKt;->scrollableNestedScrollConnection(Landroidx/compose/runtime/State;Z)Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection;
+HSPLandroidx/compose/foundation/gestures/ScrollableStateKt;->ScrollableState(Lkotlin/jvm/functions/Function1;)Landroidx/compose/foundation/gestures/ScrollableState;
+HSPLandroidx/compose/foundation/gestures/ScrollingLogic;-><init>(Landroidx/compose/foundation/gestures/Orientation;ZLandroidx/compose/runtime/State;Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/OverscrollEffect;)V
HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$NoPressGesture$1;-><init>(Lkotlin/coroutines/Continuation;)V
HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$awaitFirstDown$2;-><init>(Lkotlin/coroutines/Continuation;)V
HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$awaitFirstDown$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$1;-><init>(Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V
HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$2;-><init>(Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Landroidx/compose/ui/input/pointer/PointerInputChange;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$4;-><init>(Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$4;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$4;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1;-><init>(Lkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function1;Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V
HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1;->invoke(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
@@ -689,44 +965,81 @@
HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapGestures$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapGestures$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapGestures$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$waitForUpOrCancellation$2;-><init>(Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$waitForUpOrCancellation$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt;-><clinit>()V
+HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->access$getNoPressGesture$p()Lkotlin/jvm/functions/Function3;
HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->awaitFirstDown$default(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;ZLandroidx/compose/ui/input/pointer/PointerEventPass;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->awaitFirstDown(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;ZLandroidx/compose/ui/input/pointer/PointerEventPass;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->detectTapAndPress(Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->detectTapGestures$default(Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->detectTapGestures(Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->waitForUpOrCancellation$default(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Landroidx/compose/ui/input/pointer/PointerEventPass;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->waitForUpOrCancellation(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Landroidx/compose/ui/input/pointer/PointerEventPass;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/gestures/UpdatableAnimationState$Companion;-><init>()V
+HSPLandroidx/compose/foundation/gestures/UpdatableAnimationState$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/foundation/gestures/UpdatableAnimationState;-><clinit>()V
+HSPLandroidx/compose/foundation/gestures/UpdatableAnimationState;-><init>()V
HSPLandroidx/compose/foundation/interaction/InteractionSourceKt;->MutableInteractionSource()Landroidx/compose/foundation/interaction/MutableInteractionSource;
HSPLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;-><init>()V
+HSPLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;->emit(Landroidx/compose/foundation/interaction/Interaction;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
HSPLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;->getInteractions()Lkotlinx/coroutines/flow/Flow;
HSPLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;->getInteractions()Lkotlinx/coroutines/flow/MutableSharedFlow;
HSPLandroidx/compose/foundation/interaction/PressInteraction$Press;-><clinit>()V
HSPLandroidx/compose/foundation/interaction/PressInteraction$Press;-><init>(J)V
HSPLandroidx/compose/foundation/interaction/PressInteraction$Press;-><init>(JLkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/foundation/interaction/PressInteraction$Press;->getPressPosition-F1C5BW0()J
+HSPLandroidx/compose/foundation/interaction/PressInteraction$Release;-><clinit>()V
+HSPLandroidx/compose/foundation/interaction/PressInteraction$Release;-><init>(Landroidx/compose/foundation/interaction/PressInteraction$Press;)V
+HSPLandroidx/compose/foundation/interaction/PressInteraction$Release;->getPress()Landroidx/compose/foundation/interaction/PressInteraction$Press;
+HSPLandroidx/compose/foundation/layout/AndroidWindowInsets;-><init>(ILjava/lang/String;)V
+HSPLandroidx/compose/foundation/layout/AndroidWindowInsets;->getInsets$foundation_layout_release()Landroidx/core/graphics/Insets;
+HSPLandroidx/compose/foundation/layout/AndroidWindowInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I
+HSPLandroidx/compose/foundation/layout/AndroidWindowInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I
+HSPLandroidx/compose/foundation/layout/AndroidWindowInsets;->getTop(Landroidx/compose/ui/unit/Density;)I
HSPLandroidx/compose/foundation/layout/Arrangement$Bottom$1;-><init>()V
HSPLandroidx/compose/foundation/layout/Arrangement$Center$1;-><init>()V
HSPLandroidx/compose/foundation/layout/Arrangement$Center$1;->arrange(Landroidx/compose/ui/unit/Density;I[ILandroidx/compose/ui/unit/LayoutDirection;[I)V
HSPLandroidx/compose/foundation/layout/Arrangement$Center$1;->getSpacing-D9Ej5fM()F
HSPLandroidx/compose/foundation/layout/Arrangement$End$1;-><init>()V
+HSPLandroidx/compose/foundation/layout/Arrangement$End$1;->arrange(Landroidx/compose/ui/unit/Density;I[ILandroidx/compose/ui/unit/LayoutDirection;[I)V
HSPLandroidx/compose/foundation/layout/Arrangement$Horizontal;->getSpacing-D9Ej5fM()F
HSPLandroidx/compose/foundation/layout/Arrangement$SpaceAround$1;-><init>()V
HSPLandroidx/compose/foundation/layout/Arrangement$SpaceBetween$1;-><init>()V
HSPLandroidx/compose/foundation/layout/Arrangement$SpaceBetween$1;->arrange(Landroidx/compose/ui/unit/Density;I[ILandroidx/compose/ui/unit/LayoutDirection;[I)V
HSPLandroidx/compose/foundation/layout/Arrangement$SpaceBetween$1;->getSpacing-D9Ej5fM()F
HSPLandroidx/compose/foundation/layout/Arrangement$SpaceEvenly$1;-><init>()V
+HSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;-><init>(FZLkotlin/jvm/functions/Function2;)V
+HSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;-><init>(FZLkotlin/jvm/functions/Function2;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->arrange(Landroidx/compose/ui/unit/Density;I[ILandroidx/compose/ui/unit/LayoutDirection;[I)V
+HSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->arrange(Landroidx/compose/ui/unit/Density;I[I[I)V
+HSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->getSpacing-D9Ej5fM()F
HSPLandroidx/compose/foundation/layout/Arrangement$Start$1;-><init>()V
HSPLandroidx/compose/foundation/layout/Arrangement$Start$1;->arrange(Landroidx/compose/ui/unit/Density;I[ILandroidx/compose/ui/unit/LayoutDirection;[I)V
HSPLandroidx/compose/foundation/layout/Arrangement$Top$1;-><init>()V
HSPLandroidx/compose/foundation/layout/Arrangement$Top$1;->arrange(Landroidx/compose/ui/unit/Density;I[I[I)V
HSPLandroidx/compose/foundation/layout/Arrangement$Vertical;->getSpacing-D9Ej5fM()F
+HSPLandroidx/compose/foundation/layout/Arrangement$spacedBy$1;-><clinit>()V
+HSPLandroidx/compose/foundation/layout/Arrangement$spacedBy$1;-><init>()V
HSPLandroidx/compose/foundation/layout/Arrangement;-><clinit>()V
HSPLandroidx/compose/foundation/layout/Arrangement;-><init>()V
HSPLandroidx/compose/foundation/layout/Arrangement;->getCenter()Landroidx/compose/foundation/layout/Arrangement$HorizontalOrVertical;
+HSPLandroidx/compose/foundation/layout/Arrangement;->getEnd()Landroidx/compose/foundation/layout/Arrangement$Horizontal;
HSPLandroidx/compose/foundation/layout/Arrangement;->getSpaceBetween()Landroidx/compose/foundation/layout/Arrangement$HorizontalOrVertical;
HSPLandroidx/compose/foundation/layout/Arrangement;->getStart()Landroidx/compose/foundation/layout/Arrangement$Horizontal;
HSPLandroidx/compose/foundation/layout/Arrangement;->getTop()Landroidx/compose/foundation/layout/Arrangement$Vertical;
HSPLandroidx/compose/foundation/layout/Arrangement;->placeCenter$foundation_layout_release(I[I[IZ)V
HSPLandroidx/compose/foundation/layout/Arrangement;->placeLeftOrTop$foundation_layout_release([I[IZ)V
+HSPLandroidx/compose/foundation/layout/Arrangement;->placeRightOrBottom$foundation_layout_release(I[I[IZ)V
HSPLandroidx/compose/foundation/layout/Arrangement;->placeSpaceBetween$foundation_layout_release(I[I[IZ)V
+HSPLandroidx/compose/foundation/layout/Arrangement;->spacedBy-0680j_4(F)Landroidx/compose/foundation/layout/Arrangement$HorizontalOrVertical;
+HSPLandroidx/compose/foundation/layout/BoxChildData;-><init>(Landroidx/compose/ui/Alignment;ZLkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/foundation/layout/BoxChildData;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/foundation/layout/BoxChildData;->getAlignment()Landroidx/compose/ui/Alignment;
+HSPLandroidx/compose/foundation/layout/BoxChildData;->getMatchParentSize()Z
+HSPLandroidx/compose/foundation/layout/BoxChildData;->modifyParentData(Landroidx/compose/ui/unit/Density;Ljava/lang/Object;)Landroidx/compose/foundation/layout/BoxChildData;
+HSPLandroidx/compose/foundation/layout/BoxChildData;->modifyParentData(Landroidx/compose/ui/unit/Density;Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1$measure$1;-><clinit>()V
HSPLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1$measure$1;-><init>()V
HSPLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
@@ -753,6 +1066,7 @@
HSPLandroidx/compose/foundation/layout/BoxKt;->rememberBoxMeasurePolicy(Landroidx/compose/ui/Alignment;ZLandroidx/compose/runtime/Composer;I)Landroidx/compose/ui/layout/MeasurePolicy;
HSPLandroidx/compose/foundation/layout/BoxScopeInstance;-><clinit>()V
HSPLandroidx/compose/foundation/layout/BoxScopeInstance;-><init>()V
+HSPLandroidx/compose/foundation/layout/BoxScopeInstance;->align(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Alignment;)Landroidx/compose/ui/Modifier;
HSPLandroidx/compose/foundation/layout/BoxWithConstraintsKt$BoxWithConstraints$1$1$measurables$1;-><init>(Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/layout/BoxWithConstraintsScopeImpl;I)V
HSPLandroidx/compose/foundation/layout/BoxWithConstraintsKt$BoxWithConstraints$1$1$measurables$1;->invoke(Landroidx/compose/runtime/Composer;I)V
HSPLandroidx/compose/foundation/layout/BoxWithConstraintsKt$BoxWithConstraints$1$1$measurables$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
@@ -762,17 +1076,22 @@
HSPLandroidx/compose/foundation/layout/BoxWithConstraintsKt;->BoxWithConstraints(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Alignment;ZLkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V
HSPLandroidx/compose/foundation/layout/BoxWithConstraintsScopeImpl;-><init>(Landroidx/compose/ui/unit/Density;J)V
HSPLandroidx/compose/foundation/layout/BoxWithConstraintsScopeImpl;-><init>(Landroidx/compose/ui/unit/Density;JLkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/foundation/layout/BoxWithConstraintsScopeImpl;->align(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Alignment;)Landroidx/compose/ui/Modifier;
HSPLandroidx/compose/foundation/layout/BoxWithConstraintsScopeImpl;->equals(Ljava/lang/Object;)Z
HSPLandroidx/compose/foundation/layout/BoxWithConstraintsScopeImpl;->getConstraints-msEJaDk()J
+HSPLandroidx/compose/foundation/layout/BoxWithConstraintsScopeImpl;->getMaxHeight-D9Ej5fM()F
+HSPLandroidx/compose/foundation/layout/BoxWithConstraintsScopeImpl;->getMaxWidth-D9Ej5fM()F
HSPLandroidx/compose/foundation/layout/ColumnKt$DefaultColumnMeasurePolicy$1;-><clinit>()V
HSPLandroidx/compose/foundation/layout/ColumnKt$DefaultColumnMeasurePolicy$1;-><init>()V
HSPLandroidx/compose/foundation/layout/ColumnKt$DefaultColumnMeasurePolicy$1;->invoke(I[ILandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;[I)V
HSPLandroidx/compose/foundation/layout/ColumnKt$DefaultColumnMeasurePolicy$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/layout/ColumnKt$columnMeasurePolicy$1$1;-><init>(Landroidx/compose/foundation/layout/Arrangement$Vertical;)V
+HSPLandroidx/compose/foundation/layout/ColumnKt$columnMeasurePolicy$1$1;->invoke(I[ILandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;[I)V
+HSPLandroidx/compose/foundation/layout/ColumnKt$columnMeasurePolicy$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/foundation/layout/ColumnKt;-><clinit>()V
HSPLandroidx/compose/foundation/layout/ColumnKt;->columnMeasurePolicy(Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/layout/MeasurePolicy;
HSPLandroidx/compose/foundation/layout/ColumnScopeInstance;-><clinit>()V
HSPLandroidx/compose/foundation/layout/ColumnScopeInstance;-><init>()V
-HSPLandroidx/compose/foundation/layout/ColumnScopeInstance;->align(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Alignment$Horizontal;)Landroidx/compose/ui/Modifier;
HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$CenterCrossAxisAlignment;-><clinit>()V
HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$CenterCrossAxisAlignment;-><init>()V
HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$Companion;-><init>()V
@@ -790,23 +1109,52 @@
HSPLandroidx/compose/foundation/layout/CrossAxisAlignment;-><clinit>()V
HSPLandroidx/compose/foundation/layout/CrossAxisAlignment;-><init>()V
HSPLandroidx/compose/foundation/layout/CrossAxisAlignment;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/foundation/layout/CrossAxisAlignment;->isRelative$foundation_layout_release()Z
HSPLandroidx/compose/foundation/layout/Direction;->$values()[Landroidx/compose/foundation/layout/Direction;
HSPLandroidx/compose/foundation/layout/Direction;-><clinit>()V
HSPLandroidx/compose/foundation/layout/Direction;-><init>(Ljava/lang/String;I)V
+HSPLandroidx/compose/foundation/layout/ExcludeInsets;-><init>(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/foundation/layout/WindowInsets;)V
+HSPLandroidx/compose/foundation/layout/ExcludeInsets;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/foundation/layout/ExcludeInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I
+HSPLandroidx/compose/foundation/layout/ExcludeInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I
+HSPLandroidx/compose/foundation/layout/ExcludeInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I
+HSPLandroidx/compose/foundation/layout/ExcludeInsets;->getTop(Landroidx/compose/ui/unit/Density;)I
HSPLandroidx/compose/foundation/layout/FillModifier$measure$1;-><init>(Landroidx/compose/ui/layout/Placeable;)V
HSPLandroidx/compose/foundation/layout/FillModifier$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
HSPLandroidx/compose/foundation/layout/FillModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/foundation/layout/FillModifier;-><init>(Landroidx/compose/foundation/layout/Direction;FLkotlin/jvm/functions/Function1;)V
HSPLandroidx/compose/foundation/layout/FillModifier;->equals(Ljava/lang/Object;)Z
HSPLandroidx/compose/foundation/layout/FillModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/foundation/layout/HorizontalAlignModifier;-><init>(Landroidx/compose/ui/Alignment$Horizontal;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/foundation/layout/HorizontalAlignModifier;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/foundation/layout/HorizontalAlignModifier;->modifyParentData(Landroidx/compose/ui/unit/Density;Ljava/lang/Object;)Landroidx/compose/foundation/layout/RowColumnParentData;
-HSPLandroidx/compose/foundation/layout/HorizontalAlignModifier;->modifyParentData(Landroidx/compose/ui/unit/Density;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/layout/FixedIntInsets;-><init>(IIII)V
+HSPLandroidx/compose/foundation/layout/FixedIntInsets;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/foundation/layout/FixedIntInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I
+HSPLandroidx/compose/foundation/layout/FixedIntInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I
+HSPLandroidx/compose/foundation/layout/FixedIntInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I
+HSPLandroidx/compose/foundation/layout/FixedIntInsets;->getTop(Landroidx/compose/ui/unit/Density;)I
+HSPLandroidx/compose/foundation/layout/InsetsListener;-><init>(Landroidx/compose/foundation/layout/WindowInsetsHolder;)V
+HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier$measure$1;-><init>(Landroidx/compose/ui/layout/Placeable;II)V
+HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
+HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier;-><init>(Landroidx/compose/foundation/layout/WindowInsets;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
+HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier;->getUnconsumedInsets()Landroidx/compose/foundation/layout/WindowInsets;
+HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V
+HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier;->setConsumedInsets(Landroidx/compose/foundation/layout/WindowInsets;)V
+HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier;->setUnconsumedInsets(Landroidx/compose/foundation/layout/WindowInsets;)V
+HSPLandroidx/compose/foundation/layout/InsetsValues;-><init>(IIII)V
HSPLandroidx/compose/foundation/layout/LayoutOrientation;->$values()[Landroidx/compose/foundation/layout/LayoutOrientation;
HSPLandroidx/compose/foundation/layout/LayoutOrientation;-><clinit>()V
HSPLandroidx/compose/foundation/layout/LayoutOrientation;-><init>(Ljava/lang/String;I)V
+HSPLandroidx/compose/foundation/layout/LayoutWeightImpl;-><init>(FZLkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/foundation/layout/LayoutWeightImpl;->modifyParentData(Landroidx/compose/ui/unit/Density;Ljava/lang/Object;)Landroidx/compose/foundation/layout/RowColumnParentData;
+HSPLandroidx/compose/foundation/layout/LayoutWeightImpl;->modifyParentData(Landroidx/compose/ui/unit/Density;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/layout/LimitInsets;-><init>(Landroidx/compose/foundation/layout/WindowInsets;I)V
+HSPLandroidx/compose/foundation/layout/LimitInsets;-><init>(Landroidx/compose/foundation/layout/WindowInsets;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/foundation/layout/LimitInsets;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/foundation/layout/LimitInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I
+HSPLandroidx/compose/foundation/layout/LimitInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I
+HSPLandroidx/compose/foundation/layout/LimitInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I
+HSPLandroidx/compose/foundation/layout/LimitInsets;->getTop(Landroidx/compose/ui/unit/Density;)I
HSPLandroidx/compose/foundation/layout/OffsetKt;->offset(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;
HSPLandroidx/compose/foundation/layout/OffsetPxModifier$measure$1;-><init>(Landroidx/compose/foundation/layout/OffsetPxModifier;Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Placeable;)V
HSPLandroidx/compose/foundation/layout/OffsetPxModifier$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
@@ -826,11 +1174,11 @@
HSPLandroidx/compose/foundation/layout/OrientationIndependentConstraints;->getMainAxisMax()I
HSPLandroidx/compose/foundation/layout/OrientationIndependentConstraints;->getMainAxisMin()I
HSPLandroidx/compose/foundation/layout/OrientationIndependentConstraints;->toBoxConstraints-OenEA2s(Landroidx/compose/foundation/layout/LayoutOrientation;)J
+HSPLandroidx/compose/foundation/layout/PaddingKt;->PaddingValues-0680j_4(F)Landroidx/compose/foundation/layout/PaddingValues;
HSPLandroidx/compose/foundation/layout/PaddingKt;->PaddingValues-YgX7TsA$default(FFILjava/lang/Object;)Landroidx/compose/foundation/layout/PaddingValues;
HSPLandroidx/compose/foundation/layout/PaddingKt;->PaddingValues-YgX7TsA(FF)Landroidx/compose/foundation/layout/PaddingValues;
HSPLandroidx/compose/foundation/layout/PaddingKt;->PaddingValues-a9UjIt4(FFFF)Landroidx/compose/foundation/layout/PaddingValues;
HSPLandroidx/compose/foundation/layout/PaddingKt;->padding(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/layout/PaddingValues;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/layout/PaddingKt;->padding-3ABfNKs(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier;
HSPLandroidx/compose/foundation/layout/PaddingKt;->padding-VpY3zN4$default(Landroidx/compose/ui/Modifier;FFILjava/lang/Object;)Landroidx/compose/ui/Modifier;
HSPLandroidx/compose/foundation/layout/PaddingKt;->padding-VpY3zN4(Landroidx/compose/ui/Modifier;FF)Landroidx/compose/ui/Modifier;
HSPLandroidx/compose/foundation/layout/PaddingKt;->padding-qDBjuR0$default(Landroidx/compose/ui/Modifier;FFFFILjava/lang/Object;)Landroidx/compose/ui/Modifier;
@@ -859,44 +1207,62 @@
HSPLandroidx/compose/foundation/layout/PaddingValuesModifier;->equals(Ljava/lang/Object;)Z
HSPLandroidx/compose/foundation/layout/PaddingValuesModifier;->getPaddingValues()Landroidx/compose/foundation/layout/PaddingValues;
HSPLandroidx/compose/foundation/layout/PaddingValuesModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1$measure$4;-><init>(Ljava/util/List;[Landroidx/compose/ui/layout/Placeable;Lkotlin/jvm/functions/Function5;ILandroidx/compose/ui/layout/MeasureScope;[ILandroidx/compose/foundation/layout/LayoutOrientation;[Landroidx/compose/foundation/layout/RowColumnParentData;Landroidx/compose/foundation/layout/CrossAxisAlignment;ILkotlin/jvm/internal/Ref$IntRef;)V
-HSPLandroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1$measure$4;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
-HSPLandroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1$measure$4;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1;-><init>(Landroidx/compose/foundation/layout/LayoutOrientation;FLandroidx/compose/foundation/layout/SizeMode;Lkotlin/jvm/functions/Function5;Landroidx/compose/foundation/layout/CrossAxisAlignment;)V
+HSPLandroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1$measure$1;-><init>(Landroidx/compose/foundation/layout/RowColumnMeasurementHelper;Landroidx/compose/foundation/layout/RowColumnMeasureHelperResult;Landroidx/compose/ui/layout/MeasureScope;)V
+HSPLandroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
+HSPLandroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1;-><init>(Landroidx/compose/foundation/layout/LayoutOrientation;Lkotlin/jvm/functions/Function5;FLandroidx/compose/foundation/layout/SizeMode;Landroidx/compose/foundation/layout/CrossAxisAlignment;)V
HSPLandroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/foundation/layout/RowColumnImplKt;->access$getCrossAxisAlignment(Landroidx/compose/foundation/layout/RowColumnParentData;)Landroidx/compose/foundation/layout/CrossAxisAlignment;
-HSPLandroidx/compose/foundation/layout/RowColumnImplKt;->access$getData(Landroidx/compose/ui/layout/IntrinsicMeasurable;)Landroidx/compose/foundation/layout/RowColumnParentData;
-HSPLandroidx/compose/foundation/layout/RowColumnImplKt;->access$getWeight(Landroidx/compose/foundation/layout/RowColumnParentData;)F
-HSPLandroidx/compose/foundation/layout/RowColumnImplKt;->access$isRelative(Landroidx/compose/foundation/layout/RowColumnParentData;)Z
-HSPLandroidx/compose/foundation/layout/RowColumnImplKt;->access$rowColumnMeasurePolicy_TDGSqEk$crossAxisSize(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/foundation/layout/LayoutOrientation;)I
-HSPLandroidx/compose/foundation/layout/RowColumnImplKt;->access$rowColumnMeasurePolicy_TDGSqEk$mainAxisSize(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/foundation/layout/LayoutOrientation;)I
HSPLandroidx/compose/foundation/layout/RowColumnImplKt;->getCrossAxisAlignment(Landroidx/compose/foundation/layout/RowColumnParentData;)Landroidx/compose/foundation/layout/CrossAxisAlignment;
-HSPLandroidx/compose/foundation/layout/RowColumnImplKt;->getData(Landroidx/compose/ui/layout/IntrinsicMeasurable;)Landroidx/compose/foundation/layout/RowColumnParentData;
+HSPLandroidx/compose/foundation/layout/RowColumnImplKt;->getFill(Landroidx/compose/foundation/layout/RowColumnParentData;)Z
+HSPLandroidx/compose/foundation/layout/RowColumnImplKt;->getRowColumnParentData(Landroidx/compose/ui/layout/IntrinsicMeasurable;)Landroidx/compose/foundation/layout/RowColumnParentData;
HSPLandroidx/compose/foundation/layout/RowColumnImplKt;->getWeight(Landroidx/compose/foundation/layout/RowColumnParentData;)F
HSPLandroidx/compose/foundation/layout/RowColumnImplKt;->isRelative(Landroidx/compose/foundation/layout/RowColumnParentData;)Z
HSPLandroidx/compose/foundation/layout/RowColumnImplKt;->rowColumnMeasurePolicy-TDGSqEk(Landroidx/compose/foundation/layout/LayoutOrientation;Lkotlin/jvm/functions/Function5;FLandroidx/compose/foundation/layout/SizeMode;Landroidx/compose/foundation/layout/CrossAxisAlignment;)Landroidx/compose/ui/layout/MeasurePolicy;
-HSPLandroidx/compose/foundation/layout/RowColumnImplKt;->rowColumnMeasurePolicy_TDGSqEk$crossAxisSize(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/foundation/layout/LayoutOrientation;)I
-HSPLandroidx/compose/foundation/layout/RowColumnImplKt;->rowColumnMeasurePolicy_TDGSqEk$mainAxisSize(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/foundation/layout/LayoutOrientation;)I
+HSPLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;-><init>(IIIII[I)V
+HSPLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;->getBeforeCrossAxisAlignmentLine()I
+HSPLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;->getCrossAxisSize()I
+HSPLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;->getEndIndex()I
+HSPLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;->getMainAxisPositions()[I
+HSPLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;->getMainAxisSize()I
+HSPLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;->getStartIndex()I
+HSPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;-><init>(Landroidx/compose/foundation/layout/LayoutOrientation;Lkotlin/jvm/functions/Function5;FLandroidx/compose/foundation/layout/SizeMode;Landroidx/compose/foundation/layout/CrossAxisAlignment;Ljava/util/List;[Landroidx/compose/ui/layout/Placeable;)V
+HSPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;-><init>(Landroidx/compose/foundation/layout/LayoutOrientation;Lkotlin/jvm/functions/Function5;FLandroidx/compose/foundation/layout/SizeMode;Landroidx/compose/foundation/layout/CrossAxisAlignment;Ljava/util/List;[Landroidx/compose/ui/layout/Placeable;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;->crossAxisSize(Landroidx/compose/ui/layout/Placeable;)I
+HSPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;->getCrossAxisPosition(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/foundation/layout/RowColumnParentData;ILandroidx/compose/ui/unit/LayoutDirection;I)I
+HSPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;->mainAxisPositions(I[I[ILandroidx/compose/ui/layout/MeasureScope;)[I
+HSPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;->mainAxisSize(Landroidx/compose/ui/layout/Placeable;)I
+HSPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;->measureWithoutPlacing-_EkL_-Y(Landroidx/compose/ui/layout/MeasureScope;JII)Landroidx/compose/foundation/layout/RowColumnMeasureHelperResult;
+HSPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;->placeHelper(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/foundation/layout/RowColumnMeasureHelperResult;ILandroidx/compose/ui/unit/LayoutDirection;)V
HSPLandroidx/compose/foundation/layout/RowColumnParentData;-><init>(FZLandroidx/compose/foundation/layout/CrossAxisAlignment;)V
HSPLandroidx/compose/foundation/layout/RowColumnParentData;-><init>(FZLandroidx/compose/foundation/layout/CrossAxisAlignment;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/foundation/layout/RowColumnParentData;->getCrossAxisAlignment()Landroidx/compose/foundation/layout/CrossAxisAlignment;
+HSPLandroidx/compose/foundation/layout/RowColumnParentData;->getFill()Z
HSPLandroidx/compose/foundation/layout/RowColumnParentData;->getWeight()F
-HSPLandroidx/compose/foundation/layout/RowColumnParentData;->setCrossAxisAlignment(Landroidx/compose/foundation/layout/CrossAxisAlignment;)V
+HSPLandroidx/compose/foundation/layout/RowColumnParentData;->setFill(Z)V
+HSPLandroidx/compose/foundation/layout/RowColumnParentData;->setWeight(F)V
HSPLandroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;-><clinit>()V
HSPLandroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;-><init>()V
+HSPLandroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;->invoke(I[ILandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;[I)V
+HSPLandroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/foundation/layout/RowKt$rowMeasurePolicy$1$1;-><init>(Landroidx/compose/foundation/layout/Arrangement$Horizontal;)V
HSPLandroidx/compose/foundation/layout/RowKt$rowMeasurePolicy$1$1;->invoke(I[ILandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;[I)V
HSPLandroidx/compose/foundation/layout/RowKt$rowMeasurePolicy$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/foundation/layout/RowKt;-><clinit>()V
HSPLandroidx/compose/foundation/layout/RowKt;->rowMeasurePolicy(Landroidx/compose/foundation/layout/Arrangement$Horizontal;Landroidx/compose/ui/Alignment$Vertical;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/layout/MeasurePolicy;
+HSPLandroidx/compose/foundation/layout/RowScope;->weight$default(Landroidx/compose/foundation/layout/RowScope;Landroidx/compose/ui/Modifier;FZILjava/lang/Object;)Landroidx/compose/ui/Modifier;
HSPLandroidx/compose/foundation/layout/RowScopeInstance;-><clinit>()V
HSPLandroidx/compose/foundation/layout/RowScopeInstance;-><init>()V
+HSPLandroidx/compose/foundation/layout/RowScopeInstance;->weight(Landroidx/compose/ui/Modifier;FZ)Landroidx/compose/ui/Modifier;
HSPLandroidx/compose/foundation/layout/SizeKt$createFillHeightModifier$1;-><init>(F)V
HSPLandroidx/compose/foundation/layout/SizeKt$createFillSizeModifier$1;-><init>(F)V
HSPLandroidx/compose/foundation/layout/SizeKt$createFillWidthModifier$1;-><init>(F)V
HSPLandroidx/compose/foundation/layout/SizeKt$createWrapContentHeightModifier$1;-><init>(Landroidx/compose/ui/Alignment$Vertical;)V
+HSPLandroidx/compose/foundation/layout/SizeKt$createWrapContentHeightModifier$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/layout/SizeKt$createWrapContentHeightModifier$1;->invoke-5SAbXVA(JLandroidx/compose/ui/unit/LayoutDirection;)J
HSPLandroidx/compose/foundation/layout/SizeKt$createWrapContentHeightModifier$2;-><init>(Landroidx/compose/ui/Alignment$Vertical;Z)V
HSPLandroidx/compose/foundation/layout/SizeKt$createWrapContentSizeModifier$1;-><init>(Landroidx/compose/ui/Alignment;)V
+HSPLandroidx/compose/foundation/layout/SizeKt$createWrapContentSizeModifier$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/layout/SizeKt$createWrapContentSizeModifier$1;->invoke-5SAbXVA(JLandroidx/compose/ui/unit/LayoutDirection;)J
HSPLandroidx/compose/foundation/layout/SizeKt$createWrapContentSizeModifier$2;-><init>(Landroidx/compose/ui/Alignment;Z)V
HSPLandroidx/compose/foundation/layout/SizeKt$createWrapContentWidthModifier$1;-><init>(Landroidx/compose/ui/Alignment$Horizontal;)V
HSPLandroidx/compose/foundation/layout/SizeKt$createWrapContentWidthModifier$2;-><init>(Landroidx/compose/ui/Alignment$Horizontal;Z)V
@@ -913,9 +1279,16 @@
HSPLandroidx/compose/foundation/layout/SizeKt;->fillMaxSize(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier;
HSPLandroidx/compose/foundation/layout/SizeKt;->fillMaxWidth$default(Landroidx/compose/ui/Modifier;FILjava/lang/Object;)Landroidx/compose/ui/Modifier;
HSPLandroidx/compose/foundation/layout/SizeKt;->fillMaxWidth(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/layout/SizeKt;->height-3ABfNKs(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/layout/SizeKt;->heightIn-VpY3zN4$default(Landroidx/compose/ui/Modifier;FFILjava/lang/Object;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/layout/SizeKt;->heightIn-VpY3zN4(Landroidx/compose/ui/Modifier;FF)Landroidx/compose/ui/Modifier;
HSPLandroidx/compose/foundation/layout/SizeKt;->size-3ABfNKs(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/layout/SizeKt;->sizeIn-qDBjuR0$default(Landroidx/compose/ui/Modifier;FFFFILjava/lang/Object;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/layout/SizeKt;->sizeIn-qDBjuR0(Landroidx/compose/ui/Modifier;FFFF)Landroidx/compose/ui/Modifier;
HSPLandroidx/compose/foundation/layout/SizeKt;->width-3ABfNKs(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/layout/SizeKt;->wrapContentHeight$default(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Alignment$Vertical;ZILjava/lang/Object;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/layout/SizeKt;->wrapContentHeight(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Alignment$Vertical;Z)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/layout/SizeKt;->wrapContentSize$default(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Alignment;ZILjava/lang/Object;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/layout/SizeKt;->wrapContentSize(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Alignment;Z)Landroidx/compose/ui/Modifier;
HSPLandroidx/compose/foundation/layout/SizeMode;->$values()[Landroidx/compose/foundation/layout/SizeMode;
HSPLandroidx/compose/foundation/layout/SizeMode;-><clinit>()V
HSPLandroidx/compose/foundation/layout/SizeMode;-><init>(Ljava/lang/String;I)V
@@ -936,6 +1309,8 @@
HSPLandroidx/compose/foundation/layout/SpacerMeasurePolicy;-><clinit>()V
HSPLandroidx/compose/foundation/layout/SpacerMeasurePolicy;-><init>()V
HSPLandroidx/compose/foundation/layout/SpacerMeasurePolicy;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/foundation/layout/UnionInsets;-><init>(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/foundation/layout/WindowInsets;)V
+HSPLandroidx/compose/foundation/layout/UnionInsets;->equals(Ljava/lang/Object;)Z
HSPLandroidx/compose/foundation/layout/UnspecifiedConstraintsModifier$measure$1;-><init>(Landroidx/compose/ui/layout/Placeable;)V
HSPLandroidx/compose/foundation/layout/UnspecifiedConstraintsModifier$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
HSPLandroidx/compose/foundation/layout/UnspecifiedConstraintsModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
@@ -943,13 +1318,415 @@
HSPLandroidx/compose/foundation/layout/UnspecifiedConstraintsModifier;-><init>(FFLkotlin/jvm/functions/Function1;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/foundation/layout/UnspecifiedConstraintsModifier;->equals(Ljava/lang/Object;)Z
HSPLandroidx/compose/foundation/layout/UnspecifiedConstraintsModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/foundation/layout/ValueInsets;-><init>(Landroidx/compose/foundation/layout/InsetsValues;Ljava/lang/String;)V
+HSPLandroidx/compose/foundation/layout/WindowInsets$Companion;-><clinit>()V
+HSPLandroidx/compose/foundation/layout/WindowInsets$Companion;-><init>()V
+HSPLandroidx/compose/foundation/layout/WindowInsets;-><clinit>()V
+HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/foundation/layout/WindowInsetsHolder;Landroid/view/View;)V
+HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1$invoke$$inlined$onDispose$1;->dispose()V
+HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1;-><init>(Landroidx/compose/foundation/layout/WindowInsetsHolder;Landroid/view/View;)V
+HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult;
+HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion;-><init>()V
+HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion;->access$systemInsets(Landroidx/compose/foundation/layout/WindowInsetsHolder$Companion;Landroidx/core/view/WindowInsetsCompat;ILjava/lang/String;)Landroidx/compose/foundation/layout/AndroidWindowInsets;
+HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion;->access$valueInsetsIgnoringVisibility(Landroidx/compose/foundation/layout/WindowInsetsHolder$Companion;Landroidx/core/view/WindowInsetsCompat;ILjava/lang/String;)Landroidx/compose/foundation/layout/ValueInsets;
+HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion;->current(Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/layout/WindowInsetsHolder;
+HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion;->getOrCreateFor(Landroid/view/View;)Landroidx/compose/foundation/layout/WindowInsetsHolder;
+HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion;->systemInsets(Landroidx/core/view/WindowInsetsCompat;ILjava/lang/String;)Landroidx/compose/foundation/layout/AndroidWindowInsets;
+HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion;->valueInsetsIgnoringVisibility(Landroidx/core/view/WindowInsetsCompat;ILjava/lang/String;)Landroidx/compose/foundation/layout/ValueInsets;
+HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;-><clinit>()V
+HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;-><init>(Landroidx/core/view/WindowInsetsCompat;Landroid/view/View;)V
+HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;-><init>(Landroidx/core/view/WindowInsetsCompat;Landroid/view/View;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->access$getViewMap$cp()Ljava/util/WeakHashMap;
+HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->decrementAccessors(Landroid/view/View;)V
+HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->getConsumes()Z
+HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->getSystemBars()Landroidx/compose/foundation/layout/AndroidWindowInsets;
+HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->incrementAccessors(Landroid/view/View;)V
+HSPLandroidx/compose/foundation/layout/WindowInsetsKt;->WindowInsets(IIII)Landroidx/compose/foundation/layout/WindowInsets;
+HSPLandroidx/compose/foundation/layout/WindowInsetsKt;->exclude(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/foundation/layout/WindowInsets;)Landroidx/compose/foundation/layout/WindowInsets;
+HSPLandroidx/compose/foundation/layout/WindowInsetsKt;->only-bOOhFvg(Landroidx/compose/foundation/layout/WindowInsets;I)Landroidx/compose/foundation/layout/WindowInsets;
+HSPLandroidx/compose/foundation/layout/WindowInsetsKt;->union(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/foundation/layout/WindowInsets;)Landroidx/compose/foundation/layout/WindowInsets;
+HSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$ModifierLocalConsumedWindowInsets$1;-><clinit>()V
+HSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$ModifierLocalConsumedWindowInsets$1;-><init>()V
+HSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$ModifierLocalConsumedWindowInsets$1;->invoke()Landroidx/compose/foundation/layout/WindowInsets;
+HSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$ModifierLocalConsumedWindowInsets$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt;-><clinit>()V
+HSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt;->getModifierLocalConsumedWindowInsets()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
+HSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt;->windowInsetsPadding(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/layout/WindowInsets;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/layout/WindowInsetsSides$Companion;-><init>()V
+HSPLandroidx/compose/foundation/layout/WindowInsetsSides$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/foundation/layout/WindowInsetsSides$Companion;->getAllowLeftInLtr-JoeWqyM$foundation_layout_release()I
+HSPLandroidx/compose/foundation/layout/WindowInsetsSides$Companion;->getAllowRightInLtr-JoeWqyM$foundation_layout_release()I
+HSPLandroidx/compose/foundation/layout/WindowInsetsSides$Companion;->getBottom-JoeWqyM()I
+HSPLandroidx/compose/foundation/layout/WindowInsetsSides$Companion;->getHorizontal-JoeWqyM()I
+HSPLandroidx/compose/foundation/layout/WindowInsetsSides$Companion;->getTop-JoeWqyM()I
+HSPLandroidx/compose/foundation/layout/WindowInsetsSides;-><clinit>()V
+HSPLandroidx/compose/foundation/layout/WindowInsetsSides;->access$getAllowLeftInLtr$cp()I
+HSPLandroidx/compose/foundation/layout/WindowInsetsSides;->access$getAllowRightInLtr$cp()I
+HSPLandroidx/compose/foundation/layout/WindowInsetsSides;->access$getBottom$cp()I
+HSPLandroidx/compose/foundation/layout/WindowInsetsSides;->access$getHorizontal$cp()I
+HSPLandroidx/compose/foundation/layout/WindowInsetsSides;->access$getTop$cp()I
+HSPLandroidx/compose/foundation/layout/WindowInsetsSides;->constructor-impl(I)I
+HSPLandroidx/compose/foundation/layout/WindowInsetsSides;->hasAny-bkgdKaI$foundation_layout_release(II)Z
+HSPLandroidx/compose/foundation/layout/WindowInsetsSides;->plus-gK_yJZ4(II)I
+HSPLandroidx/compose/foundation/layout/WindowInsets_androidKt;->ValueInsets(Landroidx/core/graphics/Insets;Ljava/lang/String;)Landroidx/compose/foundation/layout/ValueInsets;
+HSPLandroidx/compose/foundation/layout/WindowInsets_androidKt;->getSystemBars(Landroidx/compose/foundation/layout/WindowInsets$Companion;Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/layout/WindowInsets;
+HSPLandroidx/compose/foundation/layout/WindowInsets_androidKt;->toInsetsValues(Landroidx/core/graphics/Insets;)Landroidx/compose/foundation/layout/InsetsValues;
+HSPLandroidx/compose/foundation/layout/WrapContentModifier$measure$1;-><init>(Landroidx/compose/foundation/layout/WrapContentModifier;ILandroidx/compose/ui/layout/Placeable;ILandroidx/compose/ui/layout/MeasureScope;)V
+HSPLandroidx/compose/foundation/layout/WrapContentModifier$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
+HSPLandroidx/compose/foundation/layout/WrapContentModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/foundation/layout/WrapContentModifier;-><init>(Landroidx/compose/foundation/layout/Direction;ZLkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/foundation/lazy/layout/PinnableParentKt$ModifierLocalPinnableParent$1;-><clinit>()V
-HSPLandroidx/compose/foundation/lazy/layout/PinnableParentKt$ModifierLocalPinnableParent$1;-><init>()V
-HSPLandroidx/compose/foundation/lazy/layout/PinnableParentKt$ModifierLocalPinnableParent$1;->invoke()Landroidx/compose/foundation/lazy/layout/PinnableParent;
-HSPLandroidx/compose/foundation/lazy/layout/PinnableParentKt$ModifierLocalPinnableParent$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/layout/PinnableParentKt;-><clinit>()V
-HSPLandroidx/compose/foundation/lazy/layout/PinnableParentKt;->getModifierLocalPinnableParent()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
+HSPLandroidx/compose/foundation/layout/WrapContentModifier;->access$getAlignmentCallback$p(Landroidx/compose/foundation/layout/WrapContentModifier;)Lkotlin/jvm/functions/Function2;
+HSPLandroidx/compose/foundation/layout/WrapContentModifier;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/foundation/layout/WrapContentModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/foundation/lazy/AwaitFirstLayoutModifier;-><init>()V
+HSPLandroidx/compose/foundation/lazy/AwaitFirstLayoutModifier;->onGloballyPositioned(Landroidx/compose/ui/layout/LayoutCoordinates;)V
+HSPLandroidx/compose/foundation/lazy/DataIndex;-><init>(I)V
+HSPLandroidx/compose/foundation/lazy/DataIndex;->box-impl(I)Landroidx/compose/foundation/lazy/DataIndex;
+HSPLandroidx/compose/foundation/lazy/DataIndex;->constructor-impl(I)I
+HSPLandroidx/compose/foundation/lazy/DataIndex;->equals-impl0(II)Z
+HSPLandroidx/compose/foundation/lazy/DataIndex;->unbox-impl()I
+HSPLandroidx/compose/foundation/lazy/EmptyLazyListLayoutInfo;-><clinit>()V
+HSPLandroidx/compose/foundation/lazy/EmptyLazyListLayoutInfo;-><init>()V
+HSPLandroidx/compose/foundation/lazy/LazyBeyondBoundsModifierKt;->lazyListBeyondBoundsModifier(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/LazyListBeyondBoundsInfo;ZLandroidx/compose/foundation/gestures/Orientation;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/lazy/LazyDslKt;->LazyColumn(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/layout/PaddingValues;ZLandroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/foundation/gestures/FlingBehavior;ZLkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V
+HSPLandroidx/compose/foundation/lazy/LazyItemScopeImpl;-><init>()V
+HSPLandroidx/compose/foundation/lazy/LazyItemScopeImpl;->setMaxSize(II)V
+HSPLandroidx/compose/foundation/lazy/LazyListAnimateScrollScope;-><init>(Landroidx/compose/foundation/lazy/LazyListState;)V
+HSPLandroidx/compose/foundation/lazy/LazyListBeyondBoundsInfo;-><init>()V
+HSPLandroidx/compose/foundation/lazy/LazyListBeyondBoundsInfo;->hasIntervals()Z
+HSPLandroidx/compose/foundation/lazy/LazyListBeyondBoundsModifierLocal$Companion$emptyBeyondBoundsScope$1;-><init>()V
+HSPLandroidx/compose/foundation/lazy/LazyListBeyondBoundsModifierLocal$Companion;-><init>()V
+HSPLandroidx/compose/foundation/lazy/LazyListBeyondBoundsModifierLocal$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/foundation/lazy/LazyListBeyondBoundsModifierLocal;-><clinit>()V
+HSPLandroidx/compose/foundation/lazy/LazyListBeyondBoundsModifierLocal;-><init>(Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/LazyListBeyondBoundsInfo;ZLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/foundation/gestures/Orientation;)V
+HSPLandroidx/compose/foundation/lazy/LazyListBeyondBoundsModifierLocal;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
+HSPLandroidx/compose/foundation/lazy/LazyListIntervalContent;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function4;)V
+HSPLandroidx/compose/foundation/lazy/LazyListIntervalContent;->getItem()Lkotlin/jvm/functions/Function4;
+HSPLandroidx/compose/foundation/lazy/LazyListIntervalContent;->getKey()Lkotlin/jvm/functions/Function1;
+HSPLandroidx/compose/foundation/lazy/LazyListIntervalContent;->getType()Lkotlin/jvm/functions/Function1;
+HSPLandroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;-><init>(Lkotlinx/coroutines/CoroutineScope;Z)V
+HSPLandroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;->onMeasured(IIILjava/util/List;Landroidx/compose/foundation/lazy/LazyMeasuredItemProvider;)V
+HSPLandroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;->reset()V
+HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl$1$1;-><init>(Landroidx/compose/foundation/lazy/layout/IntervalList$Interval;Landroidx/compose/foundation/lazy/LazyItemScopeImpl;I)V
+HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl$1$1;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl$1;-><init>(Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/LazyItemScopeImpl;)V
+HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl$1;->invoke(Landroidx/compose/foundation/lazy/layout/IntervalList$Interval;ILandroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;-><init>(Landroidx/compose/foundation/lazy/layout/IntervalList;Lkotlin/ranges/IntRange;Ljava/util/List;Landroidx/compose/foundation/lazy/LazyItemScopeImpl;Landroidx/compose/foundation/lazy/LazyListState;)V
+HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->Item(ILandroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getContentType(I)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getHeaderIndexes()Ljava/util/List;
+HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getItemCount()I
+HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getItemScope()Landroidx/compose/foundation/lazy/LazyItemScopeImpl;
+HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getKey(I)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getKeyToIndexMap()Ljava/util/Map;
+HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;-><init>(Landroidx/compose/runtime/State;)V
+HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;->Item(ILandroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;->getContentType(I)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;->getHeaderIndexes()Ljava/util/List;
+HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;->getItemCount()I
+HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;->getItemScope()Landroidx/compose/foundation/lazy/LazyItemScopeImpl;
+HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;->getKey(I)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;->getKeyToIndexMap()Ljava/util/Map;
+HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$itemProviderState$1;-><init>(Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/foundation/lazy/LazyItemScopeImpl;Landroidx/compose/foundation/lazy/LazyListState;)V
+HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$itemProviderState$1;->invoke()Landroidx/compose/foundation/lazy/LazyListItemProviderImpl;
+HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$itemProviderState$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$1$1;-><init>(Landroidx/compose/foundation/lazy/LazyListState;)V
+HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$1$1;->invoke()Ljava/lang/Integer;
+HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$1$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$2;-><clinit>()V
+HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$2;-><init>()V
+HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$2;->invoke()Ljava/lang/Integer;
+HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$2;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$3;-><clinit>()V
+HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$3;-><init>()V
+HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$3;->invoke()Ljava/lang/Integer;
+HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$3;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt;->rememberLazyListItemProvider(Landroidx/compose/foundation/lazy/LazyListState;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/lazy/LazyListItemProvider;
+HSPLandroidx/compose/foundation/lazy/LazyListKt$ScrollPositionUpdater$1;-><init>(Landroidx/compose/foundation/lazy/LazyListItemProvider;Landroidx/compose/foundation/lazy/LazyListState;I)V
+HSPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$2;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScope;JII)V
+HSPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$2;->invoke(IILkotlin/jvm/functions/Function1;)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;-><init>(IILandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScope;ZLandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;ZIILandroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;J)V
+HSPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;->createItem-HK0c1C0(ILjava/lang/Object;Ljava/util/List;)Landroidx/compose/foundation/lazy/LazyMeasuredItem;
+HSPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1;-><init>(ZLandroidx/compose/foundation/layout/PaddingValues;ZLandroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/LazyListItemProvider;Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;Landroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;Landroidx/compose/foundation/lazy/LazyListBeyondBoundsInfo;ILandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;)V
+HSPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1;->invoke-0kLqBqw(Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScope;J)Landroidx/compose/foundation/lazy/LazyListMeasureResult;
+HSPLandroidx/compose/foundation/lazy/LazyListKt;->LazyList(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/layout/PaddingValues;ZZLandroidx/compose/foundation/gestures/FlingBehavior;ZILandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/ui/Alignment$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;III)V
+HSPLandroidx/compose/foundation/lazy/LazyListKt;->ScrollPositionUpdater(Landroidx/compose/foundation/lazy/LazyListItemProvider;Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/foundation/lazy/LazyListKt;->rememberLazyListMeasurePolicy(Landroidx/compose/foundation/lazy/LazyListItemProvider;Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/LazyListBeyondBoundsInfo;Landroidx/compose/foundation/layout/PaddingValues;ZZILandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;Landroidx/compose/runtime/Composer;III)Lkotlin/jvm/functions/Function2;
+HSPLandroidx/compose/foundation/lazy/LazyListMeasureKt$measureLazyList$5;-><init>(Ljava/util/List;Landroidx/compose/foundation/lazy/LazyListPositionedItem;)V
+HSPLandroidx/compose/foundation/lazy/LazyListMeasureKt$measureLazyList$5;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
+HSPLandroidx/compose/foundation/lazy/LazyListMeasureKt$measureLazyList$5;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/LazyListMeasureKt;-><clinit>()V
+HSPLandroidx/compose/foundation/lazy/LazyListMeasureKt;->calculateItemsOffsets(Ljava/util/List;Ljava/util/List;Ljava/util/List;IIIIIZLandroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;ZLandroidx/compose/ui/unit/Density;)Ljava/util/List;
+HSPLandroidx/compose/foundation/lazy/LazyListMeasureKt;->createItemsAfterList(Landroidx/compose/foundation/lazy/LazyListBeyondBoundsInfo;Ljava/util/List;Landroidx/compose/foundation/lazy/LazyMeasuredItemProvider;IILandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;)Ljava/util/List;
+HSPLandroidx/compose/foundation/lazy/LazyListMeasureKt;->createItemsBeforeList-_ok666U(Landroidx/compose/foundation/lazy/LazyListBeyondBoundsInfo;ILandroidx/compose/foundation/lazy/LazyMeasuredItemProvider;IILandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;)Ljava/util/List;
+HSPLandroidx/compose/foundation/lazy/LazyListMeasureKt;->measureLazyList-QaF8Ofo(ILandroidx/compose/foundation/lazy/LazyMeasuredItemProvider;IIIIIIFJZLjava/util/List;Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;ZLandroidx/compose/ui/unit/Density;Landroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;Landroidx/compose/foundation/lazy/LazyListBeyondBoundsInfo;ILandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;Lkotlin/jvm/functions/Function3;)Landroidx/compose/foundation/lazy/LazyListMeasureResult;
+HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;-><init>(Landroidx/compose/foundation/lazy/LazyMeasuredItem;IZFLandroidx/compose/ui/layout/MeasureResult;Ljava/util/List;IIIZLandroidx/compose/foundation/gestures/Orientation;II)V
+HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getAlignmentLines()Ljava/util/Map;
+HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getCanScrollForward()Z
+HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getConsumedScroll()F
+HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getFirstVisibleItem()Landroidx/compose/foundation/lazy/LazyMeasuredItem;
+HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getFirstVisibleItemScrollOffset()I
+HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getHeight()I
+HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getTotalItemsCount()I
+HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getWidth()I
+HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->placeChildren()V
+HSPLandroidx/compose/foundation/lazy/LazyListPlaceableWrapper;-><init>(JLandroidx/compose/ui/layout/Placeable;)V
+HSPLandroidx/compose/foundation/lazy/LazyListPlaceableWrapper;-><init>(JLandroidx/compose/ui/layout/Placeable;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/foundation/lazy/LazyListPlaceableWrapper;->getOffset-nOcc-ac()J
+HSPLandroidx/compose/foundation/lazy/LazyListPlaceableWrapper;->getPlaceable()Landroidx/compose/ui/layout/Placeable;
+HSPLandroidx/compose/foundation/lazy/LazyListPositionedItem;-><init>(IILjava/lang/Object;IIIZLjava/util/List;Landroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;JZI)V
+HSPLandroidx/compose/foundation/lazy/LazyListPositionedItem;-><init>(IILjava/lang/Object;IIIZLjava/util/List;Landroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;JZILkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/foundation/lazy/LazyListPositionedItem;->getAnimationSpec(I)Landroidx/compose/animation/core/FiniteAnimationSpec;
+HSPLandroidx/compose/foundation/lazy/LazyListPositionedItem;->getHasAnimations()Z
+HSPLandroidx/compose/foundation/lazy/LazyListPositionedItem;->getMainAxisSize(Landroidx/compose/ui/layout/Placeable;)I
+HSPLandroidx/compose/foundation/lazy/LazyListPositionedItem;->getOffset-Bjo55l4(I)J
+HSPLandroidx/compose/foundation/lazy/LazyListPositionedItem;->getPlaceablesCount()I
+HSPLandroidx/compose/foundation/lazy/LazyListPositionedItem;->place(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
+HSPLandroidx/compose/foundation/lazy/LazyListScope;->item$default(Landroidx/compose/foundation/lazy/LazyListScope;Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function3;ILjava/lang/Object;)V
+HSPLandroidx/compose/foundation/lazy/LazyListScopeImpl$item$2;-><init>(Ljava/lang/Object;)V
+HSPLandroidx/compose/foundation/lazy/LazyListScopeImpl$item$2;->invoke(I)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/LazyListScopeImpl$item$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/LazyListScopeImpl$item$3;-><init>(Lkotlin/jvm/functions/Function3;)V
+HSPLandroidx/compose/foundation/lazy/LazyListScopeImpl$item$3;->invoke(Landroidx/compose/foundation/lazy/LazyItemScope;ILandroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/foundation/lazy/LazyListScopeImpl$item$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/LazyListScopeImpl;-><init>()V
+HSPLandroidx/compose/foundation/lazy/LazyListScopeImpl;->getHeaderIndexes()Ljava/util/List;
+HSPLandroidx/compose/foundation/lazy/LazyListScopeImpl;->getIntervals()Landroidx/compose/foundation/lazy/layout/IntervalList;
+HSPLandroidx/compose/foundation/lazy/LazyListScopeImpl;->item(Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function3;)V
+HSPLandroidx/compose/foundation/lazy/LazyListScopeImpl;->items(ILkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function4;)V
+HSPLandroidx/compose/foundation/lazy/LazyListScrollPosition;-><init>(II)V
+HSPLandroidx/compose/foundation/lazy/LazyListScrollPosition;->getIndex-jQJCoq8()I
+HSPLandroidx/compose/foundation/lazy/LazyListScrollPosition;->getScrollOffset()I
+HSPLandroidx/compose/foundation/lazy/LazyListScrollPosition;->update-AhXoVpI(II)V
+HSPLandroidx/compose/foundation/lazy/LazyListScrollPosition;->updateFromMeasureResult(Landroidx/compose/foundation/lazy/LazyListMeasureResult;)V
+HSPLandroidx/compose/foundation/lazy/LazyListScrollPosition;->updateScrollPositionIfTheFirstItemWasMoved(Landroidx/compose/foundation/lazy/LazyListItemProvider;)V
+HSPLandroidx/compose/foundation/lazy/LazyListState$Companion$Saver$1;-><clinit>()V
+HSPLandroidx/compose/foundation/lazy/LazyListState$Companion$Saver$1;-><init>()V
+HSPLandroidx/compose/foundation/lazy/LazyListState$Companion$Saver$1;->invoke(Landroidx/compose/runtime/saveable/SaverScope;Landroidx/compose/foundation/lazy/LazyListState;)Ljava/util/List;
+HSPLandroidx/compose/foundation/lazy/LazyListState$Companion$Saver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/LazyListState$Companion$Saver$2;-><clinit>()V
+HSPLandroidx/compose/foundation/lazy/LazyListState$Companion$Saver$2;-><init>()V
+HSPLandroidx/compose/foundation/lazy/LazyListState$Companion;-><init>()V
+HSPLandroidx/compose/foundation/lazy/LazyListState$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/foundation/lazy/LazyListState$Companion;->getSaver()Landroidx/compose/runtime/saveable/Saver;
+HSPLandroidx/compose/foundation/lazy/LazyListState$remeasurementModifier$1;-><init>(Landroidx/compose/foundation/lazy/LazyListState;)V
+HSPLandroidx/compose/foundation/lazy/LazyListState$remeasurementModifier$1;->onRemeasurementAvailable(Landroidx/compose/ui/layout/Remeasurement;)V
+HSPLandroidx/compose/foundation/lazy/LazyListState$scrollableState$1;-><init>(Landroidx/compose/foundation/lazy/LazyListState;)V
+HSPLandroidx/compose/foundation/lazy/LazyListState;-><clinit>()V
+HSPLandroidx/compose/foundation/lazy/LazyListState;-><init>(II)V
+HSPLandroidx/compose/foundation/lazy/LazyListState;->access$getSaver$cp()Landroidx/compose/runtime/saveable/Saver;
+HSPLandroidx/compose/foundation/lazy/LazyListState;->access$setRemeasurement(Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/ui/layout/Remeasurement;)V
+HSPLandroidx/compose/foundation/lazy/LazyListState;->applyMeasureResult$foundation_release(Landroidx/compose/foundation/lazy/LazyListMeasureResult;)V
+HSPLandroidx/compose/foundation/lazy/LazyListState;->cancelPrefetchIfVisibleItemsChanged(Landroidx/compose/foundation/lazy/LazyListLayoutInfo;)V
+HSPLandroidx/compose/foundation/lazy/LazyListState;->getAwaitLayoutModifier$foundation_release()Landroidx/compose/foundation/lazy/AwaitFirstLayoutModifier;
+HSPLandroidx/compose/foundation/lazy/LazyListState;->getFirstVisibleItemIndex()I
+HSPLandroidx/compose/foundation/lazy/LazyListState;->getFirstVisibleItemScrollOffset()I
+HSPLandroidx/compose/foundation/lazy/LazyListState;->getInternalInteractionSource$foundation_release()Landroidx/compose/foundation/interaction/MutableInteractionSource;
+HSPLandroidx/compose/foundation/lazy/LazyListState;->getPinnedItems$foundation_release()Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;
+HSPLandroidx/compose/foundation/lazy/LazyListState;->getPrefetchState$foundation_release()Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;
+HSPLandroidx/compose/foundation/lazy/LazyListState;->getRemeasurementModifier$foundation_release()Landroidx/compose/ui/layout/RemeasurementModifier;
+HSPLandroidx/compose/foundation/lazy/LazyListState;->getScrollToBeConsumed$foundation_release()F
+HSPLandroidx/compose/foundation/lazy/LazyListState;->setCanScrollBackward(Z)V
+HSPLandroidx/compose/foundation/lazy/LazyListState;->setCanScrollForward(Z)V
+HSPLandroidx/compose/foundation/lazy/LazyListState;->setDensity$foundation_release(Landroidx/compose/ui/unit/Density;)V
+HSPLandroidx/compose/foundation/lazy/LazyListState;->setPlacementAnimator$foundation_release(Landroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;)V
+HSPLandroidx/compose/foundation/lazy/LazyListState;->setPremeasureConstraints-BRTryo0$foundation_release(J)V
+HSPLandroidx/compose/foundation/lazy/LazyListState;->setRemeasurement(Landroidx/compose/ui/layout/Remeasurement;)V
+HSPLandroidx/compose/foundation/lazy/LazyListState;->updateScrollPositionIfTheFirstItemWasMoved$foundation_release(Landroidx/compose/foundation/lazy/LazyListItemProvider;)V
+HSPLandroidx/compose/foundation/lazy/LazyListStateKt$rememberLazyListState$1$1;-><init>(II)V
+HSPLandroidx/compose/foundation/lazy/LazyListStateKt$rememberLazyListState$1$1;->invoke()Landroidx/compose/foundation/lazy/LazyListState;
+HSPLandroidx/compose/foundation/lazy/LazyListStateKt$rememberLazyListState$1$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/LazyListStateKt;->rememberLazyListState(IILandroidx/compose/runtime/Composer;II)Landroidx/compose/foundation/lazy/LazyListState;
+HSPLandroidx/compose/foundation/lazy/LazyMeasuredItem;-><init>(ILjava/util/List;ZLandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;Landroidx/compose/ui/unit/LayoutDirection;ZIILandroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;IJLjava/lang/Object;)V
+HSPLandroidx/compose/foundation/lazy/LazyMeasuredItem;-><init>(ILjava/util/List;ZLandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;Landroidx/compose/ui/unit/LayoutDirection;ZIILandroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;IJLjava/lang/Object;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/foundation/lazy/LazyMeasuredItem;->getCrossAxisSize()I
+HSPLandroidx/compose/foundation/lazy/LazyMeasuredItem;->getIndex()I
+HSPLandroidx/compose/foundation/lazy/LazyMeasuredItem;->getKey()Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/LazyMeasuredItem;->getSizeWithSpacings()I
+HSPLandroidx/compose/foundation/lazy/LazyMeasuredItem;->position(III)Landroidx/compose/foundation/lazy/LazyListPositionedItem;
+HSPLandroidx/compose/foundation/lazy/LazyMeasuredItemProvider;-><init>(JZLandroidx/compose/foundation/lazy/LazyListItemProvider;Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScope;Landroidx/compose/foundation/lazy/MeasuredItemFactory;)V
+HSPLandroidx/compose/foundation/lazy/LazyMeasuredItemProvider;-><init>(JZLandroidx/compose/foundation/lazy/LazyListItemProvider;Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScope;Landroidx/compose/foundation/lazy/MeasuredItemFactory;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/foundation/lazy/LazyMeasuredItemProvider;->getAndMeasure-ZjPyQlc(I)Landroidx/compose/foundation/lazy/LazyMeasuredItem;
+HSPLandroidx/compose/foundation/lazy/LazyMeasuredItemProvider;->getChildConstraints-msEJaDk()J
+HSPLandroidx/compose/foundation/lazy/LazySemanticsKt$rememberLazyListSemanticState$1$1$scrollAxisRange$1;-><init>(Landroidx/compose/foundation/lazy/LazyListState;)V
+HSPLandroidx/compose/foundation/lazy/LazySemanticsKt$rememberLazyListSemanticState$1$1$scrollAxisRange$2;-><init>(Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;)V
+HSPLandroidx/compose/foundation/lazy/LazySemanticsKt$rememberLazyListSemanticState$1$1;-><init>(ZLandroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;Z)V
+HSPLandroidx/compose/foundation/lazy/LazySemanticsKt$rememberLazyListSemanticState$1$1;->collectionInfo()Landroidx/compose/ui/semantics/CollectionInfo;
+HSPLandroidx/compose/foundation/lazy/LazySemanticsKt$rememberLazyListSemanticState$1$1;->scrollAxisRange()Landroidx/compose/ui/semantics/ScrollAxisRange;
+HSPLandroidx/compose/foundation/lazy/LazySemanticsKt;->rememberLazyListSemanticState(Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;ZZLandroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticState;
+HSPLandroidx/compose/foundation/lazy/layout/DefaultDelegatingLazyLayoutItemProvider$Item$1;-><init>(Landroidx/compose/foundation/lazy/layout/DefaultDelegatingLazyLayoutItemProvider;II)V
+HSPLandroidx/compose/foundation/lazy/layout/DefaultDelegatingLazyLayoutItemProvider;-><init>(Landroidx/compose/runtime/State;)V
+HSPLandroidx/compose/foundation/lazy/layout/DefaultDelegatingLazyLayoutItemProvider;->Item(ILandroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/foundation/lazy/layout/DefaultDelegatingLazyLayoutItemProvider;->getContentType(I)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/layout/DefaultDelegatingLazyLayoutItemProvider;->getItemCount()I
+HSPLandroidx/compose/foundation/lazy/layout/DefaultDelegatingLazyLayoutItemProvider;->getKey(I)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/layout/DefaultDelegatingLazyLayoutItemProvider;->getKeyToIndexMap()Ljava/util/Map;
+HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey$Companion$CREATOR$1;-><init>()V
+HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey$Companion;-><init>()V
+HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;-><clinit>()V
+HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;-><init>(I)V
+HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;->hashCode()I
+HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyLayoutItemsProvider$generateKeyToIndexMap$1$1;-><init>(IILjava/util/HashMap;)V
+HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyLayoutItemsProvider$generateKeyToIndexMap$1$1;->invoke(Landroidx/compose/foundation/lazy/layout/IntervalList$Interval;)V
+HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyLayoutItemsProvider$generateKeyToIndexMap$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyLayoutItemsProvider;-><init>(Lkotlin/jvm/functions/Function4;Landroidx/compose/foundation/lazy/layout/IntervalList;Lkotlin/ranges/IntRange;)V
+HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyLayoutItemsProvider;->Item(ILandroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyLayoutItemsProvider;->generateKeyToIndexMap(Lkotlin/ranges/IntRange;Landroidx/compose/foundation/lazy/layout/IntervalList;)Ljava/util/Map;
+HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyLayoutItemsProvider;->getContentType(I)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyLayoutItemsProvider;->getItemCount()I
+HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyLayoutItemsProvider;->getKey(I)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyLayoutItemsProvider;->getKeyToIndexMap()Ljava/util/Map;
+HSPLandroidx/compose/foundation/lazy/layout/IntervalList$Interval;-><clinit>()V
+HSPLandroidx/compose/foundation/lazy/layout/IntervalList$Interval;-><init>(IILjava/lang/Object;)V
+HSPLandroidx/compose/foundation/lazy/layout/IntervalList$Interval;->getSize()I
+HSPLandroidx/compose/foundation/lazy/layout/IntervalList$Interval;->getStartIndex()I
+HSPLandroidx/compose/foundation/lazy/layout/IntervalList$Interval;->getValue()Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/layout/IntervalListKt;->access$binarySearch(Landroidx/compose/runtime/collection/MutableVector;I)I
+HSPLandroidx/compose/foundation/lazy/layout/IntervalListKt;->binarySearch(Landroidx/compose/runtime/collection/MutableVector;I)I
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$1;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;I)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$1;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$2$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$2$invoke$$inlined$onDispose$1;->dispose()V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$2;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$2;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;ILjava/lang/Object;Ljava/lang/Object;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;->access$set_content$p(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;Lkotlin/jvm/functions/Function2;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;->createContentLambda()Lkotlin/jvm/functions/Function2;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;->getContent()Lkotlin/jvm/functions/Function2;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;->getKey()Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;->getLastKnownIndex()I
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;->getType()Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;-><init>(Landroidx/compose/runtime/saveable/SaveableStateHolder;Lkotlin/jvm/functions/Function0;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;->access$getSaveableStateHolder$p(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;)Landroidx/compose/runtime/saveable/SaveableStateHolder;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;->getContent(ILjava/lang/Object;)Lkotlin/jvm/functions/Function2;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;->getItemProvider()Lkotlin/jvm/functions/Function0;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemProviderKt;->DelegatingLazyLayoutItemProvider(Landroidx/compose/runtime/State;)Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemProviderKt;->LazyLayoutItemProvider(Landroidx/compose/foundation/lazy/layout/IntervalList;Lkotlin/ranges/IntRange;Lkotlin/jvm/functions/Function4;)Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemProviderKt;->findIndexByKey(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;Ljava/lang/Object;I)I
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemReusePolicy;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$1$2$1;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Lkotlin/jvm/functions/Function2;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$1$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$1$2$1;->invoke-0kLqBqw(Landroidx/compose/ui/layout/SubcomposeMeasureScope;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$1$itemContentFactory$1$1;-><init>(Landroidx/compose/runtime/State;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$1$itemContentFactory$1$1;->invoke()Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$1$itemContentFactory$1$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$1;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;ILandroidx/compose/runtime/State;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$1;->invoke(Landroidx/compose/runtime/saveable/SaveableStateHolder;Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt;->LazyLayout(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Landroidx/compose/ui/layout/SubcomposeMeasureScope;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->layout(IILjava/util/Map;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->measure-0kLqBqw(IJ)Ljava/util/List;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->roundToPx-0680j_4(F)I
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;->getPinsCount()I
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;->get_parentPinnableContainer()Landroidx/compose/ui/layout/PinnableContainer;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;->onDisposed()V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;->setIndex(I)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;->setParentPinnableContainer(Landroidx/compose/ui/layout/PinnableContainer;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt$LazyLayoutPinnableItem$1$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt$LazyLayoutPinnableItem$1$1$invoke$$inlined$onDispose$1;->dispose()V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt$LazyLayoutPinnableItem$1$1;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt$LazyLayoutPinnableItem$1$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt$LazyLayoutPinnableItem$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt;->LazyLayoutPinnableItem(ILandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;-><clinit>()V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;-><init>()V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;-><init>(Ljava/util/List;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;->getSize()I
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;->size()I
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;-><clinit>()V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;-><init>()V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;->setPrefetcher$foundation_release(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState$Prefetcher;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$Companion;-><init>()V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$Companion;->access$calculateFrameIntervalIfNeeded(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$Companion;Landroid/view/View;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$Companion;->calculateFrameIntervalIfNeeded(Landroid/view/View;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;-><clinit>()V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Landroid/view/View;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->access$getFrameIntervalNs$cp()J
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->access$setFrameIntervalNs$cp(J)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->onForgotten()V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->onRemembered()V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher_androidKt;->LazyLayoutPrefetcher(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$1;-><init>(Lkotlin/jvm/functions/Function1;ZLandroidx/compose/ui/semantics/ScrollAxisRange;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/semantics/CollectionInfo;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$1;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$indexForKeyMapping$1;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$scrollByAction$1;-><init>(ZLkotlinx/coroutines/CoroutineScope;Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticState;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$scrollToIndexAction$1;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticState;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt;->lazyLayoutSemantics(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticState;Landroidx/compose/foundation/gestures/Orientation;ZLandroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt$rememberLazyNearestItemsRangeState$1$1$1;-><init>(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt$rememberLazyNearestItemsRangeState$1$1$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt$rememberLazyNearestItemsRangeState$1$1$1;->invoke()Lkotlin/ranges/IntRange;
+HSPLandroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt$rememberLazyNearestItemsRangeState$1$1$2;-><init>(Landroidx/compose/runtime/MutableState;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt$rememberLazyNearestItemsRangeState$1$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt$rememberLazyNearestItemsRangeState$1$1$2;->emit(Lkotlin/ranges/IntRange;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt$rememberLazyNearestItemsRangeState$1$1;-><init>(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt$rememberLazyNearestItemsRangeState$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt$rememberLazyNearestItemsRangeState$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt;->access$calculateNearestItemsRange(III)Lkotlin/ranges/IntRange;
+HSPLandroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt;->calculateNearestItemsRange(III)Lkotlin/ranges/IntRange;
+HSPLandroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt;->rememberLazyNearestItemsRangeState(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State;
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$1;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistry;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$1;->invoke(Ljava/lang/Object;)Ljava/lang/Boolean;
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$1;-><clinit>()V
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$1;-><init>()V
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$1;->invoke(Landroidx/compose/runtime/saveable/SaverScope;Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;)Ljava/util/Map;
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$2;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistry;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion;-><init>()V
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion;->saver(Landroidx/compose/runtime/saveable/SaveableStateRegistry;)Landroidx/compose/runtime/saveable/Saver;
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;Ljava/lang/Object;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$1$invoke$$inlined$onDispose$1;->dispose()V
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$1;-><init>(Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;Ljava/lang/Object;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult;
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$2;-><init>(Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;I)V
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;-><clinit>()V
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistry;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistry;Ljava/util/Map;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->SaveableStateProvider(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->access$getPreviouslyComposedKeys$p(Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;)Ljava/util/Set;
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->canBeSaved(Ljava/lang/Object;)Z
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->consumeRestored(Ljava/lang/String;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->getWrappedHolder()Landroidx/compose/runtime/saveable/SaveableStateHolder;
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->performSave()Ljava/util/Map;
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->registerProvider(Ljava/lang/String;Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/saveable/SaveableStateRegistry$Entry;
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->setWrappedHolder(Landroidx/compose/runtime/saveable/SaveableStateHolder;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$1;-><init>(Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;Lkotlin/jvm/functions/Function3;I)V
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$1;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$holder$1;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistry;)V
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$holder$1;->invoke()Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$holder$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt;->LazySaveableStateHolderProvider(Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/foundation/lazy/layout/Lazy_androidKt;->getDefaultLazyLayoutKey(I)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;-><clinit>()V
+HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;-><init>()V
+HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->addInterval(ILjava/lang/Object;)V
+HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->checkIndexBounds(I)V
+HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->contains(Landroidx/compose/foundation/lazy/layout/IntervalList$Interval;I)Z
+HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->forEach(IILkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->get(I)Landroidx/compose/foundation/lazy/layout/IntervalList$Interval;
+HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->getIntervalForIndex(I)Landroidx/compose/foundation/lazy/layout/IntervalList$Interval;
+HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->getSize()I
HSPLandroidx/compose/foundation/relocation/AndroidBringIntoViewParent;-><init>(Landroid/view/View;)V
HSPLandroidx/compose/foundation/relocation/BringIntoViewChildModifier;-><init>(Landroidx/compose/foundation/relocation/BringIntoViewParent;)V
HSPLandroidx/compose/foundation/relocation/BringIntoViewChildModifier;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V
@@ -963,6 +1740,7 @@
HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterImpl;-><init>()V
HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterImpl;->getModifiers()Landroidx/compose/runtime/collection/MutableVector;
HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterKt$bringIntoViewRequester$2$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/foundation/relocation/BringIntoViewRequester;Landroidx/compose/foundation/relocation/BringIntoViewRequesterModifier;)V
+HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterKt$bringIntoViewRequester$2$1$invoke$$inlined$onDispose$1;->dispose()V
HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterKt$bringIntoViewRequester$2$1;-><init>(Landroidx/compose/foundation/relocation/BringIntoViewRequester;Landroidx/compose/foundation/relocation/BringIntoViewRequesterModifier;)V
HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterKt$bringIntoViewRequester$2$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult;
HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterKt$bringIntoViewRequester$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
@@ -972,16 +1750,29 @@
HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterKt;->BringIntoViewRequester()Landroidx/compose/foundation/relocation/BringIntoViewRequester;
HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterKt;->bringIntoViewRequester(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/relocation/BringIntoViewRequester;)Landroidx/compose/ui/Modifier;
HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterModifier;-><init>(Landroidx/compose/foundation/relocation/BringIntoViewParent;)V
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderKt$bringIntoViewResponder$2;-><init>(Landroidx/compose/foundation/relocation/BringIntoViewResponder;)V
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderKt$bringIntoViewResponder$2;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderKt$bringIntoViewResponder$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderKt;->bringIntoViewResponder(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/relocation/BringIntoViewResponder;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderModifier;-><init>(Landroidx/compose/foundation/relocation/BringIntoViewParent;)V
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderModifier;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderModifier;->getValue()Landroidx/compose/foundation/relocation/BringIntoViewParent;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderModifier;->getValue()Ljava/lang/Object;
+HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderModifier;->setResponder(Landroidx/compose/foundation/relocation/BringIntoViewResponder;)V
HSPLandroidx/compose/foundation/relocation/BringIntoViewResponder_androidKt;->rememberDefaultBringIntoViewParent(Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/relocation/BringIntoViewParent;
HSPLandroidx/compose/foundation/shape/CornerBasedShape;-><clinit>()V
HSPLandroidx/compose/foundation/shape/CornerBasedShape;-><init>(Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;)V
HSPLandroidx/compose/foundation/shape/CornerBasedShape;->createOutline-Pq9zytI(JLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)Landroidx/compose/ui/graphics/Outline;
+HSPLandroidx/compose/foundation/shape/CornerBasedShape;->getBottomEnd()Landroidx/compose/foundation/shape/CornerSize;
+HSPLandroidx/compose/foundation/shape/CornerBasedShape;->getTopEnd()Landroidx/compose/foundation/shape/CornerSize;
+HSPLandroidx/compose/foundation/shape/CornerBasedShape;->getTopStart()Landroidx/compose/foundation/shape/CornerSize;
HSPLandroidx/compose/foundation/shape/CornerSizeKt$ZeroCornerSize$1;-><init>()V
HSPLandroidx/compose/foundation/shape/CornerSizeKt;-><clinit>()V
HSPLandroidx/compose/foundation/shape/CornerSizeKt;->CornerSize(I)Landroidx/compose/foundation/shape/CornerSize;
HSPLandroidx/compose/foundation/shape/CornerSizeKt;->CornerSize-0680j_4(F)Landroidx/compose/foundation/shape/CornerSize;
HSPLandroidx/compose/foundation/shape/DpCornerSize;-><init>(F)V
HSPLandroidx/compose/foundation/shape/DpCornerSize;-><init>(FLkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/foundation/shape/DpCornerSize;->equals(Ljava/lang/Object;)Z
HSPLandroidx/compose/foundation/shape/DpCornerSize;->toPx-TmRCtEA(JLandroidx/compose/ui/unit/Density;)F
HSPLandroidx/compose/foundation/shape/PercentCornerSize;-><init>(F)V
HSPLandroidx/compose/foundation/shape/PercentCornerSize;->toPx-TmRCtEA(JLandroidx/compose/ui/unit/Density;)F
@@ -1028,6 +1819,7 @@
HSPLandroidx/compose/foundation/text/TextController;->getMeasurePolicy()Landroidx/compose/ui/layout/MeasurePolicy;
HSPLandroidx/compose/foundation/text/TextController;->getModifiers()Landroidx/compose/ui/Modifier;
HSPLandroidx/compose/foundation/text/TextController;->getState()Landroidx/compose/foundation/text/TextState;
+HSPLandroidx/compose/foundation/text/TextController;->onForgotten()V
HSPLandroidx/compose/foundation/text/TextController;->onRemembered()V
HSPLandroidx/compose/foundation/text/TextController;->setTextDelegate(Landroidx/compose/foundation/text/TextDelegate;)V
HSPLandroidx/compose/foundation/text/TextController;->update(Landroidx/compose/foundation/text/selection/SelectionRegistrar;)V
@@ -1060,6 +1852,7 @@
HSPLandroidx/compose/foundation/text/TextState;->getLayoutInvalidation()Lkotlin/Unit;
HSPLandroidx/compose/foundation/text/TextState;->getLayoutResult()Landroidx/compose/ui/text/TextLayoutResult;
HSPLandroidx/compose/foundation/text/TextState;->getOnTextLayout()Lkotlin/jvm/functions/Function1;
+HSPLandroidx/compose/foundation/text/TextState;->getSelectable()Landroidx/compose/foundation/text/selection/Selectable;
HSPLandroidx/compose/foundation/text/TextState;->getSelectableId()J
HSPLandroidx/compose/foundation/text/TextState;->getTextDelegate()Landroidx/compose/foundation/text/TextDelegate;
HSPLandroidx/compose/foundation/text/TextState;->setDrawScopeInvalidation(Lkotlin/Unit;)V
@@ -1073,6 +1866,7 @@
HSPLandroidx/compose/foundation/text/selection/SelectionRegistrarKt;-><clinit>()V
HSPLandroidx/compose/foundation/text/selection/SelectionRegistrarKt;->getLocalSelectionRegistrar()Landroidx/compose/runtime/ProvidableCompositionLocal;
HSPLandroidx/compose/foundation/text/selection/SelectionRegistrarKt;->hasSelection(Landroidx/compose/foundation/text/selection/SelectionRegistrar;J)Z
+HSPLandroidx/compose/foundation/text/selection/TextSelectionColors;-><clinit>()V
HSPLandroidx/compose/foundation/text/selection/TextSelectionColors;-><init>(JJ)V
HSPLandroidx/compose/foundation/text/selection/TextSelectionColors;-><init>(JJLkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/foundation/text/selection/TextSelectionColors;->equals(Ljava/lang/Object;)Z
@@ -1080,18 +1874,41 @@
HSPLandroidx/compose/foundation/text/selection/TextSelectionColorsKt$LocalTextSelectionColors$1;-><init>()V
HSPLandroidx/compose/foundation/text/selection/TextSelectionColorsKt;-><clinit>()V
HSPLandroidx/compose/foundation/text/selection/TextSelectionColorsKt;->getLocalTextSelectionColors()Landroidx/compose/runtime/ProvidableCompositionLocal;
+HSPLandroidx/compose/material/icons/Icons$Filled;-><clinit>()V
+HSPLandroidx/compose/material/icons/Icons$Filled;-><init>()V
+HSPLandroidx/compose/material/icons/Icons$Outlined;-><clinit>()V
+HSPLandroidx/compose/material/icons/Icons$Outlined;-><init>()V
+HSPLandroidx/compose/material/icons/filled/ArrowBackKt;-><clinit>()V
+HSPLandroidx/compose/material/icons/filled/ArrowBackKt;->getArrowBack(Landroidx/compose/material/icons/Icons$Filled;)Landroidx/compose/ui/graphics/vector/ImageVector;
+HSPLandroidx/compose/material/icons/filled/CloseKt;-><clinit>()V
+HSPLandroidx/compose/material/icons/filled/CloseKt;->getClose(Landroidx/compose/material/icons/Icons$Filled;)Landroidx/compose/ui/graphics/vector/ImageVector;
+HSPLandroidx/compose/material/icons/outlined/QrCodeScannerKt;-><clinit>()V
+HSPLandroidx/compose/material/icons/outlined/QrCodeScannerKt;->getQrCodeScanner(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector;
HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance$onInvalidateRipple$1;-><init>(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;)V
+HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance$onInvalidateRipple$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance$onInvalidateRipple$1;->invoke()V
HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;-><init>(ZFLandroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/material/ripple/RippleContainer;)V
HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;-><init>(ZFLandroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/material/ripple/RippleContainer;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->access$getInvalidateTick(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;)Z
+HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->access$setInvalidateTick(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;Z)V
+HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->addRipple(Landroidx/compose/foundation/interaction/PressInteraction$Press;Lkotlinx/coroutines/CoroutineScope;)V
+HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->dispose()V
HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->drawIndication(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->getInvalidateTick()Z
HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->getRippleHostView()Landroidx/compose/material/ripple/RippleHostView;
+HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->onForgotten()V
HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->onRemembered()V
+HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->removeRipple(Landroidx/compose/foundation/interaction/PressInteraction$Press;)V
+HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->resetHostView()V
+HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->setInvalidateTick(Z)V
+HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->setRippleHostView(Landroidx/compose/material/ripple/RippleHostView;)V
HSPLandroidx/compose/material/ripple/PlatformRipple;-><init>(ZFLandroidx/compose/runtime/State;)V
HSPLandroidx/compose/material/ripple/PlatformRipple;-><init>(ZFLandroidx/compose/runtime/State;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/material/ripple/PlatformRipple;->findNearestViewGroup(Landroidx/compose/runtime/Composer;I)Landroid/view/ViewGroup;
HSPLandroidx/compose/material/ripple/PlatformRipple;->rememberUpdatedRippleInstance-942rkJo(Landroidx/compose/foundation/interaction/InteractionSource;ZFLandroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/runtime/Composer;I)Landroidx/compose/material/ripple/RippleIndicationInstance;
HSPLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1$1;-><init>(Landroidx/compose/material/ripple/RippleIndicationInstance;Lkotlinx/coroutines/CoroutineScope;)V
+HSPLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1$1;->emit(Landroidx/compose/foundation/interaction/Interaction;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
HSPLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1;-><init>(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/material/ripple/RippleIndicationInstance;Lkotlin/coroutines/Continuation;)V
HSPLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
HSPLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
@@ -1099,18 +1916,31 @@
HSPLandroidx/compose/material/ripple/Ripple;-><init>(ZFLandroidx/compose/runtime/State;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/material/ripple/Ripple;->equals(Ljava/lang/Object;)Z
HSPLandroidx/compose/material/ripple/Ripple;->rememberUpdatedInstance(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/IndicationInstance;
+HSPLandroidx/compose/material/ripple/RippleAlpha;-><clinit>()V
HSPLandroidx/compose/material/ripple/RippleAlpha;-><init>(FFFF)V
HSPLandroidx/compose/material/ripple/RippleAlpha;->equals(Ljava/lang/Object;)Z
HSPLandroidx/compose/material/ripple/RippleAlpha;->getPressedAlpha()F
HSPLandroidx/compose/material/ripple/RippleAnimationKt;-><clinit>()V
HSPLandroidx/compose/material/ripple/RippleAnimationKt;->getRippleEndRadius-cSwnlzA(Landroidx/compose/ui/unit/Density;ZJ)F
HSPLandroidx/compose/material/ripple/RippleContainer;-><init>(Landroid/content/Context;)V
+HSPLandroidx/compose/material/ripple/RippleContainer;->disposeRippleIfNeeded(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;)V
+HSPLandroidx/compose/material/ripple/RippleContainer;->getRippleHostView(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;)Landroidx/compose/material/ripple/RippleHostView;
HSPLandroidx/compose/material/ripple/RippleHostMap;-><init>()V
+HSPLandroidx/compose/material/ripple/RippleHostMap;->get(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;)Landroidx/compose/material/ripple/RippleHostView;
+HSPLandroidx/compose/material/ripple/RippleHostMap;->remove(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;)V
+HSPLandroidx/compose/material/ripple/RippleHostMap;->set(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;Landroidx/compose/material/ripple/RippleHostView;)V
HSPLandroidx/compose/material/ripple/RippleHostView$Companion;-><init>()V
HSPLandroidx/compose/material/ripple/RippleHostView$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/material/ripple/RippleHostView;-><clinit>()V
HSPLandroidx/compose/material/ripple/RippleHostView;-><init>(Landroid/content/Context;)V
+HSPLandroidx/compose/material/ripple/RippleHostView;->addRipple-KOepWvA(Landroidx/compose/foundation/interaction/PressInteraction$Press;ZJIJFLkotlin/jvm/functions/Function0;)V
+HSPLandroidx/compose/material/ripple/RippleHostView;->createRipple(Z)V
+HSPLandroidx/compose/material/ripple/RippleHostView;->disposeRipple()V
+HSPLandroidx/compose/material/ripple/RippleHostView;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V
HSPLandroidx/compose/material/ripple/RippleHostView;->refreshDrawableState()V
+HSPLandroidx/compose/material/ripple/RippleHostView;->removeRipple()V
+HSPLandroidx/compose/material/ripple/RippleHostView;->setRippleState(Z)V
+HSPLandroidx/compose/material/ripple/RippleHostView;->updateRippleProperties-biQXAtU(JIJF)V
HSPLandroidx/compose/material/ripple/RippleIndicationInstance;-><init>(ZLandroidx/compose/runtime/State;)V
HSPLandroidx/compose/material/ripple/RippleIndicationInstance;->drawStateLayer-H2RKhps(Landroidx/compose/ui/graphics/drawscope/DrawScope;FJ)V
HSPLandroidx/compose/material/ripple/RippleKt;-><clinit>()V
@@ -1121,6 +1951,44 @@
HSPLandroidx/compose/material/ripple/RippleThemeKt;->getLocalRippleTheme()Landroidx/compose/runtime/ProvidableCompositionLocal;
HSPLandroidx/compose/material/ripple/StateLayer;-><init>(ZLandroidx/compose/runtime/State;)V
HSPLandroidx/compose/material/ripple/StateLayer;->drawStateLayer-H2RKhps(Landroidx/compose/ui/graphics/drawscope/DrawScope;FJ)V
+HSPLandroidx/compose/material/ripple/UnprojectedRipple$Companion;-><init>()V
+HSPLandroidx/compose/material/ripple/UnprojectedRipple$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/material/ripple/UnprojectedRipple$MRadiusHelper;-><clinit>()V
+HSPLandroidx/compose/material/ripple/UnprojectedRipple$MRadiusHelper;-><init>()V
+HSPLandroidx/compose/material/ripple/UnprojectedRipple$MRadiusHelper;->setRadius(Landroid/graphics/drawable/RippleDrawable;I)V
+HSPLandroidx/compose/material/ripple/UnprojectedRipple;-><clinit>()V
+HSPLandroidx/compose/material/ripple/UnprojectedRipple;-><init>(Z)V
+HSPLandroidx/compose/material/ripple/UnprojectedRipple;->calculateRippleColor-5vOe2sY(JF)J
+HSPLandroidx/compose/material/ripple/UnprojectedRipple;->getDirtyBounds()Landroid/graphics/Rect;
+HSPLandroidx/compose/material/ripple/UnprojectedRipple;->isProjected()Z
+HSPLandroidx/compose/material/ripple/UnprojectedRipple;->setColor-DxMtmZc(JF)V
+HSPLandroidx/compose/material/ripple/UnprojectedRipple;->trySetRadius(I)V
+HSPLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$1$1;-><init>(Landroidx/compose/material3/TopAppBarScrollBehavior;F)V
+HSPLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$1$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$1$1;->invoke()V
+HSPLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$2;-><init>(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/material3/TopAppBarColors;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/TextStyle;ZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;ILandroidx/compose/material3/TopAppBarScrollBehavior;)V
+HSPLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$2;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$3;-><init>(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/TextStyle;ZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/material3/TopAppBarColors;Landroidx/compose/material3/TopAppBarScrollBehavior;II)V
+HSPLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$actionsRow$1;-><init>(Lkotlin/jvm/functions/Function3;I)V
+HSPLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$actionsRow$1;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$actionsRow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/material3/AppBarKt$TopAppBarLayout$1$3$1;-><init>(JLkotlin/jvm/functions/Function2;I)V
+HSPLandroidx/compose/material3/AppBarKt$TopAppBarLayout$1$3$1;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/material3/AppBarKt$TopAppBarLayout$1$3$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/material3/AppBarKt$TopAppBarLayout$2$measure$1;-><init>(Landroidx/compose/ui/layout/Placeable;ILandroidx/compose/ui/layout/Placeable;Landroidx/compose/foundation/layout/Arrangement$Horizontal;JLandroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/foundation/layout/Arrangement$Vertical;II)V
+HSPLandroidx/compose/material3/AppBarKt$TopAppBarLayout$2$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
+HSPLandroidx/compose/material3/AppBarKt$TopAppBarLayout$2$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/material3/AppBarKt$TopAppBarLayout$2;-><init>(FLandroidx/compose/foundation/layout/Arrangement$Horizontal;Landroidx/compose/foundation/layout/Arrangement$Vertical;I)V
+HSPLandroidx/compose/material3/AppBarKt$TopAppBarLayout$2;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/material3/AppBarKt;-><clinit>()V
+HSPLandroidx/compose/material3/AppBarKt;->SingleRowTopAppBar$lambda$3(Landroidx/compose/runtime/State;)J
+HSPLandroidx/compose/material3/AppBarKt;->SingleRowTopAppBar(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/TextStyle;ZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/material3/TopAppBarColors;Landroidx/compose/material3/TopAppBarScrollBehavior;Landroidx/compose/runtime/Composer;II)V
+HSPLandroidx/compose/material3/AppBarKt;->TopAppBar(Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/material3/TopAppBarColors;Landroidx/compose/material3/TopAppBarScrollBehavior;Landroidx/compose/runtime/Composer;II)V
+HSPLandroidx/compose/material3/AppBarKt;->TopAppBarLayout-kXwM9vE(Landroidx/compose/ui/Modifier;FJJJLkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/TextStyle;FLandroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;IZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
+HSPLandroidx/compose/material3/AppBarKt;->access$TopAppBarLayout-kXwM9vE(Landroidx/compose/ui/Modifier;FJJJLkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/TextStyle;FLandroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;IZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
+HSPLandroidx/compose/material3/AppBarKt;->access$getTopAppBarTitleInset$p()F
+HSPLandroidx/compose/material3/ButtonColors;-><clinit>()V
HSPLandroidx/compose/material3/ButtonColors;-><init>(JJJJ)V
HSPLandroidx/compose/material3/ButtonColors;-><init>(JJJJLkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/material3/ButtonColors;->containerColor$material3_release(ZLandroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State;
@@ -1128,29 +1996,10 @@
HSPLandroidx/compose/material3/ButtonColors;->equals(Ljava/lang/Object;)Z
HSPLandroidx/compose/material3/ButtonDefaults;-><clinit>()V
HSPLandroidx/compose/material3/ButtonDefaults;-><init>()V
-HSPLandroidx/compose/material3/ButtonDefaults;->filledTonalButtonColors-ro_MJ88(JJJJLandroidx/compose/runtime/Composer;II)Landroidx/compose/material3/ButtonColors;
-HSPLandroidx/compose/material3/ButtonDefaults;->filledTonalButtonElevation-R_JCAzs(FFFFFLandroidx/compose/runtime/Composer;II)Landroidx/compose/material3/ButtonElevation;
-HSPLandroidx/compose/material3/ButtonDefaults;->getContentPadding()Landroidx/compose/foundation/layout/PaddingValues;
-HSPLandroidx/compose/material3/ButtonDefaults;->getFilledTonalShape(Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/graphics/Shape;
HSPLandroidx/compose/material3/ButtonDefaults;->getMinHeight-D9Ej5fM()F
HSPLandroidx/compose/material3/ButtonDefaults;->getMinWidth-D9Ej5fM()F
-HSPLandroidx/compose/material3/ButtonDefaults;->getTextButtonContentPadding()Landroidx/compose/foundation/layout/PaddingValues;
HSPLandroidx/compose/material3/ButtonDefaults;->getTextShape(Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/graphics/Shape;
HSPLandroidx/compose/material3/ButtonDefaults;->textButtonColors-ro_MJ88(JJJJLandroidx/compose/runtime/Composer;II)Landroidx/compose/material3/ButtonColors;
-HSPLandroidx/compose/material3/ButtonElevation$animateElevation$1$1$1;-><init>(Landroidx/compose/runtime/snapshots/SnapshotStateList;)V
-HSPLandroidx/compose/material3/ButtonElevation$animateElevation$1$1;-><init>(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/snapshots/SnapshotStateList;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/material3/ButtonElevation$animateElevation$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/material3/ButtonElevation$animateElevation$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/material3/ButtonElevation$animateElevation$3;-><init>(Landroidx/compose/animation/core/Animatable;Landroidx/compose/material3/ButtonElevation;FLandroidx/compose/foundation/interaction/Interaction;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/material3/ButtonElevation$animateElevation$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/material3/ButtonElevation$animateElevation$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/material3/ButtonElevation;-><init>(FFFFF)V
-HSPLandroidx/compose/material3/ButtonElevation;-><init>(FFFFFLkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/material3/ButtonElevation;->access$getPressedElevation$p(Landroidx/compose/material3/ButtonElevation;)F
-HSPLandroidx/compose/material3/ButtonElevation;->animateElevation(ZLandroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State;
-HSPLandroidx/compose/material3/ButtonElevation;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/material3/ButtonElevation;->shadowElevation$material3_release(ZLandroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State;
-HSPLandroidx/compose/material3/ButtonElevation;->tonalElevation$material3_release(ZLandroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State;
HSPLandroidx/compose/material3/ButtonKt$Button$2$1$1;-><init>(Landroidx/compose/foundation/layout/PaddingValues;Lkotlin/jvm/functions/Function3;I)V
HSPLandroidx/compose/material3/ButtonKt$Button$2$1$1;->invoke(Landroidx/compose/runtime/Composer;I)V
HSPLandroidx/compose/material3/ButtonKt$Button$2$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
@@ -1161,9 +2010,10 @@
HSPLandroidx/compose/material3/ButtonKt$Button$2;->invoke(Landroidx/compose/runtime/Composer;I)V
HSPLandroidx/compose/material3/ButtonKt$Button$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/material3/ButtonKt$Button$3;-><init>(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/graphics/Shape;Landroidx/compose/material3/ButtonColors;Landroidx/compose/material3/ButtonElevation;Landroidx/compose/foundation/BorderStroke;Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function3;II)V
+HSPLandroidx/compose/material3/ButtonKt$TextButton$2;-><init>(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/graphics/Shape;Landroidx/compose/material3/ButtonColors;Landroidx/compose/material3/ButtonElevation;Landroidx/compose/foundation/BorderStroke;Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function3;II)V
HSPLandroidx/compose/material3/ButtonKt;->Button(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/graphics/Shape;Landroidx/compose/material3/ButtonColors;Landroidx/compose/material3/ButtonElevation;Landroidx/compose/foundation/BorderStroke;Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V
-HSPLandroidx/compose/material3/ButtonKt;->FilledTonalButton(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/graphics/Shape;Landroidx/compose/material3/ButtonColors;Landroidx/compose/material3/ButtonElevation;Landroidx/compose/foundation/BorderStroke;Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V
HSPLandroidx/compose/material3/ButtonKt;->TextButton(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/graphics/Shape;Landroidx/compose/material3/ButtonColors;Landroidx/compose/material3/ButtonElevation;Landroidx/compose/foundation/BorderStroke;Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V
+HSPLandroidx/compose/material3/CardColors;-><clinit>()V
HSPLandroidx/compose/material3/CardColors;-><init>(JJJJ)V
HSPLandroidx/compose/material3/CardColors;-><init>(JJJJLkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/material3/CardColors;->containerColor$material3_release(ZLandroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State;
@@ -1174,6 +2024,7 @@
HSPLandroidx/compose/material3/CardDefaults;->cardColors-ro_MJ88(JJJJLandroidx/compose/runtime/Composer;II)Landroidx/compose/material3/CardColors;
HSPLandroidx/compose/material3/CardDefaults;->cardElevation-aqJV_2Y(FFFFFFLandroidx/compose/runtime/Composer;II)Landroidx/compose/material3/CardElevation;
HSPLandroidx/compose/material3/CardDefaults;->getShape(Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/graphics/Shape;
+HSPLandroidx/compose/material3/CardElevation;-><clinit>()V
HSPLandroidx/compose/material3/CardElevation;-><init>(FFFFFF)V
HSPLandroidx/compose/material3/CardElevation;-><init>(FFFFFFLkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/material3/CardElevation;->access$getDefaultElevation$p(Landroidx/compose/material3/CardElevation;)F
@@ -1184,6 +2035,7 @@
HSPLandroidx/compose/material3/CardKt$Card$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/material3/CardKt$Card$2;-><init>(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;Landroidx/compose/material3/CardColors;Landroidx/compose/material3/CardElevation;Landroidx/compose/foundation/BorderStroke;Lkotlin/jvm/functions/Function3;II)V
HSPLandroidx/compose/material3/CardKt;->Card(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;Landroidx/compose/material3/CardColors;Landroidx/compose/material3/CardElevation;Landroidx/compose/foundation/BorderStroke;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V
+HSPLandroidx/compose/material3/ChipColors;-><clinit>()V
HSPLandroidx/compose/material3/ChipColors;-><init>(JJJJJJJJ)V
HSPLandroidx/compose/material3/ChipColors;-><init>(JJJJJJJJLkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/material3/ChipColors;->containerColor$material3_release(ZLandroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State;
@@ -1198,6 +2050,7 @@
HSPLandroidx/compose/material3/ChipElevation$animateElevation$3;-><init>(Landroidx/compose/animation/core/Animatable;Landroidx/compose/material3/ChipElevation;FLandroidx/compose/foundation/interaction/Interaction;Lkotlin/coroutines/Continuation;)V
HSPLandroidx/compose/material3/ChipElevation$animateElevation$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
HSPLandroidx/compose/material3/ChipElevation$animateElevation$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/material3/ChipElevation;-><clinit>()V
HSPLandroidx/compose/material3/ChipElevation;-><init>(FFFFFF)V
HSPLandroidx/compose/material3/ChipElevation;-><init>(FFFFFFLkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/material3/ChipElevation;->access$getPressedElevation$p(Landroidx/compose/material3/ChipElevation;)F
@@ -1222,6 +2075,7 @@
HSPLandroidx/compose/material3/ColorResourceHelper;-><clinit>()V
HSPLandroidx/compose/material3/ColorResourceHelper;-><init>()V
HSPLandroidx/compose/material3/ColorResourceHelper;->getColor-WaAFU9c(Landroid/content/Context;I)J
+HSPLandroidx/compose/material3/ColorScheme;-><clinit>()V
HSPLandroidx/compose/material3/ColorScheme;-><init>(JJJJJJJJJJJJJJJJJJJJJJJJJJJJJ)V
HSPLandroidx/compose/material3/ColorScheme;-><init>(JJJJJJJJJJJJJJJJJJJJJJJJJJJJJLkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/material3/ColorScheme;->copy-G1PFc-w$default(Landroidx/compose/material3/ColorScheme;JJJJJJJJJJJJJJJJJJJJJJJJJJJJJILjava/lang/Object;)Landroidx/compose/material3/ColorScheme;
@@ -1288,21 +2142,52 @@
HSPLandroidx/compose/material3/ColorSchemeKt$LocalColorScheme$1;-><init>()V
HSPLandroidx/compose/material3/ColorSchemeKt$WhenMappings;-><clinit>()V
HSPLandroidx/compose/material3/ColorSchemeKt;-><clinit>()V
+HSPLandroidx/compose/material3/ColorSchemeKt;->applyTonalElevation-Hht5A8o(Landroidx/compose/material3/ColorScheme;JF)J
HSPLandroidx/compose/material3/ColorSchemeKt;->contentColorFor-4WTKRHQ(Landroidx/compose/material3/ColorScheme;J)J
HSPLandroidx/compose/material3/ColorSchemeKt;->contentColorFor-ek8zF_U(JLandroidx/compose/runtime/Composer;I)J
+HSPLandroidx/compose/material3/ColorSchemeKt;->darkColorScheme-G1PFc-w$default(JJJJJJJJJJJJJJJJJJJJJJJJJJJJJILjava/lang/Object;)Landroidx/compose/material3/ColorScheme;
+HSPLandroidx/compose/material3/ColorSchemeKt;->darkColorScheme-G1PFc-w(JJJJJJJJJJJJJJJJJJJJJJJJJJJJJ)Landroidx/compose/material3/ColorScheme;
HSPLandroidx/compose/material3/ColorSchemeKt;->fromToken(Landroidx/compose/material3/ColorScheme;Landroidx/compose/material3/tokens/ColorSchemeKeyTokens;)J
HSPLandroidx/compose/material3/ColorSchemeKt;->getLocalColorScheme()Landroidx/compose/runtime/ProvidableCompositionLocal;
-HSPLandroidx/compose/material3/ColorSchemeKt;->lightColorScheme-G1PFc-w$default(JJJJJJJJJJJJJJJJJJJJJJJJJJJJJILjava/lang/Object;)Landroidx/compose/material3/ColorScheme;
-HSPLandroidx/compose/material3/ColorSchemeKt;->lightColorScheme-G1PFc-w(JJJJJJJJJJJJJJJJJJJJJJJJJJJJJ)Landroidx/compose/material3/ColorScheme;
HSPLandroidx/compose/material3/ColorSchemeKt;->surfaceColorAtElevation-3ABfNKs(Landroidx/compose/material3/ColorScheme;F)J
HSPLandroidx/compose/material3/ColorSchemeKt;->toColor(Landroidx/compose/material3/tokens/ColorSchemeKeyTokens;Landroidx/compose/runtime/Composer;I)J
HSPLandroidx/compose/material3/ColorSchemeKt;->updateColorSchemeFrom(Landroidx/compose/material3/ColorScheme;Landroidx/compose/material3/ColorScheme;)V
+HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-1$1;-><clinit>()V
+HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-1$1;-><init>()V
+HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-10$1;-><clinit>()V
+HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-10$1;-><init>()V
+HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-11$1;-><clinit>()V
+HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-11$1;-><init>()V
+HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-12$1;-><clinit>()V
+HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-12$1;-><init>()V
+HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-2$1;-><clinit>()V
+HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-2$1;-><init>()V
+HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-2$1;->invoke(Landroidx/compose/foundation/layout/RowScope;Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-3$1;-><clinit>()V
+HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-3$1;-><init>()V
+HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-4$1;-><clinit>()V
+HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-4$1;-><init>()V
+HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-5$1;-><clinit>()V
+HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-5$1;-><init>()V
+HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-6$1;-><clinit>()V
+HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-6$1;-><init>()V
+HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-7$1;-><clinit>()V
+HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-7$1;-><init>()V
+HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-8$1;-><clinit>()V
+HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-8$1;-><init>()V
+HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-9$1;-><clinit>()V
+HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-9$1;-><init>()V
+HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt;-><clinit>()V
+HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt;-><init>()V
+HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt;->getLambda-2$material3_release()Lkotlin/jvm/functions/Function3;
HSPLandroidx/compose/material3/ContentColorKt$LocalContentColor$1;-><clinit>()V
HSPLandroidx/compose/material3/ContentColorKt$LocalContentColor$1;-><init>()V
+HSPLandroidx/compose/material3/ContentColorKt$LocalContentColor$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/material3/ContentColorKt$LocalContentColor$1;->invoke-0d7_KjU()J
HSPLandroidx/compose/material3/ContentColorKt;-><clinit>()V
HSPLandroidx/compose/material3/ContentColorKt;->getLocalContentColor()Landroidx/compose/runtime/ProvidableCompositionLocal;
-HSPLandroidx/compose/material3/DividerKt;->Divider-9IZ8Weo(Landroidx/compose/ui/Modifier;FJLandroidx/compose/runtime/Composer;II)V
-HSPLandroidx/compose/material3/DynamicTonalPaletteKt;->dynamicLightColorScheme(Landroid/content/Context;)Landroidx/compose/material3/ColorScheme;
+HSPLandroidx/compose/material3/DynamicTonalPaletteKt;->dynamicDarkColorScheme(Landroid/content/Context;)Landroidx/compose/material3/ColorScheme;
HSPLandroidx/compose/material3/DynamicTonalPaletteKt;->dynamicTonalPalette(Landroid/content/Context;)Landroidx/compose/material3/TonalPalette;
HSPLandroidx/compose/material3/ElevationDefaults;-><clinit>()V
HSPLandroidx/compose/material3/ElevationDefaults;-><init>()V
@@ -1310,11 +2195,37 @@
HSPLandroidx/compose/material3/ElevationKt;-><clinit>()V
HSPLandroidx/compose/material3/ElevationKt;->access$getDefaultOutgoingSpec$p()Landroidx/compose/animation/core/TweenSpec;
HSPLandroidx/compose/material3/ElevationKt;->animateElevation-rAjV9yQ(Landroidx/compose/animation/core/Animatable;FLandroidx/compose/foundation/interaction/Interaction;Landroidx/compose/foundation/interaction/Interaction;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/material3/IconButtonColors;-><clinit>()V
+HSPLandroidx/compose/material3/IconButtonColors;-><init>(JJJJ)V
+HSPLandroidx/compose/material3/IconButtonColors;-><init>(JJJJLkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/material3/IconButtonColors;->containerColor$material3_release(ZLandroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State;
+HSPLandroidx/compose/material3/IconButtonColors;->contentColor$material3_release(ZLandroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State;
+HSPLandroidx/compose/material3/IconButtonDefaults;-><clinit>()V
+HSPLandroidx/compose/material3/IconButtonDefaults;-><init>()V
+HSPLandroidx/compose/material3/IconButtonDefaults;->iconButtonColors-ro_MJ88(JJJJLandroidx/compose/runtime/Composer;II)Landroidx/compose/material3/IconButtonColors;
+HSPLandroidx/compose/material3/IconButtonKt$IconButton$3;-><init>(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/material3/IconButtonColors;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function2;II)V
+HSPLandroidx/compose/material3/IconButtonKt;->IconButton(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/material3/IconButtonColors;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
+HSPLandroidx/compose/material3/IconKt$Icon$3;-><init>(Landroidx/compose/ui/graphics/painter/Painter;Ljava/lang/String;Landroidx/compose/ui/Modifier;JII)V
+HSPLandroidx/compose/material3/IconKt$Icon$semantics$1$1;-><init>(Ljava/lang/String;)V
+HSPLandroidx/compose/material3/IconKt$Icon$semantics$1$1;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V
+HSPLandroidx/compose/material3/IconKt$Icon$semantics$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/material3/IconKt;-><clinit>()V
-HSPLandroidx/compose/material3/IconKt;->Icon-ww6aTOc(Landroidx/compose/ui/graphics/ImageBitmap;Ljava/lang/String;Landroidx/compose/ui/Modifier;JLandroidx/compose/runtime/Composer;II)V
HSPLandroidx/compose/material3/IconKt;->Icon-ww6aTOc(Landroidx/compose/ui/graphics/painter/Painter;Ljava/lang/String;Landroidx/compose/ui/Modifier;JLandroidx/compose/runtime/Composer;II)V
+HSPLandroidx/compose/material3/IconKt;->Icon-ww6aTOc(Landroidx/compose/ui/graphics/vector/ImageVector;Ljava/lang/String;Landroidx/compose/ui/Modifier;JLandroidx/compose/runtime/Composer;II)V
HSPLandroidx/compose/material3/IconKt;->defaultSizeFor(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/painter/Painter;)Landroidx/compose/ui/Modifier;
HSPLandroidx/compose/material3/IconKt;->isInfinite-uvyYCjk(J)Z
+HSPLandroidx/compose/material3/InteractiveComponentSizeKt$LocalMinimumInteractiveComponentEnforcement$1;-><clinit>()V
+HSPLandroidx/compose/material3/InteractiveComponentSizeKt$LocalMinimumInteractiveComponentEnforcement$1;-><init>()V
+HSPLandroidx/compose/material3/InteractiveComponentSizeKt$LocalMinimumInteractiveComponentEnforcement$1;->invoke()Ljava/lang/Boolean;
+HSPLandroidx/compose/material3/InteractiveComponentSizeKt$LocalMinimumInteractiveComponentEnforcement$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/material3/InteractiveComponentSizeKt$minimumInteractiveComponentSize$2;-><clinit>()V
+HSPLandroidx/compose/material3/InteractiveComponentSizeKt$minimumInteractiveComponentSize$2;-><init>()V
+HSPLandroidx/compose/material3/InteractiveComponentSizeKt$minimumInteractiveComponentSize$2;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/material3/InteractiveComponentSizeKt$minimumInteractiveComponentSize$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/material3/InteractiveComponentSizeKt;-><clinit>()V
+HSPLandroidx/compose/material3/InteractiveComponentSizeKt;->access$getMinimumInteractiveComponentSize$p()J
+HSPLandroidx/compose/material3/InteractiveComponentSizeKt;->getLocalMinimumInteractiveComponentEnforcement()Landroidx/compose/runtime/ProvidableCompositionLocal;
+HSPLandroidx/compose/material3/InteractiveComponentSizeKt;->minimumInteractiveComponentSize(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
HSPLandroidx/compose/material3/MaterialRippleTheme;-><clinit>()V
HSPLandroidx/compose/material3/MaterialRippleTheme;-><init>()V
HSPLandroidx/compose/material3/MaterialRippleTheme;->defaultColor-WaAFU9c(Landroidx/compose/runtime/Composer;I)J
@@ -1332,23 +2243,30 @@
HSPLandroidx/compose/material3/MaterialThemeKt;->MaterialTheme(Landroidx/compose/material3/ColorScheme;Landroidx/compose/material3/Shapes;Landroidx/compose/material3/Typography;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
HSPLandroidx/compose/material3/MaterialThemeKt;->access$getDefaultRippleAlpha$p()Landroidx/compose/material/ripple/RippleAlpha;
HSPLandroidx/compose/material3/MaterialThemeKt;->rememberTextSelectionColors(Landroidx/compose/material3/ColorScheme;Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/text/selection/TextSelectionColors;
-HSPLandroidx/compose/material3/MinimumTouchTargetModifier$measure$1;-><init>(ILandroidx/compose/ui/layout/Placeable;I)V
-HSPLandroidx/compose/material3/MinimumTouchTargetModifier$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
-HSPLandroidx/compose/material3/MinimumTouchTargetModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/material3/MinimumTouchTargetModifier;-><init>(J)V
-HSPLandroidx/compose/material3/MinimumTouchTargetModifier;-><init>(JLkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/material3/MinimumTouchTargetModifier;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/material3/MinimumTouchTargetModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/material3/MinimumInteractiveComponentSizeModifier$measure$1;-><init>(ILandroidx/compose/ui/layout/Placeable;I)V
+HSPLandroidx/compose/material3/MinimumInteractiveComponentSizeModifier$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
+HSPLandroidx/compose/material3/MinimumInteractiveComponentSizeModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/material3/MinimumInteractiveComponentSizeModifier;-><init>(J)V
+HSPLandroidx/compose/material3/MinimumInteractiveComponentSizeModifier;-><init>(JLkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/material3/MinimumInteractiveComponentSizeModifier;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/material3/MinimumInteractiveComponentSizeModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
HSPLandroidx/compose/material3/ShapeDefaults;-><clinit>()V
HSPLandroidx/compose/material3/ShapeDefaults;-><init>()V
HSPLandroidx/compose/material3/ShapeDefaults;->getExtraLarge()Landroidx/compose/foundation/shape/CornerBasedShape;
HSPLandroidx/compose/material3/ShapeDefaults;->getExtraSmall()Landroidx/compose/foundation/shape/CornerBasedShape;
+HSPLandroidx/compose/material3/ShapeDefaults;->getLarge()Landroidx/compose/foundation/shape/CornerBasedShape;
+HSPLandroidx/compose/material3/ShapeDefaults;->getMedium()Landroidx/compose/foundation/shape/CornerBasedShape;
+HSPLandroidx/compose/material3/ShapeDefaults;->getSmall()Landroidx/compose/foundation/shape/CornerBasedShape;
+HSPLandroidx/compose/material3/Shapes;-><clinit>()V
HSPLandroidx/compose/material3/Shapes;-><init>(Landroidx/compose/foundation/shape/CornerBasedShape;Landroidx/compose/foundation/shape/CornerBasedShape;Landroidx/compose/foundation/shape/CornerBasedShape;Landroidx/compose/foundation/shape/CornerBasedShape;Landroidx/compose/foundation/shape/CornerBasedShape;)V
HSPLandroidx/compose/material3/Shapes;-><init>(Landroidx/compose/foundation/shape/CornerBasedShape;Landroidx/compose/foundation/shape/CornerBasedShape;Landroidx/compose/foundation/shape/CornerBasedShape;Landroidx/compose/foundation/shape/CornerBasedShape;Landroidx/compose/foundation/shape/CornerBasedShape;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/material3/Shapes;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/material3/Shapes;->getLarge()Landroidx/compose/foundation/shape/CornerBasedShape;
HSPLandroidx/compose/material3/Shapes;->getMedium()Landroidx/compose/foundation/shape/CornerBasedShape;
HSPLandroidx/compose/material3/ShapesKt$LocalShapes$1;-><clinit>()V
HSPLandroidx/compose/material3/ShapesKt$LocalShapes$1;-><init>()V
+HSPLandroidx/compose/material3/ShapesKt$LocalShapes$1;->invoke()Landroidx/compose/material3/Shapes;
+HSPLandroidx/compose/material3/ShapesKt$LocalShapes$1;->invoke()Ljava/lang/Object;
HSPLandroidx/compose/material3/ShapesKt$WhenMappings;-><clinit>()V
HSPLandroidx/compose/material3/ShapesKt;-><clinit>()V
HSPLandroidx/compose/material3/ShapesKt;->fromToken(Landroidx/compose/material3/Shapes;Landroidx/compose/material3/tokens/ShapeKeyTokens;)Landroidx/compose/ui/graphics/Shape;
@@ -1385,6 +2303,7 @@
HSPLandroidx/compose/material3/SurfaceKt;->access$surfaceColorAtElevation-CLU3JFs(JFLandroidx/compose/runtime/Composer;I)J
HSPLandroidx/compose/material3/SurfaceKt;->surface-8ww4TTg(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;JLandroidx/compose/foundation/BorderStroke;F)Landroidx/compose/ui/Modifier;
HSPLandroidx/compose/material3/SurfaceKt;->surfaceColorAtElevation-CLU3JFs(JFLandroidx/compose/runtime/Composer;I)J
+HSPLandroidx/compose/material3/SystemBarsDefaultInsets_androidKt;->getSystemBarsForVisualComponents(Landroidx/compose/foundation/layout/WindowInsets$Companion;Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/layout/WindowInsets;
HSPLandroidx/compose/material3/TextKt$LocalTextStyle$1;-><clinit>()V
HSPLandroidx/compose/material3/TextKt$LocalTextStyle$1;-><init>()V
HSPLandroidx/compose/material3/TextKt$LocalTextStyle$1;->invoke()Landroidx/compose/ui/text/TextStyle;
@@ -1394,7 +2313,6 @@
HSPLandroidx/compose/material3/TextKt$Text$1;-><init>()V
HSPLandroidx/compose/material3/TextKt$Text$1;->invoke(Landroidx/compose/ui/text/TextLayoutResult;)V
HSPLandroidx/compose/material3/TextKt$Text$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/material3/TextKt$Text$2;-><init>(Ljava/lang/String;Landroidx/compose/ui/Modifier;JJLandroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontFamily;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/text/style/TextAlign;JIZIILkotlin/jvm/functions/Function1;Landroidx/compose/ui/text/TextStyle;III)V
HSPLandroidx/compose/material3/TextKt;-><clinit>()V
HSPLandroidx/compose/material3/TextKt;->ProvideTextStyle(Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V
HSPLandroidx/compose/material3/TextKt;->Text--4IGK_g(Ljava/lang/String;Landroidx/compose/ui/Modifier;JJLandroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontFamily;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/text/style/TextAlign;JIZIILkotlin/jvm/functions/Function1;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/runtime/Composer;III)V
@@ -1403,57 +2321,58 @@
HSPLandroidx/compose/material3/TonalPalette;-><init>(JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJLkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/material3/TonalPalette;->getNeutral10-0d7_KjU()J
HSPLandroidx/compose/material3/TonalPalette;->getNeutral20-0d7_KjU()J
-HSPLandroidx/compose/material3/TonalPalette;->getNeutral95-0d7_KjU()J
-HSPLandroidx/compose/material3/TonalPalette;->getNeutral99-0d7_KjU()J
+HSPLandroidx/compose/material3/TonalPalette;->getNeutral90-0d7_KjU()J
HSPLandroidx/compose/material3/TonalPalette;->getNeutralVariant30-0d7_KjU()J
-HSPLandroidx/compose/material3/TonalPalette;->getNeutralVariant50-0d7_KjU()J
-HSPLandroidx/compose/material3/TonalPalette;->getNeutralVariant90-0d7_KjU()J
-HSPLandroidx/compose/material3/TonalPalette;->getPrimary10-0d7_KjU()J
-HSPLandroidx/compose/material3/TonalPalette;->getPrimary100-0d7_KjU()J
+HSPLandroidx/compose/material3/TonalPalette;->getNeutralVariant60-0d7_KjU()J
+HSPLandroidx/compose/material3/TonalPalette;->getNeutralVariant80-0d7_KjU()J
+HSPLandroidx/compose/material3/TonalPalette;->getPrimary20-0d7_KjU()J
+HSPLandroidx/compose/material3/TonalPalette;->getPrimary30-0d7_KjU()J
HSPLandroidx/compose/material3/TonalPalette;->getPrimary40-0d7_KjU()J
HSPLandroidx/compose/material3/TonalPalette;->getPrimary80-0d7_KjU()J
HSPLandroidx/compose/material3/TonalPalette;->getPrimary90-0d7_KjU()J
-HSPLandroidx/compose/material3/TonalPalette;->getSecondary10-0d7_KjU()J
-HSPLandroidx/compose/material3/TonalPalette;->getSecondary100-0d7_KjU()J
-HSPLandroidx/compose/material3/TonalPalette;->getSecondary40-0d7_KjU()J
+HSPLandroidx/compose/material3/TonalPalette;->getSecondary20-0d7_KjU()J
+HSPLandroidx/compose/material3/TonalPalette;->getSecondary30-0d7_KjU()J
+HSPLandroidx/compose/material3/TonalPalette;->getSecondary80-0d7_KjU()J
HSPLandroidx/compose/material3/TonalPalette;->getSecondary90-0d7_KjU()J
-HSPLandroidx/compose/material3/TonalPalette;->getTertiary10-0d7_KjU()J
-HSPLandroidx/compose/material3/TonalPalette;->getTertiary100-0d7_KjU()J
-HSPLandroidx/compose/material3/TonalPalette;->getTertiary40-0d7_KjU()J
+HSPLandroidx/compose/material3/TonalPalette;->getTertiary20-0d7_KjU()J
+HSPLandroidx/compose/material3/TonalPalette;->getTertiary30-0d7_KjU()J
+HSPLandroidx/compose/material3/TonalPalette;->getTertiary80-0d7_KjU()J
HSPLandroidx/compose/material3/TonalPalette;->getTertiary90-0d7_KjU()J
-HSPLandroidx/compose/material3/TouchTargetKt$LocalMinimumTouchTargetEnforcement$1;-><clinit>()V
-HSPLandroidx/compose/material3/TouchTargetKt$LocalMinimumTouchTargetEnforcement$1;-><init>()V
-HSPLandroidx/compose/material3/TouchTargetKt$LocalMinimumTouchTargetEnforcement$1;->invoke()Ljava/lang/Boolean;
-HSPLandroidx/compose/material3/TouchTargetKt$LocalMinimumTouchTargetEnforcement$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/material3/TouchTargetKt$minimumTouchTargetSize$2;-><clinit>()V
-HSPLandroidx/compose/material3/TouchTargetKt$minimumTouchTargetSize$2;-><init>()V
-HSPLandroidx/compose/material3/TouchTargetKt$minimumTouchTargetSize$2;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/material3/TouchTargetKt$minimumTouchTargetSize$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/material3/TouchTargetKt;-><clinit>()V
-HSPLandroidx/compose/material3/TouchTargetKt;->getLocalMinimumTouchTargetEnforcement()Landroidx/compose/runtime/ProvidableCompositionLocal;
-HSPLandroidx/compose/material3/TouchTargetKt;->minimumTouchTargetSize(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/material3/TopAppBarColors;-><clinit>()V
+HSPLandroidx/compose/material3/TopAppBarColors;-><init>(JJJJJ)V
+HSPLandroidx/compose/material3/TopAppBarColors;-><init>(JJJJJLkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/material3/TopAppBarColors;->containerColor-XeAY9LY$material3_release(FLandroidx/compose/runtime/Composer;I)J
+HSPLandroidx/compose/material3/TopAppBarColors;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/material3/TopAppBarColors;->getActionIconContentColor-0d7_KjU$material3_release()J
+HSPLandroidx/compose/material3/TopAppBarColors;->getNavigationIconContentColor-0d7_KjU$material3_release()J
+HSPLandroidx/compose/material3/TopAppBarColors;->getTitleContentColor-0d7_KjU$material3_release()J
+HSPLandroidx/compose/material3/TopAppBarDefaults;-><clinit>()V
+HSPLandroidx/compose/material3/TopAppBarDefaults;-><init>()V
+HSPLandroidx/compose/material3/TopAppBarDefaults;->getWindowInsets(Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/layout/WindowInsets;
+HSPLandroidx/compose/material3/TopAppBarDefaults;->topAppBarColors-zjMxDiM(JJJJJLandroidx/compose/runtime/Composer;II)Landroidx/compose/material3/TopAppBarColors;
+HSPLandroidx/compose/material3/Typography;-><clinit>()V
HSPLandroidx/compose/material3/Typography;-><init>(Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;)V
-HSPLandroidx/compose/material3/Typography;-><init>(Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/material3/Typography;->equals(Ljava/lang/Object;)Z
HSPLandroidx/compose/material3/Typography;->getBodyLarge()Landroidx/compose/ui/text/TextStyle;
HSPLandroidx/compose/material3/Typography;->getBodyMedium()Landroidx/compose/ui/text/TextStyle;
+HSPLandroidx/compose/material3/Typography;->getBodySmall()Landroidx/compose/ui/text/TextStyle;
HSPLandroidx/compose/material3/Typography;->getLabelLarge()Landroidx/compose/ui/text/TextStyle;
HSPLandroidx/compose/material3/Typography;->getTitleLarge()Landroidx/compose/ui/text/TextStyle;
-HSPLandroidx/compose/material3/Typography;->getTitleMedium()Landroidx/compose/ui/text/TextStyle;
+HSPLandroidx/compose/material3/Typography;->getTitleSmall()Landroidx/compose/ui/text/TextStyle;
HSPLandroidx/compose/material3/TypographyKt$LocalTypography$1;-><clinit>()V
HSPLandroidx/compose/material3/TypographyKt$LocalTypography$1;-><init>()V
HSPLandroidx/compose/material3/TypographyKt$WhenMappings;-><clinit>()V
HSPLandroidx/compose/material3/TypographyKt;-><clinit>()V
HSPLandroidx/compose/material3/TypographyKt;->fromToken(Landroidx/compose/material3/Typography;Landroidx/compose/material3/tokens/TypographyKeyTokens;)Landroidx/compose/ui/text/TextStyle;
HSPLandroidx/compose/material3/TypographyKt;->getLocalTypography()Landroidx/compose/runtime/ProvidableCompositionLocal;
-HSPLandroidx/compose/material3/tokens/ColorLightTokens;-><clinit>()V
-HSPLandroidx/compose/material3/tokens/ColorLightTokens;-><init>()V
-HSPLandroidx/compose/material3/tokens/ColorLightTokens;->getError-0d7_KjU()J
-HSPLandroidx/compose/material3/tokens/ColorLightTokens;->getErrorContainer-0d7_KjU()J
-HSPLandroidx/compose/material3/tokens/ColorLightTokens;->getOnError-0d7_KjU()J
-HSPLandroidx/compose/material3/tokens/ColorLightTokens;->getOnErrorContainer-0d7_KjU()J
-HSPLandroidx/compose/material3/tokens/ColorLightTokens;->getOutlineVariant-0d7_KjU()J
-HSPLandroidx/compose/material3/tokens/ColorLightTokens;->getScrim-0d7_KjU()J
+HSPLandroidx/compose/material3/tokens/ColorDarkTokens;-><clinit>()V
+HSPLandroidx/compose/material3/tokens/ColorDarkTokens;-><init>()V
+HSPLandroidx/compose/material3/tokens/ColorDarkTokens;->getError-0d7_KjU()J
+HSPLandroidx/compose/material3/tokens/ColorDarkTokens;->getErrorContainer-0d7_KjU()J
+HSPLandroidx/compose/material3/tokens/ColorDarkTokens;->getOnError-0d7_KjU()J
+HSPLandroidx/compose/material3/tokens/ColorDarkTokens;->getOnErrorContainer-0d7_KjU()J
+HSPLandroidx/compose/material3/tokens/ColorDarkTokens;->getOutlineVariant-0d7_KjU()J
+HSPLandroidx/compose/material3/tokens/ColorDarkTokens;->getScrim-0d7_KjU()J
HSPLandroidx/compose/material3/tokens/ColorSchemeKeyTokens;->$values()[Landroidx/compose/material3/tokens/ColorSchemeKeyTokens;
HSPLandroidx/compose/material3/tokens/ColorSchemeKeyTokens;-><clinit>()V
HSPLandroidx/compose/material3/tokens/ColorSchemeKeyTokens;-><init>(Ljava/lang/String;I)V
@@ -1478,45 +2397,36 @@
HSPLandroidx/compose/material3/tokens/FilledCardTokens;->getFocusContainerElevation-D9Ej5fM()F
HSPLandroidx/compose/material3/tokens/FilledCardTokens;->getHoverContainerElevation-D9Ej5fM()F
HSPLandroidx/compose/material3/tokens/FilledCardTokens;->getPressedContainerElevation-D9Ej5fM()F
-HSPLandroidx/compose/material3/tokens/FilledTonalButtonTokens;-><clinit>()V
-HSPLandroidx/compose/material3/tokens/FilledTonalButtonTokens;-><init>()V
-HSPLandroidx/compose/material3/tokens/FilledTonalButtonTokens;->getContainerElevation-D9Ej5fM()F
-HSPLandroidx/compose/material3/tokens/FilledTonalButtonTokens;->getContainerShape()Landroidx/compose/material3/tokens/ShapeKeyTokens;
-HSPLandroidx/compose/material3/tokens/FilledTonalButtonTokens;->getDisabledContainerColor()Landroidx/compose/material3/tokens/ColorSchemeKeyTokens;
-HSPLandroidx/compose/material3/tokens/FilledTonalButtonTokens;->getDisabledLabelTextColor()Landroidx/compose/material3/tokens/ColorSchemeKeyTokens;
-HSPLandroidx/compose/material3/tokens/FilledTonalButtonTokens;->getFocusContainerElevation-D9Ej5fM()F
-HSPLandroidx/compose/material3/tokens/FilledTonalButtonTokens;->getHoverContainerElevation-D9Ej5fM()F
-HSPLandroidx/compose/material3/tokens/FilledTonalButtonTokens;->getPressedContainerElevation-D9Ej5fM()F
HSPLandroidx/compose/material3/tokens/IconButtonTokens;-><clinit>()V
HSPLandroidx/compose/material3/tokens/IconButtonTokens;-><init>()V
HSPLandroidx/compose/material3/tokens/IconButtonTokens;->getIconSize-D9Ej5fM()F
+HSPLandroidx/compose/material3/tokens/IconButtonTokens;->getStateLayerShape()Landroidx/compose/material3/tokens/ShapeKeyTokens;
+HSPLandroidx/compose/material3/tokens/IconButtonTokens;->getStateLayerSize-D9Ej5fM()F
HSPLandroidx/compose/material3/tokens/PaletteTokens;-><clinit>()V
HSPLandroidx/compose/material3/tokens/PaletteTokens;-><init>()V
-HSPLandroidx/compose/material3/tokens/PaletteTokens;->getError10-0d7_KjU()J
-HSPLandroidx/compose/material3/tokens/PaletteTokens;->getError100-0d7_KjU()J
-HSPLandroidx/compose/material3/tokens/PaletteTokens;->getError40-0d7_KjU()J
+HSPLandroidx/compose/material3/tokens/PaletteTokens;->getError20-0d7_KjU()J
+HSPLandroidx/compose/material3/tokens/PaletteTokens;->getError30-0d7_KjU()J
+HSPLandroidx/compose/material3/tokens/PaletteTokens;->getError80-0d7_KjU()J
HSPLandroidx/compose/material3/tokens/PaletteTokens;->getError90-0d7_KjU()J
HSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral0-0d7_KjU()J
HSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral10-0d7_KjU()J
HSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral20-0d7_KjU()J
-HSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral95-0d7_KjU()J
-HSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral99-0d7_KjU()J
+HSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral90-0d7_KjU()J
HSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutralVariant30-0d7_KjU()J
-HSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutralVariant50-0d7_KjU()J
+HSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutralVariant60-0d7_KjU()J
HSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutralVariant80-0d7_KjU()J
-HSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutralVariant90-0d7_KjU()J
-HSPLandroidx/compose/material3/tokens/PaletteTokens;->getPrimary10-0d7_KjU()J
-HSPLandroidx/compose/material3/tokens/PaletteTokens;->getPrimary100-0d7_KjU()J
+HSPLandroidx/compose/material3/tokens/PaletteTokens;->getPrimary20-0d7_KjU()J
+HSPLandroidx/compose/material3/tokens/PaletteTokens;->getPrimary30-0d7_KjU()J
HSPLandroidx/compose/material3/tokens/PaletteTokens;->getPrimary40-0d7_KjU()J
HSPLandroidx/compose/material3/tokens/PaletteTokens;->getPrimary80-0d7_KjU()J
HSPLandroidx/compose/material3/tokens/PaletteTokens;->getPrimary90-0d7_KjU()J
-HSPLandroidx/compose/material3/tokens/PaletteTokens;->getSecondary10-0d7_KjU()J
-HSPLandroidx/compose/material3/tokens/PaletteTokens;->getSecondary100-0d7_KjU()J
-HSPLandroidx/compose/material3/tokens/PaletteTokens;->getSecondary40-0d7_KjU()J
+HSPLandroidx/compose/material3/tokens/PaletteTokens;->getSecondary20-0d7_KjU()J
+HSPLandroidx/compose/material3/tokens/PaletteTokens;->getSecondary30-0d7_KjU()J
+HSPLandroidx/compose/material3/tokens/PaletteTokens;->getSecondary80-0d7_KjU()J
HSPLandroidx/compose/material3/tokens/PaletteTokens;->getSecondary90-0d7_KjU()J
-HSPLandroidx/compose/material3/tokens/PaletteTokens;->getTertiary10-0d7_KjU()J
-HSPLandroidx/compose/material3/tokens/PaletteTokens;->getTertiary100-0d7_KjU()J
-HSPLandroidx/compose/material3/tokens/PaletteTokens;->getTertiary40-0d7_KjU()J
+HSPLandroidx/compose/material3/tokens/PaletteTokens;->getTertiary20-0d7_KjU()J
+HSPLandroidx/compose/material3/tokens/PaletteTokens;->getTertiary30-0d7_KjU()J
+HSPLandroidx/compose/material3/tokens/PaletteTokens;->getTertiary80-0d7_KjU()J
HSPLandroidx/compose/material3/tokens/PaletteTokens;->getTertiary90-0d7_KjU()J
HSPLandroidx/compose/material3/tokens/ShapeKeyTokens;->$values()[Landroidx/compose/material3/tokens/ShapeKeyTokens;
HSPLandroidx/compose/material3/tokens/ShapeKeyTokens;-><clinit>()V
@@ -1536,113 +2446,30 @@
HSPLandroidx/compose/material3/tokens/SuggestionChipTokens;->getDisabledLeadingIconColor()Landroidx/compose/material3/tokens/ColorSchemeKeyTokens;
HSPLandroidx/compose/material3/tokens/SuggestionChipTokens;->getDraggedContainerElevation-D9Ej5fM()F
HSPLandroidx/compose/material3/tokens/SuggestionChipTokens;->getFlatContainerElevation-D9Ej5fM()F
+HSPLandroidx/compose/material3/tokens/SuggestionChipTokens;->getLabelTextColor()Landroidx/compose/material3/tokens/ColorSchemeKeyTokens;
HSPLandroidx/compose/material3/tokens/SuggestionChipTokens;->getLabelTextFont()Landroidx/compose/material3/tokens/TypographyKeyTokens;
+HSPLandroidx/compose/material3/tokens/SuggestionChipTokens;->getLeadingIconColor()Landroidx/compose/material3/tokens/ColorSchemeKeyTokens;
HSPLandroidx/compose/material3/tokens/SuggestionChipTokens;->getLeadingIconSize-D9Ej5fM()F
HSPLandroidx/compose/material3/tokens/TextButtonTokens;-><clinit>()V
HSPLandroidx/compose/material3/tokens/TextButtonTokens;-><init>()V
HSPLandroidx/compose/material3/tokens/TextButtonTokens;->getContainerShape()Landroidx/compose/material3/tokens/ShapeKeyTokens;
HSPLandroidx/compose/material3/tokens/TextButtonTokens;->getDisabledLabelTextColor()Landroidx/compose/material3/tokens/ColorSchemeKeyTokens;
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;-><clinit>()V
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;-><init>()V
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getBodyLargeFont()Landroidx/compose/ui/text/font/GenericFontFamily;
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getBodyLargeLineHeight-XSAIIZE()J
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getBodyLargeSize-XSAIIZE()J
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getBodyLargeTracking-XSAIIZE()J
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getBodyLargeWeight()Landroidx/compose/ui/text/font/FontWeight;
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getBodyMediumFont()Landroidx/compose/ui/text/font/GenericFontFamily;
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getBodyMediumLineHeight-XSAIIZE()J
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getBodyMediumSize-XSAIIZE()J
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getBodyMediumTracking-XSAIIZE()J
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getBodyMediumWeight()Landroidx/compose/ui/text/font/FontWeight;
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getBodySmallFont()Landroidx/compose/ui/text/font/GenericFontFamily;
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getBodySmallLineHeight-XSAIIZE()J
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getBodySmallSize-XSAIIZE()J
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getBodySmallTracking-XSAIIZE()J
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getBodySmallWeight()Landroidx/compose/ui/text/font/FontWeight;
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getDisplayLargeFont()Landroidx/compose/ui/text/font/GenericFontFamily;
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getDisplayLargeLineHeight-XSAIIZE()J
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getDisplayLargeSize-XSAIIZE()J
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getDisplayLargeTracking-XSAIIZE()J
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getDisplayLargeWeight()Landroidx/compose/ui/text/font/FontWeight;
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getDisplayMediumFont()Landroidx/compose/ui/text/font/GenericFontFamily;
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getDisplayMediumLineHeight-XSAIIZE()J
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getDisplayMediumSize-XSAIIZE()J
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getDisplayMediumTracking-XSAIIZE()J
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getDisplayMediumWeight()Landroidx/compose/ui/text/font/FontWeight;
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getDisplaySmallFont()Landroidx/compose/ui/text/font/GenericFontFamily;
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getDisplaySmallLineHeight-XSAIIZE()J
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getDisplaySmallSize-XSAIIZE()J
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getDisplaySmallTracking-XSAIIZE()J
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getDisplaySmallWeight()Landroidx/compose/ui/text/font/FontWeight;
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getHeadlineLargeFont()Landroidx/compose/ui/text/font/GenericFontFamily;
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getHeadlineLargeLineHeight-XSAIIZE()J
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getHeadlineLargeSize-XSAIIZE()J
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getHeadlineLargeTracking-XSAIIZE()J
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getHeadlineLargeWeight()Landroidx/compose/ui/text/font/FontWeight;
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getHeadlineMediumFont()Landroidx/compose/ui/text/font/GenericFontFamily;
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getHeadlineMediumLineHeight-XSAIIZE()J
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getHeadlineMediumSize-XSAIIZE()J
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getHeadlineMediumTracking-XSAIIZE()J
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getHeadlineMediumWeight()Landroidx/compose/ui/text/font/FontWeight;
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getHeadlineSmallFont()Landroidx/compose/ui/text/font/GenericFontFamily;
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getHeadlineSmallLineHeight-XSAIIZE()J
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getHeadlineSmallSize-XSAIIZE()J
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getHeadlineSmallTracking-XSAIIZE()J
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getHeadlineSmallWeight()Landroidx/compose/ui/text/font/FontWeight;
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getLabelLargeFont()Landroidx/compose/ui/text/font/GenericFontFamily;
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getLabelLargeLineHeight-XSAIIZE()J
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getLabelLargeSize-XSAIIZE()J
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getLabelLargeTracking-XSAIIZE()J
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getLabelLargeWeight()Landroidx/compose/ui/text/font/FontWeight;
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getLabelMediumFont()Landroidx/compose/ui/text/font/GenericFontFamily;
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getLabelMediumLineHeight-XSAIIZE()J
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getLabelMediumSize-XSAIIZE()J
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getLabelMediumTracking-XSAIIZE()J
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getLabelMediumWeight()Landroidx/compose/ui/text/font/FontWeight;
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getLabelSmallFont()Landroidx/compose/ui/text/font/GenericFontFamily;
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getLabelSmallLineHeight-XSAIIZE()J
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getLabelSmallSize-XSAIIZE()J
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getLabelSmallTracking-XSAIIZE()J
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getLabelSmallWeight()Landroidx/compose/ui/text/font/FontWeight;
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getTitleLargeFont()Landroidx/compose/ui/text/font/GenericFontFamily;
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getTitleLargeLineHeight-XSAIIZE()J
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getTitleLargeSize-XSAIIZE()J
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getTitleLargeTracking-XSAIIZE()J
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getTitleLargeWeight()Landroidx/compose/ui/text/font/FontWeight;
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getTitleMediumFont()Landroidx/compose/ui/text/font/GenericFontFamily;
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getTitleMediumLineHeight-XSAIIZE()J
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getTitleMediumSize-XSAIIZE()J
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getTitleMediumTracking-XSAIIZE()J
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getTitleMediumWeight()Landroidx/compose/ui/text/font/FontWeight;
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getTitleSmallFont()Landroidx/compose/ui/text/font/GenericFontFamily;
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getTitleSmallLineHeight-XSAIIZE()J
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getTitleSmallSize-XSAIIZE()J
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getTitleSmallTracking-XSAIIZE()J
-HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getTitleSmallWeight()Landroidx/compose/ui/text/font/FontWeight;
-HSPLandroidx/compose/material3/tokens/TypefaceTokens;-><clinit>()V
-HSPLandroidx/compose/material3/tokens/TypefaceTokens;-><init>()V
-HSPLandroidx/compose/material3/tokens/TypefaceTokens;->getBrand()Landroidx/compose/ui/text/font/GenericFontFamily;
-HSPLandroidx/compose/material3/tokens/TypefaceTokens;->getPlain()Landroidx/compose/ui/text/font/GenericFontFamily;
-HSPLandroidx/compose/material3/tokens/TypefaceTokens;->getWeightMedium()Landroidx/compose/ui/text/font/FontWeight;
-HSPLandroidx/compose/material3/tokens/TypefaceTokens;->getWeightRegular()Landroidx/compose/ui/text/font/FontWeight;
+HSPLandroidx/compose/material3/tokens/TextButtonTokens;->getLabelTextColor()Landroidx/compose/material3/tokens/ColorSchemeKeyTokens;
+HSPLandroidx/compose/material3/tokens/TopAppBarSmallTokens;-><clinit>()V
+HSPLandroidx/compose/material3/tokens/TopAppBarSmallTokens;-><init>()V
+HSPLandroidx/compose/material3/tokens/TopAppBarSmallTokens;->getContainerHeight-D9Ej5fM()F
+HSPLandroidx/compose/material3/tokens/TopAppBarSmallTokens;->getHeadlineColor()Landroidx/compose/material3/tokens/ColorSchemeKeyTokens;
+HSPLandroidx/compose/material3/tokens/TopAppBarSmallTokens;->getHeadlineFont()Landroidx/compose/material3/tokens/TypographyKeyTokens;
+HSPLandroidx/compose/material3/tokens/TopAppBarSmallTokens;->getLeadingIconColor()Landroidx/compose/material3/tokens/ColorSchemeKeyTokens;
+HSPLandroidx/compose/material3/tokens/TopAppBarSmallTokens;->getOnScrollContainerElevation-D9Ej5fM()F
+HSPLandroidx/compose/material3/tokens/TopAppBarSmallTokens;->getTrailingIconColor()Landroidx/compose/material3/tokens/ColorSchemeKeyTokens;
HSPLandroidx/compose/material3/tokens/TypographyKeyTokens;->$values()[Landroidx/compose/material3/tokens/TypographyKeyTokens;
HSPLandroidx/compose/material3/tokens/TypographyKeyTokens;-><clinit>()V
HSPLandroidx/compose/material3/tokens/TypographyKeyTokens;-><init>(Ljava/lang/String;I)V
HSPLandroidx/compose/material3/tokens/TypographyKeyTokens;->values()[Landroidx/compose/material3/tokens/TypographyKeyTokens;
-HSPLandroidx/compose/material3/tokens/TypographyTokens;-><clinit>()V
-HSPLandroidx/compose/material3/tokens/TypographyTokens;-><init>()V
-HSPLandroidx/compose/material3/tokens/TypographyTokens;->getBodySmall()Landroidx/compose/ui/text/TextStyle;
-HSPLandroidx/compose/material3/tokens/TypographyTokens;->getDisplayLarge()Landroidx/compose/ui/text/TextStyle;
-HSPLandroidx/compose/material3/tokens/TypographyTokens;->getDisplayMedium()Landroidx/compose/ui/text/TextStyle;
-HSPLandroidx/compose/material3/tokens/TypographyTokens;->getDisplaySmall()Landroidx/compose/ui/text/TextStyle;
-HSPLandroidx/compose/material3/tokens/TypographyTokens;->getHeadlineLarge()Landroidx/compose/ui/text/TextStyle;
-HSPLandroidx/compose/material3/tokens/TypographyTokens;->getHeadlineMedium()Landroidx/compose/ui/text/TextStyle;
-HSPLandroidx/compose/material3/tokens/TypographyTokens;->getHeadlineSmall()Landroidx/compose/ui/text/TextStyle;
-HSPLandroidx/compose/material3/tokens/TypographyTokens;->getLabelMedium()Landroidx/compose/ui/text/TextStyle;
-HSPLandroidx/compose/material3/tokens/TypographyTokens;->getLabelSmall()Landroidx/compose/ui/text/TextStyle;
-HSPLandroidx/compose/material3/tokens/TypographyTokens;->getTitleSmall()Landroidx/compose/ui/text/TextStyle;
HSPLandroidx/compose/runtime/AbstractApplier;-><clinit>()V
HSPLandroidx/compose/runtime/AbstractApplier;-><init>(Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/AbstractApplier;->clear()V
HSPLandroidx/compose/runtime/AbstractApplier;->down(Ljava/lang/Object;)V
HSPLandroidx/compose/runtime/AbstractApplier;->getCurrent()Ljava/lang/Object;
HSPLandroidx/compose/runtime/AbstractApplier;->getRoot()Ljava/lang/Object;
@@ -1684,6 +2511,7 @@
HSPLandroidx/compose/runtime/ComposableSingletons$CompositionKt;-><clinit>()V
HSPLandroidx/compose/runtime/ComposableSingletons$CompositionKt;-><init>()V
HSPLandroidx/compose/runtime/ComposableSingletons$CompositionKt;->getLambda-1$runtime_release()Lkotlin/jvm/functions/Function2;
+HSPLandroidx/compose/runtime/ComposableSingletons$CompositionKt;->getLambda-2$runtime_release()Lkotlin/jvm/functions/Function2;
HSPLandroidx/compose/runtime/ComposablesKt;->getCurrentCompositeKeyHash(Landroidx/compose/runtime/Composer;I)I
HSPLandroidx/compose/runtime/ComposablesKt;->rememberCompositionContext(Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/CompositionContext;
HSPLandroidx/compose/runtime/Composer$Companion$Empty$1;-><init>()V
@@ -1693,11 +2521,14 @@
HSPLandroidx/compose/runtime/Composer;-><clinit>()V
HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextHolder;-><init>(Landroidx/compose/runtime/ComposerImpl$CompositionContextImpl;)V
HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextHolder;->getRef()Landroidx/compose/runtime/ComposerImpl$CompositionContextImpl;
+HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextHolder;->onForgotten()V
HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextHolder;->onRemembered()V
HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;-><init>(Landroidx/compose/runtime/ComposerImpl;IZ)V
HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->composeInitial$runtime_release(Landroidx/compose/runtime/ControlledComposition;Lkotlin/jvm/functions/Function2;)V
+HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->dispose()V
HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->doneComposing$runtime_release()V
HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getCollectingParameterInformation$runtime_release()Z
+HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getComposers()Ljava/util/Set;
HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getCompositionLocalScope$runtime_release()Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;
HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getCompositionLocalScope()Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;
HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getCompoundHashKey$runtime_release()I
@@ -1706,6 +2537,8 @@
HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->registerComposer$runtime_release(Landroidx/compose/runtime/Composer;)V
HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->setCompositionLocalScope(Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;)V
HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->startComposing$runtime_release()V
+HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->unregisterComposer$runtime_release(Landroidx/compose/runtime/Composer;)V
+HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->unregisterComposition$runtime_release(Landroidx/compose/runtime/ControlledComposition;)V
HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->updateCompositionLocalScope(Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;)V
HSPLandroidx/compose/runtime/ComposerImpl$apply$operation$1;-><init>(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;)V
HSPLandroidx/compose/runtime/ComposerImpl$apply$operation$1;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V
@@ -1717,7 +2550,11 @@
HSPLandroidx/compose/runtime/ComposerImpl$createNode$3;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V
HSPLandroidx/compose/runtime/ComposerImpl$createNode$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/runtime/ComposerImpl$doCompose$2$3;-><init>(Landroidx/compose/runtime/ComposerImpl;)V
+HSPLandroidx/compose/runtime/ComposerImpl$doCompose$2$3;->invoke(Landroidx/compose/runtime/State;)V
+HSPLandroidx/compose/runtime/ComposerImpl$doCompose$2$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/runtime/ComposerImpl$doCompose$2$4;-><init>(Landroidx/compose/runtime/ComposerImpl;)V
+HSPLandroidx/compose/runtime/ComposerImpl$doCompose$2$4;->invoke(Landroidx/compose/runtime/State;)V
+HSPLandroidx/compose/runtime/ComposerImpl$doCompose$2$4;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/runtime/ComposerImpl$doCompose$2$5;-><init>(Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/ComposerImpl;Ljava/lang/Object;)V
HSPLandroidx/compose/runtime/ComposerImpl$doCompose$2$5;->invoke()Ljava/lang/Object;
HSPLandroidx/compose/runtime/ComposerImpl$doCompose$2$5;->invoke()V
@@ -1729,6 +2566,9 @@
HSPLandroidx/compose/runtime/ComposerImpl$realizeDowns$1;-><init>([Ljava/lang/Object;)V
HSPLandroidx/compose/runtime/ComposerImpl$realizeDowns$1;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V
HSPLandroidx/compose/runtime/ComposerImpl$realizeDowns$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/ComposerImpl$realizeMovement$1;-><init>(II)V
+HSPLandroidx/compose/runtime/ComposerImpl$realizeMovement$1;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V
+HSPLandroidx/compose/runtime/ComposerImpl$realizeMovement$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/runtime/ComposerImpl$realizeOperationLocation$2;-><init>(I)V
HSPLandroidx/compose/runtime/ComposerImpl$realizeOperationLocation$2;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V
HSPLandroidx/compose/runtime/ComposerImpl$realizeOperationLocation$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
@@ -1747,6 +2587,9 @@
HSPLandroidx/compose/runtime/ComposerImpl$recordSlotEditing$1;-><init>(Landroidx/compose/runtime/Anchor;)V
HSPLandroidx/compose/runtime/ComposerImpl$recordSlotEditing$1;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V
HSPLandroidx/compose/runtime/ComposerImpl$recordSlotEditing$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/ComposerImpl$start$2;-><init>(I)V
+HSPLandroidx/compose/runtime/ComposerImpl$start$2;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V
+HSPLandroidx/compose/runtime/ComposerImpl$start$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/runtime/ComposerImpl$startProviders$currentProviders$1;-><init>([Landroidx/compose/runtime/ProvidedValue;Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;)V
HSPLandroidx/compose/runtime/ComposerImpl$startProviders$currentProviders$1;->invoke(Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;
HSPLandroidx/compose/runtime/ComposerImpl$startProviders$currentProviders$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
@@ -1761,15 +2604,19 @@
HSPLandroidx/compose/runtime/ComposerImpl$updateValue$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/runtime/ComposerImpl;-><init>(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/CompositionContext;Landroidx/compose/runtime/SlotTable;Ljava/util/Set;Ljava/util/List;Ljava/util/List;Landroidx/compose/runtime/ControlledComposition;)V
HSPLandroidx/compose/runtime/ComposerImpl;->access$endGroup(Landroidx/compose/runtime/ComposerImpl;)V
+HSPLandroidx/compose/runtime/ComposerImpl;->access$getChanges$p(Landroidx/compose/runtime/ComposerImpl;)Ljava/util/List;
HSPLandroidx/compose/runtime/ComposerImpl;->access$getChildrenComposing$p(Landroidx/compose/runtime/ComposerImpl;)I
HSPLandroidx/compose/runtime/ComposerImpl;->access$getForciblyRecompose$p(Landroidx/compose/runtime/ComposerImpl;)Z
HSPLandroidx/compose/runtime/ComposerImpl;->access$getParentContext$p(Landroidx/compose/runtime/ComposerImpl;)Landroidx/compose/runtime/CompositionContext;
HSPLandroidx/compose/runtime/ComposerImpl;->access$getProvidersInvalid$p(Landroidx/compose/runtime/ComposerImpl;)Z
+HSPLandroidx/compose/runtime/ComposerImpl;->access$setChanges$p(Landroidx/compose/runtime/ComposerImpl;Ljava/util/List;)V
HSPLandroidx/compose/runtime/ComposerImpl;->access$setChildrenComposing$p(Landroidx/compose/runtime/ComposerImpl;I)V
HSPLandroidx/compose/runtime/ComposerImpl;->access$startGroup(Landroidx/compose/runtime/ComposerImpl;ILjava/lang/Object;)V
HSPLandroidx/compose/runtime/ComposerImpl;->addRecomposeScope()V
HSPLandroidx/compose/runtime/ComposerImpl;->apply(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V
HSPLandroidx/compose/runtime/ComposerImpl;->buildContext()Landroidx/compose/runtime/CompositionContext;
+HSPLandroidx/compose/runtime/ComposerImpl;->changed(F)Z
+HSPLandroidx/compose/runtime/ComposerImpl;->changed(I)Z
HSPLandroidx/compose/runtime/ComposerImpl;->changed(J)Z
HSPLandroidx/compose/runtime/ComposerImpl;->changed(Ljava/lang/Object;)Z
HSPLandroidx/compose/runtime/ComposerImpl;->changed(Z)Z
@@ -1781,9 +2628,10 @@
HSPLandroidx/compose/runtime/ComposerImpl;->compoundKeyOf(III)I
HSPLandroidx/compose/runtime/ComposerImpl;->consume(Landroidx/compose/runtime/CompositionLocal;)Ljava/lang/Object;
HSPLandroidx/compose/runtime/ComposerImpl;->createNode(Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/runtime/ComposerImpl;->currentCompositionLocalScope$default(Landroidx/compose/runtime/ComposerImpl;Ljava/lang/Integer;ILjava/lang/Object;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;
-HSPLandroidx/compose/runtime/ComposerImpl;->currentCompositionLocalScope(Ljava/lang/Integer;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;
+HSPLandroidx/compose/runtime/ComposerImpl;->currentCompositionLocalScope()Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;
+HSPLandroidx/compose/runtime/ComposerImpl;->currentCompositionLocalScope(I)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;
HSPLandroidx/compose/runtime/ComposerImpl;->disableReusing()V
+HSPLandroidx/compose/runtime/ComposerImpl;->dispose$runtime_release()V
HSPLandroidx/compose/runtime/ComposerImpl;->doCompose(Landroidx/compose/runtime/collection/IdentityArrayMap;Lkotlin/jvm/functions/Function2;)V
HSPLandroidx/compose/runtime/ComposerImpl;->doRecordDownsFor(II)V
HSPLandroidx/compose/runtime/ComposerImpl;->enableReusing()V
@@ -1807,6 +2655,7 @@
HSPLandroidx/compose/runtime/ComposerImpl;->getCompoundKeyHash()I
HSPLandroidx/compose/runtime/ComposerImpl;->getCurrentRecomposeScope$runtime_release()Landroidx/compose/runtime/RecomposeScopeImpl;
HSPLandroidx/compose/runtime/ComposerImpl;->getDefaultsInvalid()Z
+HSPLandroidx/compose/runtime/ComposerImpl;->getDeferredChanges$runtime_release()Ljava/util/List;
HSPLandroidx/compose/runtime/ComposerImpl;->getInserting()Z
HSPLandroidx/compose/runtime/ComposerImpl;->getNode(Landroidx/compose/runtime/SlotReader;)Ljava/lang/Object;
HSPLandroidx/compose/runtime/ComposerImpl;->getRecomposeScope()Landroidx/compose/runtime/RecomposeScope;
@@ -1815,6 +2664,7 @@
HSPLandroidx/compose/runtime/ComposerImpl;->insertedGroupVirtualIndex(I)I
HSPLandroidx/compose/runtime/ComposerImpl;->isComposing$runtime_release()Z
HSPLandroidx/compose/runtime/ComposerImpl;->nextSlot()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/ComposerImpl;->nodeAt(Landroidx/compose/runtime/SlotReader;I)Ljava/lang/Object;
HSPLandroidx/compose/runtime/ComposerImpl;->nodeIndexOf(IIII)I
HSPLandroidx/compose/runtime/ComposerImpl;->prepareCompose$runtime_release(Lkotlin/jvm/functions/Function0;)V
HSPLandroidx/compose/runtime/ComposerImpl;->realizeDowns()V
@@ -1827,6 +2677,7 @@
HSPLandroidx/compose/runtime/ComposerImpl;->recomposeToGroupEnd()V
HSPLandroidx/compose/runtime/ComposerImpl;->record(Lkotlin/jvm/functions/Function3;)V
HSPLandroidx/compose/runtime/ComposerImpl;->recordApplierOperation(Lkotlin/jvm/functions/Function3;)V
+HSPLandroidx/compose/runtime/ComposerImpl;->recordDelete()V
HSPLandroidx/compose/runtime/ComposerImpl;->recordDown(Ljava/lang/Object;)V
HSPLandroidx/compose/runtime/ComposerImpl;->recordEndGroup()V
HSPLandroidx/compose/runtime/ComposerImpl;->recordEndRoot()V
@@ -1834,6 +2685,7 @@
HSPLandroidx/compose/runtime/ComposerImpl;->recordInsert(Landroidx/compose/runtime/Anchor;)V
HSPLandroidx/compose/runtime/ComposerImpl;->recordInsertUpFixup(Lkotlin/jvm/functions/Function3;)V
HSPLandroidx/compose/runtime/ComposerImpl;->recordReaderMoving(I)V
+HSPLandroidx/compose/runtime/ComposerImpl;->recordRemoveNode(II)V
HSPLandroidx/compose/runtime/ComposerImpl;->recordSideEffect(Lkotlin/jvm/functions/Function0;)V
HSPLandroidx/compose/runtime/ComposerImpl;->recordSlotEditing()V
HSPLandroidx/compose/runtime/ComposerImpl;->recordSlotEditingOperation(Lkotlin/jvm/functions/Function3;)V
@@ -1844,12 +2696,15 @@
HSPLandroidx/compose/runtime/ComposerImpl;->recordUsed(Landroidx/compose/runtime/RecomposeScope;)V
HSPLandroidx/compose/runtime/ComposerImpl;->registerInsertUpFixup()V
HSPLandroidx/compose/runtime/ComposerImpl;->rememberedValue()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/ComposerImpl;->reportAllMovableContent()V
+HSPLandroidx/compose/runtime/ComposerImpl;->reportFreeMovableContent$reportGroup(Landroidx/compose/runtime/ComposerImpl;IZI)I
+HSPLandroidx/compose/runtime/ComposerImpl;->reportFreeMovableContent(I)V
HSPLandroidx/compose/runtime/ComposerImpl;->resolveCompositionLocal(Landroidx/compose/runtime/CompositionLocal;Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;)Ljava/lang/Object;
HSPLandroidx/compose/runtime/ComposerImpl;->skipCurrentGroup()V
HSPLandroidx/compose/runtime/ComposerImpl;->skipGroup()V
HSPLandroidx/compose/runtime/ComposerImpl;->skipReaderToGroupEnd()V
HSPLandroidx/compose/runtime/ComposerImpl;->skipToGroupEnd()V
-HSPLandroidx/compose/runtime/ComposerImpl;->start(ILjava/lang/Object;ZLjava/lang/Object;)V
+HSPLandroidx/compose/runtime/ComposerImpl;->start-BaiHCIY(ILjava/lang/Object;ILjava/lang/Object;)V
HSPLandroidx/compose/runtime/ComposerImpl;->startDefaults()V
HSPLandroidx/compose/runtime/ComposerImpl;->startGroup(I)V
HSPLandroidx/compose/runtime/ComposerImpl;->startGroup(ILjava/lang/Object;)V
@@ -1881,6 +2736,8 @@
HSPLandroidx/compose/runtime/ComposerKt$endGroupInstance$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/runtime/ComposerKt$removeCurrentGroupInstance$1;-><clinit>()V
HSPLandroidx/compose/runtime/ComposerKt$removeCurrentGroupInstance$1;-><init>()V
+HSPLandroidx/compose/runtime/ComposerKt$removeCurrentGroupInstance$1;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V
+HSPLandroidx/compose/runtime/ComposerKt$removeCurrentGroupInstance$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/runtime/ComposerKt$resetSlotsInstance$1;-><clinit>()V
HSPLandroidx/compose/runtime/ComposerKt$resetSlotsInstance$1;-><init>()V
HSPLandroidx/compose/runtime/ComposerKt$skipToGroupEndInstance$1;-><clinit>()V
@@ -1896,6 +2753,7 @@
HSPLandroidx/compose/runtime/ComposerKt;->access$firstInRange(Ljava/util/List;II)Landroidx/compose/runtime/Invalidation;
HSPLandroidx/compose/runtime/ComposerKt;->access$getEndGroupInstance$p()Lkotlin/jvm/functions/Function3;
HSPLandroidx/compose/runtime/ComposerKt;->access$getJoinedKey(Landroidx/compose/runtime/KeyInfo;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/ComposerKt;->access$getRemoveCurrentGroupInstance$p()Lkotlin/jvm/functions/Function3;
HSPLandroidx/compose/runtime/ComposerKt;->access$getStartRootGroup$p()Lkotlin/jvm/functions/Function3;
HSPLandroidx/compose/runtime/ComposerKt;->access$insertIfMissing(Ljava/util/List;ILandroidx/compose/runtime/RecomposeScopeImpl;Ljava/lang/Object;)V
HSPLandroidx/compose/runtime/ComposerKt;->access$multiMap()Ljava/util/HashMap;
@@ -1903,10 +2761,12 @@
HSPLandroidx/compose/runtime/ComposerKt;->access$pop(Ljava/util/HashMap;Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/runtime/ComposerKt;->access$put(Ljava/util/HashMap;Ljava/lang/Object;Ljava/lang/Object;)Z
HSPLandroidx/compose/runtime/ComposerKt;->access$removeLocation(Ljava/util/List;I)Landroidx/compose/runtime/Invalidation;
+HSPLandroidx/compose/runtime/ComposerKt;->access$removeRange(Ljava/util/List;II)V
HSPLandroidx/compose/runtime/ComposerKt;->asBool(I)Z
HSPLandroidx/compose/runtime/ComposerKt;->asInt(Z)I
HSPLandroidx/compose/runtime/ComposerKt;->compositionLocalMapOf([Landroidx/compose/runtime/ProvidedValue;Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;
HSPLandroidx/compose/runtime/ComposerKt;->contains(Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;Landroidx/compose/runtime/CompositionLocal;)Z
+HSPLandroidx/compose/runtime/ComposerKt;->distanceFrom(Landroidx/compose/runtime/SlotReader;II)I
HSPLandroidx/compose/runtime/ComposerKt;->findInsertLocation(Ljava/util/List;I)I
HSPLandroidx/compose/runtime/ComposerKt;->findLocation(Ljava/util/List;I)I
HSPLandroidx/compose/runtime/ComposerKt;->firstInRange(Ljava/util/List;II)Landroidx/compose/runtime/Invalidation;
@@ -1925,7 +2785,9 @@
HSPLandroidx/compose/runtime/ComposerKt;->pop(Ljava/util/HashMap;Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/runtime/ComposerKt;->put(Ljava/util/HashMap;Ljava/lang/Object;Ljava/lang/Object;)Z
HSPLandroidx/compose/runtime/ComposerKt;->remove(Ljava/util/HashMap;Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Unit;
+HSPLandroidx/compose/runtime/ComposerKt;->removeCurrentGroup(Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V
HSPLandroidx/compose/runtime/ComposerKt;->removeLocation(Ljava/util/List;I)Landroidx/compose/runtime/Invalidation;
+HSPLandroidx/compose/runtime/ComposerKt;->removeRange(Ljava/util/List;II)V
HSPLandroidx/compose/runtime/ComposerKt;->runtimeCheck(Z)V
HSPLandroidx/compose/runtime/CompositionContext;-><clinit>()V
HSPLandroidx/compose/runtime/CompositionContext;-><init>()V
@@ -1933,10 +2795,12 @@
HSPLandroidx/compose/runtime/CompositionContext;->getCompositionLocalScope$runtime_release()Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;
HSPLandroidx/compose/runtime/CompositionContext;->registerComposer$runtime_release(Landroidx/compose/runtime/Composer;)V
HSPLandroidx/compose/runtime/CompositionContext;->startComposing$runtime_release()V
+HSPLandroidx/compose/runtime/CompositionContext;->unregisterComposer$runtime_release(Landroidx/compose/runtime/Composer;)V
HSPLandroidx/compose/runtime/CompositionContextKt;-><clinit>()V
HSPLandroidx/compose/runtime/CompositionContextKt;->access$getEmptyCompositionLocalMap$p()Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;
HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;-><init>(Ljava/util/Set;)V
HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->dispatchAbandons()V
+HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->dispatchNodeCallbacks()V
HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->dispatchRememberObservers()V
HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->dispatchSideEffects()V
HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->forgetting(Landroidx/compose/runtime/RememberObserver;)V
@@ -1952,6 +2816,7 @@
HSPLandroidx/compose/runtime/CompositionImpl;->changesApplied()V
HSPLandroidx/compose/runtime/CompositionImpl;->cleanUpDerivedStateObservations()V
HSPLandroidx/compose/runtime/CompositionImpl;->composeContent(Lkotlin/jvm/functions/Function2;)V
+HSPLandroidx/compose/runtime/CompositionImpl;->dispose()V
HSPLandroidx/compose/runtime/CompositionImpl;->drainPendingModificationsForCompositionLocked()V
HSPLandroidx/compose/runtime/CompositionImpl;->drainPendingModificationsLocked()V
HSPLandroidx/compose/runtime/CompositionImpl;->getAreChildrenComposing()Z
@@ -1961,6 +2826,7 @@
HSPLandroidx/compose/runtime/CompositionImpl;->invalidateScopeOfLocked(Ljava/lang/Object;)V
HSPLandroidx/compose/runtime/CompositionImpl;->isComposing()Z
HSPLandroidx/compose/runtime/CompositionImpl;->isDisposed()Z
+HSPLandroidx/compose/runtime/CompositionImpl;->observesAnyOf(Ljava/util/Set;)Z
HSPLandroidx/compose/runtime/CompositionImpl;->prepareCompose(Lkotlin/jvm/functions/Function0;)V
HSPLandroidx/compose/runtime/CompositionImpl;->recompose()Z
HSPLandroidx/compose/runtime/CompositionImpl;->recordModificationsOf(Ljava/util/Set;)V
@@ -1968,12 +2834,14 @@
HSPLandroidx/compose/runtime/CompositionImpl;->recordWriteOf(Ljava/lang/Object;)V
HSPLandroidx/compose/runtime/CompositionImpl;->removeObservation$runtime_release(Ljava/lang/Object;Landroidx/compose/runtime/RecomposeScopeImpl;)V
HSPLandroidx/compose/runtime/CompositionImpl;->setContent(Lkotlin/jvm/functions/Function2;)V
+HSPLandroidx/compose/runtime/CompositionImpl;->setPendingInvalidScopes$runtime_release(Z)V
HSPLandroidx/compose/runtime/CompositionImpl;->takeInvalidations()Landroidx/compose/runtime/collection/IdentityArrayMap;
HSPLandroidx/compose/runtime/CompositionKt;-><clinit>()V
HSPLandroidx/compose/runtime/CompositionKt;->Composition(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/CompositionContext;)Landroidx/compose/runtime/Composition;
HSPLandroidx/compose/runtime/CompositionKt;->access$addValue(Landroidx/compose/runtime/collection/IdentityArrayMap;Ljava/lang/Object;Ljava/lang/Object;)V
HSPLandroidx/compose/runtime/CompositionKt;->access$getPendingApplyNoModifications$p()Ljava/lang/Object;
HSPLandroidx/compose/runtime/CompositionKt;->addValue(Landroidx/compose/runtime/collection/IdentityArrayMap;Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/CompositionLocal;-><clinit>()V
HSPLandroidx/compose/runtime/CompositionLocal;-><init>(Lkotlin/jvm/functions/Function0;)V
HSPLandroidx/compose/runtime/CompositionLocal;-><init>(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/runtime/CompositionLocal;->getDefaultValueHolder$runtime_release()Landroidx/compose/runtime/LazyValueHolder;
@@ -1983,13 +2851,41 @@
HSPLandroidx/compose/runtime/CompositionLocalKt;->staticCompositionLocalOf(Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/ProvidableCompositionLocal;
HSPLandroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;-><init>(Lkotlinx/coroutines/CoroutineScope;)V
HSPLandroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;->getCoroutineScope()Lkotlinx/coroutines/CoroutineScope;
+HSPLandroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;->onForgotten()V
HSPLandroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;->onRemembered()V
+HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord$Companion;-><init>()V
+HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord$Companion;->getUnset()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;-><clinit>()V
+HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;-><init>()V
+HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->access$getUnset$cp()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->assign(Landroidx/compose/runtime/snapshots/StateRecord;)V
+HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->create()Landroidx/compose/runtime/snapshots/StateRecord;
+HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->getDependencies()Landroidx/compose/runtime/collection/IdentityArrayMap;
+HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->getResult()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->isValid(Landroidx/compose/runtime/DerivedState;Landroidx/compose/runtime/snapshots/Snapshot;)Z
+HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->readableHash(Landroidx/compose/runtime/DerivedState;Landroidx/compose/runtime/snapshots/Snapshot;)I
+HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->setDependencies(Landroidx/compose/runtime/collection/IdentityArrayMap;)V
+HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->setResult(Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->setResultHash(I)V
+HSPLandroidx/compose/runtime/DerivedSnapshotState$currentRecord$result$1$result$1;-><init>(Landroidx/compose/runtime/DerivedSnapshotState;Landroidx/compose/runtime/collection/IdentityArrayMap;I)V
+HSPLandroidx/compose/runtime/DerivedSnapshotState$currentRecord$result$1$result$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/DerivedSnapshotState$currentRecord$result$1$result$1;->invoke(Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/DerivedSnapshotState;-><init>(Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/SnapshotMutationPolicy;)V
+HSPLandroidx/compose/runtime/DerivedSnapshotState;->currentRecord(Landroidx/compose/runtime/DerivedSnapshotState$ResultRecord;Landroidx/compose/runtime/snapshots/Snapshot;ZLkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/DerivedSnapshotState$ResultRecord;
+HSPLandroidx/compose/runtime/DerivedSnapshotState;->getCurrentValue()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/DerivedSnapshotState;->getDependencies()[Ljava/lang/Object;
+HSPLandroidx/compose/runtime/DerivedSnapshotState;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord;
+HSPLandroidx/compose/runtime/DerivedSnapshotState;->getPolicy()Landroidx/compose/runtime/SnapshotMutationPolicy;
+HSPLandroidx/compose/runtime/DerivedSnapshotState;->getValue()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/DerivedSnapshotState;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V
HSPLandroidx/compose/runtime/DisposableEffectImpl;-><init>(Lkotlin/jvm/functions/Function1;)V
HSPLandroidx/compose/runtime/DisposableEffectImpl;->onForgotten()V
HSPLandroidx/compose/runtime/DisposableEffectImpl;->onRemembered()V
HSPLandroidx/compose/runtime/DisposableEffectScope;-><clinit>()V
HSPLandroidx/compose/runtime/DisposableEffectScope;-><init>()V
HSPLandroidx/compose/runtime/DynamicProvidableCompositionLocal;-><init>(Landroidx/compose/runtime/SnapshotMutationPolicy;Lkotlin/jvm/functions/Function0;)V
+HSPLandroidx/compose/runtime/DynamicProvidableCompositionLocal;->access$getPolicy$p(Landroidx/compose/runtime/DynamicProvidableCompositionLocal;)Landroidx/compose/runtime/SnapshotMutationPolicy;
HSPLandroidx/compose/runtime/DynamicProvidableCompositionLocal;->provided$runtime_release(Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State;
HSPLandroidx/compose/runtime/EffectsKt;-><clinit>()V
HSPLandroidx/compose/runtime/EffectsKt;->DisposableEffect(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)V
@@ -2006,6 +2902,19 @@
HSPLandroidx/compose/runtime/GroupInfo;->getNodeCount()I
HSPLandroidx/compose/runtime/GroupInfo;->getNodeIndex()I
HSPLandroidx/compose/runtime/GroupInfo;->getSlotIndex()I
+HSPLandroidx/compose/runtime/GroupInfo;->setNodeCount(I)V
+HSPLandroidx/compose/runtime/GroupInfo;->setNodeIndex(I)V
+HSPLandroidx/compose/runtime/GroupInfo;->setSlotIndex(I)V
+HSPLandroidx/compose/runtime/GroupKind$Companion;-><init>()V
+HSPLandroidx/compose/runtime/GroupKind$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/runtime/GroupKind$Companion;->getGroup-ULZAiWs()I
+HSPLandroidx/compose/runtime/GroupKind$Companion;->getNode-ULZAiWs()I
+HSPLandroidx/compose/runtime/GroupKind$Companion;->getReusableNode-ULZAiWs()I
+HSPLandroidx/compose/runtime/GroupKind;-><clinit>()V
+HSPLandroidx/compose/runtime/GroupKind;->access$getGroup$cp()I
+HSPLandroidx/compose/runtime/GroupKind;->access$getNode$cp()I
+HSPLandroidx/compose/runtime/GroupKind;->access$getReusableNode$cp()I
+HSPLandroidx/compose/runtime/GroupKind;->constructor-impl(I)I
HSPLandroidx/compose/runtime/IntStack;-><init>()V
HSPLandroidx/compose/runtime/IntStack;->clear()V
HSPLandroidx/compose/runtime/IntStack;->getSize()I
@@ -2018,7 +2927,6 @@
HSPLandroidx/compose/runtime/Invalidation;->getLocation()I
HSPLandroidx/compose/runtime/Invalidation;->getScope()Landroidx/compose/runtime/RecomposeScopeImpl;
HSPLandroidx/compose/runtime/Invalidation;->isInvalid()Z
-HSPLandroidx/compose/runtime/Invalidation;->setInstances(Landroidx/compose/runtime/collection/IdentityArraySet;)V
HSPLandroidx/compose/runtime/InvalidationResult;->$values()[Landroidx/compose/runtime/InvalidationResult;
HSPLandroidx/compose/runtime/InvalidationResult;-><clinit>()V
HSPLandroidx/compose/runtime/InvalidationResult;-><init>(Ljava/lang/String;I)V
@@ -2084,12 +2992,15 @@
HSPLandroidx/compose/runtime/Pending;->registerMoveSlot(II)V
HSPLandroidx/compose/runtime/Pending;->setGroupIndex(I)V
HSPLandroidx/compose/runtime/Pending;->slotPositionOf(Landroidx/compose/runtime/KeyInfo;)I
+HSPLandroidx/compose/runtime/Pending;->updateNodeCount(II)Z
HSPLandroidx/compose/runtime/Pending;->updatedNodeCountOf(Landroidx/compose/runtime/KeyInfo;)I
HSPLandroidx/compose/runtime/PrioritySet;-><init>(Ljava/util/List;)V
HSPLandroidx/compose/runtime/PrioritySet;-><init>(Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/runtime/PrioritySet;->add(I)V
HSPLandroidx/compose/runtime/PrioritySet;->isNotEmpty()Z
+HSPLandroidx/compose/runtime/PrioritySet;->peek()I
HSPLandroidx/compose/runtime/PrioritySet;->takeMax()I
+HSPLandroidx/compose/runtime/ProvidableCompositionLocal;-><clinit>()V
HSPLandroidx/compose/runtime/ProvidableCompositionLocal;-><init>(Lkotlin/jvm/functions/Function0;)V
HSPLandroidx/compose/runtime/ProvidableCompositionLocal;->provides(Ljava/lang/Object;)Landroidx/compose/runtime/ProvidedValue;
HSPLandroidx/compose/runtime/ProvidableCompositionLocal;->providesDefault(Ljava/lang/Object;)Landroidx/compose/runtime/ProvidedValue;
@@ -2104,10 +3015,12 @@
HSPLandroidx/compose/runtime/RecomposeScopeImpl;-><init>(Landroidx/compose/runtime/CompositionImpl;)V
HSPLandroidx/compose/runtime/RecomposeScopeImpl;->access$getCurrentToken$p(Landroidx/compose/runtime/RecomposeScopeImpl;)I
HSPLandroidx/compose/runtime/RecomposeScopeImpl;->access$getTrackedInstances$p(Landroidx/compose/runtime/RecomposeScopeImpl;)Landroidx/compose/runtime/collection/IdentityArrayIntMap;
+HSPLandroidx/compose/runtime/RecomposeScopeImpl;->access$setTrackedInstances$p(Landroidx/compose/runtime/RecomposeScopeImpl;Landroidx/compose/runtime/collection/IdentityArrayIntMap;)V
HSPLandroidx/compose/runtime/RecomposeScopeImpl;->compose(Landroidx/compose/runtime/Composer;)V
HSPLandroidx/compose/runtime/RecomposeScopeImpl;->end(I)Lkotlin/jvm/functions/Function1;
HSPLandroidx/compose/runtime/RecomposeScopeImpl;->getAnchor()Landroidx/compose/runtime/Anchor;
HSPLandroidx/compose/runtime/RecomposeScopeImpl;->getCanRecompose()Z
+HSPLandroidx/compose/runtime/RecomposeScopeImpl;->getComposition()Landroidx/compose/runtime/CompositionImpl;
HSPLandroidx/compose/runtime/RecomposeScopeImpl;->getDefaultsInScope()Z
HSPLandroidx/compose/runtime/RecomposeScopeImpl;->getDefaultsInvalid()Z
HSPLandroidx/compose/runtime/RecomposeScopeImpl;->getRequiresRecompose()Z
@@ -2120,6 +3033,7 @@
HSPLandroidx/compose/runtime/RecomposeScopeImpl;->isConditional()Z
HSPLandroidx/compose/runtime/RecomposeScopeImpl;->isInvalidFor(Landroidx/compose/runtime/collection/IdentityArraySet;)Z
HSPLandroidx/compose/runtime/RecomposeScopeImpl;->recordRead(Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/RecomposeScopeImpl;->release()V
HSPLandroidx/compose/runtime/RecomposeScopeImpl;->scopeSkipped()V
HSPLandroidx/compose/runtime/RecomposeScopeImpl;->setAnchor(Landroidx/compose/runtime/Anchor;)V
HSPLandroidx/compose/runtime/RecomposeScopeImpl;->setDefaultsInScope(Z)V
@@ -2133,7 +3047,9 @@
HSPLandroidx/compose/runtime/Recomposer$Companion;-><init>()V
HSPLandroidx/compose/runtime/Recomposer$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/runtime/Recomposer$Companion;->access$addRunning(Landroidx/compose/runtime/Recomposer$Companion;Landroidx/compose/runtime/Recomposer$RecomposerInfoImpl;)V
+HSPLandroidx/compose/runtime/Recomposer$Companion;->access$removeRunning(Landroidx/compose/runtime/Recomposer$Companion;Landroidx/compose/runtime/Recomposer$RecomposerInfoImpl;)V
HSPLandroidx/compose/runtime/Recomposer$Companion;->addRunning(Landroidx/compose/runtime/Recomposer$RecomposerInfoImpl;)V
+HSPLandroidx/compose/runtime/Recomposer$Companion;->removeRunning(Landroidx/compose/runtime/Recomposer$RecomposerInfoImpl;)V
HSPLandroidx/compose/runtime/Recomposer$RecomposerInfoImpl;-><init>(Landroidx/compose/runtime/Recomposer;)V
HSPLandroidx/compose/runtime/Recomposer$State;->$values()[Landroidx/compose/runtime/Recomposer$State;
HSPLandroidx/compose/runtime/Recomposer$State;-><clinit>()V
@@ -2141,7 +3057,12 @@
HSPLandroidx/compose/runtime/Recomposer$broadcastFrameClock$1;-><init>(Landroidx/compose/runtime/Recomposer;)V
HSPLandroidx/compose/runtime/Recomposer$broadcastFrameClock$1;->invoke()Ljava/lang/Object;
HSPLandroidx/compose/runtime/Recomposer$broadcastFrameClock$1;->invoke()V
+HSPLandroidx/compose/runtime/Recomposer$effectJob$1$1$1$1;-><init>(Landroidx/compose/runtime/Recomposer;Ljava/lang/Throwable;)V
+HSPLandroidx/compose/runtime/Recomposer$effectJob$1$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Recomposer$effectJob$1$1$1$1;->invoke(Ljava/lang/Throwable;)V
HSPLandroidx/compose/runtime/Recomposer$effectJob$1$1;-><init>(Landroidx/compose/runtime/Recomposer;)V
+HSPLandroidx/compose/runtime/Recomposer$effectJob$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Recomposer$effectJob$1$1;->invoke(Ljava/lang/Throwable;)V
HSPLandroidx/compose/runtime/Recomposer$join$2;-><init>(Lkotlin/coroutines/Continuation;)V
HSPLandroidx/compose/runtime/Recomposer$join$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
HSPLandroidx/compose/runtime/Recomposer$join$2;->invoke(Landroidx/compose/runtime/Recomposer$State;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
@@ -2190,18 +3111,23 @@
HSPLandroidx/compose/runtime/Recomposer;->access$getHasSchedulingWork(Landroidx/compose/runtime/Recomposer;)Z
HSPLandroidx/compose/runtime/Recomposer;->access$getKnownCompositions$p(Landroidx/compose/runtime/Recomposer;)Ljava/util/List;
HSPLandroidx/compose/runtime/Recomposer;->access$getRecomposerInfo$p(Landroidx/compose/runtime/Recomposer;)Landroidx/compose/runtime/Recomposer$RecomposerInfoImpl;
+HSPLandroidx/compose/runtime/Recomposer;->access$getRunnerJob$p(Landroidx/compose/runtime/Recomposer;)Lkotlinx/coroutines/Job;
HSPLandroidx/compose/runtime/Recomposer;->access$getShouldKeepRecomposing(Landroidx/compose/runtime/Recomposer;)Z
HSPLandroidx/compose/runtime/Recomposer;->access$getSnapshotInvalidations$p(Landroidx/compose/runtime/Recomposer;)Ljava/util/Set;
HSPLandroidx/compose/runtime/Recomposer;->access$getStateLock$p(Landroidx/compose/runtime/Recomposer;)Ljava/lang/Object;
HSPLandroidx/compose/runtime/Recomposer;->access$get_runningRecomposers$cp()Lkotlinx/coroutines/flow/MutableStateFlow;
HSPLandroidx/compose/runtime/Recomposer;->access$get_state$p(Landroidx/compose/runtime/Recomposer;)Lkotlinx/coroutines/flow/MutableStateFlow;
+HSPLandroidx/compose/runtime/Recomposer;->access$isClosed$p(Landroidx/compose/runtime/Recomposer;)Z
HSPLandroidx/compose/runtime/Recomposer;->access$performRecompose(Landroidx/compose/runtime/Recomposer;Landroidx/compose/runtime/ControlledComposition;Landroidx/compose/runtime/collection/IdentityArraySet;)Landroidx/compose/runtime/ControlledComposition;
HSPLandroidx/compose/runtime/Recomposer;->access$recordComposerModificationsLocked(Landroidx/compose/runtime/Recomposer;)V
HSPLandroidx/compose/runtime/Recomposer;->access$registerRunnerJob(Landroidx/compose/runtime/Recomposer;Lkotlinx/coroutines/Job;)V
HSPLandroidx/compose/runtime/Recomposer;->access$setChangeCount$p(Landroidx/compose/runtime/Recomposer;J)V
+HSPLandroidx/compose/runtime/Recomposer;->access$setCloseCause$p(Landroidx/compose/runtime/Recomposer;Ljava/lang/Throwable;)V
+HSPLandroidx/compose/runtime/Recomposer;->access$setRunnerJob$p(Landroidx/compose/runtime/Recomposer;Lkotlinx/coroutines/Job;)V
HSPLandroidx/compose/runtime/Recomposer;->access$setWorkContinuation$p(Landroidx/compose/runtime/Recomposer;Lkotlinx/coroutines/CancellableContinuation;)V
HSPLandroidx/compose/runtime/Recomposer;->applyAndCheck(Landroidx/compose/runtime/snapshots/MutableSnapshot;)V
HSPLandroidx/compose/runtime/Recomposer;->awaitWorkAvailable(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Recomposer;->cancel()V
HSPLandroidx/compose/runtime/Recomposer;->composeInitial$runtime_release(Landroidx/compose/runtime/ControlledComposition;Lkotlin/jvm/functions/Function2;)V
HSPLandroidx/compose/runtime/Recomposer;->deriveStateLocked()Lkotlinx/coroutines/CancellableContinuation;
HSPLandroidx/compose/runtime/Recomposer;->discardUnusedValues()V
@@ -2222,6 +3148,7 @@
HSPLandroidx/compose/runtime/Recomposer;->recordComposerModificationsLocked()V
HSPLandroidx/compose/runtime/Recomposer;->registerRunnerJob(Lkotlinx/coroutines/Job;)V
HSPLandroidx/compose/runtime/Recomposer;->runRecomposeAndApplyChanges(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Recomposer;->unregisterComposition$runtime_release(Landroidx/compose/runtime/ControlledComposition;)V
HSPLandroidx/compose/runtime/Recomposer;->writeObserverOf(Landroidx/compose/runtime/ControlledComposition;Landroidx/compose/runtime/collection/IdentityArraySet;)Lkotlin/jvm/functions/Function1;
HSPLandroidx/compose/runtime/ReferentialEqualityPolicy;-><clinit>()V
HSPLandroidx/compose/runtime/ReferentialEqualityPolicy;-><init>()V
@@ -2234,6 +3161,7 @@
HSPLandroidx/compose/runtime/SlotReader;->aux([II)Ljava/lang/Object;
HSPLandroidx/compose/runtime/SlotReader;->beginEmpty()V
HSPLandroidx/compose/runtime/SlotReader;->close()V
+HSPLandroidx/compose/runtime/SlotReader;->containsMark(I)Z
HSPLandroidx/compose/runtime/SlotReader;->endEmpty()V
HSPLandroidx/compose/runtime/SlotReader;->endGroup()V
HSPLandroidx/compose/runtime/SlotReader;->extractKeys()Ljava/util/List;
@@ -2242,6 +3170,7 @@
HSPLandroidx/compose/runtime/SlotReader;->getGroupEnd()I
HSPLandroidx/compose/runtime/SlotReader;->getGroupKey()I
HSPLandroidx/compose/runtime/SlotReader;->getGroupObjectKey()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/SlotReader;->getGroupSize()I
HSPLandroidx/compose/runtime/SlotReader;->getGroupSlotIndex()I
HSPLandroidx/compose/runtime/SlotReader;->getInEmpty()Z
HSPLandroidx/compose/runtime/SlotReader;->getParent()I
@@ -2254,6 +3183,7 @@
HSPLandroidx/compose/runtime/SlotReader;->groupKey(I)I
HSPLandroidx/compose/runtime/SlotReader;->groupObjectKey(I)Ljava/lang/Object;
HSPLandroidx/compose/runtime/SlotReader;->groupSize(I)I
+HSPLandroidx/compose/runtime/SlotReader;->hasMark(I)Z
HSPLandroidx/compose/runtime/SlotReader;->hasObjectKey(I)Z
HSPLandroidx/compose/runtime/SlotReader;->isGroupEnd()Z
HSPLandroidx/compose/runtime/SlotReader;->isNode()Z
@@ -2274,6 +3204,7 @@
HSPLandroidx/compose/runtime/SlotTable;->anchorIndex(Landroidx/compose/runtime/Anchor;)I
HSPLandroidx/compose/runtime/SlotTable;->close$runtime_release(Landroidx/compose/runtime/SlotReader;)V
HSPLandroidx/compose/runtime/SlotTable;->close$runtime_release(Landroidx/compose/runtime/SlotWriter;[II[Ljava/lang/Object;ILjava/util/ArrayList;)V
+HSPLandroidx/compose/runtime/SlotTable;->containsMark()Z
HSPLandroidx/compose/runtime/SlotTable;->getAnchors$runtime_release()Ljava/util/ArrayList;
HSPLandroidx/compose/runtime/SlotTable;->getGroups()[I
HSPLandroidx/compose/runtime/SlotTable;->getGroupsSize()I
@@ -2340,11 +3271,15 @@
HSPLandroidx/compose/runtime/SlotWriter$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/runtime/SlotWriter$Companion;->access$moveGroup(Landroidx/compose/runtime/SlotWriter$Companion;Landroidx/compose/runtime/SlotWriter;ILandroidx/compose/runtime/SlotWriter;ZZ)Ljava/util/List;
HSPLandroidx/compose/runtime/SlotWriter$Companion;->moveGroup(Landroidx/compose/runtime/SlotWriter;ILandroidx/compose/runtime/SlotWriter;ZZ)Ljava/util/List;
+HSPLandroidx/compose/runtime/SlotWriter$groupSlots$1;-><init>(IILandroidx/compose/runtime/SlotWriter;)V
+HSPLandroidx/compose/runtime/SlotWriter$groupSlots$1;->hasNext()Z
+HSPLandroidx/compose/runtime/SlotWriter$groupSlots$1;->next()Ljava/lang/Object;
HSPLandroidx/compose/runtime/SlotWriter;-><clinit>()V
HSPLandroidx/compose/runtime/SlotWriter;-><init>(Landroidx/compose/runtime/SlotTable;)V
HSPLandroidx/compose/runtime/SlotWriter;->access$containsAnyGroupMarks(Landroidx/compose/runtime/SlotWriter;I)Z
HSPLandroidx/compose/runtime/SlotWriter;->access$dataIndex(Landroidx/compose/runtime/SlotWriter;I)I
HSPLandroidx/compose/runtime/SlotWriter;->access$dataIndex(Landroidx/compose/runtime/SlotWriter;[II)I
+HSPLandroidx/compose/runtime/SlotWriter;->access$dataIndexToDataAddress(Landroidx/compose/runtime/SlotWriter;I)I
HSPLandroidx/compose/runtime/SlotWriter;->access$dataIndexToDataAnchor(Landroidx/compose/runtime/SlotWriter;IIII)I
HSPLandroidx/compose/runtime/SlotWriter;->access$getAnchors$p(Landroidx/compose/runtime/SlotWriter;)Ljava/util/ArrayList;
HSPLandroidx/compose/runtime/SlotWriter;->access$getCurrentSlot$p(Landroidx/compose/runtime/SlotWriter;)I
@@ -2361,6 +3296,7 @@
HSPLandroidx/compose/runtime/SlotWriter;->access$setCurrentSlot$p(Landroidx/compose/runtime/SlotWriter;I)V
HSPLandroidx/compose/runtime/SlotWriter;->access$setNodeCount$p(Landroidx/compose/runtime/SlotWriter;I)V
HSPLandroidx/compose/runtime/SlotWriter;->access$setSlotsGapOwner$p(Landroidx/compose/runtime/SlotWriter;I)V
+HSPLandroidx/compose/runtime/SlotWriter;->access$updateContainsMark(Landroidx/compose/runtime/SlotWriter;I)V
HSPLandroidx/compose/runtime/SlotWriter;->advanceBy(I)V
HSPLandroidx/compose/runtime/SlotWriter;->anchor(I)Landroidx/compose/runtime/Anchor;
HSPLandroidx/compose/runtime/SlotWriter;->anchorIndex(Landroidx/compose/runtime/Anchor;)I
@@ -2379,6 +3315,7 @@
HSPLandroidx/compose/runtime/SlotWriter;->endInsert()V
HSPLandroidx/compose/runtime/SlotWriter;->ensureStarted(I)V
HSPLandroidx/compose/runtime/SlotWriter;->ensureStarted(Landroidx/compose/runtime/Anchor;)V
+HSPLandroidx/compose/runtime/SlotWriter;->fixParentAnchorsFor(III)V
HSPLandroidx/compose/runtime/SlotWriter;->getCapacity()I
HSPLandroidx/compose/runtime/SlotWriter;->getClosed()Z
HSPLandroidx/compose/runtime/SlotWriter;->getCurrentGroup()I
@@ -2390,19 +3327,22 @@
HSPLandroidx/compose/runtime/SlotWriter;->groupKey(I)I
HSPLandroidx/compose/runtime/SlotWriter;->groupObjectKey(I)Ljava/lang/Object;
HSPLandroidx/compose/runtime/SlotWriter;->groupSize(I)I
+HSPLandroidx/compose/runtime/SlotWriter;->groupSlots()Ljava/util/Iterator;
HSPLandroidx/compose/runtime/SlotWriter;->insertGroups(I)V
HSPLandroidx/compose/runtime/SlotWriter;->insertSlots(II)V
HSPLandroidx/compose/runtime/SlotWriter;->markGroup$default(Landroidx/compose/runtime/SlotWriter;IILjava/lang/Object;)V
HSPLandroidx/compose/runtime/SlotWriter;->markGroup(I)V
+HSPLandroidx/compose/runtime/SlotWriter;->moveAnchors(III)V
HSPLandroidx/compose/runtime/SlotWriter;->moveFrom(Landroidx/compose/runtime/SlotTable;I)Ljava/util/List;
+HSPLandroidx/compose/runtime/SlotWriter;->moveGroup(I)V
HSPLandroidx/compose/runtime/SlotWriter;->moveGroupGapTo(I)V
-HSPLandroidx/compose/runtime/SlotWriter;->moveSlotGapTo(II)V+]Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/SlotWriter;
+HSPLandroidx/compose/runtime/SlotWriter;->moveSlotGapTo(II)V
HSPLandroidx/compose/runtime/SlotWriter;->node(I)Ljava/lang/Object;
HSPLandroidx/compose/runtime/SlotWriter;->node(Landroidx/compose/runtime/Anchor;)Ljava/lang/Object;
HSPLandroidx/compose/runtime/SlotWriter;->nodeIndex([II)I
HSPLandroidx/compose/runtime/SlotWriter;->parent(I)I
HSPLandroidx/compose/runtime/SlotWriter;->parent([II)I
-HSPLandroidx/compose/runtime/SlotWriter;->parentAnchorToIndex(I)I+]Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/SlotWriter;
+HSPLandroidx/compose/runtime/SlotWriter;->parentAnchorToIndex(I)I
HSPLandroidx/compose/runtime/SlotWriter;->parentIndexToAnchor(II)I
HSPLandroidx/compose/runtime/SlotWriter;->recalculateMarks()V
HSPLandroidx/compose/runtime/SlotWriter;->removeAnchors(II)Z
@@ -2421,15 +3361,17 @@
HSPLandroidx/compose/runtime/SlotWriter;->startGroup()V
HSPLandroidx/compose/runtime/SlotWriter;->startGroup(ILjava/lang/Object;)V
HSPLandroidx/compose/runtime/SlotWriter;->startGroup(ILjava/lang/Object;ZLjava/lang/Object;)V
-HSPLandroidx/compose/runtime/SlotWriter;->startNode(Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/SlotWriter;->startNode(ILjava/lang/Object;)V
HSPLandroidx/compose/runtime/SlotWriter;->update(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/runtime/SlotWriter;->updateAnchors(II)V
HSPLandroidx/compose/runtime/SlotWriter;->updateAux(Ljava/lang/Object;)V
HSPLandroidx/compose/runtime/SlotWriter;->updateContainsMark(I)V
HSPLandroidx/compose/runtime/SlotWriter;->updateContainsMarkNow(ILandroidx/compose/runtime/PrioritySet;)V
+HSPLandroidx/compose/runtime/SlotWriter;->updateDataIndex([III)V
HSPLandroidx/compose/runtime/SlotWriter;->updateNode(Landroidx/compose/runtime/Anchor;Ljava/lang/Object;)V
HSPLandroidx/compose/runtime/SlotWriter;->updateNodeOfGroup(ILjava/lang/Object;)V
HSPLandroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;-><init>(Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;->assign(Landroidx/compose/runtime/snapshots/StateRecord;)V
HSPLandroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;->create()Landroidx/compose/runtime/snapshots/StateRecord;
HSPLandroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;->getValue()Ljava/lang/Object;
HSPLandroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;->setValue(Ljava/lang/Object;)V
@@ -2439,6 +3381,7 @@
HSPLandroidx/compose/runtime/SnapshotMutableStateImpl;->getValue()Ljava/lang/Object;
HSPLandroidx/compose/runtime/SnapshotMutableStateImpl;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V
HSPLandroidx/compose/runtime/SnapshotMutableStateImpl;->setValue(Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/SnapshotStateKt;->derivedStateOf(Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/State;
HSPLandroidx/compose/runtime/SnapshotStateKt;->mutableStateListOf()Landroidx/compose/runtime/snapshots/SnapshotStateList;
HSPLandroidx/compose/runtime/SnapshotStateKt;->mutableStateOf$default(Ljava/lang/Object;Landroidx/compose/runtime/SnapshotMutationPolicy;ILjava/lang/Object;)Landroidx/compose/runtime/MutableState;
HSPLandroidx/compose/runtime/SnapshotStateKt;->mutableStateOf(Ljava/lang/Object;Landroidx/compose/runtime/SnapshotMutationPolicy;)Landroidx/compose/runtime/MutableState;
@@ -2449,8 +3392,23 @@
HSPLandroidx/compose/runtime/SnapshotStateKt;->snapshotFlow(Lkotlin/jvm/functions/Function0;)Lkotlinx/coroutines/flow/Flow;
HSPLandroidx/compose/runtime/SnapshotStateKt;->structuralEqualityPolicy()Landroidx/compose/runtime/SnapshotMutationPolicy;
HSPLandroidx/compose/runtime/SnapshotStateKt__DerivedStateKt;-><clinit>()V
+HSPLandroidx/compose/runtime/SnapshotStateKt__DerivedStateKt;->access$getCalculationBlockNestedLevel$p()Landroidx/compose/runtime/SnapshotThreadLocal;
+HSPLandroidx/compose/runtime/SnapshotStateKt__DerivedStateKt;->access$getDerivedStateObservers$p()Landroidx/compose/runtime/SnapshotThreadLocal;
+HSPLandroidx/compose/runtime/SnapshotStateKt__DerivedStateKt;->derivedStateOf(Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/State;
HSPLandroidx/compose/runtime/SnapshotStateKt__DerivedStateKt;->observeDerivedStateRecalculations(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V
+HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1$readObserver$1;-><init>(Ljava/util/Set;)V
+HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1$readObserver$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1$readObserver$1;->invoke(Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1$unregisterApplyObserver$1;-><init>(Lkotlinx/coroutines/channels/Channel;)V
+HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1$unregisterApplyObserver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1$unregisterApplyObserver$1;->invoke(Ljava/util/Set;Landroidx/compose/runtime/snapshots/Snapshot;)V
HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1;-><init>(Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt;->access$intersects(Ljava/util/Set;Ljava/util/Set;)Z
+HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt;->intersects$SnapshotStateKt__SnapshotFlowKt(Ljava/util/Set;Ljava/util/Set;)Z
HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt;->snapshotFlow(Lkotlin/jvm/functions/Function0;)Lkotlinx/coroutines/flow/Flow;
HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotMutationPolicyKt;->neverEqualPolicy()Landroidx/compose/runtime/SnapshotMutationPolicy;
HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotMutationPolicyKt;->referentialEqualityPolicy()Landroidx/compose/runtime/SnapshotMutationPolicy;
@@ -2460,7 +3418,7 @@
HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotStateKt;->mutableStateOf(Ljava/lang/Object;Landroidx/compose/runtime/SnapshotMutationPolicy;)Landroidx/compose/runtime/MutableState;
HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotStateKt;->rememberUpdatedState(Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State;
HSPLandroidx/compose/runtime/SnapshotThreadLocal;-><init>()V
-HSPLandroidx/compose/runtime/SnapshotThreadLocal;->get()Ljava/lang/Object;+]Landroidx/compose/runtime/internal/ThreadMap;Landroidx/compose/runtime/internal/ThreadMap;
+HSPLandroidx/compose/runtime/SnapshotThreadLocal;->get()Ljava/lang/Object;
HSPLandroidx/compose/runtime/SnapshotThreadLocal;->set(Ljava/lang/Object;)V
HSPLandroidx/compose/runtime/Stack;-><init>()V
HSPLandroidx/compose/runtime/Stack;->clear()V
@@ -2468,6 +3426,7 @@
HSPLandroidx/compose/runtime/Stack;->isEmpty()Z
HSPLandroidx/compose/runtime/Stack;->isNotEmpty()Z
HSPLandroidx/compose/runtime/Stack;->peek()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/Stack;->peek(I)Ljava/lang/Object;
HSPLandroidx/compose/runtime/Stack;->pop()Ljava/lang/Object;
HSPLandroidx/compose/runtime/Stack;->push(Ljava/lang/Object;)Z
HSPLandroidx/compose/runtime/Stack;->toArray()[Ljava/lang/Object;
@@ -2494,6 +3453,7 @@
HSPLandroidx/compose/runtime/collection/IdentityArrayIntMap;->setSize(I)V
HSPLandroidx/compose/runtime/collection/IdentityArrayMap;-><init>(I)V
HSPLandroidx/compose/runtime/collection/IdentityArrayMap;-><init>(IILkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->clear()V
HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->contains(Ljava/lang/Object;)Z
HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->find(Ljava/lang/Object;)I
HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->get(Ljava/lang/Object;)Ljava/lang/Object;
@@ -2502,22 +3462,30 @@
HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->getValues$runtime_release()[Ljava/lang/Object;
HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->isNotEmpty()Z
HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->set(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->setSize$runtime_release(I)V
+HSPLandroidx/compose/runtime/collection/IdentityArraySet$iterator$1;-><init>(Landroidx/compose/runtime/collection/IdentityArraySet;)V
+HSPLandroidx/compose/runtime/collection/IdentityArraySet$iterator$1;->hasNext()Z
+HSPLandroidx/compose/runtime/collection/IdentityArraySet$iterator$1;->next()Ljava/lang/Object;
HSPLandroidx/compose/runtime/collection/IdentityArraySet;-><init>()V
HSPLandroidx/compose/runtime/collection/IdentityArraySet;->add(Ljava/lang/Object;)Z
+HSPLandroidx/compose/runtime/collection/IdentityArraySet;->checkIndexBounds(I)V
HSPLandroidx/compose/runtime/collection/IdentityArraySet;->clear()V
HSPLandroidx/compose/runtime/collection/IdentityArraySet;->contains(Ljava/lang/Object;)Z
HSPLandroidx/compose/runtime/collection/IdentityArraySet;->find(Ljava/lang/Object;)I
HSPLandroidx/compose/runtime/collection/IdentityArraySet;->get(I)Ljava/lang/Object;
HSPLandroidx/compose/runtime/collection/IdentityArraySet;->getSize()I
HSPLandroidx/compose/runtime/collection/IdentityArraySet;->getValues()[Ljava/lang/Object;
+HSPLandroidx/compose/runtime/collection/IdentityArraySet;->isEmpty()Z
HSPLandroidx/compose/runtime/collection/IdentityArraySet;->isNotEmpty()Z
+HSPLandroidx/compose/runtime/collection/IdentityArraySet;->iterator()Ljava/util/Iterator;
HSPLandroidx/compose/runtime/collection/IdentityArraySet;->remove(Ljava/lang/Object;)Z
HSPLandroidx/compose/runtime/collection/IdentityArraySet;->setSize(I)V
-HSPLandroidx/compose/runtime/collection/IdentityArraySet;->size()I+]Landroidx/compose/runtime/collection/IdentityArraySet;Landroidx/compose/runtime/collection/IdentityArraySet;
+HSPLandroidx/compose/runtime/collection/IdentityArraySet;->size()I
HSPLandroidx/compose/runtime/collection/IdentityScopeMap;-><init>()V
HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->access$find(Landroidx/compose/runtime/collection/IdentityScopeMap;Ljava/lang/Object;)I
HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->access$scopeSetAt(Landroidx/compose/runtime/collection/IdentityScopeMap;I)Landroidx/compose/runtime/collection/IdentityArraySet;
HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->add(Ljava/lang/Object;Ljava/lang/Object;)Z
+HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->clear()V
HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->contains(Ljava/lang/Object;)Z
HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->find(Ljava/lang/Object;)I
HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->getOrCreateIdentitySet(Ljava/lang/Object;)Landroidx/compose/runtime/collection/IdentityArraySet;
@@ -2526,14 +3494,25 @@
HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->getValueOrder()[I
HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->getValues()[Ljava/lang/Object;
HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->remove(Ljava/lang/Object;Ljava/lang/Object;)Z
+HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->removeScope(Ljava/lang/Object;)V
HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->scopeSetAt(I)Landroidx/compose/runtime/collection/IdentityArraySet;
HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->setSize(I)V
+HSPLandroidx/compose/runtime/collection/IntMap;-><init>(I)V
+HSPLandroidx/compose/runtime/collection/IntMap;-><init>(IILkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/runtime/collection/IntMap;-><init>(Landroid/util/SparseArray;)V
+HSPLandroidx/compose/runtime/collection/IntMap;->clear()V
+HSPLandroidx/compose/runtime/collection/IntMap;->get(I)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/collection/IntMap;->set(ILjava/lang/Object;)V
HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;-><init>(Landroidx/compose/runtime/collection/MutableVector;)V
HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->get(I)Ljava/lang/Object;
HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->getSize()I
HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->indexOf(Ljava/lang/Object;)I
HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->isEmpty()Z
+HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->iterator()Ljava/util/Iterator;
HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->size()I
+HSPLandroidx/compose/runtime/collection/MutableVector$VectorListIterator;-><init>(Ljava/util/List;I)V
+HSPLandroidx/compose/runtime/collection/MutableVector$VectorListIterator;->hasNext()Z
+HSPLandroidx/compose/runtime/collection/MutableVector$VectorListIterator;->next()Ljava/lang/Object;
HSPLandroidx/compose/runtime/collection/MutableVector;-><clinit>()V
HSPLandroidx/compose/runtime/collection/MutableVector;-><init>([Ljava/lang/Object;I)V
HSPLandroidx/compose/runtime/collection/MutableVector;->add(ILjava/lang/Object;)V
@@ -2585,6 +3564,7 @@
HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->getNode$runtime_release()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;
HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->getSize()I
HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->remove(Ljava/lang/Object;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;
HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;[Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;)V
HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;->checkHasNext()V
HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;->ensureNextEntryIsReady()V
@@ -2617,6 +3597,7 @@
HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;-><init>(II[Ljava/lang/Object;Landroidx/compose/runtime/external/kotlinx/collections/immutable/internal/MutabilityOwnership;)V
HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->access$getEMPTY$cp()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;
HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->asInsertResult()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode$ModificationResult;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->bufferMoveEntryToNode(IIILjava/lang/Object;Ljava/lang/Object;ILandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/MutabilityOwnership;)[Ljava/lang/Object;
HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->containsKey(ILjava/lang/Object;I)Z
HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->elementsIdentityEquals(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;)Z
HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->entryCount$runtime_release()I
@@ -2629,6 +3610,7 @@
HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->keyAtIndex(I)Ljava/lang/Object;
HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->makeNode(ILjava/lang/Object;Ljava/lang/Object;ILjava/lang/Object;Ljava/lang/Object;ILandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/MutabilityOwnership;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;
HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->mutableInsertEntryAt(ILjava/lang/Object;Ljava/lang/Object;Landroidx/compose/runtime/external/kotlinx/collections/immutable/internal/MutabilityOwnership;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->mutableMoveEntryToNode(IIILjava/lang/Object;Ljava/lang/Object;ILandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/MutabilityOwnership;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;
HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->mutablePut(ILjava/lang/Object;Ljava/lang/Object;ILandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;
HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->mutablePutAll(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;ILandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/DeltaCounter;Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;
HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->mutablePutAllFromOtherNodeCell(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;IILandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/DeltaCounter;Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;
@@ -2636,6 +3618,8 @@
HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->nodeAtIndex$runtime_release(I)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;
HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->nodeIndex$runtime_release(I)I
HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->put(ILjava/lang/Object;Ljava/lang/Object;I)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode$ModificationResult;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->remove(ILjava/lang/Object;I)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->removeEntryAtIndex(II)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;
HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->valueAtKeyIndex(I)Ljava/lang/Object;
HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;-><init>()V
HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->currentNode()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;
@@ -2643,6 +3627,7 @@
HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->getIndex()I
HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->hasNextKey()Z
HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->hasNextNode()Z
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->moveToNextNode()V
HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->reset([Ljava/lang/Object;I)V
HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->reset([Ljava/lang/Object;II)V
HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->setIndex(I)V
@@ -2650,10 +3635,16 @@
HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeEntriesIterator;->next()Ljava/lang/Object;
HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeEntriesIterator;->next()Ljava/util/Map$Entry;
HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeKt;->access$insertEntryAtIndex([Ljava/lang/Object;ILjava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeKt;->access$replaceEntryWithNode([Ljava/lang/Object;IILandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;)[Ljava/lang/Object;
HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeKt;->indexSegment(II)I
HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeKt;->insertEntryAtIndex([Ljava/lang/Object;ILjava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeKt;->replaceEntryWithNode([Ljava/lang/Object;IILandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;)[Ljava/lang/Object;
HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;-><init>()V
HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;->getHasNext()Z
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;->getHasPrevious()Z
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;->getNext()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;->getPrevious()Ljava/lang/Object;
HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet$Companion;-><init>()V
HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet$Companion;->emptyOf$runtime_release()Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentSet;
@@ -2662,6 +3653,7 @@
HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;->access$getEMPTY$cp()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;
HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;->add(Ljava/lang/Object;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentSet;
HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;->getSize()I
+HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;->remove(Ljava/lang/Object;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentSet;
HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/CommonFunctionsKt;->assert(Z)V
HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/DeltaCounter;-><init>(I)V
HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/DeltaCounter;-><init>(IILkotlin/jvm/internal/DefaultConstructorMarker;)V
@@ -2673,11 +3665,14 @@
HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$1;-><init>(Landroidx/compose/runtime/internal/ComposableLambdaImpl;Ljava/lang/Object;I)V
HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$1;->invoke(Landroidx/compose/runtime/Composer;I)V
HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$2;-><init>(Landroidx/compose/runtime/internal/ComposableLambdaImpl;Ljava/lang/Object;Ljava/lang/Object;I)V
HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;-><init>(IZ)V
HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Landroidx/compose/runtime/Composer;I)Ljava/lang/Object;
HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Ljava/lang/Object;
HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Ljava/lang/Object;
HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->trackRead(Landroidx/compose/runtime/Composer;)V
HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->trackWrite()V
HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->update(Ljava/lang/Object;)V
@@ -2694,8 +3689,14 @@
HSPLandroidx/compose/runtime/internal/ThreadMap;->trySet(JLjava/lang/Object;)Z
HSPLandroidx/compose/runtime/internal/ThreadMapKt;-><clinit>()V
HSPLandroidx/compose/runtime/internal/ThreadMapKt;->getEmptyThreadMap()Landroidx/compose/runtime/internal/ThreadMap;
+HSPLandroidx/compose/runtime/saveable/ListSaverKt$listSaver$1;-><init>(Lkotlin/jvm/functions/Function2;)V
+HSPLandroidx/compose/runtime/saveable/ListSaverKt$listSaver$1;->invoke(Landroidx/compose/runtime/saveable/SaverScope;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/saveable/ListSaverKt$listSaver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/saveable/ListSaverKt;->listSaver(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/saveable/Saver;
HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistry$Entry;)V
+HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$invoke$$inlined$onDispose$1;->dispose()V
HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$valueProvider$1$1$1;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistry;)V
+HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$valueProvider$1$1$1;->canBeSaved(Ljava/lang/Object;)Z
HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$valueProvider$1;-><init>(Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/runtime/saveable/SaveableStateRegistry;)V
HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$valueProvider$1;->invoke()Ljava/lang/Object;
HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistry;Ljava/lang/String;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;)V
@@ -2705,10 +3706,47 @@
HSPLandroidx/compose/runtime/saveable/RememberSaveableKt;->access$requireCanBeSaved(Landroidx/compose/runtime/saveable/SaveableStateRegistry;Ljava/lang/Object;)V
HSPLandroidx/compose/runtime/saveable/RememberSaveableKt;->rememberSaveable([Ljava/lang/Object;Landroidx/compose/runtime/saveable/Saver;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)Ljava/lang/Object;
HSPLandroidx/compose/runtime/saveable/RememberSaveableKt;->requireCanBeSaved(Landroidx/compose/runtime/saveable/SaveableStateRegistry;Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion$Saver$1;-><clinit>()V
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion$Saver$1;-><init>()V
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion$Saver$1;->invoke(Landroidx/compose/runtime/saveable/SaverScope;Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;)Ljava/util/Map;
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion$Saver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion$Saver$2;-><clinit>()V
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion$Saver$2;-><init>()V
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion;-><init>()V
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion;->getSaver()Landroidx/compose/runtime/saveable/Saver;
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder$registry$1;-><init>(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;)V
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;-><init>(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;->getRegistry()Landroidx/compose/runtime/saveable/SaveableStateRegistry;
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;->saveTo(Ljava/util/Map;)V
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1$invoke$$inlined$onDispose$1;->dispose()V
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1;-><init>(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;Ljava/lang/Object;Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;)V
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult;
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;-><clinit>()V
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;-><init>(Ljava/util/Map;)V
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;-><init>(Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->SaveableStateProvider(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->access$getRegistryHolders$p(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;)Ljava/util/Map;
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->access$getSavedStates$p(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;)Ljava/util/Map;
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->access$getSaver$cp()Landroidx/compose/runtime/saveable/Saver;
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->access$saveAll(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;)Ljava/util/Map;
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->getParentSaveableStateRegistry()Landroidx/compose/runtime/saveable/SaveableStateRegistry;
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->saveAll()Ljava/util/Map;
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->setParentSaveableStateRegistry(Landroidx/compose/runtime/saveable/SaveableStateRegistry;)V
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderKt$rememberSaveableStateHolder$1;-><clinit>()V
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderKt$rememberSaveableStateHolder$1;-><init>()V
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderKt$rememberSaveableStateHolder$1;->invoke()Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderKt$rememberSaveableStateHolder$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/saveable/SaveableStateHolderKt;->rememberSaveableStateHolder(Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/saveable/SaveableStateHolder;
HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl;Ljava/lang/String;Lkotlin/jvm/functions/Function0;)V
+HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3;->unregister()V
HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;-><init>(Ljava/util/Map;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->access$getValueProviders$p(Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl;)Ljava/util/Map;
HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->canBeSaved(Ljava/lang/Object;)Z
HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->consumeRestored(Ljava/lang/String;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->performSave()Ljava/util/Map;
HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->registerProvider(Ljava/lang/String;Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/saveable/SaveableStateRegistry$Entry;
HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryKt$LocalSaveableStateRegistry$1;-><clinit>()V
HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryKt$LocalSaveableStateRegistry$1;-><init>()V
@@ -2729,28 +3767,53 @@
HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot$takeNestedMutableSnapshot$1;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot$takeNestedMutableSnapshot$1;->invoke(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/MutableSnapshot;
HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot$takeNestedMutableSnapshot$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot$takeNestedSnapshot$1;-><init>(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot$takeNestedSnapshot$1;->invoke(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/ReadonlySnapshot;
+HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot$takeNestedSnapshot$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot;-><init>(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)V
HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot;->dispose()V
HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot;->notifyObjectsInitialized$runtime_release()V
HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot;->takeNestedMutableSnapshot(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/MutableSnapshot;
+HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot;->takeNestedSnapshot(Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/Snapshot;
HSPLandroidx/compose/runtime/snapshots/ListUtilsKt;->fastToSet(Ljava/util/List;)Ljava/util/Set;
HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;-><clinit>()V
HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;-><init>(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->advance$runtime_release()V
HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->apply()Landroidx/compose/runtime/snapshots/SnapshotApplyResult;
HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->closeLocked$runtime_release()V
HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->dispose()V
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getApplied$runtime_release()Z
HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getModified$runtime_release()Ljava/util/Set;
HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getPreviousIds$runtime_release()Landroidx/compose/runtime/snapshots/SnapshotIdSet;
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getPreviousPinnedSnapshots$runtime_release()[I
HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getReadObserver$runtime_release()Lkotlin/jvm/functions/Function1;
HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getReadOnly()Z
HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getWriteObserver$runtime_release()Lkotlin/jvm/functions/Function1;
HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->innerApplyLocked$runtime_release(ILjava/util/Map;Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/SnapshotApplyResult;
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->nestedActivated$runtime_release(Landroidx/compose/runtime/snapshots/Snapshot;)V
HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->nestedDeactivated$runtime_release(Landroidx/compose/runtime/snapshots/Snapshot;)V
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->notifyObjectsInitialized$runtime_release()V
HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->recordModified$runtime_release(Landroidx/compose/runtime/snapshots/StateObject;)V
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->recordPrevious$runtime_release(I)V
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->recordPreviousList$runtime_release(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)V
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->recordPreviousPinnedSnapshot$runtime_release(I)V
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->recordPreviousPinnedSnapshots$runtime_release([I)V
HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->releasePinnedSnapshotsForCloseLocked$runtime_release()V
HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->releasePreviouslyPinnedSnapshotsLocked$runtime_release()V
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->setApplied$runtime_release(Z)V
HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->setModified(Ljava/util/Set;)V
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->takeNestedMutableSnapshot(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/MutableSnapshot;
+HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->validateNotAppliedOrPinned$runtime_release()V
+HSPLandroidx/compose/runtime/snapshots/NestedMutableSnapshot;-><init>(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/snapshots/MutableSnapshot;)V
+HSPLandroidx/compose/runtime/snapshots/NestedMutableSnapshot;->apply()Landroidx/compose/runtime/snapshots/SnapshotApplyResult;
+HSPLandroidx/compose/runtime/snapshots/NestedMutableSnapshot;->deactivate()V
+HSPLandroidx/compose/runtime/snapshots/NestedMutableSnapshot;->dispose()V
+HSPLandroidx/compose/runtime/snapshots/ReadonlySnapshot;-><init>(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/runtime/snapshots/ReadonlySnapshot;->dispose()V
+HSPLandroidx/compose/runtime/snapshots/ReadonlySnapshot;->getReadObserver$runtime_release()Lkotlin/jvm/functions/Function1;
+HSPLandroidx/compose/runtime/snapshots/ReadonlySnapshot;->nestedDeactivated$runtime_release(Landroidx/compose/runtime/snapshots/Snapshot;)V
HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion$registerApplyObserver$2;-><init>(Lkotlin/jvm/functions/Function2;)V
+HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion$registerApplyObserver$2;->dispose()V
HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion$registerGlobalWriteObserver$2;-><init>(Lkotlin/jvm/functions/Function1;)V
HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion;-><init>()V
HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
@@ -2762,9 +3825,12 @@
HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion;->registerGlobalWriteObserver(Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/ObserverHandle;
HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion;->sendApplyNotifications()V
HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion;->takeMutableSnapshot(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/MutableSnapshot;
+HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion;->takeSnapshot(Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/Snapshot;
HSPLandroidx/compose/runtime/snapshots/Snapshot;-><clinit>()V
HSPLandroidx/compose/runtime/snapshots/Snapshot;-><init>(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)V
HSPLandroidx/compose/runtime/snapshots/Snapshot;-><init>(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/runtime/snapshots/Snapshot;->closeAndReleasePinning$runtime_release()V
+HSPLandroidx/compose/runtime/snapshots/Snapshot;->closeLocked$runtime_release()V
HSPLandroidx/compose/runtime/snapshots/Snapshot;->dispose()V
HSPLandroidx/compose/runtime/snapshots/Snapshot;->getDisposed$runtime_release()Z
HSPLandroidx/compose/runtime/snapshots/Snapshot;->getId()I
@@ -2774,6 +3840,10 @@
HSPLandroidx/compose/runtime/snapshots/Snapshot;->releasePinnedSnapshotsForCloseLocked$runtime_release()V
HSPLandroidx/compose/runtime/snapshots/Snapshot;->restoreCurrent(Landroidx/compose/runtime/snapshots/Snapshot;)V
HSPLandroidx/compose/runtime/snapshots/Snapshot;->setDisposed$runtime_release(Z)V
+HSPLandroidx/compose/runtime/snapshots/Snapshot;->setId$runtime_release(I)V
+HSPLandroidx/compose/runtime/snapshots/Snapshot;->setInvalid$runtime_release(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)V
+HSPLandroidx/compose/runtime/snapshots/Snapshot;->takeoverPinnedSnapshot$runtime_release()I
+HSPLandroidx/compose/runtime/snapshots/Snapshot;->validateNotDisposed$runtime_release()V
HSPLandroidx/compose/runtime/snapshots/SnapshotApplyResult$Success;-><clinit>()V
HSPLandroidx/compose/runtime/snapshots/SnapshotApplyResult$Success;-><init>()V
HSPLandroidx/compose/runtime/snapshots/SnapshotApplyResult;-><clinit>()V
@@ -2797,20 +3867,22 @@
HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->access$getEMPTY$cp()Landroidx/compose/runtime/snapshots/SnapshotIdSet;
HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->andNot(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/SnapshotIdSet;
HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->clear(I)Landroidx/compose/runtime/snapshots/SnapshotIdSet;
-HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->get(I)Z
HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->lowest(I)I
HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->or(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/SnapshotIdSet;
HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->set(I)Landroidx/compose/runtime/snapshots/SnapshotIdSet;
HSPLandroidx/compose/runtime/snapshots/SnapshotIdSetKt;->access$lowestBitOf(J)I
HSPLandroidx/compose/runtime/snapshots/SnapshotIdSetKt;->lowestBitOf(J)I
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt$advanceGlobalSnapshot$2;-><clinit>()V
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt$advanceGlobalSnapshot$2;-><init>()V
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt$advanceGlobalSnapshot$2;->invoke(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt$advanceGlobalSnapshot$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt$advanceGlobalSnapshot$3;-><clinit>()V
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt$advanceGlobalSnapshot$3;-><init>()V
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt$advanceGlobalSnapshot$3;->invoke(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt$advanceGlobalSnapshot$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/runtime/snapshots/SnapshotKt$emptyLambda$1;-><clinit>()V
HSPLandroidx/compose/runtime/snapshots/SnapshotKt$emptyLambda$1;-><init>()V
HSPLandroidx/compose/runtime/snapshots/SnapshotKt$emptyLambda$1;->invoke(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)V
HSPLandroidx/compose/runtime/snapshots/SnapshotKt$emptyLambda$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt$mergedReadObserver$1;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt$mergedReadObserver$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt$mergedReadObserver$1;->invoke(Ljava/lang/Object;)V
HSPLandroidx/compose/runtime/snapshots/SnapshotKt$mergedWriteObserver$1;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
HSPLandroidx/compose/runtime/snapshots/SnapshotKt$mergedWriteObserver$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/runtime/snapshots/SnapshotKt$mergedWriteObserver$1;->invoke(Ljava/lang/Object;)V
@@ -2830,65 +3902,79 @@
HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$mergedReadObserver(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Z)Lkotlin/jvm/functions/Function1;
HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$mergedWriteObserver(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Lkotlin/jvm/functions/Function1;
HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$optimisticMerges(Landroidx/compose/runtime/snapshots/MutableSnapshot;Landroidx/compose/runtime/snapshots/MutableSnapshot;Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Ljava/util/Map;
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$overwriteUnusedRecordsLocked(Landroidx/compose/runtime/snapshots/StateObject;)Z
HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$readable(Landroidx/compose/runtime/snapshots/StateRecord;ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/StateRecord;
HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$setNextSnapshotId$p(I)V
HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$setOpenSnapshots$p(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)V
HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$takeNewGlobalSnapshot(Landroidx/compose/runtime/snapshots/Snapshot;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$takeNewSnapshot(Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/Snapshot;
HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$validateOpen(Landroidx/compose/runtime/snapshots/Snapshot;)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->addRange(Landroidx/compose/runtime/snapshots/SnapshotIdSet;II)Landroidx/compose/runtime/snapshots/SnapshotIdSet;
HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->advanceGlobalSnapshot()V
HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->advanceGlobalSnapshot(Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->createTransparentSnapshotWithNoParentReadObserver$default(Landroidx/compose/runtime/snapshots/Snapshot;Lkotlin/jvm/functions/Function1;ZILjava/lang/Object;)Landroidx/compose/runtime/snapshots/Snapshot;
HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->createTransparentSnapshotWithNoParentReadObserver(Landroidx/compose/runtime/snapshots/Snapshot;Lkotlin/jvm/functions/Function1;Z)Landroidx/compose/runtime/snapshots/Snapshot;
HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->current(Landroidx/compose/runtime/snapshots/StateRecord;)Landroidx/compose/runtime/snapshots/StateRecord;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->currentSnapshot()Landroidx/compose/runtime/snapshots/Snapshot;+]Landroidx/compose/runtime/SnapshotThreadLocal;Landroidx/compose/runtime/SnapshotThreadLocal;
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->current(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/Snapshot;)Landroidx/compose/runtime/snapshots/StateRecord;
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->currentSnapshot()Landroidx/compose/runtime/snapshots/Snapshot;
HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->getLock()Ljava/lang/Object;
HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->getSnapshotInitializer()Landroidx/compose/runtime/snapshots/Snapshot;
HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->mergedReadObserver$default(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;ZILjava/lang/Object;)Lkotlin/jvm/functions/Function1;
HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->mergedReadObserver(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Z)Lkotlin/jvm/functions/Function1;
HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->mergedWriteObserver(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Lkotlin/jvm/functions/Function1;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->newOverwritableRecord(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;)Landroidx/compose/runtime/snapshots/StateRecord;
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->newOverwritableRecordLocked(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;)Landroidx/compose/runtime/snapshots/StateRecord;
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->newWritableRecord(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;Landroidx/compose/runtime/snapshots/Snapshot;)Landroidx/compose/runtime/snapshots/StateRecord;
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->newWritableRecordLocked(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;Landroidx/compose/runtime/snapshots/Snapshot;)Landroidx/compose/runtime/snapshots/StateRecord;
HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->notifyWrite(Landroidx/compose/runtime/snapshots/Snapshot;Landroidx/compose/runtime/snapshots/StateObject;)V
HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->optimisticMerges(Landroidx/compose/runtime/snapshots/MutableSnapshot;Landroidx/compose/runtime/snapshots/MutableSnapshot;Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Ljava/util/Map;
HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->overwritableRecord(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;Landroidx/compose/runtime/snapshots/Snapshot;Landroidx/compose/runtime/snapshots/StateRecord;)Landroidx/compose/runtime/snapshots/StateRecord;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->readable(Landroidx/compose/runtime/snapshots/StateRecord;ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/StateRecord;+]Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/DerivedSnapshotState$ResultRecord;,Landroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;,Landroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->overwriteUnusedRecordsLocked(Landroidx/compose/runtime/snapshots/StateObject;)Z
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->readable(Landroidx/compose/runtime/snapshots/StateRecord;ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/StateRecord;
HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->readable(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;)Landroidx/compose/runtime/snapshots/StateRecord;
HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->releasePinningLocked(I)V
HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->takeNewGlobalSnapshot(Landroidx/compose/runtime/snapshots/Snapshot;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->takeNewSnapshot(Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/Snapshot;
HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->trackPinning(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)I
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->used(Landroidx/compose/runtime/snapshots/StateObject;)Landroidx/compose/runtime/snapshots/StateRecord;
+HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->usedLocked(Landroidx/compose/runtime/snapshots/StateObject;)Landroidx/compose/runtime/snapshots/StateRecord;
HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->valid(IILandroidx/compose/runtime/snapshots/SnapshotIdSet;)Z
HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->valid(Landroidx/compose/runtime/snapshots/StateRecord;ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)Z
HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->validateOpen(Landroidx/compose/runtime/snapshots/Snapshot;)V
HSPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList;)V
HSPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->getList$runtime_release()Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList;
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;-><clinit>()V
HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;-><init>()V
HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord;
HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->getReadable$runtime_release()Landroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->getSize()I
HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->isEmpty()Z
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->size()I
HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap$derivedStateEnterObserver$1;-><init>(Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap$derivedStateEnterObserver$1;->invoke(Landroidx/compose/runtime/State;)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap$derivedStateEnterObserver$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap$derivedStateExitObserver$1;-><init>(Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap$derivedStateExitObserver$1;->invoke(Landroidx/compose/runtime/State;)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap$derivedStateExitObserver$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;-><init>(Lkotlin/jvm/functions/Function1;)V
HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->access$clearObsoleteStateReads(Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;Ljava/lang/Object;)V
HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->access$getCurrentScope$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;)Ljava/lang/Object;
HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->access$getCurrentScopeReads$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;)Landroidx/compose/runtime/collection/IdentityArrayIntMap;
HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->access$getCurrentToken$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;)I
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->access$getDeriveStateScopeCount$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;)I
HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->access$getScopeToValues$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;)Landroidx/compose/runtime/collection/IdentityArrayMap;
HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->access$setCurrentScope$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;Ljava/lang/Object;)V
HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->access$setCurrentScopeReads$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;Landroidx/compose/runtime/collection/IdentityArrayIntMap;)V
HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->access$setCurrentToken$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;I)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->access$setDeriveStateScopeCount$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;I)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->clear()V
HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->clearObsoleteStateReads(Ljava/lang/Object;)V
HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->getDerivedStateEnterObserver()Lkotlin/jvm/functions/Function1;
HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->getDerivedStateExitObserver()Lkotlin/jvm/functions/Function1;
HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->getOnChanged()Lkotlin/jvm/functions/Function1;
HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->notifyInvalidatedScopes()V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->recordInvalidation(Ljava/util/Set;)Z+]Landroidx/compose/runtime/collection/IdentityArraySet;Landroidx/compose/runtime/collection/IdentityArraySet;]Landroidx/compose/runtime/collection/IdentityScopeMap;Landroidx/compose/runtime/collection/IdentityScopeMap;
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->recordInvalidation(Ljava/util/Set;)Z
HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->recordRead(Ljava/lang/Object;)V
HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->removeObservation(Ljava/lang/Object;Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$applyObserver$1$2;-><init>(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$applyObserver$1$2;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$applyObserver$1$2;->invoke()V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->removeScopeIf(Lkotlin/jvm/functions/Function1;)V
HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$applyObserver$1;-><init>(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)V
HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$applyObserver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$applyObserver$1;->invoke(Ljava/util/Set;Landroidx/compose/runtime/snapshots/Snapshot;)V
@@ -2898,16 +3984,30 @@
HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$readObserver$1;-><init>(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)V
HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$readObserver$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$readObserver$1;->invoke(Ljava/lang/Object;)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$sendNotifications$1;-><init>(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$sendNotifications$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$sendNotifications$1;->invoke()V
HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;-><clinit>()V
HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;-><init>(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$addChanges(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;Ljava/util/Set;)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$drainChanges(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)Z
HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$getCurrentMap$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;
HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$getObservedScopeMaps$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)Landroidx/compose/runtime/collection/MutableVector;
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$getOnChangedExecutor$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)Lkotlin/jvm/functions/Function1;
HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$getReadObserver$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)Lkotlin/jvm/functions/Function1;
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$getSendingNotifications$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)Z
HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$isPaused$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)Z
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$sendNotifications(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$setSendingNotifications$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;Z)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->addChanges(Ljava/util/Set;)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->clear()V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->clearIf(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->drainChanges()Z
HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->ensureMap(Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;
HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->observeReads(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->removeChanges()Ljava/util/Set;
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->sendNotifications()V
HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->start()V
+HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->stop()V
HSPLandroidx/compose/runtime/snapshots/StateRecord;-><clinit>()V
HSPLandroidx/compose/runtime/snapshots/StateRecord;-><init>()V
HSPLandroidx/compose/runtime/snapshots/StateRecord;->getNext$runtime_release()Landroidx/compose/runtime/snapshots/StateRecord;
@@ -2918,7 +4018,7 @@
HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->apply()Landroidx/compose/runtime/snapshots/SnapshotApplyResult;
HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->dispose()V
HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->getCurrentSnapshot()Landroidx/compose/runtime/snapshots/MutableSnapshot;
-HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->getId()I+]Landroidx/compose/runtime/snapshots/Snapshot;Landroidx/compose/runtime/snapshots/GlobalSnapshot;,Landroidx/compose/runtime/snapshots/MutableSnapshot;,Landroidx/compose/runtime/snapshots/NestedMutableSnapshot;,Landroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;
+HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->getId()I
HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->getInvalid$runtime_release()Landroidx/compose/runtime/snapshots/SnapshotIdSet;
HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->getReadOnly()Z
HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->notifyObjectsInitialized$runtime_release()V
@@ -2933,19 +4033,24 @@
HSPLandroidx/compose/ui/ActualKt;->areObjectsOfSameType(Ljava/lang/Object;Ljava/lang/Object;)Z
HSPLandroidx/compose/ui/Alignment$Companion;-><clinit>()V
HSPLandroidx/compose/ui/Alignment$Companion;-><init>()V
+HSPLandroidx/compose/ui/Alignment$Companion;->getBottomCenter()Landroidx/compose/ui/Alignment;
HSPLandroidx/compose/ui/Alignment$Companion;->getCenter()Landroidx/compose/ui/Alignment;
HSPLandroidx/compose/ui/Alignment$Companion;->getCenterHorizontally()Landroidx/compose/ui/Alignment$Horizontal;
HSPLandroidx/compose/ui/Alignment$Companion;->getCenterVertically()Landroidx/compose/ui/Alignment$Vertical;
HSPLandroidx/compose/ui/Alignment$Companion;->getStart()Landroidx/compose/ui/Alignment$Horizontal;
HSPLandroidx/compose/ui/Alignment$Companion;->getTop()Landroidx/compose/ui/Alignment$Vertical;
+HSPLandroidx/compose/ui/Alignment$Companion;->getTopCenter()Landroidx/compose/ui/Alignment;
HSPLandroidx/compose/ui/Alignment$Companion;->getTopStart()Landroidx/compose/ui/Alignment;
HSPLandroidx/compose/ui/Alignment;-><clinit>()V
+HSPLandroidx/compose/ui/BiasAlignment$Horizontal;-><clinit>()V
HSPLandroidx/compose/ui/BiasAlignment$Horizontal;-><init>(F)V
HSPLandroidx/compose/ui/BiasAlignment$Horizontal;->align(IILandroidx/compose/ui/unit/LayoutDirection;)I
HSPLandroidx/compose/ui/BiasAlignment$Horizontal;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/BiasAlignment$Vertical;-><clinit>()V
HSPLandroidx/compose/ui/BiasAlignment$Vertical;-><init>(F)V
HSPLandroidx/compose/ui/BiasAlignment$Vertical;->align(II)I
HSPLandroidx/compose/ui/BiasAlignment$Vertical;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/BiasAlignment;-><clinit>()V
HSPLandroidx/compose/ui/BiasAlignment;-><init>(FF)V
HSPLandroidx/compose/ui/BiasAlignment;->align-KFBX0sM(JJLandroidx/compose/ui/unit/LayoutDirection;)J
HSPLandroidx/compose/ui/BiasAlignment;->equals(Ljava/lang/Object;)Z
@@ -2958,10 +4063,6 @@
HSPLandroidx/compose/ui/CombinedModifier;->getOuter$ui_release()Landroidx/compose/ui/Modifier;
HSPLandroidx/compose/ui/ComposedModifier;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;)V
HSPLandroidx/compose/ui/ComposedModifier;->getFactory()Lkotlin/jvm/functions/Function3;
-HSPLandroidx/compose/ui/ComposedModifierKt$WrapFocusEventModifier$1;-><clinit>()V
-HSPLandroidx/compose/ui/ComposedModifierKt$WrapFocusEventModifier$1;-><init>()V
-HSPLandroidx/compose/ui/ComposedModifierKt$WrapFocusRequesterModifier$1;-><clinit>()V
-HSPLandroidx/compose/ui/ComposedModifierKt$WrapFocusRequesterModifier$1;-><init>()V
HSPLandroidx/compose/ui/ComposedModifierKt$materialize$1;-><clinit>()V
HSPLandroidx/compose/ui/ComposedModifierKt$materialize$1;-><init>()V
HSPLandroidx/compose/ui/ComposedModifierKt$materialize$1;->invoke(Landroidx/compose/ui/Modifier$Element;)Ljava/lang/Boolean;
@@ -2969,7 +4070,7 @@
HSPLandroidx/compose/ui/ComposedModifierKt$materialize$result$1;-><init>(Landroidx/compose/runtime/Composer;)V
HSPLandroidx/compose/ui/ComposedModifierKt$materialize$result$1;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier$Element;)Landroidx/compose/ui/Modifier;
HSPLandroidx/compose/ui/ComposedModifierKt$materialize$result$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/ComposedModifierKt;-><clinit>()V
+HSPLandroidx/compose/ui/ComposedModifierKt;->composed$default(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;ILjava/lang/Object;)Landroidx/compose/ui/Modifier;
HSPLandroidx/compose/ui/ComposedModifierKt;->composed(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;)Landroidx/compose/ui/Modifier;
HSPLandroidx/compose/ui/ComposedModifierKt;->materialize(Landroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
HSPLandroidx/compose/ui/Modifier$Companion;-><clinit>()V
@@ -2981,6 +4082,7 @@
HSPLandroidx/compose/ui/Modifier$Node;-><clinit>()V
HSPLandroidx/compose/ui/Modifier$Node;-><init>()V
HSPLandroidx/compose/ui/Modifier$Node;->attach$ui_release()V
+HSPLandroidx/compose/ui/Modifier$Node;->detach$ui_release()V
HSPLandroidx/compose/ui/Modifier$Node;->getAggregateChildKindSet$ui_release()I
HSPLandroidx/compose/ui/Modifier$Node;->getChild$ui_release()Landroidx/compose/ui/Modifier$Node;
HSPLandroidx/compose/ui/Modifier$Node;->getCoordinator$ui_release()Landroidx/compose/ui/node/NodeCoordinator;
@@ -2989,11 +4091,11 @@
HSPLandroidx/compose/ui/Modifier$Node;->getParent$ui_release()Landroidx/compose/ui/Modifier$Node;
HSPLandroidx/compose/ui/Modifier$Node;->isAttached()Z
HSPLandroidx/compose/ui/Modifier$Node;->onAttach()V
+HSPLandroidx/compose/ui/Modifier$Node;->onDetach()V
HSPLandroidx/compose/ui/Modifier$Node;->setAggregateChildKindSet$ui_release(I)V
HSPLandroidx/compose/ui/Modifier$Node;->setChild$ui_release(Landroidx/compose/ui/Modifier$Node;)V
HSPLandroidx/compose/ui/Modifier$Node;->setKindSet$ui_release(I)V
HSPLandroidx/compose/ui/Modifier$Node;->setParent$ui_release(Landroidx/compose/ui/Modifier$Node;)V
-HSPLandroidx/compose/ui/Modifier$Node;->sideEffect(Lkotlin/jvm/functions/Function0;)V
HSPLandroidx/compose/ui/Modifier$Node;->updateCoordinator$ui_release(Landroidx/compose/ui/node/NodeCoordinator;)V
HSPLandroidx/compose/ui/Modifier;-><clinit>()V
HSPLandroidx/compose/ui/Modifier;->then(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
@@ -3009,17 +4111,21 @@
HSPLandroidx/compose/ui/autofill/AutofillCallback;-><clinit>()V
HSPLandroidx/compose/ui/autofill/AutofillCallback;-><init>()V
HSPLandroidx/compose/ui/autofill/AutofillCallback;->register(Landroidx/compose/ui/autofill/AndroidAutofill;)V
+HSPLandroidx/compose/ui/autofill/AutofillCallback;->unregister(Landroidx/compose/ui/autofill/AndroidAutofill;)V
HSPLandroidx/compose/ui/autofill/AutofillTree;-><clinit>()V
HSPLandroidx/compose/ui/autofill/AutofillTree;-><init>()V
HSPLandroidx/compose/ui/draw/ClipKt;->clip(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/draw/DrawBackgroundModifier;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/draw/ClipKt;->clipToBounds(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/ui/draw/DrawBackgroundModifier;-><init>(Lkotlin/jvm/functions/Function1;)V
HSPLandroidx/compose/ui/draw/DrawBackgroundModifier;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
-HSPLandroidx/compose/ui/draw/DrawBackgroundModifier;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/draw/DrawModifierKt$drawBehind$$inlined$modifierElementOf$1;-><init>(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/draw/DrawModifierKt$drawBehind$$inlined$modifierElementOf$1;->create()Landroidx/compose/ui/Modifier$Node;
HSPLandroidx/compose/ui/draw/DrawModifierKt;->drawBehind(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;
HSPLandroidx/compose/ui/draw/PainterModifier$measure$1;-><init>(Landroidx/compose/ui/layout/Placeable;)V
HSPLandroidx/compose/ui/draw/PainterModifier$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
HSPLandroidx/compose/ui/draw/PainterModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/ui/draw/PainterModifier;-><init>(Landroidx/compose/ui/graphics/painter/Painter;ZLandroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/ColorFilter;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/draw/PainterModifier;->calculateScaledSize-E7KxVPU(J)J
HSPLandroidx/compose/ui/draw/PainterModifier;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
HSPLandroidx/compose/ui/draw/PainterModifier;->equals(Ljava/lang/Object;)Z
HSPLandroidx/compose/ui/draw/PainterModifier;->getUseIntrinsicSize()Z
@@ -3034,168 +4140,72 @@
HSPLandroidx/compose/ui/draw/ShadowKt$shadow$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/ui/draw/ShadowKt;->shadow-s4CzXII$default(Landroidx/compose/ui/Modifier;FLandroidx/compose/ui/graphics/Shape;ZJJILjava/lang/Object;)Landroidx/compose/ui/Modifier;
HSPLandroidx/compose/ui/draw/ShadowKt;->shadow-s4CzXII(Landroidx/compose/ui/Modifier;FLandroidx/compose/ui/graphics/Shape;ZJJ)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/focus/FocusChangedModifierKt$onFocusChanged$2$1$1;-><init>(Landroidx/compose/runtime/MutableState;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/focus/FocusChangedModifierKt$onFocusChanged$2$1$1;->invoke(Landroidx/compose/ui/focus/FocusState;)V
-HSPLandroidx/compose/ui/focus/FocusChangedModifierKt$onFocusChanged$2$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/focus/FocusChangedModifierKt$onFocusChanged$2;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/focus/FocusChangedModifierKt$onFocusChanged$2;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/focus/FocusChangedModifierKt$onFocusChanged$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/focus/FocusChangedModifierKt$onFocusChanged$$inlined$modifierElementOf$2;-><init>(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/focus/FocusChangedModifierKt$onFocusChanged$$inlined$modifierElementOf$2;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/focus/FocusChangedModifierKt$onFocusChanged$$inlined$modifierElementOf$2;->update(Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node;
HSPLandroidx/compose/ui/focus/FocusChangedModifierKt;->onFocusChanged(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/focus/FocusEventModifierKt$ModifierLocalFocusEvent$1;-><clinit>()V
-HSPLandroidx/compose/ui/focus/FocusEventModifierKt$ModifierLocalFocusEvent$1;-><init>()V
-HSPLandroidx/compose/ui/focus/FocusEventModifierKt$ModifierLocalFocusEvent$1;->invoke()Landroidx/compose/ui/focus/FocusEventModifierLocal;
-HSPLandroidx/compose/ui/focus/FocusEventModifierKt$ModifierLocalFocusEvent$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/focus/FocusEventModifierKt$onFocusEvent$2$1$1;-><init>(Landroidx/compose/ui/focus/FocusEventModifierLocal;)V
-HSPLandroidx/compose/ui/focus/FocusEventModifierKt$onFocusEvent$2$1$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/focus/FocusEventModifierKt$onFocusEvent$2$1$1;->invoke()V
-HSPLandroidx/compose/ui/focus/FocusEventModifierKt$onFocusEvent$2;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/focus/FocusEventModifierKt$onFocusEvent$2;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/focus/FocusEventModifierKt$onFocusEvent$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/focus/FocusEventModifierKt;-><clinit>()V
-HSPLandroidx/compose/ui/focus/FocusEventModifierKt;->getModifierLocalFocusEvent()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
-HSPLandroidx/compose/ui/focus/FocusEventModifierKt;->onFocusEvent(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/focus/FocusEventModifierLocal;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/focus/FocusEventModifierLocal;->addFocusModifier(Landroidx/compose/ui/focus/FocusModifier;)V
-HSPLandroidx/compose/ui/focus/FocusEventModifierLocal;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
-HSPLandroidx/compose/ui/focus/FocusEventModifierLocal;->getValue()Landroidx/compose/ui/focus/FocusEventModifierLocal;
-HSPLandroidx/compose/ui/focus/FocusEventModifierLocal;->getValue()Ljava/lang/Object;
-HSPLandroidx/compose/ui/focus/FocusEventModifierLocal;->notifyIfNoFocusModifiers()V
-HSPLandroidx/compose/ui/focus/FocusEventModifierLocal;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V
-HSPLandroidx/compose/ui/focus/FocusEventModifierLocal;->propagateFocusEvent()V
-HSPLandroidx/compose/ui/focus/FocusEventModifierLocal;->removeFocusModifier(Landroidx/compose/ui/focus/FocusModifier;)V
-HSPLandroidx/compose/ui/focus/FocusManagerImpl;-><init>(Landroidx/compose/ui/focus/FocusModifier;)V
-HSPLandroidx/compose/ui/focus/FocusManagerImpl;-><init>(Landroidx/compose/ui/focus/FocusModifier;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/focus/FocusManagerImpl;->fetchUpdatedFocusProperties()V
-HSPLandroidx/compose/ui/focus/FocusManagerImpl;->getModifier()Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/focus/FocusManagerImpl;->setLayoutDirection(Landroidx/compose/ui/unit/LayoutDirection;)V
-HSPLandroidx/compose/ui/focus/FocusManagerKt;->access$updateProperties(Landroidx/compose/ui/focus/FocusModifier;)V
-HSPLandroidx/compose/ui/focus/FocusManagerKt;->updateProperties(Landroidx/compose/ui/focus/FocusModifier;)V
-HSPLandroidx/compose/ui/focus/FocusModifier$Companion$RefreshFocusProperties$1;-><clinit>()V
-HSPLandroidx/compose/ui/focus/FocusModifier$Companion$RefreshFocusProperties$1;-><init>()V
-HSPLandroidx/compose/ui/focus/FocusModifier$Companion;-><init>()V
-HSPLandroidx/compose/ui/focus/FocusModifier$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/focus/FocusModifier$Companion;->getRefreshFocusProperties()Lkotlin/jvm/functions/Function1;
-HSPLandroidx/compose/ui/focus/FocusModifier;-><clinit>()V
-HSPLandroidx/compose/ui/focus/FocusModifier;-><init>(Landroidx/compose/ui/focus/FocusStateImpl;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/focus/FocusModifier;-><init>(Landroidx/compose/ui/focus/FocusStateImpl;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/focus/FocusModifier;->access$getRefreshFocusProperties$cp()Lkotlin/jvm/functions/Function1;
-HSPLandroidx/compose/ui/focus/FocusModifier;->getChildren()Landroidx/compose/runtime/collection/MutableVector;
-HSPLandroidx/compose/ui/focus/FocusModifier;->getCoordinator()Landroidx/compose/ui/node/NodeCoordinator;
-HSPLandroidx/compose/ui/focus/FocusModifier;->getFocusEventListener()Landroidx/compose/ui/focus/FocusEventModifierLocal;
-HSPLandroidx/compose/ui/focus/FocusModifier;->getFocusProperties()Landroidx/compose/ui/focus/FocusProperties;
-HSPLandroidx/compose/ui/focus/FocusModifier;->getFocusPropertiesModifier()Landroidx/compose/ui/focus/FocusPropertiesModifier;
-HSPLandroidx/compose/ui/focus/FocusModifier;->getFocusState()Landroidx/compose/ui/focus/FocusStateImpl;
-HSPLandroidx/compose/ui/focus/FocusModifier;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
-HSPLandroidx/compose/ui/focus/FocusModifier;->getKeyInputChildren()Landroidx/compose/runtime/collection/MutableVector;
-HSPLandroidx/compose/ui/focus/FocusModifier;->getValue()Landroidx/compose/ui/focus/FocusModifier;
-HSPLandroidx/compose/ui/focus/FocusModifier;->getValue()Ljava/lang/Object;
-HSPLandroidx/compose/ui/focus/FocusModifier;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V
-HSPLandroidx/compose/ui/focus/FocusModifier;->onPlaced(Landroidx/compose/ui/layout/LayoutCoordinates;)V
-HSPLandroidx/compose/ui/focus/FocusModifier;->setFocusState(Landroidx/compose/ui/focus/FocusStateImpl;)V
-HSPLandroidx/compose/ui/focus/FocusModifier;->setModifierLocalReadScope(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V
-HSPLandroidx/compose/ui/focus/FocusModifierKt$ModifierLocalParentFocusModifier$1;-><clinit>()V
-HSPLandroidx/compose/ui/focus/FocusModifierKt$ModifierLocalParentFocusModifier$1;-><init>()V
-HSPLandroidx/compose/ui/focus/FocusModifierKt$ModifierLocalParentFocusModifier$1;->invoke()Landroidx/compose/ui/focus/FocusModifier;
-HSPLandroidx/compose/ui/focus/FocusModifierKt$ModifierLocalParentFocusModifier$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/focus/FocusModifierKt$ResetFocusModifierLocals$1;-><init>()V
-HSPLandroidx/compose/ui/focus/FocusModifierKt$ResetFocusModifierLocals$1;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
-HSPLandroidx/compose/ui/focus/FocusModifierKt$ResetFocusModifierLocals$1;->getValue()Landroidx/compose/ui/focus/FocusPropertiesModifier;
-HSPLandroidx/compose/ui/focus/FocusModifierKt$ResetFocusModifierLocals$1;->getValue()Ljava/lang/Object;
-HSPLandroidx/compose/ui/focus/FocusModifierKt$ResetFocusModifierLocals$2;-><init>()V
-HSPLandroidx/compose/ui/focus/FocusModifierKt$ResetFocusModifierLocals$2;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
-HSPLandroidx/compose/ui/focus/FocusModifierKt$ResetFocusModifierLocals$2;->getValue()Landroidx/compose/ui/focus/FocusEventModifierLocal;
-HSPLandroidx/compose/ui/focus/FocusModifierKt$ResetFocusModifierLocals$2;->getValue()Ljava/lang/Object;
-HSPLandroidx/compose/ui/focus/FocusModifierKt$ResetFocusModifierLocals$3;-><init>()V
-HSPLandroidx/compose/ui/focus/FocusModifierKt$ResetFocusModifierLocals$3;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
-HSPLandroidx/compose/ui/focus/FocusModifierKt$ResetFocusModifierLocals$3;->getValue()Landroidx/compose/ui/focus/FocusRequesterModifierLocal;
-HSPLandroidx/compose/ui/focus/FocusModifierKt$ResetFocusModifierLocals$3;->getValue()Ljava/lang/Object;
-HSPLandroidx/compose/ui/focus/FocusModifierKt$focusTarget$2$1$1;-><init>(Landroidx/compose/ui/focus/FocusModifier;)V
-HSPLandroidx/compose/ui/focus/FocusModifierKt$focusTarget$2$1$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/focus/FocusModifierKt$focusTarget$2$1$1;->invoke()V
-HSPLandroidx/compose/ui/focus/FocusModifierKt$focusTarget$2;-><clinit>()V
-HSPLandroidx/compose/ui/focus/FocusModifierKt$focusTarget$2;-><init>()V
-HSPLandroidx/compose/ui/focus/FocusModifierKt$focusTarget$2;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/focus/FocusModifierKt$focusTarget$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/focus/FocusModifierKt;-><clinit>()V
+HSPLandroidx/compose/ui/focus/FocusChangedModifierNode;-><init>(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/focus/FocusChangedModifierNode;->onFocusEvent(Landroidx/compose/ui/focus/FocusState;)V
+HSPLandroidx/compose/ui/focus/FocusChangedModifierNode;->setOnFocusChanged(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/focus/FocusEventModifierNodeKt$WhenMappings;-><clinit>()V
+HSPLandroidx/compose/ui/focus/FocusEventModifierNodeKt;->getFocusState(Landroidx/compose/ui/focus/FocusEventModifierNode;)Landroidx/compose/ui/focus/FocusState;
+HSPLandroidx/compose/ui/focus/FocusEventModifierNodeKt;->refreshFocusEventNodes(Landroidx/compose/ui/focus/FocusTargetModifierNode;)V
+HSPLandroidx/compose/ui/focus/FocusInvalidationManager$invalidateNodes$1;-><init>(Landroidx/compose/ui/focus/FocusInvalidationManager;)V
+HSPLandroidx/compose/ui/focus/FocusInvalidationManager$invalidateNodes$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/ui/focus/FocusInvalidationManager$invalidateNodes$1;->invoke()V
+HSPLandroidx/compose/ui/focus/FocusInvalidationManager;-><init>(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/focus/FocusInvalidationManager;->access$getFocusEventNodes$p(Landroidx/compose/ui/focus/FocusInvalidationManager;)Ljava/util/Set;
+HSPLandroidx/compose/ui/focus/FocusInvalidationManager;->access$getFocusPropertiesNodes$p(Landroidx/compose/ui/focus/FocusInvalidationManager;)Ljava/util/Set;
+HSPLandroidx/compose/ui/focus/FocusInvalidationManager;->access$getFocusTargetNodes$p(Landroidx/compose/ui/focus/FocusInvalidationManager;)Ljava/util/Set;
+HSPLandroidx/compose/ui/focus/FocusInvalidationManager;->scheduleInvalidation(Landroidx/compose/ui/focus/FocusEventModifierNode;)V
+HSPLandroidx/compose/ui/focus/FocusInvalidationManager;->scheduleInvalidation(Landroidx/compose/ui/focus/FocusPropertiesModifierNode;)V
+HSPLandroidx/compose/ui/focus/FocusInvalidationManager;->scheduleInvalidation(Landroidx/compose/ui/focus/FocusTargetModifierNode;)V
+HSPLandroidx/compose/ui/focus/FocusInvalidationManager;->scheduleInvalidation(Ljava/util/Set;Ljava/lang/Object;)V
HSPLandroidx/compose/ui/focus/FocusModifierKt;->focusTarget(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/focus/FocusModifierKt;->focusTarget(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/focus/FocusModifier;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/focus/FocusModifierKt;->getModifierLocalParentFocusModifier()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
-HSPLandroidx/compose/ui/focus/FocusPropertiesImpl$enter$1;-><clinit>()V
-HSPLandroidx/compose/ui/focus/FocusPropertiesImpl$enter$1;-><init>()V
-HSPLandroidx/compose/ui/focus/FocusPropertiesImpl$exit$1;-><clinit>()V
-HSPLandroidx/compose/ui/focus/FocusPropertiesImpl$exit$1;-><init>()V
-HSPLandroidx/compose/ui/focus/FocusPropertiesImpl;-><init>()V
-HSPLandroidx/compose/ui/focus/FocusPropertiesImpl;->getCanFocus()Z
-HSPLandroidx/compose/ui/focus/FocusPropertiesImpl;->setCanFocus(Z)V
-HSPLandroidx/compose/ui/focus/FocusPropertiesImpl;->setDown(Landroidx/compose/ui/focus/FocusRequester;)V
-HSPLandroidx/compose/ui/focus/FocusPropertiesImpl;->setEnd(Landroidx/compose/ui/focus/FocusRequester;)V
-HSPLandroidx/compose/ui/focus/FocusPropertiesImpl;->setEnter(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/focus/FocusPropertiesImpl;->setExit(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/focus/FocusPropertiesImpl;->setLeft(Landroidx/compose/ui/focus/FocusRequester;)V
-HSPLandroidx/compose/ui/focus/FocusPropertiesImpl;->setNext(Landroidx/compose/ui/focus/FocusRequester;)V
-HSPLandroidx/compose/ui/focus/FocusPropertiesImpl;->setPrevious(Landroidx/compose/ui/focus/FocusRequester;)V
-HSPLandroidx/compose/ui/focus/FocusPropertiesImpl;->setRight(Landroidx/compose/ui/focus/FocusRequester;)V
-HSPLandroidx/compose/ui/focus/FocusPropertiesImpl;->setStart(Landroidx/compose/ui/focus/FocusRequester;)V
-HSPLandroidx/compose/ui/focus/FocusPropertiesImpl;->setUp(Landroidx/compose/ui/focus/FocusRequester;)V
-HSPLandroidx/compose/ui/focus/FocusPropertiesKt$ModifierLocalFocusProperties$1;-><clinit>()V
-HSPLandroidx/compose/ui/focus/FocusPropertiesKt$ModifierLocalFocusProperties$1;-><init>()V
-HSPLandroidx/compose/ui/focus/FocusPropertiesKt$ModifierLocalFocusProperties$1;->invoke()Landroidx/compose/ui/focus/FocusPropertiesModifier;
-HSPLandroidx/compose/ui/focus/FocusPropertiesKt$ModifierLocalFocusProperties$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/focus/FocusPropertiesKt$clear$1;-><clinit>()V
-HSPLandroidx/compose/ui/focus/FocusPropertiesKt$clear$1;-><init>()V
-HSPLandroidx/compose/ui/focus/FocusPropertiesKt$clear$2;-><clinit>()V
-HSPLandroidx/compose/ui/focus/FocusPropertiesKt$clear$2;-><init>()V
-HSPLandroidx/compose/ui/focus/FocusPropertiesKt$refreshFocusProperties$1;-><init>(Landroidx/compose/ui/focus/FocusModifier;)V
-HSPLandroidx/compose/ui/focus/FocusPropertiesKt$refreshFocusProperties$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/focus/FocusPropertiesKt$refreshFocusProperties$1;->invoke()V
-HSPLandroidx/compose/ui/focus/FocusPropertiesKt;-><clinit>()V
-HSPLandroidx/compose/ui/focus/FocusPropertiesKt;->clear(Landroidx/compose/ui/focus/FocusProperties;)V
+HSPLandroidx/compose/ui/focus/FocusOwnerImpl$special$$inlined$modifierElementOf$2;-><init>(Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/focus/FocusOwnerImpl;)V
+HSPLandroidx/compose/ui/focus/FocusOwnerImpl$special$$inlined$modifierElementOf$2;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/focus/FocusOwnerImpl;-><init>(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/focus/FocusOwnerImpl;->getModifier()Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/ui/focus/FocusOwnerImpl;->getRootFocusNode$ui_release()Landroidx/compose/ui/focus/FocusTargetModifierNode;
+HSPLandroidx/compose/ui/focus/FocusOwnerImpl;->scheduleInvalidation(Landroidx/compose/ui/focus/FocusEventModifierNode;)V
+HSPLandroidx/compose/ui/focus/FocusOwnerImpl;->scheduleInvalidation(Landroidx/compose/ui/focus/FocusPropertiesModifierNode;)V
+HSPLandroidx/compose/ui/focus/FocusOwnerImpl;->scheduleInvalidation(Landroidx/compose/ui/focus/FocusTargetModifierNode;)V
+HSPLandroidx/compose/ui/focus/FocusOwnerImpl;->setLayoutDirection(Landroidx/compose/ui/unit/LayoutDirection;)V
+HSPLandroidx/compose/ui/focus/FocusPropertiesKt$focusProperties$$inlined$modifierElementOf$2;-><init>(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/focus/FocusPropertiesKt$focusProperties$$inlined$modifierElementOf$2;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/focus/FocusPropertiesKt$focusProperties$$inlined$modifierElementOf$2;->update(Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node;
HSPLandroidx/compose/ui/focus/FocusPropertiesKt;->focusProperties(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/focus/FocusPropertiesKt;->getModifierLocalFocusProperties()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
-HSPLandroidx/compose/ui/focus/FocusPropertiesKt;->refreshFocusProperties(Landroidx/compose/ui/focus/FocusModifier;)V
-HSPLandroidx/compose/ui/focus/FocusPropertiesKt;->setUpdatedProperties(Landroidx/compose/ui/focus/FocusModifier;Landroidx/compose/ui/focus/FocusProperties;)V
-HSPLandroidx/compose/ui/focus/FocusPropertiesModifier;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/focus/FocusPropertiesModifier;->calculateProperties(Landroidx/compose/ui/focus/FocusProperties;)V
-HSPLandroidx/compose/ui/focus/FocusPropertiesModifier;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/focus/FocusPropertiesModifier;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
-HSPLandroidx/compose/ui/focus/FocusPropertiesModifier;->getParent()Landroidx/compose/ui/focus/FocusPropertiesModifier;
-HSPLandroidx/compose/ui/focus/FocusPropertiesModifier;->getValue()Landroidx/compose/ui/focus/FocusPropertiesModifier;
-HSPLandroidx/compose/ui/focus/FocusPropertiesModifier;->getValue()Ljava/lang/Object;
-HSPLandroidx/compose/ui/focus/FocusPropertiesModifier;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V
-HSPLandroidx/compose/ui/focus/FocusPropertiesModifier;->setParent(Landroidx/compose/ui/focus/FocusPropertiesModifier;)V
+HSPLandroidx/compose/ui/focus/FocusPropertiesModifierNodeImpl;-><init>(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/focus/FocusPropertiesModifierNodeImpl;->modifyFocusProperties(Landroidx/compose/ui/focus/FocusProperties;)V
+HSPLandroidx/compose/ui/focus/FocusPropertiesModifierNodeImpl;->setFocusPropertiesScope(Lkotlin/jvm/functions/Function1;)V
HSPLandroidx/compose/ui/focus/FocusRequester$Companion;-><init>()V
HSPLandroidx/compose/ui/focus/FocusRequester$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/focus/FocusRequester$Companion;->getDefault()Landroidx/compose/ui/focus/FocusRequester;
HSPLandroidx/compose/ui/focus/FocusRequester;-><clinit>()V
HSPLandroidx/compose/ui/focus/FocusRequester;-><init>()V
-HSPLandroidx/compose/ui/focus/FocusRequester;->access$getDefault$cp()Landroidx/compose/ui/focus/FocusRequester;
-HSPLandroidx/compose/ui/focus/FocusRequester;->getFocusRequesterModifierLocals$ui_release()Landroidx/compose/runtime/collection/MutableVector;
-HSPLandroidx/compose/ui/focus/FocusRequesterModifierKt$ModifierLocalFocusRequester$1;-><clinit>()V
-HSPLandroidx/compose/ui/focus/FocusRequesterModifierKt$ModifierLocalFocusRequester$1;-><init>()V
-HSPLandroidx/compose/ui/focus/FocusRequesterModifierKt$ModifierLocalFocusRequester$1;->invoke()Landroidx/compose/ui/focus/FocusRequesterModifierLocal;
-HSPLandroidx/compose/ui/focus/FocusRequesterModifierKt$ModifierLocalFocusRequester$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/focus/FocusRequesterModifierKt$focusRequester$2;-><init>(Landroidx/compose/ui/focus/FocusRequester;)V
-HSPLandroidx/compose/ui/focus/FocusRequesterModifierKt$focusRequester$2;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/focus/FocusRequesterModifierKt$focusRequester$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/focus/FocusRequesterModifierKt;-><clinit>()V
+HSPLandroidx/compose/ui/focus/FocusRequester;->getFocusRequesterNodes$ui_release()Landroidx/compose/runtime/collection/MutableVector;
+HSPLandroidx/compose/ui/focus/FocusRequesterModifierKt$focusRequester$$inlined$modifierElementOf$2;-><init>(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/focus/FocusRequester;Landroidx/compose/ui/focus/FocusRequester;)V
+HSPLandroidx/compose/ui/focus/FocusRequesterModifierKt$focusRequester$$inlined$modifierElementOf$2;->create()Landroidx/compose/ui/Modifier$Node;
HSPLandroidx/compose/ui/focus/FocusRequesterModifierKt;->focusRequester(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/focus/FocusRequester;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/focus/FocusRequesterModifierKt;->getModifierLocalFocusRequester()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
-HSPLandroidx/compose/ui/focus/FocusRequesterModifierLocal;-><init>(Landroidx/compose/ui/focus/FocusRequester;)V
-HSPLandroidx/compose/ui/focus/FocusRequesterModifierLocal;->addFocusModifier(Landroidx/compose/ui/focus/FocusModifier;)V
-HSPLandroidx/compose/ui/focus/FocusRequesterModifierLocal;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
-HSPLandroidx/compose/ui/focus/FocusRequesterModifierLocal;->getValue()Landroidx/compose/ui/focus/FocusRequesterModifierLocal;
-HSPLandroidx/compose/ui/focus/FocusRequesterModifierLocal;->getValue()Ljava/lang/Object;
-HSPLandroidx/compose/ui/focus/FocusRequesterModifierLocal;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V
+HSPLandroidx/compose/ui/focus/FocusRequesterModifierNodeImpl;-><init>(Landroidx/compose/ui/focus/FocusRequester;)V
+HSPLandroidx/compose/ui/focus/FocusRequesterModifierNodeImpl;->onAttach()V
+HSPLandroidx/compose/ui/focus/FocusRequesterModifierNodeImpl;->onDetach()V
HSPLandroidx/compose/ui/focus/FocusStateImpl$WhenMappings;-><clinit>()V
HSPLandroidx/compose/ui/focus/FocusStateImpl;->$values()[Landroidx/compose/ui/focus/FocusStateImpl;
HSPLandroidx/compose/ui/focus/FocusStateImpl;-><clinit>()V
HSPLandroidx/compose/ui/focus/FocusStateImpl;-><init>(Ljava/lang/String;I)V
HSPLandroidx/compose/ui/focus/FocusStateImpl;->isFocused()Z
HSPLandroidx/compose/ui/focus/FocusStateImpl;->values()[Landroidx/compose/ui/focus/FocusStateImpl;
-HSPLandroidx/compose/ui/focus/FocusTransactionsKt$WhenMappings;-><clinit>()V
-HSPLandroidx/compose/ui/focus/FocusTransactionsKt;->activateNode(Landroidx/compose/ui/focus/FocusModifier;)V
-HSPLandroidx/compose/ui/focus/FocusTransactionsKt;->deactivateNode(Landroidx/compose/ui/focus/FocusModifier;)V
-HSPLandroidx/compose/ui/focus/FocusTransactionsKt;->sendOnFocusEvent(Landroidx/compose/ui/focus/FocusModifier;)V
+HSPLandroidx/compose/ui/focus/FocusTargetModifierNode$Companion;-><init>()V
+HSPLandroidx/compose/ui/focus/FocusTargetModifierNode$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/ui/focus/FocusTargetModifierNode$Companion;->getFocusTargetModifierElement$ui_release()Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/ui/focus/FocusTargetModifierNode$special$$inlined$modifierElementOf$2;-><init>(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/focus/FocusTargetModifierNode$special$$inlined$modifierElementOf$2;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/focus/FocusTargetModifierNode;-><clinit>()V
+HSPLandroidx/compose/ui/focus/FocusTargetModifierNode;-><init>()V
+HSPLandroidx/compose/ui/focus/FocusTargetModifierNode;->access$getFocusTargetModifierElement$cp()Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/ui/focus/FocusTargetModifierNode;->getFocusState()Landroidx/compose/ui/focus/FocusState;
+HSPLandroidx/compose/ui/focus/FocusTargetModifierNode;->getFocusStateImpl$ui_release()Landroidx/compose/ui/focus/FocusStateImpl;
+HSPLandroidx/compose/ui/focus/FocusTargetModifierNode;->invalidateFocus$ui_release()V
HSPLandroidx/compose/ui/geometry/CornerRadius$Companion;-><init>()V
HSPLandroidx/compose/ui/geometry/CornerRadius$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/ui/geometry/CornerRadius$Companion;->getZero-kKHJgLs()J
@@ -3220,11 +4230,15 @@
HSPLandroidx/compose/ui/geometry/Offset;->constructor-impl(J)J
HSPLandroidx/compose/ui/geometry/Offset;->equals(Ljava/lang/Object;)Z
HSPLandroidx/compose/ui/geometry/Offset;->equals-impl(JLjava/lang/Object;)Z
+HSPLandroidx/compose/ui/geometry/Offset;->equals-impl0(JJ)Z
HSPLandroidx/compose/ui/geometry/Offset;->getDistance-impl(J)F
HSPLandroidx/compose/ui/geometry/Offset;->getX-impl(J)F
HSPLandroidx/compose/ui/geometry/Offset;->getY-impl(J)F
+HSPLandroidx/compose/ui/geometry/Offset;->minus-MK-Hz9U(JJ)J
+HSPLandroidx/compose/ui/geometry/Offset;->plus-MK-Hz9U(JJ)J
HSPLandroidx/compose/ui/geometry/Offset;->unbox-impl()J
HSPLandroidx/compose/ui/geometry/OffsetKt;->Offset(FF)J
+HSPLandroidx/compose/ui/geometry/OffsetKt;->isFinite-k-4lQ0M(J)Z
HSPLandroidx/compose/ui/geometry/Rect$Companion;-><init>()V
HSPLandroidx/compose/ui/geometry/Rect$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/ui/geometry/Rect$Companion;->getZero()Landroidx/compose/ui/geometry/Rect;
@@ -3232,9 +4246,11 @@
HSPLandroidx/compose/ui/geometry/Rect;-><init>(FFFF)V
HSPLandroidx/compose/ui/geometry/Rect;->access$getZero$cp()Landroidx/compose/ui/geometry/Rect;
HSPLandroidx/compose/ui/geometry/Rect;->getBottom()F
+HSPLandroidx/compose/ui/geometry/Rect;->getHeight()F
HSPLandroidx/compose/ui/geometry/Rect;->getLeft()F
HSPLandroidx/compose/ui/geometry/Rect;->getRight()F
HSPLandroidx/compose/ui/geometry/Rect;->getTop()F
+HSPLandroidx/compose/ui/geometry/Rect;->getWidth()F
HSPLandroidx/compose/ui/geometry/RectKt;->Rect-tz77jQw(JJ)Landroidx/compose/ui/geometry/Rect;
HSPLandroidx/compose/ui/geometry/RoundRect$Companion;-><init>()V
HSPLandroidx/compose/ui/geometry/RoundRect$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
@@ -3265,16 +4281,19 @@
HSPLandroidx/compose/ui/geometry/Size;->access$getZero$cp()J
HSPLandroidx/compose/ui/geometry/Size;->box-impl(J)Landroidx/compose/ui/geometry/Size;
HSPLandroidx/compose/ui/geometry/Size;->constructor-impl(J)J
+HSPLandroidx/compose/ui/geometry/Size;->equals(Ljava/lang/Object;)Z
HSPLandroidx/compose/ui/geometry/Size;->equals-impl(JLjava/lang/Object;)Z
HSPLandroidx/compose/ui/geometry/Size;->equals-impl0(JJ)Z
HSPLandroidx/compose/ui/geometry/Size;->getHeight-impl(J)F
HSPLandroidx/compose/ui/geometry/Size;->getMinDimension-impl(J)F
HSPLandroidx/compose/ui/geometry/Size;->getWidth-impl(J)F
+HSPLandroidx/compose/ui/geometry/Size;->isEmpty-impl(J)Z
HSPLandroidx/compose/ui/geometry/Size;->unbox-impl()J
HSPLandroidx/compose/ui/geometry/SizeKt;->Size(FF)J
HSPLandroidx/compose/ui/geometry/SizeKt;->toRect-uvyYCjk(J)Landroidx/compose/ui/geometry/Rect;
HSPLandroidx/compose/ui/graphics/AndroidBlendMode_androidKt;->toAndroidBlendMode-s9anfk8(I)Landroid/graphics/BlendMode;
HSPLandroidx/compose/ui/graphics/AndroidCanvas;-><init>()V
+HSPLandroidx/compose/ui/graphics/AndroidCanvas;->concat-58bKbWc([F)V
HSPLandroidx/compose/ui/graphics/AndroidCanvas;->disableZ()V
HSPLandroidx/compose/ui/graphics/AndroidCanvas;->drawImageRect-HPBpro0(Landroidx/compose/ui/graphics/ImageBitmap;JJJJLandroidx/compose/ui/graphics/Paint;)V
HSPLandroidx/compose/ui/graphics/AndroidCanvas;->drawPath(Landroidx/compose/ui/graphics/Path;Landroidx/compose/ui/graphics/Paint;)V
@@ -3287,6 +4306,7 @@
HSPLandroidx/compose/ui/graphics/AndroidCanvas;->setInternalCanvas(Landroid/graphics/Canvas;)V
HSPLandroidx/compose/ui/graphics/AndroidCanvas;->translate(FF)V
HSPLandroidx/compose/ui/graphics/AndroidCanvas_androidKt;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/AndroidCanvas_androidKt;->ActualCanvas(Landroidx/compose/ui/graphics/ImageBitmap;)Landroidx/compose/ui/graphics/Canvas;
HSPLandroidx/compose/ui/graphics/AndroidCanvas_androidKt;->access$getEmptyCanvas$p()Landroid/graphics/Canvas;
HSPLandroidx/compose/ui/graphics/AndroidCanvas_androidKt;->getNativeCanvas(Landroidx/compose/ui/graphics/Canvas;)Landroid/graphics/Canvas;
HSPLandroidx/compose/ui/graphics/AndroidColorFilter_androidKt;->actualTintColorFilter-xETnrds(JI)Landroidx/compose/ui/graphics/ColorFilter;
@@ -3295,8 +4315,13 @@
HSPLandroidx/compose/ui/graphics/AndroidImageBitmap;->getBitmap$ui_graphics_release()Landroid/graphics/Bitmap;
HSPLandroidx/compose/ui/graphics/AndroidImageBitmap;->getHeight()I
HSPLandroidx/compose/ui/graphics/AndroidImageBitmap;->getWidth()I
+HSPLandroidx/compose/ui/graphics/AndroidImageBitmap;->prepareToDraw()V
+HSPLandroidx/compose/ui/graphics/AndroidImageBitmap_androidKt;->ActualImageBitmap-x__-hDU(IIIZLandroidx/compose/ui/graphics/colorspace/ColorSpace;)Landroidx/compose/ui/graphics/ImageBitmap;
HSPLandroidx/compose/ui/graphics/AndroidImageBitmap_androidKt;->asAndroidBitmap(Landroidx/compose/ui/graphics/ImageBitmap;)Landroid/graphics/Bitmap;
HSPLandroidx/compose/ui/graphics/AndroidImageBitmap_androidKt;->asImageBitmap(Landroid/graphics/Bitmap;)Landroidx/compose/ui/graphics/ImageBitmap;
+HSPLandroidx/compose/ui/graphics/AndroidImageBitmap_androidKt;->toBitmapConfig-1JJdX4A(I)Landroid/graphics/Bitmap$Config;
+HSPLandroidx/compose/ui/graphics/AndroidMatrixConversions_androidKt;->setFrom-EL8BTi8(Landroid/graphics/Matrix;[F)V
+HSPLandroidx/compose/ui/graphics/AndroidMatrixConversions_androidKt;->setFrom-tU-YjHk([FLandroid/graphics/Matrix;)V
HSPLandroidx/compose/ui/graphics/AndroidPaint;-><init>()V
HSPLandroidx/compose/ui/graphics/AndroidPaint;-><init>(Landroid/graphics/Paint;)V
HSPLandroidx/compose/ui/graphics/AndroidPaint;->asFrameworkPaint()Landroid/graphics/Paint;
@@ -3307,6 +4332,7 @@
HSPLandroidx/compose/ui/graphics/AndroidPaint;->getFilterQuality-f-v9h1I()I
HSPLandroidx/compose/ui/graphics/AndroidPaint;->getShader()Landroid/graphics/Shader;
HSPLandroidx/compose/ui/graphics/AndroidPaint;->setAlpha(F)V
+HSPLandroidx/compose/ui/graphics/AndroidPaint;->setBlendMode-s9anfk8(I)V
HSPLandroidx/compose/ui/graphics/AndroidPaint;->setColor-8_81llA(J)V
HSPLandroidx/compose/ui/graphics/AndroidPaint;->setColorFilter(Landroidx/compose/ui/graphics/ColorFilter;)V
HSPLandroidx/compose/ui/graphics/AndroidPaint;->setShader(Landroid/graphics/Shader;)V
@@ -3318,6 +4344,7 @@
HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->getNativeFilterQuality(Landroid/graphics/Paint;)I
HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->makeNativePaint()Landroid/graphics/Paint;
HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->setNativeAlpha(Landroid/graphics/Paint;F)V
+HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->setNativeBlendMode-GB0RdKg(Landroid/graphics/Paint;I)V
HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->setNativeColor-4WTKRHQ(Landroid/graphics/Paint;J)V
HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->setNativeColorFilter(Landroid/graphics/Paint;Landroidx/compose/ui/graphics/ColorFilter;)V
HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->setNativeShader(Landroid/graphics/Paint;Landroid/graphics/Shader;)V
@@ -3326,10 +4353,20 @@
HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->toComposePaint(Landroid/graphics/Paint;)Landroidx/compose/ui/graphics/Paint;
HSPLandroidx/compose/ui/graphics/AndroidPath;-><init>(Landroid/graphics/Path;)V
HSPLandroidx/compose/ui/graphics/AndroidPath;-><init>(Landroid/graphics/Path;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/ui/graphics/AndroidPath;->addPath-Uv8p0NA(Landroidx/compose/ui/graphics/Path;J)V
HSPLandroidx/compose/ui/graphics/AndroidPath;->addRoundRect(Landroidx/compose/ui/geometry/RoundRect;)V
+HSPLandroidx/compose/ui/graphics/AndroidPath;->close()V
HSPLandroidx/compose/ui/graphics/AndroidPath;->getInternalPath()Landroid/graphics/Path;
+HSPLandroidx/compose/ui/graphics/AndroidPath;->lineTo(FF)V
+HSPLandroidx/compose/ui/graphics/AndroidPath;->moveTo(FF)V
+HSPLandroidx/compose/ui/graphics/AndroidPath;->relativeLineTo(FF)V
HSPLandroidx/compose/ui/graphics/AndroidPath;->reset()V
+HSPLandroidx/compose/ui/graphics/AndroidPath;->setFillType-oQ8Xj4U(I)V
HSPLandroidx/compose/ui/graphics/AndroidPath_androidKt;->Path()Landroidx/compose/ui/graphics/Path;
+HSPLandroidx/compose/ui/graphics/Api26Bitmap;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/Api26Bitmap;-><init>()V
+HSPLandroidx/compose/ui/graphics/Api26Bitmap;->createBitmap-x__-hDU$ui_graphics_release(IIIZLandroidx/compose/ui/graphics/colorspace/ColorSpace;)Landroid/graphics/Bitmap;
+HSPLandroidx/compose/ui/graphics/Api26Bitmap;->toFrameworkColorSpace$ui_graphics_release(Landroidx/compose/ui/graphics/colorspace/ColorSpace;)Landroid/graphics/ColorSpace;
HSPLandroidx/compose/ui/graphics/BlendMode$Companion;-><init>()V
HSPLandroidx/compose/ui/graphics/BlendMode$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/ui/graphics/BlendMode$Companion;->getClear-0nO6VwU()I
@@ -3339,26 +4376,37 @@
HSPLandroidx/compose/ui/graphics/BlendMode$Companion;->getSrcIn-0nO6VwU()I
HSPLandroidx/compose/ui/graphics/BlendMode$Companion;->getSrcOver-0nO6VwU()I
HSPLandroidx/compose/ui/graphics/BlendMode;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/BlendMode;-><init>(I)V
HSPLandroidx/compose/ui/graphics/BlendMode;->access$getClear$cp()I
HSPLandroidx/compose/ui/graphics/BlendMode;->access$getDst$cp()I
HSPLandroidx/compose/ui/graphics/BlendMode;->access$getDstOver$cp()I
HSPLandroidx/compose/ui/graphics/BlendMode;->access$getSrc$cp()I
HSPLandroidx/compose/ui/graphics/BlendMode;->access$getSrcIn$cp()I
HSPLandroidx/compose/ui/graphics/BlendMode;->access$getSrcOver$cp()I
+HSPLandroidx/compose/ui/graphics/BlendMode;->box-impl(I)Landroidx/compose/ui/graphics/BlendMode;
HSPLandroidx/compose/ui/graphics/BlendMode;->constructor-impl(I)I
+HSPLandroidx/compose/ui/graphics/BlendMode;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/graphics/BlendMode;->equals-impl(ILjava/lang/Object;)Z
HSPLandroidx/compose/ui/graphics/BlendMode;->equals-impl0(II)Z
+HSPLandroidx/compose/ui/graphics/BlendMode;->unbox-impl()I
HSPLandroidx/compose/ui/graphics/BlendModeColorFilterHelper;-><clinit>()V
HSPLandroidx/compose/ui/graphics/BlendModeColorFilterHelper;-><init>()V
HSPLandroidx/compose/ui/graphics/BlendModeColorFilterHelper;->BlendModeColorFilter-xETnrds(JI)Landroid/graphics/BlendModeColorFilter;
HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier$measure$1;-><init>(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/graphics/BlockGraphicsLayerModifier;)V
HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier;->access$getLayerBlock$p(Landroidx/compose/ui/graphics/BlockGraphicsLayerModifier;)Lkotlin/jvm/functions/Function1;
-HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier;-><init>(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier;->getLayerBlock()Lkotlin/jvm/functions/Function1;
HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier;->setLayerBlock(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/graphics/Brush$Companion;-><init>()V
+HSPLandroidx/compose/ui/graphics/Brush$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/ui/graphics/Brush;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/Brush;-><init>()V
+HSPLandroidx/compose/ui/graphics/Brush;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/ui/graphics/CanvasHolder;-><init>()V
HSPLandroidx/compose/ui/graphics/CanvasHolder;->getAndroidCanvas()Landroidx/compose/ui/graphics/AndroidCanvas;
+HSPLandroidx/compose/ui/graphics/CanvasKt;->Canvas(Landroidx/compose/ui/graphics/ImageBitmap;)Landroidx/compose/ui/graphics/Canvas;
HSPLandroidx/compose/ui/graphics/CanvasUtils;-><clinit>()V
HSPLandroidx/compose/ui/graphics/CanvasUtils;-><init>()V
HSPLandroidx/compose/ui/graphics/CanvasUtils;->enableZ(Landroid/graphics/Canvas;Z)V
@@ -3369,7 +4417,6 @@
HSPLandroidx/compose/ui/graphics/Color$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/ui/graphics/Color$Companion;->getBlack-0d7_KjU()J
HSPLandroidx/compose/ui/graphics/Color$Companion;->getBlue-0d7_KjU()J
-HSPLandroidx/compose/ui/graphics/Color$Companion;->getLightGray-0d7_KjU()J
HSPLandroidx/compose/ui/graphics/Color$Companion;->getRed-0d7_KjU()J
HSPLandroidx/compose/ui/graphics/Color$Companion;->getTransparent-0d7_KjU()J
HSPLandroidx/compose/ui/graphics/Color$Companion;->getUnspecified-0d7_KjU()J
@@ -3377,7 +4424,6 @@
HSPLandroidx/compose/ui/graphics/Color;-><init>(J)V
HSPLandroidx/compose/ui/graphics/Color;->access$getBlack$cp()J
HSPLandroidx/compose/ui/graphics/Color;->access$getBlue$cp()J
-HSPLandroidx/compose/ui/graphics/Color;->access$getLightGray$cp()J
HSPLandroidx/compose/ui/graphics/Color;->access$getRed$cp()J
HSPLandroidx/compose/ui/graphics/Color;->access$getTransparent$cp()J
HSPLandroidx/compose/ui/graphics/Color;->access$getUnspecified$cp()J
@@ -3402,12 +4448,14 @@
HSPLandroidx/compose/ui/graphics/ColorFilter;-><clinit>()V
HSPLandroidx/compose/ui/graphics/ColorFilter;-><init>(Landroid/graphics/ColorFilter;)V
HSPLandroidx/compose/ui/graphics/ColorFilter;->getNativeColorFilter$ui_graphics_release()Landroid/graphics/ColorFilter;
+HSPLandroidx/compose/ui/graphics/ColorKt;->Color$default(FFFFLandroidx/compose/ui/graphics/colorspace/ColorSpace;ILjava/lang/Object;)J
HSPLandroidx/compose/ui/graphics/ColorKt;->Color$default(IIIIILjava/lang/Object;)J
HSPLandroidx/compose/ui/graphics/ColorKt;->Color(FFFFLandroidx/compose/ui/graphics/colorspace/ColorSpace;)J
HSPLandroidx/compose/ui/graphics/ColorKt;->Color(I)J
HSPLandroidx/compose/ui/graphics/ColorKt;->Color(IIII)J
HSPLandroidx/compose/ui/graphics/ColorKt;->Color(J)J
HSPLandroidx/compose/ui/graphics/ColorKt;->compositeOver--OWjLjI(JJ)J
+HSPLandroidx/compose/ui/graphics/ColorKt;->lerp-jxsXWHM(JJF)J
HSPLandroidx/compose/ui/graphics/ColorKt;->toArgb-8_81llA(J)I
HSPLandroidx/compose/ui/graphics/CompositingStrategy$Companion;-><init>()V
HSPLandroidx/compose/ui/graphics/CompositingStrategy$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
@@ -3434,17 +4482,47 @@
HSPLandroidx/compose/ui/graphics/Float16;-><clinit>()V
HSPLandroidx/compose/ui/graphics/Float16;->constructor-impl(F)S
HSPLandroidx/compose/ui/graphics/Float16;->constructor-impl(S)S
+HSPLandroidx/compose/ui/graphics/Float16;->toFloat-impl(S)F
+HSPLandroidx/compose/ui/graphics/GraphicsLayerModifierKt$graphicsLayer$$inlined$modifierElementOf$1;-><init>(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/graphics/GraphicsLayerModifierKt$graphicsLayer$$inlined$modifierElementOf$1;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/graphics/GraphicsLayerModifierKt$graphicsLayer$$inlined$modifierElementOf$1;->update(Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node;
HSPLandroidx/compose/ui/graphics/GraphicsLayerModifierKt;->graphicsLayer(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;
HSPLandroidx/compose/ui/graphics/GraphicsLayerModifierKt;->graphicsLayer-Ap8cVGQ$default(Landroidx/compose/ui/Modifier;FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZLandroidx/compose/ui/graphics/RenderEffect;JJIILjava/lang/Object;)Landroidx/compose/ui/Modifier;
HSPLandroidx/compose/ui/graphics/GraphicsLayerModifierKt;->graphicsLayer-Ap8cVGQ(Landroidx/compose/ui/Modifier;FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZLandroidx/compose/ui/graphics/RenderEffect;JJI)Landroidx/compose/ui/Modifier;
HSPLandroidx/compose/ui/graphics/GraphicsLayerModifierKt;->toolingGraphicsLayer(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/ui/graphics/GraphicsLayerModifierNodeElement;-><init>(FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZLandroidx/compose/ui/graphics/RenderEffect;JJI)V
+HSPLandroidx/compose/ui/graphics/GraphicsLayerModifierNodeElement;-><init>(FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZLandroidx/compose/ui/graphics/RenderEffect;JJILkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/ui/graphics/GraphicsLayerModifierNodeElement;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/graphics/GraphicsLayerModifierNodeElement;->create()Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;
+HSPLandroidx/compose/ui/graphics/GraphicsLayerModifierNodeElement;->equals(Ljava/lang/Object;)Z
HSPLandroidx/compose/ui/graphics/GraphicsLayerScopeKt;-><clinit>()V
HSPLandroidx/compose/ui/graphics/GraphicsLayerScopeKt;->getDefaultShadowColor()J
+HSPLandroidx/compose/ui/graphics/ImageBitmapConfig$Companion;-><init>()V
+HSPLandroidx/compose/ui/graphics/ImageBitmapConfig$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/ui/graphics/ImageBitmapConfig$Companion;->getArgb8888-_sVssgQ()I
+HSPLandroidx/compose/ui/graphics/ImageBitmapConfig;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/ImageBitmapConfig;->access$getArgb8888$cp()I
+HSPLandroidx/compose/ui/graphics/ImageBitmapConfig;->constructor-impl(I)I
+HSPLandroidx/compose/ui/graphics/ImageBitmapConfig;->equals-impl0(II)Z
+HSPLandroidx/compose/ui/graphics/ImageBitmapKt;->ImageBitmap-x__-hDU$default(IIIZLandroidx/compose/ui/graphics/colorspace/ColorSpace;ILjava/lang/Object;)Landroidx/compose/ui/graphics/ImageBitmap;
+HSPLandroidx/compose/ui/graphics/ImageBitmapKt;->ImageBitmap-x__-hDU(IIIZLandroidx/compose/ui/graphics/colorspace/ColorSpace;)Landroidx/compose/ui/graphics/ImageBitmap;
HSPLandroidx/compose/ui/graphics/Matrix$Companion;-><init>()V
HSPLandroidx/compose/ui/graphics/Matrix$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/ui/graphics/Matrix;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/Matrix;-><init>([F)V
+HSPLandroidx/compose/ui/graphics/Matrix;->box-impl([F)Landroidx/compose/ui/graphics/Matrix;
HSPLandroidx/compose/ui/graphics/Matrix;->constructor-impl$default([FILkotlin/jvm/internal/DefaultConstructorMarker;)[F
HSPLandroidx/compose/ui/graphics/Matrix;->constructor-impl([F)[F
+HSPLandroidx/compose/ui/graphics/Matrix;->map-MK-Hz9U([FJ)J
+HSPLandroidx/compose/ui/graphics/Matrix;->reset-impl([F)V
+HSPLandroidx/compose/ui/graphics/Matrix;->rotateZ-impl([FF)V
+HSPLandroidx/compose/ui/graphics/Matrix;->scale-impl([FFFF)V
+HSPLandroidx/compose/ui/graphics/Matrix;->translate-impl$default([FFFFILjava/lang/Object;)V
+HSPLandroidx/compose/ui/graphics/Matrix;->translate-impl([FFFF)V
+HSPLandroidx/compose/ui/graphics/Matrix;->unbox-impl()[F
+HSPLandroidx/compose/ui/graphics/MatrixKt;->isIdentity-58bKbWc([F)Z
+HSPLandroidx/compose/ui/graphics/Outline$Rectangle;-><init>(Landroidx/compose/ui/geometry/Rect;)V
+HSPLandroidx/compose/ui/graphics/Outline$Rectangle;->getRect()Landroidx/compose/ui/geometry/Rect;
HSPLandroidx/compose/ui/graphics/Outline$Rounded;-><init>(Landroidx/compose/ui/geometry/RoundRect;)V
HSPLandroidx/compose/ui/graphics/Outline$Rounded;->getRoundRect()Landroidx/compose/ui/geometry/RoundRect;
HSPLandroidx/compose/ui/graphics/Outline$Rounded;->getRoundRectPath$ui_graphics_release()Landroidx/compose/ui/graphics/Path;
@@ -3454,7 +4532,9 @@
HSPLandroidx/compose/ui/graphics/OutlineKt;->drawOutline-wDX37Ww$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/Outline;JFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;IILjava/lang/Object;)V
HSPLandroidx/compose/ui/graphics/OutlineKt;->drawOutline-wDX37Ww(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/Outline;JFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V
HSPLandroidx/compose/ui/graphics/OutlineKt;->hasSameCornerRadius(Landroidx/compose/ui/geometry/RoundRect;)Z
+HSPLandroidx/compose/ui/graphics/OutlineKt;->size(Landroidx/compose/ui/geometry/Rect;)J
HSPLandroidx/compose/ui/graphics/OutlineKt;->size(Landroidx/compose/ui/geometry/RoundRect;)J
+HSPLandroidx/compose/ui/graphics/OutlineKt;->topLeft(Landroidx/compose/ui/geometry/Rect;)J
HSPLandroidx/compose/ui/graphics/OutlineKt;->topLeft(Landroidx/compose/ui/geometry/RoundRect;)J
HSPLandroidx/compose/ui/graphics/PaintingStyle$Companion;-><init>()V
HSPLandroidx/compose/ui/graphics/PaintingStyle$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
@@ -3465,6 +4545,24 @@
HSPLandroidx/compose/ui/graphics/PaintingStyle;->access$getStroke$cp()I
HSPLandroidx/compose/ui/graphics/PaintingStyle;->constructor-impl(I)I
HSPLandroidx/compose/ui/graphics/PaintingStyle;->equals-impl0(II)Z
+HSPLandroidx/compose/ui/graphics/Path$Companion;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/Path$Companion;-><init>()V
+HSPLandroidx/compose/ui/graphics/Path;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/Path;->addPath-Uv8p0NA$default(Landroidx/compose/ui/graphics/Path;Landroidx/compose/ui/graphics/Path;JILjava/lang/Object;)V
+HSPLandroidx/compose/ui/graphics/PathFillType$Companion;-><init>()V
+HSPLandroidx/compose/ui/graphics/PathFillType$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/ui/graphics/PathFillType$Companion;->getEvenOdd-Rg-k1Os()I
+HSPLandroidx/compose/ui/graphics/PathFillType$Companion;->getNonZero-Rg-k1Os()I
+HSPLandroidx/compose/ui/graphics/PathFillType;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/PathFillType;-><init>(I)V
+HSPLandroidx/compose/ui/graphics/PathFillType;->access$getEvenOdd$cp()I
+HSPLandroidx/compose/ui/graphics/PathFillType;->access$getNonZero$cp()I
+HSPLandroidx/compose/ui/graphics/PathFillType;->box-impl(I)Landroidx/compose/ui/graphics/PathFillType;
+HSPLandroidx/compose/ui/graphics/PathFillType;->constructor-impl(I)I
+HSPLandroidx/compose/ui/graphics/PathFillType;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/graphics/PathFillType;->equals-impl(ILjava/lang/Object;)Z
+HSPLandroidx/compose/ui/graphics/PathFillType;->equals-impl0(II)Z
+HSPLandroidx/compose/ui/graphics/PathFillType;->unbox-impl()I
HSPLandroidx/compose/ui/graphics/RectangleShapeKt$RectangleShape$1;-><init>()V
HSPLandroidx/compose/ui/graphics/RectangleShapeKt;-><clinit>()V
HSPLandroidx/compose/ui/graphics/RectangleShapeKt;->getRectangleShape()Landroidx/compose/ui/graphics/Shape;
@@ -3522,28 +4620,55 @@
HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$measure$1;-><init>(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;)V
HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;-><init>(FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZLandroidx/compose/ui/graphics/RenderEffect;JJILkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;-><init>(FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZLandroidx/compose/ui/graphics/RenderEffect;JJILkotlin/jvm/functions/Function1;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->access$getAlpha$p(Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;)F
-HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->access$getAmbientShadowColor$p(Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;)J
-HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->access$getCameraDistance$p(Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;)F
-HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->access$getClip$p(Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;)Z
-HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->access$getCompositingStrategy$p(Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;)I
+HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;-><init>(FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZLandroidx/compose/ui/graphics/RenderEffect;JJI)V
+HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;-><init>(FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZLandroidx/compose/ui/graphics/RenderEffect;JJILkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->access$getLayerBlock$p(Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;)Lkotlin/jvm/functions/Function1;
-HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->access$getRenderEffect$p(Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;)Landroidx/compose/ui/graphics/RenderEffect;
-HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->access$getRotationX$p(Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;)F
-HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->access$getRotationY$p(Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;)F
-HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->access$getRotationZ$p(Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;)F
-HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->access$getScaleX$p(Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;)F
-HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->access$getScaleY$p(Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;)F
-HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->access$getShadowElevation$p(Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;)F
-HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->access$getShape$p(Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;)Landroidx/compose/ui/graphics/Shape;
-HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->access$getSpotShadowColor$p(Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;)J
-HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->access$getTransformOrigin$p(Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;)J
-HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->access$getTranslationX$p(Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;)F
-HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->access$getTranslationY$p(Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;)F
-HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getAlpha()F
+HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getAmbientShadowColor-0d7_KjU()J
+HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getCameraDistance()F
+HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getClip()Z
+HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getCompositingStrategy--NrFUSI()I
+HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getRenderEffect()Landroidx/compose/ui/graphics/RenderEffect;
+HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getRotationX()F
+HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getRotationY()F
+HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getRotationZ()F
+HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getScaleX()F
+HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getScaleY()F
+HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getShadowElevation()F
+HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getShape()Landroidx/compose/ui/graphics/Shape;
+HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getSpotShadowColor-0d7_KjU()J
+HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getTransformOrigin-SzJe1aQ()J
+HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getTranslationX()F
+HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getTranslationY()F
HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/ui/graphics/SolidColor;-><init>(J)V
+HSPLandroidx/compose/ui/graphics/SolidColor;-><init>(JLkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/ui/graphics/SolidColor;->applyTo-Pq9zytI(JLandroidx/compose/ui/graphics/Paint;F)V
+HSPLandroidx/compose/ui/graphics/SolidColor;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/graphics/StrokeCap$Companion;-><init>()V
+HSPLandroidx/compose/ui/graphics/StrokeCap$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/ui/graphics/StrokeCap$Companion;->getButt-KaPHkGw()I
+HSPLandroidx/compose/ui/graphics/StrokeCap;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/StrokeCap;-><init>(I)V
+HSPLandroidx/compose/ui/graphics/StrokeCap;->access$getButt$cp()I
+HSPLandroidx/compose/ui/graphics/StrokeCap;->box-impl(I)Landroidx/compose/ui/graphics/StrokeCap;
+HSPLandroidx/compose/ui/graphics/StrokeCap;->constructor-impl(I)I
+HSPLandroidx/compose/ui/graphics/StrokeCap;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/graphics/StrokeCap;->equals-impl(ILjava/lang/Object;)Z
+HSPLandroidx/compose/ui/graphics/StrokeCap;->unbox-impl()I
+HSPLandroidx/compose/ui/graphics/StrokeJoin$Companion;-><init>()V
+HSPLandroidx/compose/ui/graphics/StrokeJoin$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/ui/graphics/StrokeJoin$Companion;->getBevel-LxFBmk8()I
+HSPLandroidx/compose/ui/graphics/StrokeJoin$Companion;->getMiter-LxFBmk8()I
+HSPLandroidx/compose/ui/graphics/StrokeJoin;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/StrokeJoin;-><init>(I)V
+HSPLandroidx/compose/ui/graphics/StrokeJoin;->access$getBevel$cp()I
+HSPLandroidx/compose/ui/graphics/StrokeJoin;->access$getMiter$cp()I
+HSPLandroidx/compose/ui/graphics/StrokeJoin;->box-impl(I)Landroidx/compose/ui/graphics/StrokeJoin;
+HSPLandroidx/compose/ui/graphics/StrokeJoin;->constructor-impl(I)I
+HSPLandroidx/compose/ui/graphics/StrokeJoin;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/graphics/StrokeJoin;->equals-impl(ILjava/lang/Object;)Z
+HSPLandroidx/compose/ui/graphics/StrokeJoin;->unbox-impl()I
HSPLandroidx/compose/ui/graphics/TransformOrigin$Companion;-><init>()V
HSPLandroidx/compose/ui/graphics/TransformOrigin$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/ui/graphics/TransformOrigin$Companion;->getCenter-SzJe1aQ()J
@@ -3554,6 +4679,9 @@
HSPLandroidx/compose/ui/graphics/TransformOrigin;->getPivotFractionX-impl(J)F
HSPLandroidx/compose/ui/graphics/TransformOrigin;->getPivotFractionY-impl(J)F
HSPLandroidx/compose/ui/graphics/TransformOriginKt;->TransformOrigin(FF)J
+HSPLandroidx/compose/ui/graphics/WrapperVerificationHelperMethods;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/WrapperVerificationHelperMethods;-><init>()V
+HSPLandroidx/compose/ui/graphics/WrapperVerificationHelperMethods;->setBlendMode-GB0RdKg(Landroid/graphics/Paint;I)V
HSPLandroidx/compose/ui/graphics/colorspace/Adaptation$Companion$Bradford$1;-><init>([F)V
HSPLandroidx/compose/ui/graphics/colorspace/Adaptation$Companion$Ciecat02$1;-><init>([F)V
HSPLandroidx/compose/ui/graphics/colorspace/Adaptation$Companion$VonKries$1;-><init>([F)V
@@ -3575,34 +4703,62 @@
HSPLandroidx/compose/ui/graphics/colorspace/ColorModel;->access$getRgb$cp()J
HSPLandroidx/compose/ui/graphics/colorspace/ColorModel;->access$getXyz$cp()J
HSPLandroidx/compose/ui/graphics/colorspace/ColorModel;->constructor-impl(J)J
+HSPLandroidx/compose/ui/graphics/colorspace/ColorModel;->equals-impl0(JJ)Z
HSPLandroidx/compose/ui/graphics/colorspace/ColorModel;->getComponentCount-impl(J)I
HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace$Companion;-><init>()V
HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;-><clinit>()V
HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;-><init>(Ljava/lang/String;JI)V
HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;-><init>(Ljava/lang/String;JILkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->equals(Ljava/lang/Object;)Z
HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->getComponentCount()I
HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->getId$ui_graphics_release()I
+HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->getModel-xdoWZVw()J
+HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->getName()Ljava/lang/String;
+HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->isSrgb()Z
+HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->adapt$default(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/WhitePoint;Landroidx/compose/ui/graphics/colorspace/Adaptation;ILjava/lang/Object;)Landroidx/compose/ui/graphics/colorspace/ColorSpace;
+HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->adapt(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/WhitePoint;Landroidx/compose/ui/graphics/colorspace/Adaptation;)Landroidx/compose/ui/graphics/colorspace/ColorSpace;
HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->chromaticAdaptation([F[F[F)[F
HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->compare(Landroidx/compose/ui/graphics/colorspace/WhitePoint;Landroidx/compose/ui/graphics/colorspace/WhitePoint;)Z
HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->compare([F[F)Z
+HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->connect-YBCOT_4$default(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;IILjava/lang/Object;)Landroidx/compose/ui/graphics/colorspace/Connector;
+HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->connect-YBCOT_4(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;I)Landroidx/compose/ui/graphics/colorspace/Connector;
HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->inverse3x3([F)[F
HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->mul3x3([F[F)[F
HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->mul3x3Diag([F[F)[F
HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->mul3x3Float3([F[F)[F
+HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->mul3x3Float3_0([FFFF)F
+HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->mul3x3Float3_1([FFFF)F
+HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->mul3x3Float3_2([FFFF)F
HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->rcpResponse(DDDDDD)D
HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->response(DDDDDD)D
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces$ExtendedSrgb$1;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces$ExtendedSrgb$1;-><init>()V
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces$ExtendedSrgb$2;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces$ExtendedSrgb$2;-><init>()V
+HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces$$ExternalSyntheticLambda0;-><init>()V
+HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces$$ExternalSyntheticLambda1;-><init>()V
HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;-><clinit>()V
HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;-><init>()V
+HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->getCieXyz()Landroidx/compose/ui/graphics/colorspace/ColorSpace;
HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->getColorSpacesArray$ui_graphics_release()[Landroidx/compose/ui/graphics/colorspace/ColorSpace;
HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->getNtsc1953Primaries$ui_graphics_release()[F
+HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->getOklab()Landroidx/compose/ui/graphics/colorspace/ColorSpace;
HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->getSrgb()Landroidx/compose/ui/graphics/colorspace/Rgb;
HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->getSrgbPrimaries$ui_graphics_release()[F
HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->getUnspecified$ui_graphics_release()Landroidx/compose/ui/graphics/colorspace/Rgb;
+HSPLandroidx/compose/ui/graphics/colorspace/Connector$Companion$identity$1;-><init>(Landroidx/compose/ui/graphics/colorspace/ColorSpace;I)V
+HSPLandroidx/compose/ui/graphics/colorspace/Connector$Companion;-><init>()V
+HSPLandroidx/compose/ui/graphics/colorspace/Connector$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/ui/graphics/colorspace/Connector$Companion;->access$computeTransform-YBCOT_4(Landroidx/compose/ui/graphics/colorspace/Connector$Companion;Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;I)[F
+HSPLandroidx/compose/ui/graphics/colorspace/Connector$Companion;->computeTransform-YBCOT_4(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;I)[F
+HSPLandroidx/compose/ui/graphics/colorspace/Connector$Companion;->getOklabToSrgbPerceptual$ui_graphics_release()Landroidx/compose/ui/graphics/colorspace/Connector;
+HSPLandroidx/compose/ui/graphics/colorspace/Connector$Companion;->getSrgbToOklabPerceptual$ui_graphics_release()Landroidx/compose/ui/graphics/colorspace/Connector;
+HSPLandroidx/compose/ui/graphics/colorspace/Connector$Companion;->identity$ui_graphics_release(Landroidx/compose/ui/graphics/colorspace/ColorSpace;)Landroidx/compose/ui/graphics/colorspace/Connector;
+HSPLandroidx/compose/ui/graphics/colorspace/Connector;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/colorspace/Connector;-><init>(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;I)V
+HSPLandroidx/compose/ui/graphics/colorspace/Connector;-><init>(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/ui/graphics/colorspace/Connector;-><init>(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;I[F)V
+HSPLandroidx/compose/ui/graphics/colorspace/Connector;-><init>(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;I[FLkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/ui/graphics/colorspace/Connector;->access$getOklabToSrgbPerceptual$cp()Landroidx/compose/ui/graphics/colorspace/Connector;
+HSPLandroidx/compose/ui/graphics/colorspace/Connector;->access$getSrgbToOklabPerceptual$cp()Landroidx/compose/ui/graphics/colorspace/Connector;
+HSPLandroidx/compose/ui/graphics/colorspace/Connector;->transformToColor-wmQWz5c$ui_graphics_release(FFFF)J
HSPLandroidx/compose/ui/graphics/colorspace/Illuminant;-><clinit>()V
HSPLandroidx/compose/ui/graphics/colorspace/Illuminant;-><init>()V
HSPLandroidx/compose/ui/graphics/colorspace/Illuminant;->getC()Landroidx/compose/ui/graphics/colorspace/WhitePoint;
@@ -3617,44 +4773,76 @@
HSPLandroidx/compose/ui/graphics/colorspace/Oklab$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/ui/graphics/colorspace/Oklab;-><clinit>()V
HSPLandroidx/compose/ui/graphics/colorspace/Oklab;-><init>(Ljava/lang/String;I)V
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb$1;-><init>(Landroidx/compose/ui/graphics/colorspace/TransferParameters;)V
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb$1;->invoke(D)Ljava/lang/Double;
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb$3;-><init>(Landroidx/compose/ui/graphics/colorspace/TransferParameters;)V
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb$3;->invoke(D)Ljava/lang/Double;
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb$5;-><init>(D)V
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb$6;-><init>(D)V
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion$DoubleIdentity$1;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion$DoubleIdentity$1;-><init>()V
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion$DoubleIdentity$1;->invoke(D)Ljava/lang/Double;
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion$DoubleIdentity$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/graphics/colorspace/Oklab;->getMaxValue(I)F
+HSPLandroidx/compose/ui/graphics/colorspace/Oklab;->getMinValue(I)F
+HSPLandroidx/compose/ui/graphics/colorspace/Oklab;->toXy$ui_graphics_release(FFF)J
+HSPLandroidx/compose/ui/graphics/colorspace/Oklab;->toZ$ui_graphics_release(FFF)F
+HSPLandroidx/compose/ui/graphics/colorspace/Oklab;->xyzaToColor-JlNiLsg$ui_graphics_release(FFFFLandroidx/compose/ui/graphics/colorspace/ColorSpace;)J
+HSPLandroidx/compose/ui/graphics/colorspace/RenderIntent$Companion;-><init>()V
+HSPLandroidx/compose/ui/graphics/colorspace/RenderIntent$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/ui/graphics/colorspace/RenderIntent$Companion;->getAbsolute-uksYyKA()I
+HSPLandroidx/compose/ui/graphics/colorspace/RenderIntent$Companion;->getPerceptual-uksYyKA()I
+HSPLandroidx/compose/ui/graphics/colorspace/RenderIntent$Companion;->getRelative-uksYyKA()I
+HSPLandroidx/compose/ui/graphics/colorspace/RenderIntent;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/colorspace/RenderIntent;->access$getAbsolute$cp()I
+HSPLandroidx/compose/ui/graphics/colorspace/RenderIntent;->access$getPerceptual$cp()I
+HSPLandroidx/compose/ui/graphics/colorspace/RenderIntent;->access$getRelative$cp()I
+HSPLandroidx/compose/ui/graphics/colorspace/RenderIntent;->constructor-impl(I)I
+HSPLandroidx/compose/ui/graphics/colorspace/RenderIntent;->equals-impl0(II)Z
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda0;-><init>(Landroidx/compose/ui/graphics/colorspace/Rgb;)V
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda0;->invoke(D)D
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda1;-><init>(Landroidx/compose/ui/graphics/colorspace/Rgb;)V
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda1;->invoke(D)D
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda2;-><init>()V
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda2;->invoke(D)D
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda3;-><init>(Landroidx/compose/ui/graphics/colorspace/TransferParameters;)V
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda3;->invoke(D)D
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda5;-><init>(Landroidx/compose/ui/graphics/colorspace/TransferParameters;)V
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda5;->invoke(D)D
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda7;-><init>(D)V
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda8;-><init>(D)V
HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;-><init>()V
HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->access$computeXYZMatrix(Landroidx/compose/ui/graphics/colorspace/Rgb$Companion;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;)[F
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->access$isSrgb(Landroidx/compose/ui/graphics/colorspace/Rgb$Companion;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;FFI)Z
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->access$isSrgb(Landroidx/compose/ui/graphics/colorspace/Rgb$Companion;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;Landroidx/compose/ui/graphics/colorspace/DoubleFunction;Landroidx/compose/ui/graphics/colorspace/DoubleFunction;FFI)Z
HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->access$isWideGamut(Landroidx/compose/ui/graphics/colorspace/Rgb$Companion;[FFF)Z
HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->access$xyPrimaries(Landroidx/compose/ui/graphics/colorspace/Rgb$Companion;[F)[F
HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->area([F)F
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->compare(DLkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Z
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->compare(DLandroidx/compose/ui/graphics/colorspace/DoubleFunction;Landroidx/compose/ui/graphics/colorspace/DoubleFunction;)Z
HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->computeXYZMatrix([FLandroidx/compose/ui/graphics/colorspace/WhitePoint;)[F
HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->contains([F[F)Z
HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->cross(FFFF)F
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->isSrgb([FLandroidx/compose/ui/graphics/colorspace/WhitePoint;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;FFI)Z
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->isSrgb([FLandroidx/compose/ui/graphics/colorspace/WhitePoint;Landroidx/compose/ui/graphics/colorspace/DoubleFunction;Landroidx/compose/ui/graphics/colorspace/DoubleFunction;FFI)Z
HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->isWideGamut([FFF)Z
HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->xyPrimaries([F)[F
HSPLandroidx/compose/ui/graphics/colorspace/Rgb$eotf$1;-><init>(Landroidx/compose/ui/graphics/colorspace/Rgb;)V
HSPLandroidx/compose/ui/graphics/colorspace/Rgb$oetf$1;-><init>(Landroidx/compose/ui/graphics/colorspace/Rgb;)V
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->$r8$lambda$FANKyyW7TMwi4gnihl1LqxbkU6k(Landroidx/compose/ui/graphics/colorspace/Rgb;D)D
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->$r8$lambda$G8Pyx7Z9bMrnDjgEiQ7pXGTZEzg(Landroidx/compose/ui/graphics/colorspace/TransferParameters;D)D
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->$r8$lambda$OfmTeMXzL_nayJmS5mO6N4G4DlI(Landroidx/compose/ui/graphics/colorspace/Rgb;D)D
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->$r8$lambda$ahWovdYS5NpJ-IThda37cTda4qg(D)D
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->$r8$lambda$q_AtDSzDu9yw5JwgrVWJo3kmlB0(Landroidx/compose/ui/graphics/colorspace/TransferParameters;D)D
HSPLandroidx/compose/ui/graphics/colorspace/Rgb;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb;-><init>(Landroidx/compose/ui/graphics/colorspace/Rgb;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;)V
HSPLandroidx/compose/ui/graphics/colorspace/Rgb;-><init>(Ljava/lang/String;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;DFFI)V
HSPLandroidx/compose/ui/graphics/colorspace/Rgb;-><init>(Ljava/lang/String;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;Landroidx/compose/ui/graphics/colorspace/TransferParameters;I)V
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb;-><init>(Ljava/lang/String;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;[FLkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;FFLandroidx/compose/ui/graphics/colorspace/TransferParameters;I)V
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb;-><init>(Ljava/lang/String;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;[FLandroidx/compose/ui/graphics/colorspace/DoubleFunction;Landroidx/compose/ui/graphics/colorspace/DoubleFunction;FFLandroidx/compose/ui/graphics/colorspace/TransferParameters;I)V
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->DoubleIdentity$lambda$12(D)D
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->_init_$lambda$6(Landroidx/compose/ui/graphics/colorspace/TransferParameters;D)D
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->_init_$lambda$8(Landroidx/compose/ui/graphics/colorspace/TransferParameters;D)D
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->eotfFunc$lambda$1(Landroidx/compose/ui/graphics/colorspace/Rgb;D)D
HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getEotfOrig$ui_graphics_release()Lkotlin/jvm/functions/Function1;
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getEotfOrig$ui_graphics_release()Landroidx/compose/ui/graphics/colorspace/DoubleFunction;
HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getMaxValue(I)F
HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getMinValue(I)F
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getOetfOrig$ui_graphics_release()Lkotlin/jvm/functions/Function1;
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getOetfOrig$ui_graphics_release()Landroidx/compose/ui/graphics/colorspace/DoubleFunction;
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getTransform$ui_graphics_release()[F
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getWhitePoint()Landroidx/compose/ui/graphics/colorspace/WhitePoint;
HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->isSrgb()Z
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->oetfFunc$lambda$0(Landroidx/compose/ui/graphics/colorspace/Rgb;D)D
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->toXy$ui_graphics_release(FFF)J
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->toZ$ui_graphics_release(FFF)F
+HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->xyzaToColor-JlNiLsg$ui_graphics_release(FFFFLandroidx/compose/ui/graphics/colorspace/ColorSpace;)J
HSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;-><init>(DDDDDDD)V
HSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;-><init>(DDDDDDDILkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;->getA()D
@@ -3669,6 +4857,10 @@
HSPLandroidx/compose/ui/graphics/colorspace/WhitePoint;->getY()F
HSPLandroidx/compose/ui/graphics/colorspace/WhitePoint;->toXyz$ui_graphics_release()[F
HSPLandroidx/compose/ui/graphics/colorspace/Xyz;-><init>(Ljava/lang/String;I)V
+HSPLandroidx/compose/ui/graphics/colorspace/Xyz;->clamp(F)F
+HSPLandroidx/compose/ui/graphics/colorspace/Xyz;->getMaxValue(I)F
+HSPLandroidx/compose/ui/graphics/colorspace/Xyz;->getMinValue(I)F
+HSPLandroidx/compose/ui/graphics/colorspace/Xyz;->xyzaToColor-JlNiLsg$ui_graphics_release(FFFFLandroidx/compose/ui/graphics/colorspace/ColorSpace;)J
HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;-><init>(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/graphics/Canvas;J)V
HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;-><init>(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/graphics/Canvas;JILkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;-><init>(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/graphics/Canvas;JLkotlin/jvm/internal/DefaultConstructorMarker;)V
@@ -3692,8 +4884,10 @@
HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;-><init>()V
HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->configurePaint-2qPWKa0$default(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope;JLandroidx/compose/ui/graphics/drawscope/DrawStyle;FLandroidx/compose/ui/graphics/ColorFilter;IIILjava/lang/Object;)Landroidx/compose/ui/graphics/Paint;
HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->configurePaint-2qPWKa0(JLandroidx/compose/ui/graphics/drawscope/DrawStyle;FLandroidx/compose/ui/graphics/ColorFilter;II)Landroidx/compose/ui/graphics/Paint;
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->configurePaint-swdJneE$default(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope;Landroidx/compose/ui/graphics/Brush;Landroidx/compose/ui/graphics/drawscope/DrawStyle;FLandroidx/compose/ui/graphics/ColorFilter;IIILjava/lang/Object;)Landroidx/compose/ui/graphics/Paint;
HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->configurePaint-swdJneE(Landroidx/compose/ui/graphics/Brush;Landroidx/compose/ui/graphics/drawscope/DrawStyle;FLandroidx/compose/ui/graphics/ColorFilter;II)Landroidx/compose/ui/graphics/Paint;
HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawImage-AZ2fEMs(Landroidx/compose/ui/graphics/ImageBitmap;JJJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;II)V
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawPath-GBMwjPU(Landroidx/compose/ui/graphics/Path;Landroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V
HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawPath-LG529CI(Landroidx/compose/ui/graphics/Path;JFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V
HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawRect-n-J9OG0(JJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V
HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawRoundRect-u-Aw5IA(JJJJLandroidx/compose/ui/graphics/drawscope/DrawStyle;FLandroidx/compose/ui/graphics/ColorFilter;I)V
@@ -3707,6 +4901,7 @@
HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;-><init>(Landroidx/compose/ui/graphics/drawscope/DrawContext;)V
HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->getSize-NH-jbRc()J
HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->inset(FFFF)V
+HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->transform-58bKbWc([F)V
HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->translate(FF)V
HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt;-><clinit>()V
HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt;->access$asDrawTransform(Landroidx/compose/ui/graphics/drawscope/DrawContext;)Landroidx/compose/ui/graphics/drawscope/DrawTransform;
@@ -3718,6 +4913,7 @@
HSPLandroidx/compose/ui/graphics/drawscope/DrawScope$Companion;->getDefaultFilterQuality-f-v9h1I()I
HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;-><clinit>()V
HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawImage-AZ2fEMs$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/ImageBitmap;JJJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;IIILjava/lang/Object;)V
+HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawPath-GBMwjPU$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/Path;Landroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;IILjava/lang/Object;)V
HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawRect-n-J9OG0$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;JJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;IILjava/lang/Object;)V
HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->getSize-NH-jbRc()J
HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->offsetSize-PENXr5M(JJ)J
@@ -3727,19 +4923,339 @@
HSPLandroidx/compose/ui/graphics/drawscope/Fill;-><clinit>()V
HSPLandroidx/compose/ui/graphics/drawscope/Fill;-><init>()V
HSPLandroidx/compose/ui/graphics/painter/BitmapPainter;-><init>(Landroidx/compose/ui/graphics/ImageBitmap;JJ)V
-HSPLandroidx/compose/ui/graphics/painter/BitmapPainter;-><init>(Landroidx/compose/ui/graphics/ImageBitmap;JJILkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/ui/graphics/painter/BitmapPainter;-><init>(Landroidx/compose/ui/graphics/ImageBitmap;JJLkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/graphics/painter/BitmapPainter;->applyColorFilter(Landroidx/compose/ui/graphics/ColorFilter;)Z
HSPLandroidx/compose/ui/graphics/painter/BitmapPainter;->equals(Ljava/lang/Object;)Z
HSPLandroidx/compose/ui/graphics/painter/BitmapPainter;->getIntrinsicSize-NH-jbRc()J
HSPLandroidx/compose/ui/graphics/painter/BitmapPainter;->onDraw(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V
+HSPLandroidx/compose/ui/graphics/painter/BitmapPainter;->setFilterQuality-vDHp3xo$ui_graphics_release(I)V
HSPLandroidx/compose/ui/graphics/painter/BitmapPainter;->validateSize-N5eqBDc(JJ)J
+HSPLandroidx/compose/ui/graphics/painter/BitmapPainterKt;->BitmapPainter-QZhYCtY$default(Landroidx/compose/ui/graphics/ImageBitmap;JJIILjava/lang/Object;)Landroidx/compose/ui/graphics/painter/BitmapPainter;
+HSPLandroidx/compose/ui/graphics/painter/BitmapPainterKt;->BitmapPainter-QZhYCtY(Landroidx/compose/ui/graphics/ImageBitmap;JJI)Landroidx/compose/ui/graphics/painter/BitmapPainter;
HSPLandroidx/compose/ui/graphics/painter/Painter$drawLambda$1;-><init>(Landroidx/compose/ui/graphics/painter/Painter;)V
HSPLandroidx/compose/ui/graphics/painter/Painter;-><init>()V
HSPLandroidx/compose/ui/graphics/painter/Painter;->configureAlpha(F)V
HSPLandroidx/compose/ui/graphics/painter/Painter;->configureColorFilter(Landroidx/compose/ui/graphics/ColorFilter;)V
HSPLandroidx/compose/ui/graphics/painter/Painter;->configureLayoutDirection(Landroidx/compose/ui/unit/LayoutDirection;)V
HSPLandroidx/compose/ui/graphics/painter/Painter;->draw-x_KDEd0(Landroidx/compose/ui/graphics/drawscope/DrawScope;JFLandroidx/compose/ui/graphics/ColorFilter;)V
+HSPLandroidx/compose/ui/graphics/vector/DrawCache;-><init>()V
+HSPLandroidx/compose/ui/graphics/vector/DrawCache;->clear(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V
+HSPLandroidx/compose/ui/graphics/vector/DrawCache;->drawCachedImage-CJJAR-o(JLandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/graphics/vector/DrawCache;->drawInto(Landroidx/compose/ui/graphics/drawscope/DrawScope;FLandroidx/compose/ui/graphics/ColorFilter;)V
+HSPLandroidx/compose/ui/graphics/vector/GroupComponent;-><init>()V
+HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->draw(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V
+HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->getInvalidateListener$ui_release()Lkotlin/jvm/functions/Function0;
+HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->getNumChildren()I
+HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->getWillClipPath()Z
+HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->insertAt(ILandroidx/compose/ui/graphics/vector/VNode;)V
+HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->remove(II)V
+HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->setInvalidateListener$ui_release(Lkotlin/jvm/functions/Function0;)V
+HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->setName(Ljava/lang/String;)V
+HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->setPivotX(F)V
+HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->setPivotY(F)V
+HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->setScaleX(F)V
+HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->setScaleY(F)V
+HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->updateClipPath()V
+HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->updateMatrix()V
+HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;-><init>(Ljava/lang/String;FFFFFFFLjava/util/List;Ljava/util/List;)V
+HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;-><init>(Ljava/lang/String;FFFFFFFLjava/util/List;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getChildren()Ljava/util/List;
+HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getClipPathData()Ljava/util/List;
+HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getName()Ljava/lang/String;
+HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getPivotX()F
+HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getPivotY()F
+HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getRotate()F
+HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getScaleX()F
+HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getScaleY()F
+HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getTranslationX()F
+HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getTranslationY()F
+HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;-><init>(Ljava/lang/String;FFFFJIZ)V
+HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;-><init>(Ljava/lang/String;FFFFJIZILkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;-><init>(Ljava/lang/String;FFFFJIZLkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->addPath-oIyEayM$default(Landroidx/compose/ui/graphics/vector/ImageVector$Builder;Ljava/util/List;ILjava/lang/String;Landroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Brush;FFIIFFFFILjava/lang/Object;)Landroidx/compose/ui/graphics/vector/ImageVector$Builder;
+HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->addPath-oIyEayM(Ljava/util/List;ILjava/lang/String;Landroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Brush;FFIIFFFF)Landroidx/compose/ui/graphics/vector/ImageVector$Builder;
+HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->asVectorGroup(Landroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;)Landroidx/compose/ui/graphics/vector/VectorGroup;
+HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->build()Landroidx/compose/ui/graphics/vector/ImageVector;
+HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->ensureNotConsumed()V
+HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->getCurrentGroup()Landroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;
+HSPLandroidx/compose/ui/graphics/vector/ImageVector$Companion;-><init>()V
+HSPLandroidx/compose/ui/graphics/vector/ImageVector$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/ui/graphics/vector/ImageVector;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/vector/ImageVector;-><init>(Ljava/lang/String;FFFFLandroidx/compose/ui/graphics/vector/VectorGroup;JIZ)V
+HSPLandroidx/compose/ui/graphics/vector/ImageVector;-><init>(Ljava/lang/String;FFFFLandroidx/compose/ui/graphics/vector/VectorGroup;JIZLkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/ui/graphics/vector/ImageVector;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/graphics/vector/ImageVector;->getAutoMirror()Z
+HSPLandroidx/compose/ui/graphics/vector/ImageVector;->getDefaultHeight-D9Ej5fM()F
+HSPLandroidx/compose/ui/graphics/vector/ImageVector;->getDefaultWidth-D9Ej5fM()F
+HSPLandroidx/compose/ui/graphics/vector/ImageVector;->getName()Ljava/lang/String;
+HSPLandroidx/compose/ui/graphics/vector/ImageVector;->getRoot()Landroidx/compose/ui/graphics/vector/VectorGroup;
+HSPLandroidx/compose/ui/graphics/vector/ImageVector;->getTintBlendMode-0nO6VwU()I
+HSPLandroidx/compose/ui/graphics/vector/ImageVector;->getTintColor-0d7_KjU()J
+HSPLandroidx/compose/ui/graphics/vector/ImageVector;->getViewportHeight()F
+HSPLandroidx/compose/ui/graphics/vector/ImageVector;->getViewportWidth()F
+HSPLandroidx/compose/ui/graphics/vector/ImageVectorKt;->access$peek(Ljava/util/ArrayList;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/graphics/vector/ImageVectorKt;->access$push(Ljava/util/ArrayList;Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/graphics/vector/ImageVectorKt;->peek(Ljava/util/ArrayList;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/graphics/vector/ImageVectorKt;->push(Ljava/util/ArrayList;Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/graphics/vector/PathBuilder;-><init>()V
+HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->addNode(Landroidx/compose/ui/graphics/vector/PathNode;)Landroidx/compose/ui/graphics/vector/PathBuilder;
+HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->close()Landroidx/compose/ui/graphics/vector/PathBuilder;
+HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->getNodes()Ljava/util/List;
+HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->horizontalLineTo(F)Landroidx/compose/ui/graphics/vector/PathBuilder;
+HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->horizontalLineToRelative(F)Landroidx/compose/ui/graphics/vector/PathBuilder;
+HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->lineTo(FF)Landroidx/compose/ui/graphics/vector/PathBuilder;
+HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->lineToRelative(FF)Landroidx/compose/ui/graphics/vector/PathBuilder;
+HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->moveTo(FF)Landroidx/compose/ui/graphics/vector/PathBuilder;
+HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->verticalLineTo(F)Landroidx/compose/ui/graphics/vector/PathBuilder;
+HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->verticalLineToRelative(F)Landroidx/compose/ui/graphics/vector/PathBuilder;
+HSPLandroidx/compose/ui/graphics/vector/PathComponent$pathMeasure$2;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/vector/PathComponent$pathMeasure$2;-><init>()V
+HSPLandroidx/compose/ui/graphics/vector/PathComponent;-><init>()V
+HSPLandroidx/compose/ui/graphics/vector/PathComponent;->draw(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V
+HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setFill(Landroidx/compose/ui/graphics/Brush;)V
+HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setFillAlpha(F)V
+HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setName(Ljava/lang/String;)V
+HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setPathData(Ljava/util/List;)V
+HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setPathFillType-oQ8Xj4U(I)V
+HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setStroke(Landroidx/compose/ui/graphics/Brush;)V
+HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setStrokeAlpha(F)V
+HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setStrokeLineCap-BeK7IIE(I)V
+HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setStrokeLineJoin-Ww9F2mQ(I)V
+HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setStrokeLineMiter(F)V
+HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setStrokeLineWidth(F)V
+HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setTrimPathEnd(F)V
+HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setTrimPathOffset(F)V
+HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setTrimPathStart(F)V
+HSPLandroidx/compose/ui/graphics/vector/PathComponent;->updatePath()V
+HSPLandroidx/compose/ui/graphics/vector/PathComponent;->updateRenderPath()V
+HSPLandroidx/compose/ui/graphics/vector/PathNode$Close;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/vector/PathNode$Close;-><init>()V
+HSPLandroidx/compose/ui/graphics/vector/PathNode$HorizontalTo;-><init>(F)V
+HSPLandroidx/compose/ui/graphics/vector/PathNode$HorizontalTo;->getX()F
+HSPLandroidx/compose/ui/graphics/vector/PathNode$LineTo;-><init>(FF)V
+HSPLandroidx/compose/ui/graphics/vector/PathNode$LineTo;->getX()F
+HSPLandroidx/compose/ui/graphics/vector/PathNode$LineTo;->getY()F
+HSPLandroidx/compose/ui/graphics/vector/PathNode$MoveTo;-><init>(FF)V
+HSPLandroidx/compose/ui/graphics/vector/PathNode$MoveTo;->getX()F
+HSPLandroidx/compose/ui/graphics/vector/PathNode$MoveTo;->getY()F
+HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeHorizontalTo;-><init>(F)V
+HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeHorizontalTo;->getDx()F
+HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeLineTo;-><init>(FF)V
+HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeLineTo;->getDx()F
+HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeLineTo;->getDy()F
+HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeVerticalTo;-><init>(F)V
+HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeVerticalTo;->getDy()F
+HSPLandroidx/compose/ui/graphics/vector/PathNode$VerticalTo;-><init>(F)V
+HSPLandroidx/compose/ui/graphics/vector/PathNode$VerticalTo;->getY()F
+HSPLandroidx/compose/ui/graphics/vector/PathNode;-><init>(ZZ)V
+HSPLandroidx/compose/ui/graphics/vector/PathNode;-><init>(ZZILkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/ui/graphics/vector/PathNode;-><init>(ZZLkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/ui/graphics/vector/PathParser$PathPoint;-><init>(FF)V
+HSPLandroidx/compose/ui/graphics/vector/PathParser$PathPoint;-><init>(FFILkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/ui/graphics/vector/PathParser$PathPoint;->getX()F
+HSPLandroidx/compose/ui/graphics/vector/PathParser$PathPoint;->getY()F
+HSPLandroidx/compose/ui/graphics/vector/PathParser$PathPoint;->reset()V
+HSPLandroidx/compose/ui/graphics/vector/PathParser$PathPoint;->setX(F)V
+HSPLandroidx/compose/ui/graphics/vector/PathParser$PathPoint;->setY(F)V
+HSPLandroidx/compose/ui/graphics/vector/PathParser;-><init>()V
+HSPLandroidx/compose/ui/graphics/vector/PathParser;->addPathNodes(Ljava/util/List;)Landroidx/compose/ui/graphics/vector/PathParser;
+HSPLandroidx/compose/ui/graphics/vector/PathParser;->clear()V
+HSPLandroidx/compose/ui/graphics/vector/PathParser;->close(Landroidx/compose/ui/graphics/Path;)V
+HSPLandroidx/compose/ui/graphics/vector/PathParser;->horizontalTo(Landroidx/compose/ui/graphics/vector/PathNode$HorizontalTo;Landroidx/compose/ui/graphics/Path;)V
+HSPLandroidx/compose/ui/graphics/vector/PathParser;->lineTo(Landroidx/compose/ui/graphics/vector/PathNode$LineTo;Landroidx/compose/ui/graphics/Path;)V
+HSPLandroidx/compose/ui/graphics/vector/PathParser;->moveTo(Landroidx/compose/ui/graphics/vector/PathNode$MoveTo;Landroidx/compose/ui/graphics/Path;)V
+HSPLandroidx/compose/ui/graphics/vector/PathParser;->relativeHorizontalTo(Landroidx/compose/ui/graphics/vector/PathNode$RelativeHorizontalTo;Landroidx/compose/ui/graphics/Path;)V
+HSPLandroidx/compose/ui/graphics/vector/PathParser;->relativeLineTo(Landroidx/compose/ui/graphics/vector/PathNode$RelativeLineTo;Landroidx/compose/ui/graphics/Path;)V
+HSPLandroidx/compose/ui/graphics/vector/PathParser;->relativeVerticalTo(Landroidx/compose/ui/graphics/vector/PathNode$RelativeVerticalTo;Landroidx/compose/ui/graphics/Path;)V
+HSPLandroidx/compose/ui/graphics/vector/PathParser;->toPath(Landroidx/compose/ui/graphics/Path;)Landroidx/compose/ui/graphics/Path;
+HSPLandroidx/compose/ui/graphics/vector/PathParser;->verticalTo(Landroidx/compose/ui/graphics/vector/PathNode$VerticalTo;Landroidx/compose/ui/graphics/Path;)V
+HSPLandroidx/compose/ui/graphics/vector/VNode;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/vector/VNode;-><init>()V
+HSPLandroidx/compose/ui/graphics/vector/VNode;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/ui/graphics/vector/VNode;->getInvalidateListener$ui_release()Lkotlin/jvm/functions/Function0;
+HSPLandroidx/compose/ui/graphics/vector/VNode;->invalidate()V
+HSPLandroidx/compose/ui/graphics/vector/VNode;->setInvalidateListener$ui_release(Lkotlin/jvm/functions/Function0;)V
+HSPLandroidx/compose/ui/graphics/vector/VectorApplier;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorApplier;-><init>(Landroidx/compose/ui/graphics/vector/VNode;)V
+HSPLandroidx/compose/ui/graphics/vector/VectorApplier;->asGroup(Landroidx/compose/ui/graphics/vector/VNode;)Landroidx/compose/ui/graphics/vector/GroupComponent;
+HSPLandroidx/compose/ui/graphics/vector/VectorApplier;->insertBottomUp(ILandroidx/compose/ui/graphics/vector/VNode;)V
+HSPLandroidx/compose/ui/graphics/vector/VectorApplier;->insertBottomUp(ILjava/lang/Object;)V
+HSPLandroidx/compose/ui/graphics/vector/VectorApplier;->insertTopDown(ILandroidx/compose/ui/graphics/vector/VNode;)V
+HSPLandroidx/compose/ui/graphics/vector/VectorApplier;->insertTopDown(ILjava/lang/Object;)V
+HSPLandroidx/compose/ui/graphics/vector/VectorApplier;->onClear()V
+HSPLandroidx/compose/ui/graphics/vector/VectorComponent$drawVectorBlock$1;-><init>(Landroidx/compose/ui/graphics/vector/VectorComponent;)V
+HSPLandroidx/compose/ui/graphics/vector/VectorComponent$drawVectorBlock$1;->invoke(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V
+HSPLandroidx/compose/ui/graphics/vector/VectorComponent$drawVectorBlock$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/graphics/vector/VectorComponent$invalidateCallback$1;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorComponent$invalidateCallback$1;-><init>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorComponent$root$1$1;-><init>(Landroidx/compose/ui/graphics/vector/VectorComponent;)V
+HSPLandroidx/compose/ui/graphics/vector/VectorComponent$root$1$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/ui/graphics/vector/VectorComponent$root$1$1;->invoke()V
+HSPLandroidx/compose/ui/graphics/vector/VectorComponent;-><init>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->access$doInvalidate(Landroidx/compose/ui/graphics/vector/VectorComponent;)V
+HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->doInvalidate()V
+HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->draw(Landroidx/compose/ui/graphics/drawscope/DrawScope;FLandroidx/compose/ui/graphics/ColorFilter;)V
+HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->getRoot()Landroidx/compose/ui/graphics/vector/GroupComponent;
+HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->getViewportHeight()F
+HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->getViewportWidth()F
+HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->setIntrinsicColorFilter$ui_release(Landroidx/compose/ui/graphics/ColorFilter;)V
+HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->setInvalidateCallback$ui_release(Lkotlin/jvm/functions/Function0;)V
+HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->setName(Ljava/lang/String;)V
+HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->setViewportHeight(F)V
+HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->setViewportWidth(F)V
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$1;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$1;-><init>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$1;->invoke()Landroidx/compose/ui/graphics/vector/PathComponent;
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$10;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$10;-><init>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$10;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$10;->invoke-CSYIeUk(Landroidx/compose/ui/graphics/vector/PathComponent;I)V
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$11;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$11;-><init>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$11;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;F)V
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$11;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$12;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$12;-><init>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$12;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;F)V
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$12;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$13;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$13;-><init>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$13;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;F)V
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$13;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$14;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$14;-><init>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$14;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;F)V
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$14;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$1;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$1;-><init>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$1;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;Ljava/lang/String;)V
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$2;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$2;-><init>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$2;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;Ljava/util/List;)V
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$3;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$3;-><init>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$3;->invoke-pweu1eQ(Landroidx/compose/ui/graphics/vector/PathComponent;I)V
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$4;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$4;-><init>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$4;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;Landroidx/compose/ui/graphics/Brush;)V
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$5;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$5;-><init>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$5;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;F)V
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$6;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$6;-><init>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$6;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;Landroidx/compose/ui/graphics/Brush;)V
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$6;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$7;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$7;-><init>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$7;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;F)V
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$7;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$8;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$8;-><init>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$8;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;F)V
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$8;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$9;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$9;-><init>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$9;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$9;->invoke-kLtJ_vA(Landroidx/compose/ui/graphics/vector/PathComponent;I)V
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path-9cdaXJ4$$inlined$ComposeNode$1;-><init>(Lkotlin/jvm/functions/Function0;)V
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path-9cdaXJ4$$inlined$ComposeNode$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt;->Path-9cdaXJ4(Ljava/util/List;ILjava/lang/String;Landroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Brush;FFIIFFFFLandroidx/compose/runtime/Composer;III)V
+HSPLandroidx/compose/ui/graphics/vector/VectorConfig;->getOrDefault(Landroidx/compose/ui/graphics/vector/VectorProperty;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/graphics/vector/VectorGroup$iterator$1;-><init>(Landroidx/compose/ui/graphics/vector/VectorGroup;)V
+HSPLandroidx/compose/ui/graphics/vector/VectorGroup$iterator$1;->hasNext()Z
+HSPLandroidx/compose/ui/graphics/vector/VectorGroup$iterator$1;->next()Landroidx/compose/ui/graphics/vector/VectorNode;
+HSPLandroidx/compose/ui/graphics/vector/VectorGroup$iterator$1;->next()Ljava/lang/Object;
+HSPLandroidx/compose/ui/graphics/vector/VectorGroup;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorGroup;-><init>(Ljava/lang/String;FFFFFFFLjava/util/List;Ljava/util/List;)V
+HSPLandroidx/compose/ui/graphics/vector/VectorGroup;->access$getChildren$p(Landroidx/compose/ui/graphics/vector/VectorGroup;)Ljava/util/List;
+HSPLandroidx/compose/ui/graphics/vector/VectorGroup;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/graphics/vector/VectorGroup;->iterator()Ljava/util/Iterator;
+HSPLandroidx/compose/ui/graphics/vector/VectorKt;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorKt;->getDefaultFillType()I
+HSPLandroidx/compose/ui/graphics/vector/VectorKt;->getDefaultStrokeLineCap()I
+HSPLandroidx/compose/ui/graphics/vector/VectorKt;->getDefaultStrokeLineJoin()I
+HSPLandroidx/compose/ui/graphics/vector/VectorKt;->getEmptyPath()Ljava/util/List;
+HSPLandroidx/compose/ui/graphics/vector/VectorNode;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorNode;-><init>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorNode;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/runtime/Composition;)V
+HSPLandroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2$invoke$$inlined$onDispose$1;->dispose()V
+HSPLandroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2;-><init>(Landroidx/compose/runtime/Composition;)V
+HSPLandroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult;
+HSPLandroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/graphics/vector/VectorPainter$composeVector$1;-><init>(Lkotlin/jvm/functions/Function4;Landroidx/compose/ui/graphics/vector/VectorPainter;)V
+HSPLandroidx/compose/ui/graphics/vector/VectorPainter$composeVector$1;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/ui/graphics/vector/VectorPainter$composeVector$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/graphics/vector/VectorPainter$vector$1$1;-><init>(Landroidx/compose/ui/graphics/vector/VectorPainter;)V
+HSPLandroidx/compose/ui/graphics/vector/VectorPainter$vector$1$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/ui/graphics/vector/VectorPainter$vector$1$1;->invoke()V
+HSPLandroidx/compose/ui/graphics/vector/VectorPainter;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorPainter;-><init>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->RenderVector$ui_release(Ljava/lang/String;FFLkotlin/jvm/functions/Function4;Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->access$getVector$p(Landroidx/compose/ui/graphics/vector/VectorPainter;)Landroidx/compose/ui/graphics/vector/VectorComponent;
+HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->access$setDirty(Landroidx/compose/ui/graphics/vector/VectorPainter;Z)V
+HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->applyColorFilter(Landroidx/compose/ui/graphics/ColorFilter;)Z
+HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->composeVector(Landroidx/compose/runtime/CompositionContext;Lkotlin/jvm/functions/Function4;)Landroidx/compose/runtime/Composition;
+HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->getAutoMirror$ui_release()Z
+HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->getIntrinsicSize-NH-jbRc()J
+HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->getSize-NH-jbRc$ui_release()J
+HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->isDirty()Z
+HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->onDraw(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V
+HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->setAutoMirror$ui_release(Z)V
+HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->setDirty(Z)V
+HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->setIntrinsicColorFilter$ui_release(Landroidx/compose/ui/graphics/ColorFilter;)V
+HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->setSize-uvyYCjk$ui_release(J)V
+HSPLandroidx/compose/ui/graphics/vector/VectorPainterKt$RenderVectorGroup$config$1;-><init>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorPainterKt$rememberVectorPainter$3;-><init>(Landroidx/compose/ui/graphics/vector/ImageVector;)V
+HSPLandroidx/compose/ui/graphics/vector/VectorPainterKt$rememberVectorPainter$3;->invoke(FFLandroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/ui/graphics/vector/VectorPainterKt$rememberVectorPainter$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/graphics/vector/VectorPainterKt;->RenderVectorGroup(Landroidx/compose/ui/graphics/vector/VectorGroup;Ljava/util/Map;Landroidx/compose/runtime/Composer;II)V
+HSPLandroidx/compose/ui/graphics/vector/VectorPainterKt;->rememberVectorPainter(Landroidx/compose/ui/graphics/vector/ImageVector;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/graphics/vector/VectorPainter;
+HSPLandroidx/compose/ui/graphics/vector/VectorPainterKt;->rememberVectorPainter-vIP8VLU(FFFFLjava/lang/String;JIZLkotlin/jvm/functions/Function4;Landroidx/compose/runtime/Composer;II)Landroidx/compose/ui/graphics/vector/VectorPainter;
+HSPLandroidx/compose/ui/graphics/vector/VectorPath;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorPath;-><init>(Ljava/lang/String;Ljava/util/List;ILandroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Brush;FFIIFFFF)V
+HSPLandroidx/compose/ui/graphics/vector/VectorPath;-><init>(Ljava/lang/String;Ljava/util/List;ILandroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Brush;FFIIFFFFLkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getFill()Landroidx/compose/ui/graphics/Brush;
+HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getFillAlpha()F
+HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getName()Ljava/lang/String;
+HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getPathData()Ljava/util/List;
+HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getPathFillType-Rg-k1Os()I
+HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getStroke()Landroidx/compose/ui/graphics/Brush;
+HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getStrokeAlpha()F
+HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getStrokeLineCap-KaPHkGw()I
+HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getStrokeLineJoin-LxFBmk8()I
+HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getStrokeLineMiter()F
+HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getStrokeLineWidth()F
+HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getTrimPathEnd()F
+HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getTrimPathOffset()F
+HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getTrimPathStart()F
+HSPLandroidx/compose/ui/graphics/vector/VectorProperty$Fill;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorProperty$Fill;-><init>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorProperty$FillAlpha;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorProperty$FillAlpha;-><init>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorProperty$PathData;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorProperty$PathData;-><init>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorProperty$Stroke;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorProperty$Stroke;-><init>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorProperty$StrokeAlpha;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorProperty$StrokeAlpha;-><init>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorProperty$StrokeLineWidth;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorProperty$StrokeLineWidth;-><init>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathEnd;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathEnd;-><init>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathOffset;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathOffset;-><init>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathStart;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathStart;-><init>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorProperty;-><clinit>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorProperty;-><init>()V
+HSPLandroidx/compose/ui/graphics/vector/VectorProperty;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/ui/hapticfeedback/PlatformHapticFeedback;-><init>(Landroid/view/View;)V
HSPLandroidx/compose/ui/input/InputMode$Companion;-><init>()V
HSPLandroidx/compose/ui/input/InputMode$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
@@ -3757,33 +5273,11 @@
HSPLandroidx/compose/ui/input/InputModeManagerImpl;-><init>(ILkotlin/jvm/functions/Function1;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/ui/input/InputModeManagerImpl;->getInputMode-aOaMEAU()I
HSPLandroidx/compose/ui/input/InputModeManagerImpl;->setInputMode-iuPiT84(I)V
-HSPLandroidx/compose/ui/input/ScrollContainerInfoKt$ModifierLocalScrollContainerInfo$1;-><clinit>()V
-HSPLandroidx/compose/ui/input/ScrollContainerInfoKt$ModifierLocalScrollContainerInfo$1;-><init>()V
-HSPLandroidx/compose/ui/input/ScrollContainerInfoKt$ModifierLocalScrollContainerInfo$1;->invoke()Landroidx/compose/ui/input/ScrollContainerInfo;
-HSPLandroidx/compose/ui/input/ScrollContainerInfoKt$ModifierLocalScrollContainerInfo$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/input/ScrollContainerInfoKt$consumeScrollContainerInfo$1;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/input/ScrollContainerInfoKt$consumeScrollContainerInfo$1;->invoke(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V
-HSPLandroidx/compose/ui/input/ScrollContainerInfoKt$consumeScrollContainerInfo$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/input/ScrollContainerInfoKt;-><clinit>()V
-HSPLandroidx/compose/ui/input/ScrollContainerInfoKt;->consumeScrollContainerInfo(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/input/ScrollContainerInfoKt;->getModifierLocalScrollContainerInfo()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
-HSPLandroidx/compose/ui/input/focus/FocusAwareInputModifier;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/modifier/ProvidableModifierLocal;)V
-HSPLandroidx/compose/ui/input/focus/FocusAwareInputModifier;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
-HSPLandroidx/compose/ui/input/focus/FocusAwareInputModifier;->getValue()Landroidx/compose/ui/input/focus/FocusAwareInputModifier;
-HSPLandroidx/compose/ui/input/focus/FocusAwareInputModifier;->getValue()Ljava/lang/Object;
-HSPLandroidx/compose/ui/input/focus/FocusAwareInputModifier;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V
-HSPLandroidx/compose/ui/input/key/KeyInputModifier;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/input/key/KeyInputModifier;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
-HSPLandroidx/compose/ui/input/key/KeyInputModifier;->getValue()Landroidx/compose/ui/input/key/KeyInputModifier;
-HSPLandroidx/compose/ui/input/key/KeyInputModifier;->getValue()Ljava/lang/Object;
-HSPLandroidx/compose/ui/input/key/KeyInputModifier;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V
-HSPLandroidx/compose/ui/input/key/KeyInputModifier;->onPlaced(Landroidx/compose/ui/layout/LayoutCoordinates;)V
-HSPLandroidx/compose/ui/input/key/KeyInputModifierKt$ModifierLocalKeyInput$1;-><clinit>()V
-HSPLandroidx/compose/ui/input/key/KeyInputModifierKt$ModifierLocalKeyInput$1;-><init>()V
-HSPLandroidx/compose/ui/input/key/KeyInputModifierKt$ModifierLocalKeyInput$1;->invoke()Landroidx/compose/ui/input/key/KeyInputModifier;
-HSPLandroidx/compose/ui/input/key/KeyInputModifierKt$ModifierLocalKeyInput$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/input/key/KeyInputModifierKt;-><clinit>()V
-HSPLandroidx/compose/ui/input/key/KeyInputModifierKt;->getModifierLocalKeyInput()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
+HSPLandroidx/compose/ui/input/key/KeyInputInputModifierNodeImpl;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/input/key/KeyInputInputModifierNodeImpl;->setOnEvent(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/input/key/KeyInputModifierKt$onKeyEvent$$inlined$modifierElementOf$2;-><init>(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/input/key/KeyInputModifierKt$onKeyEvent$$inlined$modifierElementOf$2;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/input/key/KeyInputModifierKt$onKeyEvent$$inlined$modifierElementOf$2;->update(Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node;
HSPLandroidx/compose/ui/input/key/KeyInputModifierKt;->onKeyEvent(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;
HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher$calculateNestedScrollScope$1;-><init>(Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;)V
HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;-><clinit>()V
@@ -3800,6 +5294,8 @@
HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal;-><init>(Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection;)V
HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal;->getParent()Landroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal;
+HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal;->getValue()Landroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal;
+HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal;->getValue()Ljava/lang/Object;
HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V
HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal;->setParent(Landroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal;)V
HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocalKt$ModifierLocalNestedScroll$1;-><clinit>()V
@@ -3809,48 +5305,176 @@
HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocalKt;-><clinit>()V
HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocalKt;->getModifierLocalNestedScroll()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
HSPLandroidx/compose/ui/input/pointer/AwaitPointerEventScope;->awaitPointerEvent$default(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Landroidx/compose/ui/input/pointer/PointerEventPass;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/input/pointer/ConsumedData;-><clinit>()V
+HSPLandroidx/compose/ui/input/pointer/ConsumedData;-><init>(ZZ)V
+HSPLandroidx/compose/ui/input/pointer/ConsumedData;->getDownChange()Z
+HSPLandroidx/compose/ui/input/pointer/ConsumedData;->getPositionChange()Z
+HSPLandroidx/compose/ui/input/pointer/ConsumedData;->setDownChange(Z)V
+HSPLandroidx/compose/ui/input/pointer/ConsumedData;->setPositionChange(Z)V
HSPLandroidx/compose/ui/input/pointer/HitPathTracker;-><init>(Landroidx/compose/ui/layout/LayoutCoordinates;)V
+HSPLandroidx/compose/ui/input/pointer/HitPathTracker;->addHitPath-KNwqfcY(JLjava/util/List;)V
+HSPLandroidx/compose/ui/input/pointer/HitPathTracker;->dispatchChanges(Landroidx/compose/ui/input/pointer/InternalPointerEvent;Z)Z
+HSPLandroidx/compose/ui/input/pointer/HitPathTracker;->removeDetachedPointerInputFilters()V
+HSPLandroidx/compose/ui/input/pointer/InternalPointerEvent;-><init>(Ljava/util/Map;Landroidx/compose/ui/input/pointer/PointerInputEvent;)V
+HSPLandroidx/compose/ui/input/pointer/InternalPointerEvent;->getChanges()Ljava/util/Map;
+HSPLandroidx/compose/ui/input/pointer/InternalPointerEvent;->getMotionEvent()Landroid/view/MotionEvent;
+HSPLandroidx/compose/ui/input/pointer/InternalPointerEvent;->getSuppressMovementConsumption()Z
+HSPLandroidx/compose/ui/input/pointer/InternalPointerEvent;->issuesEnterExitEvent-0FcD4WY(J)Z
HSPLandroidx/compose/ui/input/pointer/MotionEventAdapter;-><init>()V
+HSPLandroidx/compose/ui/input/pointer/MotionEventAdapter;->addFreshIds(Landroid/view/MotionEvent;)V
+HSPLandroidx/compose/ui/input/pointer/MotionEventAdapter;->clearOnDeviceChange(Landroid/view/MotionEvent;)V
+HSPLandroidx/compose/ui/input/pointer/MotionEventAdapter;->convertToPointerInputEvent$ui_release(Landroid/view/MotionEvent;Landroidx/compose/ui/input/pointer/PositionCalculator;)Landroidx/compose/ui/input/pointer/PointerInputEvent;
+HSPLandroidx/compose/ui/input/pointer/MotionEventAdapter;->createPointerInputEventData(Landroidx/compose/ui/input/pointer/PositionCalculator;Landroid/view/MotionEvent;IZ)Landroidx/compose/ui/input/pointer/PointerInputEventData;
+HSPLandroidx/compose/ui/input/pointer/MotionEventAdapter;->getComposePointerId-_I2yYro(I)J
+HSPLandroidx/compose/ui/input/pointer/MotionEventAdapter;->removeStaleIds(Landroid/view/MotionEvent;)V
+HSPLandroidx/compose/ui/input/pointer/Node;-><init>(Landroidx/compose/ui/node/PointerInputModifierNode;)V
+HSPLandroidx/compose/ui/input/pointer/Node;->buildCache(Ljava/util/Map;Landroidx/compose/ui/layout/LayoutCoordinates;Landroidx/compose/ui/input/pointer/InternalPointerEvent;Z)Z
+HSPLandroidx/compose/ui/input/pointer/Node;->cleanUpHits(Landroidx/compose/ui/input/pointer/InternalPointerEvent;)V
+HSPLandroidx/compose/ui/input/pointer/Node;->clearCache()V
+HSPLandroidx/compose/ui/input/pointer/Node;->dispatchFinalEventPass(Landroidx/compose/ui/input/pointer/InternalPointerEvent;)Z
+HSPLandroidx/compose/ui/input/pointer/Node;->dispatchMainEventPass(Ljava/util/Map;Landroidx/compose/ui/layout/LayoutCoordinates;Landroidx/compose/ui/input/pointer/InternalPointerEvent;Z)Z
+HSPLandroidx/compose/ui/input/pointer/Node;->getPointerIds()Landroidx/compose/runtime/collection/MutableVector;
+HSPLandroidx/compose/ui/input/pointer/Node;->getPointerInputNode()Landroidx/compose/ui/node/PointerInputModifierNode;
HSPLandroidx/compose/ui/input/pointer/NodeParent;-><init>()V
+HSPLandroidx/compose/ui/input/pointer/NodeParent;->buildCache(Ljava/util/Map;Landroidx/compose/ui/layout/LayoutCoordinates;Landroidx/compose/ui/input/pointer/InternalPointerEvent;Z)Z
+HSPLandroidx/compose/ui/input/pointer/NodeParent;->cleanUpHits(Landroidx/compose/ui/input/pointer/InternalPointerEvent;)V
+HSPLandroidx/compose/ui/input/pointer/NodeParent;->dispatchFinalEventPass(Landroidx/compose/ui/input/pointer/InternalPointerEvent;)Z
+HSPLandroidx/compose/ui/input/pointer/NodeParent;->dispatchMainEventPass(Ljava/util/Map;Landroidx/compose/ui/layout/LayoutCoordinates;Landroidx/compose/ui/input/pointer/InternalPointerEvent;Z)Z
+HSPLandroidx/compose/ui/input/pointer/NodeParent;->getChildren()Landroidx/compose/runtime/collection/MutableVector;
+HSPLandroidx/compose/ui/input/pointer/NodeParent;->removeDetachedPointerInputFilters()V
HSPLandroidx/compose/ui/input/pointer/PointerButtons;->constructor-impl(I)I
HSPLandroidx/compose/ui/input/pointer/PointerEvent;-><clinit>()V
HSPLandroidx/compose/ui/input/pointer/PointerEvent;-><init>(Ljava/util/List;)V
HSPLandroidx/compose/ui/input/pointer/PointerEvent;-><init>(Ljava/util/List;Landroidx/compose/ui/input/pointer/InternalPointerEvent;)V
HSPLandroidx/compose/ui/input/pointer/PointerEvent;->calculatePointerEventType-7fucELk()I
+HSPLandroidx/compose/ui/input/pointer/PointerEvent;->getChanges()Ljava/util/List;
HSPLandroidx/compose/ui/input/pointer/PointerEvent;->getMotionEvent$ui_release()Landroid/view/MotionEvent;
+HSPLandroidx/compose/ui/input/pointer/PointerEvent;->getType-7fucELk()I
+HSPLandroidx/compose/ui/input/pointer/PointerEventKt;->changedToDown(Landroidx/compose/ui/input/pointer/PointerInputChange;)Z
+HSPLandroidx/compose/ui/input/pointer/PointerEventKt;->changedToDownIgnoreConsumed(Landroidx/compose/ui/input/pointer/PointerInputChange;)Z
+HSPLandroidx/compose/ui/input/pointer/PointerEventKt;->changedToUp(Landroidx/compose/ui/input/pointer/PointerInputChange;)Z
+HSPLandroidx/compose/ui/input/pointer/PointerEventKt;->changedToUpIgnoreConsumed(Landroidx/compose/ui/input/pointer/PointerInputChange;)Z
+HSPLandroidx/compose/ui/input/pointer/PointerEventKt;->positionChangeInternal(Landroidx/compose/ui/input/pointer/PointerInputChange;Z)J
+HSPLandroidx/compose/ui/input/pointer/PointerEventKt;->positionChangedIgnoreConsumed(Landroidx/compose/ui/input/pointer/PointerInputChange;)Z
HSPLandroidx/compose/ui/input/pointer/PointerEventPass;->$values()[Landroidx/compose/ui/input/pointer/PointerEventPass;
HSPLandroidx/compose/ui/input/pointer/PointerEventPass;-><clinit>()V
HSPLandroidx/compose/ui/input/pointer/PointerEventPass;-><init>(Ljava/lang/String;I)V
+HSPLandroidx/compose/ui/input/pointer/PointerEventPass;->values()[Landroidx/compose/ui/input/pointer/PointerEventPass;
HSPLandroidx/compose/ui/input/pointer/PointerEventType$Companion;-><init>()V
HSPLandroidx/compose/ui/input/pointer/PointerEventType$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/ui/input/pointer/PointerEventType$Companion;->getEnter-7fucELk()I
+HSPLandroidx/compose/ui/input/pointer/PointerEventType$Companion;->getExit-7fucELk()I
HSPLandroidx/compose/ui/input/pointer/PointerEventType$Companion;->getMove-7fucELk()I
+HSPLandroidx/compose/ui/input/pointer/PointerEventType$Companion;->getPress-7fucELk()I
+HSPLandroidx/compose/ui/input/pointer/PointerEventType$Companion;->getRelease-7fucELk()I
HSPLandroidx/compose/ui/input/pointer/PointerEventType;-><clinit>()V
+HSPLandroidx/compose/ui/input/pointer/PointerEventType;->access$getEnter$cp()I
+HSPLandroidx/compose/ui/input/pointer/PointerEventType;->access$getExit$cp()I
HSPLandroidx/compose/ui/input/pointer/PointerEventType;->access$getMove$cp()I
+HSPLandroidx/compose/ui/input/pointer/PointerEventType;->access$getPress$cp()I
+HSPLandroidx/compose/ui/input/pointer/PointerEventType;->access$getRelease$cp()I
HSPLandroidx/compose/ui/input/pointer/PointerEventType;->constructor-impl(I)I
+HSPLandroidx/compose/ui/input/pointer/PointerEventType;->equals-impl0(II)Z
HSPLandroidx/compose/ui/input/pointer/PointerEvent_androidKt;->EmptyPointerKeyboardModifiers()I
+HSPLandroidx/compose/ui/input/pointer/PointerId;-><init>(J)V
+HSPLandroidx/compose/ui/input/pointer/PointerId;->box-impl(J)Landroidx/compose/ui/input/pointer/PointerId;
+HSPLandroidx/compose/ui/input/pointer/PointerId;->constructor-impl(J)J
+HSPLandroidx/compose/ui/input/pointer/PointerId;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/input/pointer/PointerId;->equals-impl(JLjava/lang/Object;)Z
+HSPLandroidx/compose/ui/input/pointer/PointerId;->equals-impl0(JJ)Z
+HSPLandroidx/compose/ui/input/pointer/PointerId;->hashCode()I
+HSPLandroidx/compose/ui/input/pointer/PointerId;->hashCode-impl(J)I
+HSPLandroidx/compose/ui/input/pointer/PointerId;->unbox-impl()J
+HSPLandroidx/compose/ui/input/pointer/PointerInputChange;-><clinit>()V
+HSPLandroidx/compose/ui/input/pointer/PointerInputChange;-><init>(JJJZFJJZZIJ)V
+HSPLandroidx/compose/ui/input/pointer/PointerInputChange;-><init>(JJJZFJJZZIJLkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/ui/input/pointer/PointerInputChange;-><init>(JJJZFJJZZILjava/util/List;J)V
+HSPLandroidx/compose/ui/input/pointer/PointerInputChange;-><init>(JJJZFJJZZILjava/util/List;JLkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/ui/input/pointer/PointerInputChange;-><init>(JJJZJJZZIJ)V
+HSPLandroidx/compose/ui/input/pointer/PointerInputChange;-><init>(JJJZJJZZIJLkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->consume()V
+HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->copy-OHpmEuE$default(Landroidx/compose/ui/input/pointer/PointerInputChange;JJJZJJZILjava/util/List;JILjava/lang/Object;)Landroidx/compose/ui/input/pointer/PointerInputChange;
+HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->copy-OHpmEuE(JJJZJJZILjava/util/List;J)Landroidx/compose/ui/input/pointer/PointerInputChange;
+HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->getHistorical()Ljava/util/List;
+HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->getId-J3iCeTQ()J
+HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->getPosition-F1C5BW0()J
+HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->getPressed()Z
+HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->getPressure()F
+HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->getPreviousPosition-F1C5BW0()J
+HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->getPreviousPressed()Z
+HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->getType-T8wyACA()I
+HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->getUptimeMillis()J
+HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->isConsumed()Z
+HSPLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer$PointerInputData;-><init>(JJZI)V
+HSPLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer$PointerInputData;-><init>(JJZILkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer$PointerInputData;->getDown()Z
+HSPLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer$PointerInputData;->getPositionOnScreen-F1C5BW0()J
+HSPLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer$PointerInputData;->getUptime()J
HSPLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer;-><init>()V
+HSPLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer;->produce(Landroidx/compose/ui/input/pointer/PointerInputEvent;Landroidx/compose/ui/input/pointer/PositionCalculator;)Landroidx/compose/ui/input/pointer/InternalPointerEvent;
+HSPLandroidx/compose/ui/input/pointer/PointerInputEvent;-><init>(JLjava/util/List;Landroid/view/MotionEvent;)V
+HSPLandroidx/compose/ui/input/pointer/PointerInputEvent;->getMotionEvent()Landroid/view/MotionEvent;
+HSPLandroidx/compose/ui/input/pointer/PointerInputEvent;->getPointers()Ljava/util/List;
+HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;-><init>(JJJJZFIZLjava/util/List;J)V
+HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;-><init>(JJJJZFIZLjava/util/List;JLkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getDown()Z
+HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getHistorical()Ljava/util/List;
+HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getId-J3iCeTQ()J
+HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getIssuesEnterExit()Z
+HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getPosition-F1C5BW0()J
+HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getPositionOnScreen-F1C5BW0()J
+HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getPressure()F
+HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getScrollDelta-F1C5BW0()J
+HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getType-T8wyACA()I
+HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getUptime()J
HSPLandroidx/compose/ui/input/pointer/PointerInputEventProcessor;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/input/pointer/PointerInputEventProcessor;->process-BIzXfog(Landroidx/compose/ui/input/pointer/PointerInputEvent;Landroidx/compose/ui/input/pointer/PositionCalculator;Z)I
+HSPLandroidx/compose/ui/input/pointer/PointerInputEventProcessorKt;->ProcessResult(ZZ)I
HSPLandroidx/compose/ui/input/pointer/PointerInputFilter;-><clinit>()V
HSPLandroidx/compose/ui/input/pointer/PointerInputFilter;-><init>()V
+HSPLandroidx/compose/ui/input/pointer/PointerInputFilter;->getShareWithSiblings()Z
HSPLandroidx/compose/ui/input/pointer/PointerInputFilter;->getSize-YbymL2g()J
HSPLandroidx/compose/ui/input/pointer/PointerInputFilter;->setLayoutCoordinates$ui_release(Landroidx/compose/ui/layout/LayoutCoordinates;)V
HSPLandroidx/compose/ui/input/pointer/PointerKeyboardModifiers;-><init>(I)V
HSPLandroidx/compose/ui/input/pointer/PointerKeyboardModifiers;->box-impl(I)Landroidx/compose/ui/input/pointer/PointerKeyboardModifiers;
HSPLandroidx/compose/ui/input/pointer/PointerKeyboardModifiers;->constructor-impl(I)I
+HSPLandroidx/compose/ui/input/pointer/PointerKeyboardModifiers;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/input/pointer/PointerKeyboardModifiers;->equals-impl(ILjava/lang/Object;)Z
+HSPLandroidx/compose/ui/input/pointer/PointerKeyboardModifiers;->unbox-impl()I
+HSPLandroidx/compose/ui/input/pointer/PointerType$Companion;-><init>()V
+HSPLandroidx/compose/ui/input/pointer/PointerType$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/ui/input/pointer/PointerType$Companion;->getMouse-T8wyACA()I
+HSPLandroidx/compose/ui/input/pointer/PointerType$Companion;->getTouch-T8wyACA()I
+HSPLandroidx/compose/ui/input/pointer/PointerType;-><clinit>()V
+HSPLandroidx/compose/ui/input/pointer/PointerType;->access$getMouse$cp()I
+HSPLandroidx/compose/ui/input/pointer/PointerType;->access$getTouch$cp()I
+HSPLandroidx/compose/ui/input/pointer/PointerType;->constructor-impl(I)I
+HSPLandroidx/compose/ui/input/pointer/PointerType;->equals-impl0(II)Z
+HSPLandroidx/compose/ui/input/pointer/ProcessResult;->constructor-impl(I)I
+HSPLandroidx/compose/ui/input/pointer/ProcessResult;->getAnyMovementConsumed-impl(I)Z
+HSPLandroidx/compose/ui/input/pointer/ProcessResult;->getDispatchedToAPointerInputModifier-impl(I)Z
HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;-><init>(Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;Lkotlin/coroutines/Continuation;)V
HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;->access$setAwaitPass$p(Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;Landroidx/compose/ui/input/pointer/PointerEventPass;)V
HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;->access$setPointerAwaiter$p(Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;Lkotlinx/coroutines/CancellableContinuation;)V
HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;->awaitPointerEvent(Landroidx/compose/ui/input/pointer/PointerEventPass;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;->cancel(Ljava/lang/Throwable;)V
HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;->getContext()Lkotlin/coroutines/CoroutineContext;
+HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;->getCurrentEvent()Landroidx/compose/ui/input/pointer/PointerEvent;
+HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;->getViewConfiguration()Landroidx/compose/ui/platform/ViewConfiguration;
+HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;->offerPointerEvent(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;)V
HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;->resumeWith(Ljava/lang/Object;)V
+HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$WhenMappings;-><clinit>()V
HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$awaitPointerEventScope$2$2;-><init>(Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;)V
HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$awaitPointerEventScope$2$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$awaitPointerEventScope$2$2;->invoke(Ljava/lang/Throwable;)V
HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;-><init>(Landroidx/compose/ui/platform/ViewConfiguration;Landroidx/compose/ui/unit/Density;)V
+HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;->access$getCurrentEvent$p(Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;)Landroidx/compose/ui/input/pointer/PointerEvent;
HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;->access$getPointerHandlers$p(Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;)Landroidx/compose/runtime/collection/MutableVector;
HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;->awaitPointerEventScope(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;->dispatchPointerEvent(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;)V
HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;->getPointerInputFilter()Landroidx/compose/ui/input/pointer/PointerInputFilter;
+HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;->getViewConfiguration()Landroidx/compose/ui/platform/ViewConfiguration;
+HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;->onPointerEvent-H0pRuoY(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;J)V
HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;->setCoroutineScope(Lkotlinx/coroutines/CoroutineScope;)V
HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$2$2$1;-><init>(Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V
HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$2$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
@@ -3875,17 +5499,30 @@
HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt;->pointerInput(Landroidx/compose/ui/Modifier;Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Landroidx/compose/ui/Modifier;
HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt;->pointerInput(Landroidx/compose/ui/Modifier;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Landroidx/compose/ui/Modifier;
HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt;->pointerInput(Landroidx/compose/ui/Modifier;[Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/ui/input/pointer/util/DataPointAtTime;-><init>(JF)V
+HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker1D$Strategy;->$values()[Landroidx/compose/ui/input/pointer/util/VelocityTracker1D$Strategy;
+HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker1D$Strategy;-><clinit>()V
+HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker1D$Strategy;-><init>(Ljava/lang/String;I)V
+HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker1D$Strategy;->values()[Landroidx/compose/ui/input/pointer/util/VelocityTracker1D$Strategy;
+HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker1D$WhenMappings;-><clinit>()V
+HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker1D;-><clinit>()V
+HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker1D;-><init>(ZLandroidx/compose/ui/input/pointer/util/VelocityTracker1D$Strategy;)V
+HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker1D;-><init>(ZLandroidx/compose/ui/input/pointer/util/VelocityTracker1D$Strategy;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker1D;->addDataPoint(JF)V
+HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker1D;->resetTracking()V
HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker;-><clinit>()V
HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker;-><init>()V
-HSPLandroidx/compose/ui/input/rotary/RotaryInputModifierKt$ModifierLocalRotaryScrollParent$1;-><clinit>()V
-HSPLandroidx/compose/ui/input/rotary/RotaryInputModifierKt$ModifierLocalRotaryScrollParent$1;-><init>()V
-HSPLandroidx/compose/ui/input/rotary/RotaryInputModifierKt$ModifierLocalRotaryScrollParent$1;->invoke()Landroidx/compose/ui/input/focus/FocusAwareInputModifier;
-HSPLandroidx/compose/ui/input/rotary/RotaryInputModifierKt$ModifierLocalRotaryScrollParent$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/input/rotary/RotaryInputModifierKt$focusAwareCallback$1;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/input/rotary/RotaryInputModifierKt;-><clinit>()V
-HSPLandroidx/compose/ui/input/rotary/RotaryInputModifierKt;->focusAwareCallback(Lkotlin/jvm/functions/Function1;)Lkotlin/jvm/functions/Function1;
-HSPLandroidx/compose/ui/input/rotary/RotaryInputModifierKt;->getModifierLocalRotaryScrollParent()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
+HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker;->addPosition-Uv8p0NA(JJ)V
+HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker;->getCurrentPointerPositionAccumulator-F1C5BW0$ui_release()J
+HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker;->resetTracking()V
+HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker;->setCurrentPointerPositionAccumulator-k-4lQ0M$ui_release(J)V
+HSPLandroidx/compose/ui/input/pointer/util/VelocityTrackerKt;->access$set([Landroidx/compose/ui/input/pointer/util/DataPointAtTime;IJF)V
+HSPLandroidx/compose/ui/input/pointer/util/VelocityTrackerKt;->addPointerInputChange(Landroidx/compose/ui/input/pointer/util/VelocityTracker;Landroidx/compose/ui/input/pointer/PointerInputChange;)V
+HSPLandroidx/compose/ui/input/pointer/util/VelocityTrackerKt;->set([Landroidx/compose/ui/input/pointer/util/DataPointAtTime;IJF)V
+HSPLandroidx/compose/ui/input/rotary/RotaryInputModifierKt$onRotaryScrollEvent$$inlined$modifierElementOf$2;-><init>(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/input/rotary/RotaryInputModifierKt$onRotaryScrollEvent$$inlined$modifierElementOf$2;->create()Landroidx/compose/ui/Modifier$Node;
HSPLandroidx/compose/ui/input/rotary/RotaryInputModifierKt;->onRotaryScrollEvent(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/ui/input/rotary/RotaryInputModifierNodeImpl;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
HSPLandroidx/compose/ui/layout/AlignmentLine$Companion;-><init>()V
HSPLandroidx/compose/ui/layout/AlignmentLine$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/ui/layout/AlignmentLine;-><clinit>()V
@@ -3900,8 +5537,6 @@
HSPLandroidx/compose/ui/layout/AlignmentLineKt;->getLastBaseline()Landroidx/compose/ui/layout/HorizontalAlignmentLine;
HSPLandroidx/compose/ui/layout/BeyondBoundsLayoutKt$ModifierLocalBeyondBoundsLayout$1;-><clinit>()V
HSPLandroidx/compose/ui/layout/BeyondBoundsLayoutKt$ModifierLocalBeyondBoundsLayout$1;-><init>()V
-HSPLandroidx/compose/ui/layout/BeyondBoundsLayoutKt$ModifierLocalBeyondBoundsLayout$1;->invoke()Landroidx/compose/ui/layout/BeyondBoundsLayout;
-HSPLandroidx/compose/ui/layout/BeyondBoundsLayoutKt$ModifierLocalBeyondBoundsLayout$1;->invoke()Ljava/lang/Object;
HSPLandroidx/compose/ui/layout/BeyondBoundsLayoutKt;-><clinit>()V
HSPLandroidx/compose/ui/layout/BeyondBoundsLayoutKt;->getModifierLocalBeyondBoundsLayout()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
HSPLandroidx/compose/ui/layout/ComposableSingletons$SubcomposeLayoutKt$lambda-1$1;-><clinit>()V
@@ -3924,22 +5559,35 @@
HSPLandroidx/compose/ui/layout/ContentScaleKt;->computeFillHeight-iLBOSCw(JJ)F
HSPLandroidx/compose/ui/layout/ContentScaleKt;->computeFillMinDimension-iLBOSCw(JJ)F
HSPLandroidx/compose/ui/layout/ContentScaleKt;->computeFillWidth-iLBOSCw(JJ)F
+HSPLandroidx/compose/ui/layout/FixedScale;-><clinit>()V
HSPLandroidx/compose/ui/layout/FixedScale;-><init>(F)V
HSPLandroidx/compose/ui/layout/HorizontalAlignmentLine;-><clinit>()V
HSPLandroidx/compose/ui/layout/HorizontalAlignmentLine;-><init>(Lkotlin/jvm/functions/Function2;)V
+HSPLandroidx/compose/ui/layout/LayoutId;-><init>(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/layout/LayoutId;->getLayoutId()Ljava/lang/Object;
+HSPLandroidx/compose/ui/layout/LayoutId;->modifyParentData(Landroidx/compose/ui/unit/Density;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/layout/LayoutIdKt;->getLayoutId(Landroidx/compose/ui/layout/Measurable;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/layout/LayoutIdKt;->layoutId(Landroidx/compose/ui/Modifier;Ljava/lang/Object;)Landroidx/compose/ui/Modifier;
HSPLandroidx/compose/ui/layout/LayoutKt$materializerOf$1;-><init>(Landroidx/compose/ui/Modifier;)V
HSPLandroidx/compose/ui/layout/LayoutKt$materializerOf$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/ui/layout/LayoutKt$materializerOf$1;->invoke-Deg8D_g(Landroidx/compose/runtime/Composer;Landroidx/compose/runtime/Composer;I)V
HSPLandroidx/compose/ui/layout/LayoutKt;->materializerOf(Landroidx/compose/ui/Modifier;)Lkotlin/jvm/functions/Function3;
+HSPLandroidx/compose/ui/layout/LayoutModifierImpl;-><init>(Lkotlin/jvm/functions/Function3;)V
+HSPLandroidx/compose/ui/layout/LayoutModifierImpl;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/ui/layout/LayoutModifierKt$layout$$inlined$modifierElementOf$2;-><init>(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;)V
+HSPLandroidx/compose/ui/layout/LayoutModifierKt$layout$$inlined$modifierElementOf$2;->create()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/layout/LayoutModifierKt;->layout(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function3;)Landroidx/compose/ui/Modifier;
HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;-><init>(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composition;)V
HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;-><init>(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composition;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->getActive()Z
HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->getComposition()Landroidx/compose/runtime/Composition;
HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->getContent()Lkotlin/jvm/functions/Function2;
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->getForceRecompose()Z
HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->setComposition(Landroidx/compose/runtime/Composition;)V
HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->setContent(Lkotlin/jvm/functions/Function2;)V
HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->setForceRecompose(Z)V
HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;-><init>(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)V
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->getDensity()F
HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection;
HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->setDensity(F)V
HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->setFontScale(F)V
@@ -3952,15 +5600,16 @@
HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure$1;->placeChildren()V
HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1;-><init>(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;Lkotlin/jvm/functions/Function2;Ljava/lang/String;)V
HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$subcompose$2$1$1;-><init>(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;Lkotlin/jvm/functions/Function2;)V
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$subcompose$2$1$1;->invoke(Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$subcompose$2$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$subcompose$3$1$1;-><init>(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;Lkotlin/jvm/functions/Function2;)V
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$subcompose$3$1$1;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$subcompose$3$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;-><init>(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy;)V
HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->access$getCurrentIndex$p(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)I
HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->access$getScope$p(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;
HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->access$setCurrentIndex$p(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;I)V
HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->createMeasurePolicy(Lkotlin/jvm/functions/Function2;)Landroidx/compose/ui/layout/MeasurePolicy;
HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->createNodeAt(I)Landroidx/compose/ui/node/LayoutNode;
+HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->disposeCurrentNodes()V
HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->disposeOrReuseStartingFromIndex(I)V
HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->forceRecomposeChildren()V
HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->makeSureStateIsConsistent()V
@@ -3984,6 +5633,16 @@
HSPLandroidx/compose/ui/layout/OnGloballyPositionedModifierImpl;->equals(Ljava/lang/Object;)Z
HSPLandroidx/compose/ui/layout/OnGloballyPositionedModifierImpl;->onGloballyPositioned(Landroidx/compose/ui/layout/LayoutCoordinates;)V
HSPLandroidx/compose/ui/layout/OnGloballyPositionedModifierKt;->onGloballyPositioned(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/ui/layout/OnRemeasuredModifierKt;->onSizeChanged(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/ui/layout/OnSizeChangedModifier;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/layout/OnSizeChangedModifier;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/layout/OnSizeChangedModifier;->onRemeasured-ozmzZPI(J)V
+HSPLandroidx/compose/ui/layout/PinnableContainerKt$LocalPinnableContainer$1;-><clinit>()V
+HSPLandroidx/compose/ui/layout/PinnableContainerKt$LocalPinnableContainer$1;-><init>()V
+HSPLandroidx/compose/ui/layout/PinnableContainerKt$LocalPinnableContainer$1;->invoke()Landroidx/compose/ui/layout/PinnableContainer;
+HSPLandroidx/compose/ui/layout/PinnableContainerKt$LocalPinnableContainer$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/ui/layout/PinnableContainerKt;-><clinit>()V
+HSPLandroidx/compose/ui/layout/PinnableContainerKt;->getLocalPinnableContainer()Landroidx/compose/runtime/ProvidableCompositionLocal;
HSPLandroidx/compose/ui/layout/Placeable$PlacementScope$Companion;-><init>()V
HSPLandroidx/compose/ui/layout/Placeable$PlacementScope$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/ui/layout/Placeable$PlacementScope$Companion;->access$configureForPlacingForAlignment(Landroidx/compose/ui/layout/Placeable$PlacementScope$Companion;Landroidx/compose/ui/node/LookaheadCapablePlaceable;)Z
@@ -4013,6 +5672,7 @@
HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeRelativeWithLayer(Landroidx/compose/ui/layout/Placeable;IIFLkotlin/jvm/functions/Function1;)V
HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeWithLayer$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;IIFLkotlin/jvm/functions/Function1;ILjava/lang/Object;)V
HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeWithLayer(Landroidx/compose/ui/layout/Placeable;IIFLkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeWithLayer-aW-9-wM$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;JFLkotlin/jvm/functions/Function1;ILjava/lang/Object;)V
HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeWithLayer-aW-9-wM(Landroidx/compose/ui/layout/Placeable;JFLkotlin/jvm/functions/Function1;)V
HSPLandroidx/compose/ui/layout/Placeable;-><clinit>()V
HSPLandroidx/compose/ui/layout/Placeable;-><init>()V
@@ -4020,6 +5680,7 @@
HSPLandroidx/compose/ui/layout/Placeable;->access$placeAt-f8xVGno(Landroidx/compose/ui/layout/Placeable;JFLkotlin/jvm/functions/Function1;)V
HSPLandroidx/compose/ui/layout/Placeable;->getApparentToRealOffset-nOcc-ac()J
HSPLandroidx/compose/ui/layout/Placeable;->getHeight()I
+HSPLandroidx/compose/ui/layout/Placeable;->getMeasuredHeight()I
HSPLandroidx/compose/ui/layout/Placeable;->getMeasuredSize-YbymL2g()J
HSPLandroidx/compose/ui/layout/Placeable;->getMeasuredWidth()I
HSPLandroidx/compose/ui/layout/Placeable;->getMeasurementConstraints-msEJaDk()J
@@ -4054,9 +5715,11 @@
HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$4;->invoke()Ljava/lang/Object;
HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$4;->invoke()V
HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$5$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/runtime/State;)V
+HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$5$1$invoke$$inlined$onDispose$1;->dispose()V
HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$5$1;-><init>(Landroidx/compose/runtime/State;)V
HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$5$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult;
HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$5$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$6;-><init>(Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;II)V
HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt;->SubcomposeLayout(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt;->SubcomposeLayout(Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
HSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setCompositionContext$1;-><init>(Landroidx/compose/ui/layout/SubcomposeLayoutState;)V
@@ -4074,6 +5737,7 @@
HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->access$getSlotReusePolicy$p(Landroidx/compose/ui/layout/SubcomposeLayoutState;)Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy;
HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->access$getState(Landroidx/compose/ui/layout/SubcomposeLayoutState;)Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;
HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->access$set_state$p(Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)V
+HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->disposeCurrentNodes$ui_release()V
HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->forceRecomposeChildren$ui_release()V
HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->getSetCompositionContext$ui_release()Lkotlin/jvm/functions/Function2;
HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->getSetMeasurePolicy$ui_release()Lkotlin/jvm/functions/Function2;
@@ -4085,83 +5749,91 @@
HSPLandroidx/compose/ui/modifier/BackwardsCompatLocalMap;-><init>(Landroidx/compose/ui/modifier/ModifierLocalProvider;)V
HSPLandroidx/compose/ui/modifier/BackwardsCompatLocalMap;->contains$ui_release(Landroidx/compose/ui/modifier/ModifierLocal;)Z
HSPLandroidx/compose/ui/modifier/BackwardsCompatLocalMap;->get$ui_release(Landroidx/compose/ui/modifier/ModifierLocal;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/modifier/BackwardsCompatLocalMap;->setElement(Landroidx/compose/ui/modifier/ModifierLocalProvider;)V
HSPLandroidx/compose/ui/modifier/EmptyMap;-><clinit>()V
HSPLandroidx/compose/ui/modifier/EmptyMap;-><init>()V
HSPLandroidx/compose/ui/modifier/EmptyMap;->contains$ui_release(Landroidx/compose/ui/modifier/ModifierLocal;)Z
+HSPLandroidx/compose/ui/modifier/ModifierLocal;-><clinit>()V
HSPLandroidx/compose/ui/modifier/ModifierLocal;-><init>(Lkotlin/jvm/functions/Function0;)V
HSPLandroidx/compose/ui/modifier/ModifierLocal;-><init>(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/ui/modifier/ModifierLocal;->getDefaultFactory$ui_release()Lkotlin/jvm/functions/Function0;
-HSPLandroidx/compose/ui/modifier/ModifierLocalConsumerImpl;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/modifier/ModifierLocalConsumerImpl;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/modifier/ModifierLocalConsumerImpl;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V
-HSPLandroidx/compose/ui/modifier/ModifierLocalConsumerKt;->modifierLocalConsumer(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;
HSPLandroidx/compose/ui/modifier/ModifierLocalKt;->modifierLocalOf(Lkotlin/jvm/functions/Function0;)Landroidx/compose/ui/modifier/ProvidableModifierLocal;
HSPLandroidx/compose/ui/modifier/ModifierLocalManager$invalidate$1;-><init>(Landroidx/compose/ui/modifier/ModifierLocalManager;)V
HSPLandroidx/compose/ui/modifier/ModifierLocalManager$invalidate$1;->invoke()Ljava/lang/Object;
HSPLandroidx/compose/ui/modifier/ModifierLocalManager$invalidate$1;->invoke()V
HSPLandroidx/compose/ui/modifier/ModifierLocalManager;-><init>(Landroidx/compose/ui/node/Owner;)V
HSPLandroidx/compose/ui/modifier/ModifierLocalManager;->invalidate()V
-HSPLandroidx/compose/ui/modifier/ModifierLocalManager;->invalidateConsumersOfNodeForKey(Landroidx/compose/ui/Modifier$Node;Landroidx/compose/ui/modifier/ModifierLocal;Ljava/util/Set;)V
HSPLandroidx/compose/ui/modifier/ModifierLocalManager;->removedProvider(Landroidx/compose/ui/node/BackwardsCompatNode;Landroidx/compose/ui/modifier/ModifierLocal;)V
HSPLandroidx/compose/ui/modifier/ModifierLocalManager;->triggerUpdates()V
-HSPLandroidx/compose/ui/modifier/ModifierLocalManager;->updatedProvider(Landroidx/compose/ui/node/BackwardsCompatNode;Landroidx/compose/ui/modifier/ModifierLocal;)V
HSPLandroidx/compose/ui/modifier/ModifierLocalMap;-><clinit>()V
HSPLandroidx/compose/ui/modifier/ModifierLocalMap;-><init>()V
HSPLandroidx/compose/ui/modifier/ModifierLocalMap;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/ui/modifier/ModifierLocalNode;->getProvidedValues()Landroidx/compose/ui/modifier/ModifierLocalMap;
HSPLandroidx/compose/ui/modifier/ModifierLocalNodeKt;->modifierLocalMapOf()Landroidx/compose/ui/modifier/ModifierLocalMap;
+HSPLandroidx/compose/ui/modifier/ProvidableModifierLocal;-><clinit>()V
HSPLandroidx/compose/ui/modifier/ProvidableModifierLocal;-><init>(Lkotlin/jvm/functions/Function0;)V
+HSPLandroidx/compose/ui/node/AlignmentLines$recalculate$1;-><init>(Landroidx/compose/ui/node/AlignmentLines;)V
+HSPLandroidx/compose/ui/node/AlignmentLines$recalculate$1;->invoke(Landroidx/compose/ui/node/AlignmentLinesOwner;)V
+HSPLandroidx/compose/ui/node/AlignmentLines$recalculate$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/ui/node/AlignmentLines;-><init>(Landroidx/compose/ui/node/AlignmentLinesOwner;)V
HSPLandroidx/compose/ui/node/AlignmentLines;-><init>(Landroidx/compose/ui/node/AlignmentLinesOwner;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/ui/node/AlignmentLines;->access$addAlignmentLine(Landroidx/compose/ui/node/AlignmentLines;Landroidx/compose/ui/layout/AlignmentLine;ILandroidx/compose/ui/node/NodeCoordinator;)V
+HSPLandroidx/compose/ui/node/AlignmentLines;->access$getAlignmentLineMap$p(Landroidx/compose/ui/node/AlignmentLines;)Ljava/util/Map;
+HSPLandroidx/compose/ui/node/AlignmentLines;->addAlignmentLine(Landroidx/compose/ui/layout/AlignmentLine;ILandroidx/compose/ui/node/NodeCoordinator;)V
+HSPLandroidx/compose/ui/node/AlignmentLines;->getAlignmentLinesOwner()Landroidx/compose/ui/node/AlignmentLinesOwner;
HSPLandroidx/compose/ui/node/AlignmentLines;->getDirty$ui_release()Z
+HSPLandroidx/compose/ui/node/AlignmentLines;->getLastCalculation()Ljava/util/Map;
HSPLandroidx/compose/ui/node/AlignmentLines;->getQueried$ui_release()Z
HSPLandroidx/compose/ui/node/AlignmentLines;->getRequired$ui_release()Z
HSPLandroidx/compose/ui/node/AlignmentLines;->getUsedDuringParentLayout$ui_release()Z
HSPLandroidx/compose/ui/node/AlignmentLines;->onAlignmentsChanged()V
+HSPLandroidx/compose/ui/node/AlignmentLines;->recalculate()V
HSPLandroidx/compose/ui/node/AlignmentLines;->recalculateQueryOwner()V
+HSPLandroidx/compose/ui/node/AlignmentLines;->reset$ui_release()V
HSPLandroidx/compose/ui/node/AlignmentLines;->setPreviousUsedDuringParentLayout$ui_release(Z)V
HSPLandroidx/compose/ui/node/AlignmentLines;->setUsedByModifierLayout$ui_release(Z)V
HSPLandroidx/compose/ui/node/AlignmentLines;->setUsedByModifierMeasurement$ui_release(Z)V
HSPLandroidx/compose/ui/node/AlignmentLines;->setUsedDuringParentMeasurement$ui_release(Z)V
-HSPLandroidx/compose/ui/node/BackwardsCompatNode$initializeModifier$1;-><init>(Landroidx/compose/ui/node/BackwardsCompatNode;)V
-HSPLandroidx/compose/ui/node/BackwardsCompatNode$initializeModifier$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/BackwardsCompatNode$initializeModifier$1;->invoke()V
-HSPLandroidx/compose/ui/node/BackwardsCompatNode$initializeModifier$4;-><init>(Landroidx/compose/ui/node/BackwardsCompatNode;)V
-HSPLandroidx/compose/ui/node/BackwardsCompatNode$initializeModifier$4;->onLayoutComplete()V
HSPLandroidx/compose/ui/node/BackwardsCompatNode$updateModifierLocalConsumer$1;-><init>(Landroidx/compose/ui/node/BackwardsCompatNode;)V
HSPLandroidx/compose/ui/node/BackwardsCompatNode$updateModifierLocalConsumer$1;->invoke()Ljava/lang/Object;
HSPLandroidx/compose/ui/node/BackwardsCompatNode$updateModifierLocalConsumer$1;->invoke()V
HSPLandroidx/compose/ui/node/BackwardsCompatNode;-><init>(Landroidx/compose/ui/Modifier$Element;)V
-HSPLandroidx/compose/ui/node/BackwardsCompatNode;->access$getLastOnPlacedCoordinates$p(Landroidx/compose/ui/node/BackwardsCompatNode;)Landroidx/compose/ui/layout/LayoutCoordinates;
HSPLandroidx/compose/ui/node/BackwardsCompatNode;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
-HSPLandroidx/compose/ui/node/BackwardsCompatNode;->getCurrent(Landroidx/compose/ui/modifier/ModifierLocal;)Ljava/lang/Object;+]Landroidx/compose/ui/modifier/ModifierLocal;Landroidx/compose/ui/modifier/ProvidableModifierLocal;]Landroidx/compose/ui/modifier/ModifierLocalMap;Landroidx/compose/ui/modifier/BackwardsCompatLocalMap;,Landroidx/compose/ui/modifier/EmptyMap;]Landroidx/compose/ui/Modifier$Node;Landroidx/compose/ui/node/BackwardsCompatNode;,Landroidx/compose/ui/node/InnerNodeCoordinator$tail$1;]Landroidx/compose/ui/node/NodeChain;Landroidx/compose/ui/node/NodeChain;]Landroidx/compose/ui/modifier/ModifierLocalNode;Landroidx/compose/ui/node/BackwardsCompatNode;]Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/node/LayoutNode;]Lkotlin/jvm/functions/Function0;megamorphic_types]Landroidx/compose/ui/node/DelegatableNode;Landroidx/compose/ui/node/BackwardsCompatNode;
+HSPLandroidx/compose/ui/node/BackwardsCompatNode;->getCurrent(Landroidx/compose/ui/modifier/ModifierLocal;)Ljava/lang/Object;
HSPLandroidx/compose/ui/node/BackwardsCompatNode;->getElement()Landroidx/compose/ui/Modifier$Element;
HSPLandroidx/compose/ui/node/BackwardsCompatNode;->getProvidedValues()Landroidx/compose/ui/modifier/ModifierLocalMap;
-HSPLandroidx/compose/ui/node/BackwardsCompatNode;->getReadValues()Ljava/util/HashSet;
HSPLandroidx/compose/ui/node/BackwardsCompatNode;->getSemanticsConfiguration()Landroidx/compose/ui/semantics/SemanticsConfiguration;
HSPLandroidx/compose/ui/node/BackwardsCompatNode;->initializeModifier(Z)V
+HSPLandroidx/compose/ui/node/BackwardsCompatNode;->isValidOwnerScope()Z
HSPLandroidx/compose/ui/node/BackwardsCompatNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
HSPLandroidx/compose/ui/node/BackwardsCompatNode;->modifyParentData(Landroidx/compose/ui/unit/Density;Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onAttach()V
+HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onDetach()V
HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onGloballyPositioned(Landroidx/compose/ui/layout/LayoutCoordinates;)V
HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onMeasureResultChanged()V
HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onPlaced(Landroidx/compose/ui/layout/LayoutCoordinates;)V
+HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onPointerEvent-H0pRuoY(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;J)V
HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onRemeasured-ozmzZPI(J)V
HSPLandroidx/compose/ui/node/BackwardsCompatNode;->setElement(Landroidx/compose/ui/Modifier$Element;)V
-HSPLandroidx/compose/ui/node/BackwardsCompatNode;->uninitializeModifier()V
+HSPLandroidx/compose/ui/node/BackwardsCompatNode;->sharePointerInputWithSiblings()Z
+HSPLandroidx/compose/ui/node/BackwardsCompatNode;->unInitializeModifier()V
HSPLandroidx/compose/ui/node/BackwardsCompatNode;->updateModifierLocalConsumer()V
HSPLandroidx/compose/ui/node/BackwardsCompatNode;->updateModifierLocalProvider(Landroidx/compose/ui/modifier/ModifierLocalProvider;)V
HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$DetachedModifierLocalReadScope$1;-><init>()V
HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$DetachedModifierLocalReadScope$1;->getCurrent(Landroidx/compose/ui/modifier/ModifierLocal;)Ljava/lang/Object;
HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$onDrawCacheReadsChanged$1;-><clinit>()V
HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$onDrawCacheReadsChanged$1;-><init>()V
-HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$updateFocusOrderModifierLocalConsumer$1;-><clinit>()V
-HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$updateFocusOrderModifierLocalConsumer$1;-><init>()V
HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$updateModifierLocalConsumer$1;-><clinit>()V
HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$updateModifierLocalConsumer$1;-><init>()V
+HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$updateModifierLocalConsumer$1;->invoke(Landroidx/compose/ui/node/BackwardsCompatNode;)V
+HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$updateModifierLocalConsumer$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt;-><clinit>()V
HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt;->access$getDetachedModifierLocalReadScope$p()Landroidx/compose/ui/node/BackwardsCompatNodeKt$DetachedModifierLocalReadScope$1;
HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt;->access$getUpdateModifierLocalConsumer$p()Lkotlin/jvm/functions/Function1;
+HSPLandroidx/compose/ui/node/CanFocusChecker;-><clinit>()V
+HSPLandroidx/compose/ui/node/CanFocusChecker;-><init>()V
+HSPLandroidx/compose/ui/node/CanFocusChecker;->isCanFocusSet()Z
+HSPLandroidx/compose/ui/node/CanFocusChecker;->reset()V
+HSPLandroidx/compose/ui/node/CanFocusChecker;->setCanFocus(Z)V
HSPLandroidx/compose/ui/node/CenteredArray;->constructor-impl([I)[I
HSPLandroidx/compose/ui/node/CenteredArray;->get-impl([II)I
HSPLandroidx/compose/ui/node/CenteredArray;->getMid-impl([I)I
@@ -4197,8 +5869,6 @@
HSPLandroidx/compose/ui/node/ComposeUiNode$Companion;->getSetModifier()Lkotlin/jvm/functions/Function2;
HSPLandroidx/compose/ui/node/ComposeUiNode$Companion;->getSetViewConfiguration()Lkotlin/jvm/functions/Function2;
HSPLandroidx/compose/ui/node/ComposeUiNode;-><clinit>()V
-HSPLandroidx/compose/ui/node/DelegatableNodeKt;->access$addLayoutNodeChildren(Landroidx/compose/runtime/collection/MutableVector;Landroidx/compose/ui/Modifier$Node;)V
-HSPLandroidx/compose/ui/node/DelegatableNodeKt;->addLayoutNodeChildren(Landroidx/compose/runtime/collection/MutableVector;Landroidx/compose/ui/Modifier$Node;)V
HSPLandroidx/compose/ui/node/DelegatableNodeKt;->has-64DMado(Landroidx/compose/ui/node/DelegatableNode;I)Z
HSPLandroidx/compose/ui/node/DelegatableNodeKt;->localChild(Landroidx/compose/ui/node/DelegatableNode;I)Landroidx/compose/ui/Modifier$Node;
HSPLandroidx/compose/ui/node/DelegatableNodeKt;->requireCoordinator-64DMado(Landroidx/compose/ui/node/DelegatableNode;I)Landroidx/compose/ui/node/NodeCoordinator;
@@ -4214,14 +5884,36 @@
HSPLandroidx/compose/ui/node/DepthSortedSet;->isEmpty()Z
HSPLandroidx/compose/ui/node/DepthSortedSet;->pop()Landroidx/compose/ui/node/LayoutNode;
HSPLandroidx/compose/ui/node/DepthSortedSet;->remove(Landroidx/compose/ui/node/LayoutNode;)Z
+HSPLandroidx/compose/ui/node/DistanceAndInLayer;->compareTo-S_HNhKs(JJ)I
+HSPLandroidx/compose/ui/node/DistanceAndInLayer;->constructor-impl(J)J
+HSPLandroidx/compose/ui/node/DistanceAndInLayer;->getDistance-impl(J)F
+HSPLandroidx/compose/ui/node/DistanceAndInLayer;->isInLayer-impl(J)Z
+HSPLandroidx/compose/ui/node/DrawModifierNode;->onMeasureResultChanged()V
HSPLandroidx/compose/ui/node/DrawModifierNodeKt;->invalidateDraw(Landroidx/compose/ui/node/DrawModifierNode;)V
HSPLandroidx/compose/ui/node/HitTestResult;-><init>()V
+HSPLandroidx/compose/ui/node/HitTestResult;->access$getHitDepth$p(Landroidx/compose/ui/node/HitTestResult;)I
+HSPLandroidx/compose/ui/node/HitTestResult;->access$setHitDepth$p(Landroidx/compose/ui/node/HitTestResult;I)V
+HSPLandroidx/compose/ui/node/HitTestResult;->clear()V
+HSPLandroidx/compose/ui/node/HitTestResult;->ensureContainerSize()V
+HSPLandroidx/compose/ui/node/HitTestResult;->findBestHitDistance-ptXAw2c()J
+HSPLandroidx/compose/ui/node/HitTestResult;->get(I)Ljava/lang/Object;
+HSPLandroidx/compose/ui/node/HitTestResult;->getSize()I
+HSPLandroidx/compose/ui/node/HitTestResult;->hasHit()Z
+HSPLandroidx/compose/ui/node/HitTestResult;->hit(Ljava/lang/Object;ZLkotlin/jvm/functions/Function0;)V
+HSPLandroidx/compose/ui/node/HitTestResult;->hitInMinimumTouchTarget(Ljava/lang/Object;FZLkotlin/jvm/functions/Function0;)V
+HSPLandroidx/compose/ui/node/HitTestResult;->isEmpty()Z
+HSPLandroidx/compose/ui/node/HitTestResult;->resizeToHitDepth()V
+HSPLandroidx/compose/ui/node/HitTestResult;->size()I
+HSPLandroidx/compose/ui/node/HitTestResultKt;->DistanceAndInLayer(FZ)J
+HSPLandroidx/compose/ui/node/HitTestResultKt;->access$DistanceAndInLayer(FZ)J
HSPLandroidx/compose/ui/node/InnerNodeCoordinator$Companion;-><init>()V
HSPLandroidx/compose/ui/node/InnerNodeCoordinator$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/ui/node/InnerNodeCoordinator$tail$1;-><init>()V
HSPLandroidx/compose/ui/node/InnerNodeCoordinator;-><clinit>()V
HSPLandroidx/compose/ui/node/InnerNodeCoordinator;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->calculateAlignmentLine(Landroidx/compose/ui/layout/AlignmentLine;)I
HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->getTail()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->hitTestChild-YqVAtuI(Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V
HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->measure-BRTryo0(J)Landroidx/compose/ui/layout/Placeable;
HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->performDraw(Landroidx/compose/ui/graphics/Canvas;)V
HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->placeAt-f8xVGno(JFLkotlin/jvm/functions/Function1;)V
@@ -4247,6 +5939,7 @@
HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;-><clinit>()V
HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;-><init>(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/node/LayoutModifierNode;)V
+HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->calculateAlignmentLine(Landroidx/compose/ui/layout/AlignmentLine;)I
HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->getLayoutModifierNode()Landroidx/compose/ui/node/LayoutModifierNode;
HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->getTail()Landroidx/compose/ui/Modifier$Node;
HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->getWrappedNonNull()Landroidx/compose/ui/node/NodeCoordinator;
@@ -4255,6 +5948,8 @@
HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->performDraw(Landroidx/compose/ui/graphics/Canvas;)V
HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->placeAt-f8xVGno(JFLkotlin/jvm/functions/Function1;)V
HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->setLayoutModifierNode$ui_release(Landroidx/compose/ui/node/LayoutModifierNode;)V
+HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinatorKt;->access$calculateAlignmentAndPlaceChildAsNeeded(Landroidx/compose/ui/node/LookaheadCapablePlaceable;Landroidx/compose/ui/layout/AlignmentLine;)I
+HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinatorKt;->calculateAlignmentAndPlaceChildAsNeeded(Landroidx/compose/ui/node/LookaheadCapablePlaceable;Landroidx/compose/ui/layout/AlignmentLine;)I
HSPLandroidx/compose/ui/node/LayoutModifierNodeKt;->invalidateLayer(Landroidx/compose/ui/node/LayoutModifierNode;)V
HSPLandroidx/compose/ui/node/LayoutModifierNodeKt;->invalidateMeasurements(Landroidx/compose/ui/node/LayoutModifierNode;)V
HSPLandroidx/compose/ui/node/LayoutNode$$ExternalSyntheticLambda0;-><init>()V
@@ -4277,14 +5972,15 @@
HSPLandroidx/compose/ui/node/LayoutNode$UsageByParent;-><clinit>()V
HSPLandroidx/compose/ui/node/LayoutNode$UsageByParent;-><init>(Ljava/lang/String;I)V
HSPLandroidx/compose/ui/node/LayoutNode$UsageByParent;->values()[Landroidx/compose/ui/node/LayoutNode$UsageByParent;
+HSPLandroidx/compose/ui/node/LayoutNode$WhenMappings;-><clinit>()V
HSPLandroidx/compose/ui/node/LayoutNode$_foldedChildren$1;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
HSPLandroidx/compose/ui/node/LayoutNode$_foldedChildren$1;->invoke()Ljava/lang/Object;
HSPLandroidx/compose/ui/node/LayoutNode$_foldedChildren$1;->invoke()V
-HSPLandroidx/compose/ui/node/LayoutNode;->$r8$lambda$7po1rmUuVs6tXeBa5BDq-nmH7XI(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/node/LayoutNode;)I
+HSPLandroidx/compose/ui/node/LayoutNode;->$r8$lambda$5YfhreyhdVOEmOIPT3j1kScR2gs(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/node/LayoutNode;)I
HSPLandroidx/compose/ui/node/LayoutNode;-><clinit>()V
HSPLandroidx/compose/ui/node/LayoutNode;-><init>(ZI)V
HSPLandroidx/compose/ui/node/LayoutNode;-><init>(ZIILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/node/LayoutNode;->ZComparator$lambda$39(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/node/LayoutNode;)I
+HSPLandroidx/compose/ui/node/LayoutNode;->ZComparator$lambda$41(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/node/LayoutNode;)I
HSPLandroidx/compose/ui/node/LayoutNode;->access$getConstructor$cp()Lkotlin/jvm/functions/Function0;
HSPLandroidx/compose/ui/node/LayoutNode;->access$setIgnoreRemeasureRequests$p(Landroidx/compose/ui/node/LayoutNode;Z)V
HSPLandroidx/compose/ui/node/LayoutNode;->attach$ui_release(Landroidx/compose/ui/node/Owner;)V
@@ -4292,7 +5988,8 @@
HSPLandroidx/compose/ui/node/LayoutNode;->clearPlaceOrder$ui_release()V
HSPLandroidx/compose/ui/node/LayoutNode;->clearSubtreeIntrinsicsUsage$ui_release()V
HSPLandroidx/compose/ui/node/LayoutNode;->clearSubtreePlacementIntrinsicsUsage()V
-HSPLandroidx/compose/ui/node/LayoutNode;->dispatchOnPositionedCallbacks$ui_release()V+]Landroidx/compose/ui/node/GlobalPositionAwareModifierNode;Landroidx/compose/ui/node/BackwardsCompatNode;]Landroidx/compose/ui/Modifier$Node;Landroidx/compose/ui/node/BackwardsCompatNode;]Landroidx/compose/ui/node/NodeChain;Landroidx/compose/ui/node/NodeChain;]Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/node/LayoutNode;
+HSPLandroidx/compose/ui/node/LayoutNode;->detach$ui_release()V
+HSPLandroidx/compose/ui/node/LayoutNode;->dispatchOnPositionedCallbacks$ui_release()V
HSPLandroidx/compose/ui/node/LayoutNode;->draw$ui_release(Landroidx/compose/ui/graphics/Canvas;)V
HSPLandroidx/compose/ui/node/LayoutNode;->getCanMultiMeasure$ui_release()Z
HSPLandroidx/compose/ui/node/LayoutNode;->getChildMeasurables$ui_release()Ljava/util/List;
@@ -4301,6 +5998,7 @@
HSPLandroidx/compose/ui/node/LayoutNode;->getDensity()Landroidx/compose/ui/unit/Density;
HSPLandroidx/compose/ui/node/LayoutNode;->getDepth$ui_release()I
HSPLandroidx/compose/ui/node/LayoutNode;->getFoldedChildren$ui_release()Ljava/util/List;
+HSPLandroidx/compose/ui/node/LayoutNode;->getHasFixedInnerContentConstraints$ui_release()Z
HSPLandroidx/compose/ui/node/LayoutNode;->getHeight()I
HSPLandroidx/compose/ui/node/LayoutNode;->getInnerCoordinator$ui_release()Landroidx/compose/ui/node/NodeCoordinator;
HSPLandroidx/compose/ui/node/LayoutNode;->getInnerLayerCoordinator()Landroidx/compose/ui/node/NodeCoordinator;
@@ -4321,23 +6019,29 @@
HSPLandroidx/compose/ui/node/LayoutNode;->getNodes$ui_release()Landroidx/compose/ui/node/NodeChain;
HSPLandroidx/compose/ui/node/LayoutNode;->getOuterCoordinator$ui_release()Landroidx/compose/ui/node/NodeCoordinator;
HSPLandroidx/compose/ui/node/LayoutNode;->getOwner$ui_release()Landroidx/compose/ui/node/Owner;
-HSPLandroidx/compose/ui/node/LayoutNode;->getParent$ui_release()Landroidx/compose/ui/node/LayoutNode;+]Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/node/LayoutNode;
+HSPLandroidx/compose/ui/node/LayoutNode;->getParent$ui_release()Landroidx/compose/ui/node/LayoutNode;
HSPLandroidx/compose/ui/node/LayoutNode;->getSemanticsId()I
HSPLandroidx/compose/ui/node/LayoutNode;->getSubcompositionsState$ui_release()Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;
+HSPLandroidx/compose/ui/node/LayoutNode;->getViewConfiguration()Landroidx/compose/ui/platform/ViewConfiguration;
HSPLandroidx/compose/ui/node/LayoutNode;->getWidth()I
HSPLandroidx/compose/ui/node/LayoutNode;->getZSortedChildren()Landroidx/compose/runtime/collection/MutableVector;
HSPLandroidx/compose/ui/node/LayoutNode;->get_children$ui_release()Landroidx/compose/runtime/collection/MutableVector;
+HSPLandroidx/compose/ui/node/LayoutNode;->hitTest-M_7yMNQ$ui_release$default(Landroidx/compose/ui/node/LayoutNode;JLandroidx/compose/ui/node/HitTestResult;ZZILjava/lang/Object;)V
+HSPLandroidx/compose/ui/node/LayoutNode;->hitTest-M_7yMNQ$ui_release(JLandroidx/compose/ui/node/HitTestResult;ZZ)V
HSPLandroidx/compose/ui/node/LayoutNode;->insertAt$ui_release(ILandroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/node/LayoutNode;->invalidateFocusOnAttach()V
+HSPLandroidx/compose/ui/node/LayoutNode;->invalidateFocusOnDetach()V
HSPLandroidx/compose/ui/node/LayoutNode;->invalidateLayer$ui_release()V
HSPLandroidx/compose/ui/node/LayoutNode;->invalidateLayers$ui_release()V
HSPLandroidx/compose/ui/node/LayoutNode;->invalidateMeasurements$ui_release()V
HSPLandroidx/compose/ui/node/LayoutNode;->invalidateUnfoldedVirtualChildren()V
HSPLandroidx/compose/ui/node/LayoutNode;->isAttached()Z
HSPLandroidx/compose/ui/node/LayoutNode;->isPlaced()Z
-HSPLandroidx/compose/ui/node/LayoutNode;->isValid()Z
+HSPLandroidx/compose/ui/node/LayoutNode;->isValidOwnerScope()Z
HSPLandroidx/compose/ui/node/LayoutNode;->markLayoutPending$ui_release()V
HSPLandroidx/compose/ui/node/LayoutNode;->markMeasurePending$ui_release()V
HSPLandroidx/compose/ui/node/LayoutNode;->markNodeAndSubtreeAsPlaced()V
+HSPLandroidx/compose/ui/node/LayoutNode;->onChildRemoved(Landroidx/compose/ui/node/LayoutNode;)V
HSPLandroidx/compose/ui/node/LayoutNode;->onDensityOrLayoutDirectionChanged()V
HSPLandroidx/compose/ui/node/LayoutNode;->onNodePlaced$ui_release()V
HSPLandroidx/compose/ui/node/LayoutNode;->onZSortedChildrenInvalidated$ui_release()V
@@ -4345,11 +6049,14 @@
HSPLandroidx/compose/ui/node/LayoutNode;->recreateUnfoldedChildrenIfDirty()V
HSPLandroidx/compose/ui/node/LayoutNode;->remeasure-_Sx5XlM$ui_release$default(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/unit/Constraints;ILjava/lang/Object;)Z
HSPLandroidx/compose/ui/node/LayoutNode;->remeasure-_Sx5XlM$ui_release(Landroidx/compose/ui/unit/Constraints;)Z
+HSPLandroidx/compose/ui/node/LayoutNode;->removeAll$ui_release()V
+HSPLandroidx/compose/ui/node/LayoutNode;->removeAt$ui_release(II)V
HSPLandroidx/compose/ui/node/LayoutNode;->replace$ui_release()V
HSPLandroidx/compose/ui/node/LayoutNode;->requestRelayout$ui_release$default(Landroidx/compose/ui/node/LayoutNode;ZILjava/lang/Object;)V
HSPLandroidx/compose/ui/node/LayoutNode;->requestRelayout$ui_release(Z)V
HSPLandroidx/compose/ui/node/LayoutNode;->requestRemeasure$ui_release$default(Landroidx/compose/ui/node/LayoutNode;ZILjava/lang/Object;)V
HSPLandroidx/compose/ui/node/LayoutNode;->requestRemeasure$ui_release(Z)V
+HSPLandroidx/compose/ui/node/LayoutNode;->rescheduleRemeasureOrRelayout$ui_release(Landroidx/compose/ui/node/LayoutNode;)V
HSPLandroidx/compose/ui/node/LayoutNode;->resetSubtreeIntrinsicsUsage$ui_release()V
HSPLandroidx/compose/ui/node/LayoutNode;->setCanMultiMeasure$ui_release(Z)V
HSPLandroidx/compose/ui/node/LayoutNode;->setDensity(Landroidx/compose/ui/unit/Density;)V
@@ -4364,6 +6071,8 @@
HSPLandroidx/compose/ui/node/LayoutNode;->setViewConfiguration(Landroidx/compose/ui/platform/ViewConfiguration;)V
HSPLandroidx/compose/ui/node/LayoutNode;->updateChildrenIfDirty$ui_release()V
HSPLandroidx/compose/ui/node/LayoutNodeAlignmentLines;-><init>(Landroidx/compose/ui/node/AlignmentLinesOwner;)V
+HSPLandroidx/compose/ui/node/LayoutNodeAlignmentLines;->calculatePositionInParent-R5De75A(Landroidx/compose/ui/node/NodeCoordinator;J)J
+HSPLandroidx/compose/ui/node/LayoutNodeAlignmentLines;->getAlignmentLinesMap(Landroidx/compose/ui/node/NodeCoordinator;)Ljava/util/Map;
HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;-><init>(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope;)V
HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;-><init>(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->draw-x_KDEd0$ui_release(Landroidx/compose/ui/graphics/Canvas;JLandroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/node/DrawModifierNode;)V
@@ -4375,6 +6084,8 @@
HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->getDrawContext()Landroidx/compose/ui/graphics/drawscope/DrawContext;
HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection;
HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->getSize-NH-jbRc()J
+HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->performDraw(Landroidx/compose/ui/node/DrawModifierNode;Landroidx/compose/ui/graphics/Canvas;)V
+HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->roundToPx-0680j_4(F)I
HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->toPx-0680j_4(F)F
HSPLandroidx/compose/ui/node/LayoutNodeDrawScopeKt;->access$nextDrawNode(Landroidx/compose/ui/node/DelegatableNode;)Landroidx/compose/ui/node/DrawModifierNode;
HSPLandroidx/compose/ui/node/LayoutNodeDrawScopeKt;->nextDrawNode(Landroidx/compose/ui/node/DelegatableNode;)Landroidx/compose/ui/node/DrawModifierNode;
@@ -4403,7 +6114,9 @@
HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$remeasure$1;->invoke(Landroidx/compose/ui/node/AlignmentLinesOwner;)V
HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$remeasure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;-><init>(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;)V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->calculateAlignmentLines()Ljava/util/Map;
HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->forEachChildAlignmentLinesOwner(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->get(Landroidx/compose/ui/layout/AlignmentLine;)I
HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getAlignmentLines()Landroidx/compose/ui/node/AlignmentLines;
HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getChildMeasurables$ui_release()Ljava/util/List;
HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getInnerCoordinator()Landroidx/compose/ui/node/NodeCoordinator;
@@ -4412,6 +6125,7 @@
HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getParentAlignmentLinesOwner()Landroidx/compose/ui/node/AlignmentLinesOwner;
HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getParentData()Ljava/lang/Object;
HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->invalidateIntrinsicsParent(Z)V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->isPlaced()Z
HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->layoutChildren()V
HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->measure-BRTryo0(J)Landroidx/compose/ui/layout/Placeable;
HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->notifyChildrenUsingCoordinatesWhilePlacing()V
@@ -4420,6 +6134,7 @@
HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->placeOuterCoordinator-f8xVGno(JFLkotlin/jvm/functions/Function1;)V
HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->remeasure-BRTryo0(J)Z
HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->replace()V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->requestMeasure()V
HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->setChildMeasurablesDirty$ui_release(Z)V
HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->trackMeasurementByParent(Landroidx/compose/ui/node/LayoutNode;)V
HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->updateParentData()Z
@@ -4436,6 +6151,7 @@
HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$setLayoutState$p(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;Landroidx/compose/ui/node/LayoutNode$LayoutState;)V
HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getAlignmentLinesOwner$ui_release()Landroidx/compose/ui/node/AlignmentLinesOwner;
HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getChildrenAccessingCoordinatesDuringPlacement()I
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getCoordinatesAccessedDuringPlacement()Z
HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getHeight$ui_release()I
HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getLastConstraints-DWUhwKw()Landroidx/compose/ui/unit/Constraints;
HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getLayoutPending$ui_release()Z
@@ -4451,15 +6167,18 @@
HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->markLayoutPending$ui_release()V
HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->markMeasurePending$ui_release()V
HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->performMeasure-BRTryo0(J)V
+HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->resetAlignmentLines()V
HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->setCoordinatesAccessedDuringPlacement(Z)V
HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->updateParentData()V
HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegateKt;->access$updateChildMeasurables(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/runtime/collection/MutableVector;Lkotlin/jvm/functions/Function1;)V
HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegateKt;->updateChildMeasurables(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/runtime/collection/MutableVector;Lkotlin/jvm/functions/Function1;)V
HSPLandroidx/compose/ui/node/LookaheadCapablePlaceable;-><init>()V
+HSPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->get(Landroidx/compose/ui/layout/AlignmentLine;)I
HSPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->invalidateAlignmentLinesFromPositionChange(Landroidx/compose/ui/node/NodeCoordinator;)V
HSPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->isPlacingForAlignment$ui_release()Z
HSPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->isShallowPlacing$ui_release()Z
HSPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->setPlacingForAlignment$ui_release(Z)V
+HSPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->setShallowPlacing$ui_release(Z)V
HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate$WhenMappings;-><clinit>()V
HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->access$getRoot$p(Landroidx/compose/ui/node/MeasureAndLayoutDelegate;)Landroidx/compose/ui/node/LayoutNode;
@@ -4473,18 +6192,27 @@
HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->getMeasureAffectsParent(Landroidx/compose/ui/node/LayoutNode;)Z
HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->measureAndLayout(Lkotlin/jvm/functions/Function0;)Z
HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->measureOnly()V
+HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->onNodeDetached(Landroidx/compose/ui/node/LayoutNode;)V
HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->recurseRemeasure(Landroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->registerOnLayoutCompletedListener(Landroidx/compose/ui/node/Owner$OnLayoutCompletedListener;)V
HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->remeasureAndRelayoutIfNeeded(Landroidx/compose/ui/node/LayoutNode;)Z
HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->remeasureOnly(Landroidx/compose/ui/node/LayoutNode;)V
HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->requestRelayout(Landroidx/compose/ui/node/LayoutNode;Z)Z
HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->requestRemeasure$default(Landroidx/compose/ui/node/MeasureAndLayoutDelegate;Landroidx/compose/ui/node/LayoutNode;ZILjava/lang/Object;)Z
HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->requestRemeasure(Landroidx/compose/ui/node/LayoutNode;Z)Z
HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->updateRootConstraints-BRTryo0(J)V
+HSPLandroidx/compose/ui/node/ModifierNodeElement;-><clinit>()V
+HSPLandroidx/compose/ui/node/ModifierNodeElement;-><init>(Ljava/lang/Object;ZLkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/node/ModifierNodeElement;-><init>(Ljava/lang/Object;ZLkotlin/jvm/functions/Function1;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/ui/node/ModifierNodeElement;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/node/ModifierNodeElement;->getAutoInvalidate$ui_release()Z
HSPLandroidx/compose/ui/node/MutableVectorWithMutationTracking;-><init>(Landroidx/compose/runtime/collection/MutableVector;Lkotlin/jvm/functions/Function0;)V
HSPLandroidx/compose/ui/node/MutableVectorWithMutationTracking;->add(ILjava/lang/Object;)V
HSPLandroidx/compose/ui/node/MutableVectorWithMutationTracking;->asList()Ljava/util/List;
+HSPLandroidx/compose/ui/node/MutableVectorWithMutationTracking;->clear()V
+HSPLandroidx/compose/ui/node/MutableVectorWithMutationTracking;->get(I)Ljava/lang/Object;
+HSPLandroidx/compose/ui/node/MutableVectorWithMutationTracking;->getSize()I
HSPLandroidx/compose/ui/node/MutableVectorWithMutationTracking;->getVector()Landroidx/compose/runtime/collection/MutableVector;
+HSPLandroidx/compose/ui/node/MutableVectorWithMutationTracking;->removeAt(I)Ljava/lang/Object;
HSPLandroidx/compose/ui/node/MyersDiffKt;->access$swap([III)V
HSPLandroidx/compose/ui/node/MyersDiffKt;->applyDiff(IILandroidx/compose/ui/node/IntStack;Landroidx/compose/ui/node/DiffCallback;)V
HSPLandroidx/compose/ui/node/MyersDiffKt;->backward-4l5_RBY(IIIILandroidx/compose/ui/node/DiffCallback;[I[II[I)Z
@@ -4505,12 +6233,14 @@
HSPLandroidx/compose/ui/node/NodeChain;->access$updateNodeAndReplaceIfNeeded(Landroidx/compose/ui/node/NodeChain;Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node;
HSPLandroidx/compose/ui/node/NodeChain;->attach(Z)V
HSPLandroidx/compose/ui/node/NodeChain;->createAndInsertNodeAsParent(Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/node/NodeChain;->detach$ui_release()V
HSPLandroidx/compose/ui/node/NodeChain;->getAggregateChildKindSet()I
HSPLandroidx/compose/ui/node/NodeChain;->getDiffer(Landroidx/compose/ui/Modifier$Node;Landroidx/compose/runtime/collection/MutableVector;Landroidx/compose/runtime/collection/MutableVector;)Landroidx/compose/ui/node/NodeChain$Differ;
HSPLandroidx/compose/ui/node/NodeChain;->getHead$ui_release()Landroidx/compose/ui/Modifier$Node;
HSPLandroidx/compose/ui/node/NodeChain;->getInnerCoordinator$ui_release()Landroidx/compose/ui/node/InnerNodeCoordinator;
HSPLandroidx/compose/ui/node/NodeChain;->getOuterCoordinator$ui_release()Landroidx/compose/ui/node/NodeCoordinator;
HSPLandroidx/compose/ui/node/NodeChain;->getTail$ui_release()Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/node/NodeChain;->has$ui_release(I)Z
HSPLandroidx/compose/ui/node/NodeChain;->has-H91voCI$ui_release(I)Z
HSPLandroidx/compose/ui/node/NodeChain;->insertParent(Landroidx/compose/ui/Modifier$Node;Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node;
HSPLandroidx/compose/ui/node/NodeChain;->padChain()V
@@ -4523,9 +6253,14 @@
HSPLandroidx/compose/ui/node/NodeChainKt;-><clinit>()V
HSPLandroidx/compose/ui/node/NodeChainKt;->access$fillVector(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/collection/MutableVector;)Landroidx/compose/runtime/collection/MutableVector;
HSPLandroidx/compose/ui/node/NodeChainKt;->access$getSentinelHead$p()Landroidx/compose/ui/node/NodeChainKt$SentinelHead$1;
+HSPLandroidx/compose/ui/node/NodeChainKt;->access$updateUnsafe(Landroidx/compose/ui/node/ModifierNodeElement;Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node;
HSPLandroidx/compose/ui/node/NodeChainKt;->fillVector(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/collection/MutableVector;)Landroidx/compose/runtime/collection/MutableVector;
HSPLandroidx/compose/ui/node/NodeChainKt;->reuseActionForModifiers(Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Element;)I
+HSPLandroidx/compose/ui/node/NodeChainKt;->updateUnsafe(Landroidx/compose/ui/node/ModifierNodeElement;Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node;
HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$PointerInputSource$1;-><init>()V
+HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$PointerInputSource$1;->childHitTest-YqVAtuI(Landroidx/compose/ui/node/LayoutNode;JLandroidx/compose/ui/node/HitTestResult;ZZ)V
+HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$PointerInputSource$1;->entityType-OLwlOKw()I
+HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$PointerInputSource$1;->shouldHitTestChildren(Landroidx/compose/ui/node/LayoutNode;)Z
HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$SemanticsSource$1;-><init>()V
HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$onCommitAffectingLayer$1;-><clinit>()V
HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$onCommitAffectingLayer$1;-><init>()V
@@ -4535,6 +6270,10 @@
HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$onCommitAffectingLayerParams$1;-><init>()V
HSPLandroidx/compose/ui/node/NodeCoordinator$Companion;-><init>()V
HSPLandroidx/compose/ui/node/NodeCoordinator$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/ui/node/NodeCoordinator$Companion;->getPointerInputSource()Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;
+HSPLandroidx/compose/ui/node/NodeCoordinator$hit$1;-><init>(Landroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/node/DelegatableNode;Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V
+HSPLandroidx/compose/ui/node/NodeCoordinator$hit$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/ui/node/NodeCoordinator$hit$1;->invoke()V
HSPLandroidx/compose/ui/node/NodeCoordinator$invalidateParentLayer$1;-><init>(Landroidx/compose/ui/node/NodeCoordinator;)V
HSPLandroidx/compose/ui/node/NodeCoordinator$invalidateParentLayer$1;->invoke()Ljava/lang/Object;
HSPLandroidx/compose/ui/node/NodeCoordinator$invalidateParentLayer$1;->invoke()V
@@ -4549,21 +6288,33 @@
HSPLandroidx/compose/ui/node/NodeCoordinator;->access$drawContainedDrawModifiers(Landroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/graphics/Canvas;)V
HSPLandroidx/compose/ui/node/NodeCoordinator;->access$getGraphicsLayerScope$cp()Landroidx/compose/ui/graphics/ReusableGraphicsLayerScope;
HSPLandroidx/compose/ui/node/NodeCoordinator;->access$getMeasuredSize-YbymL2g(Landroidx/compose/ui/node/NodeCoordinator;)J
+HSPLandroidx/compose/ui/node/NodeCoordinator;->access$getPointerInputSource$cp()Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;
HSPLandroidx/compose/ui/node/NodeCoordinator;->access$headNode(Landroidx/compose/ui/node/NodeCoordinator;Z)Landroidx/compose/ui/Modifier$Node;
+HSPLandroidx/compose/ui/node/NodeCoordinator;->access$hit-1hIXUjU(Landroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/node/DelegatableNode;Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V
HSPLandroidx/compose/ui/node/NodeCoordinator;->access$setMeasurementConstraints-BRTryo0(Landroidx/compose/ui/node/NodeCoordinator;J)V
+HSPLandroidx/compose/ui/node/NodeCoordinator;->ancestorToLocal-R5De75A(Landroidx/compose/ui/node/NodeCoordinator;J)J
HSPLandroidx/compose/ui/node/NodeCoordinator;->attach()V
+HSPLandroidx/compose/ui/node/NodeCoordinator;->calculateMinimumTouchTargetPadding-E7KxVPU(J)J
+HSPLandroidx/compose/ui/node/NodeCoordinator;->detach()V
+HSPLandroidx/compose/ui/node/NodeCoordinator;->distanceInMinimumTouchTarget-tz77jQw(JJ)F
HSPLandroidx/compose/ui/node/NodeCoordinator;->draw(Landroidx/compose/ui/graphics/Canvas;)V
HSPLandroidx/compose/ui/node/NodeCoordinator;->drawContainedDrawModifiers(Landroidx/compose/ui/graphics/Canvas;)V
+HSPLandroidx/compose/ui/node/NodeCoordinator;->findCommonAncestor$ui_release(Landroidx/compose/ui/node/NodeCoordinator;)Landroidx/compose/ui/node/NodeCoordinator;
+HSPLandroidx/compose/ui/node/NodeCoordinator;->fromParentPosition-MK-Hz9U(J)J
HSPLandroidx/compose/ui/node/NodeCoordinator;->getAlignmentLinesOwner()Landroidx/compose/ui/node/AlignmentLinesOwner;
+HSPLandroidx/compose/ui/node/NodeCoordinator;->getChild()Landroidx/compose/ui/node/LookaheadCapablePlaceable;
HSPLandroidx/compose/ui/node/NodeCoordinator;->getCoordinates()Landroidx/compose/ui/layout/LayoutCoordinates;
HSPLandroidx/compose/ui/node/NodeCoordinator;->getDensity()F
HSPLandroidx/compose/ui/node/NodeCoordinator;->getFontScale()F
+HSPLandroidx/compose/ui/node/NodeCoordinator;->getHasMeasureResult()Z
HSPLandroidx/compose/ui/node/NodeCoordinator;->getLastLayerDrawingWasSkipped$ui_release()Z
+HSPLandroidx/compose/ui/node/NodeCoordinator;->getLastMeasurementConstraints-msEJaDk$ui_release()J
HSPLandroidx/compose/ui/node/NodeCoordinator;->getLayer()Landroidx/compose/ui/node/OwnedLayer;
HSPLandroidx/compose/ui/node/NodeCoordinator;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection;
HSPLandroidx/compose/ui/node/NodeCoordinator;->getLayoutNode()Landroidx/compose/ui/node/LayoutNode;
HSPLandroidx/compose/ui/node/NodeCoordinator;->getLookaheadDelegate$ui_release()Landroidx/compose/ui/node/LookaheadDelegate;
HSPLandroidx/compose/ui/node/NodeCoordinator;->getMeasureResult$ui_release()Landroidx/compose/ui/layout/MeasureResult;
+HSPLandroidx/compose/ui/node/NodeCoordinator;->getMinimumTouchTargetSize-NH-jbRc()J
HSPLandroidx/compose/ui/node/NodeCoordinator;->getParent()Landroidx/compose/ui/node/LookaheadCapablePlaceable;
HSPLandroidx/compose/ui/node/NodeCoordinator;->getParentData()Ljava/lang/Object;
HSPLandroidx/compose/ui/node/NodeCoordinator;->getPosition-nOcc-ac()J
@@ -4574,28 +6325,46 @@
HSPLandroidx/compose/ui/node/NodeCoordinator;->getZIndex()F
HSPLandroidx/compose/ui/node/NodeCoordinator;->hasNode-H91voCI(I)Z
HSPLandroidx/compose/ui/node/NodeCoordinator;->headNode(Z)Landroidx/compose/ui/Modifier$Node;
-HSPLandroidx/compose/ui/node/NodeCoordinator;->invalidateLayer()V+]Landroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/node/InnerNodeCoordinator;,Landroidx/compose/ui/node/LayoutModifierNodeCoordinator;]Landroidx/compose/ui/node/OwnedLayer;Landroidx/compose/ui/platform/RenderNodeLayer;
+HSPLandroidx/compose/ui/node/NodeCoordinator;->headUnchecked-H91voCI(I)Ljava/lang/Object;
+HSPLandroidx/compose/ui/node/NodeCoordinator;->hit-1hIXUjU(Landroidx/compose/ui/node/DelegatableNode;Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V
+HSPLandroidx/compose/ui/node/NodeCoordinator;->hitTest-YqVAtuI(Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V
+HSPLandroidx/compose/ui/node/NodeCoordinator;->hitTestChild-YqVAtuI(Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V
+HSPLandroidx/compose/ui/node/NodeCoordinator;->invalidateLayer()V
HSPLandroidx/compose/ui/node/NodeCoordinator;->invoke(Landroidx/compose/ui/graphics/Canvas;)V
HSPLandroidx/compose/ui/node/NodeCoordinator;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/ui/node/NodeCoordinator;->isAttached()Z
-HSPLandroidx/compose/ui/node/NodeCoordinator;->onLayerBlockUpdated(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/node/NodeCoordinator;->isPointerInBounds-k-4lQ0M(J)Z
+HSPLandroidx/compose/ui/node/NodeCoordinator;->isValidOwnerScope()Z
+HSPLandroidx/compose/ui/node/NodeCoordinator;->localPositionOf-R5De75A(Landroidx/compose/ui/layout/LayoutCoordinates;J)J
+HSPLandroidx/compose/ui/node/NodeCoordinator;->offsetFromEdge-MK-Hz9U(J)J
+HSPLandroidx/compose/ui/node/NodeCoordinator;->onLayerBlockUpdated$default(Landroidx/compose/ui/node/NodeCoordinator;Lkotlin/jvm/functions/Function1;ZILjava/lang/Object;)V
+HSPLandroidx/compose/ui/node/NodeCoordinator;->onLayerBlockUpdated(Lkotlin/jvm/functions/Function1;Z)V
HSPLandroidx/compose/ui/node/NodeCoordinator;->onLayoutModifierNodeChanged()V
HSPLandroidx/compose/ui/node/NodeCoordinator;->onMeasureResultChanged(II)V
HSPLandroidx/compose/ui/node/NodeCoordinator;->onMeasured()V
HSPLandroidx/compose/ui/node/NodeCoordinator;->onPlaced()V
HSPLandroidx/compose/ui/node/NodeCoordinator;->placeAt-f8xVGno(JFLkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/node/NodeCoordinator;->replace$ui_release()V
HSPLandroidx/compose/ui/node/NodeCoordinator;->setMeasureResult$ui_release(Landroidx/compose/ui/layout/MeasureResult;)V
HSPLandroidx/compose/ui/node/NodeCoordinator;->setPosition--gyyYBs(J)V
HSPLandroidx/compose/ui/node/NodeCoordinator;->setWrapped$ui_release(Landroidx/compose/ui/node/NodeCoordinator;)V
HSPLandroidx/compose/ui/node/NodeCoordinator;->setWrappedBy$ui_release(Landroidx/compose/ui/node/NodeCoordinator;)V
+HSPLandroidx/compose/ui/node/NodeCoordinator;->shouldSharePointerInputWithSiblings()Z
+HSPLandroidx/compose/ui/node/NodeCoordinator;->toCoordinator(Landroidx/compose/ui/layout/LayoutCoordinates;)Landroidx/compose/ui/node/NodeCoordinator;
+HSPLandroidx/compose/ui/node/NodeCoordinator;->toParentPosition-MK-Hz9U(J)J
HSPLandroidx/compose/ui/node/NodeCoordinator;->updateLayerParameters()V
HSPLandroidx/compose/ui/node/NodeCoordinator;->updateLookaheadScope$ui_release(Landroidx/compose/ui/layout/LookaheadScope;)V
+HSPLandroidx/compose/ui/node/NodeCoordinator;->withinLayerBounds-k-4lQ0M(J)Z
+HSPLandroidx/compose/ui/node/NodeCoordinatorKt;->access$nextUncheckedUntil-hw7D004(Landroidx/compose/ui/node/DelegatableNode;II)Ljava/lang/Object;
+HSPLandroidx/compose/ui/node/NodeCoordinatorKt;->nextUncheckedUntil-hw7D004(Landroidx/compose/ui/node/DelegatableNode;II)Ljava/lang/Object;
HSPLandroidx/compose/ui/node/NodeKind;->constructor-impl(I)I
HSPLandroidx/compose/ui/node/NodeKindKt;->autoInvalidateInsertedNode(Landroidx/compose/ui/Modifier$Node;)V
HSPLandroidx/compose/ui/node/NodeKindKt;->autoInvalidateNode(Landroidx/compose/ui/Modifier$Node;I)V
HSPLandroidx/compose/ui/node/NodeKindKt;->autoInvalidateUpdatedNode(Landroidx/compose/ui/Modifier$Node;)V
HSPLandroidx/compose/ui/node/NodeKindKt;->calculateNodeKindSetFrom(Landroidx/compose/ui/Modifier$Element;)I
+HSPLandroidx/compose/ui/node/NodeKindKt;->calculateNodeKindSetFrom(Landroidx/compose/ui/Modifier$Node;)I
HSPLandroidx/compose/ui/node/NodeKindKt;->getIncludeSelfInTraversal-H91voCI(I)Z
+HSPLandroidx/compose/ui/node/NodeKindKt;->specifiesCanFocusProperty(Landroidx/compose/ui/focus/FocusPropertiesModifierNode;)Z
HSPLandroidx/compose/ui/node/OnPositionedDispatcher$Companion$DepthComparator;-><clinit>()V
HSPLandroidx/compose/ui/node/OnPositionedDispatcher$Companion$DepthComparator;-><init>()V
HSPLandroidx/compose/ui/node/OnPositionedDispatcher$Companion$DepthComparator;->compare(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/node/LayoutNode;)I
@@ -4614,6 +6383,10 @@
HSPLandroidx/compose/ui/node/Owner;->measureAndLayout$default(Landroidx/compose/ui/node/Owner;ZILjava/lang/Object;)V
HSPLandroidx/compose/ui/node/Owner;->onRequestMeasure$default(Landroidx/compose/ui/node/Owner;Landroidx/compose/ui/node/LayoutNode;ZZILjava/lang/Object;)V
HSPLandroidx/compose/ui/node/Owner;->onRequestRelayout$default(Landroidx/compose/ui/node/Owner;Landroidx/compose/ui/node/LayoutNode;ZZILjava/lang/Object;)V
+HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$clearInvalidObservations$1;-><clinit>()V
+HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$clearInvalidObservations$1;-><init>()V
+HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$clearInvalidObservations$1;->invoke(Ljava/lang/Object;)Ljava/lang/Boolean;
+HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$clearInvalidObservations$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayout$1;-><clinit>()V
HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayout$1;-><init>()V
HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayoutModifier$1;-><clinit>()V
@@ -4631,11 +6404,15 @@
HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingMeasure$1;->invoke(Landroidx/compose/ui/node/LayoutNode;)V
HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingMeasure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/ui/node/OwnerSnapshotObserver;-><init>(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/node/OwnerSnapshotObserver;->clearInvalidObservations$ui_release()V
HSPLandroidx/compose/ui/node/OwnerSnapshotObserver;->observeLayoutModifierSnapshotReads$ui_release(Landroidx/compose/ui/node/LayoutNode;ZLkotlin/jvm/functions/Function0;)V
HSPLandroidx/compose/ui/node/OwnerSnapshotObserver;->observeLayoutSnapshotReads$ui_release(Landroidx/compose/ui/node/LayoutNode;ZLkotlin/jvm/functions/Function0;)V
HSPLandroidx/compose/ui/node/OwnerSnapshotObserver;->observeMeasureSnapshotReads$ui_release(Landroidx/compose/ui/node/LayoutNode;ZLkotlin/jvm/functions/Function0;)V
HSPLandroidx/compose/ui/node/OwnerSnapshotObserver;->observeReads$ui_release(Landroidx/compose/ui/node/OwnerScope;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V
HSPLandroidx/compose/ui/node/OwnerSnapshotObserver;->startObserving$ui_release()V
+HSPLandroidx/compose/ui/node/OwnerSnapshotObserver;->stopObserving$ui_release()V
+HSPLandroidx/compose/ui/node/PointerInputModifierNodeKt;->getLayoutCoordinates(Landroidx/compose/ui/node/PointerInputModifierNode;)Landroidx/compose/ui/layout/LayoutCoordinates;
+HSPLandroidx/compose/ui/node/PointerInputModifierNodeKt;->isAttached(Landroidx/compose/ui/node/PointerInputModifierNode;)Z
HSPLandroidx/compose/ui/node/SemanticsModifierNodeKt;->collapsedSemanticsConfiguration(Landroidx/compose/ui/node/SemanticsModifierNode;)Landroidx/compose/ui/semantics/SemanticsConfiguration;
HSPLandroidx/compose/ui/node/SemanticsModifierNodeKt;->invalidateSemantics(Landroidx/compose/ui/node/SemanticsModifierNode;)V
HSPLandroidx/compose/ui/node/Snake;->addDiagonalToStack-impl([ILandroidx/compose/ui/node/IntStack;)V
@@ -4654,7 +6431,9 @@
HSPLandroidx/compose/ui/node/UiApplier;->insertBottomUp(ILjava/lang/Object;)V
HSPLandroidx/compose/ui/node/UiApplier;->insertTopDown(ILandroidx/compose/ui/node/LayoutNode;)V
HSPLandroidx/compose/ui/node/UiApplier;->insertTopDown(ILjava/lang/Object;)V
+HSPLandroidx/compose/ui/node/UiApplier;->onClear()V
HSPLandroidx/compose/ui/node/UiApplier;->onEndChanges()V
+HSPLandroidx/compose/ui/node/UiApplier;->remove(II)V
HSPLandroidx/compose/ui/platform/AbstractComposeView$ensureCompositionCreated$1;-><init>(Landroidx/compose/ui/platform/AbstractComposeView;)V
HSPLandroidx/compose/ui/platform/AbstractComposeView$ensureCompositionCreated$1;->invoke(Landroidx/compose/runtime/Composer;I)V
HSPLandroidx/compose/ui/platform/AbstractComposeView$ensureCompositionCreated$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
@@ -4664,6 +6443,7 @@
HSPLandroidx/compose/ui/platform/AbstractComposeView;->addView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V
HSPLandroidx/compose/ui/platform/AbstractComposeView;->cacheIfAlive(Landroidx/compose/runtime/CompositionContext;)Landroidx/compose/runtime/CompositionContext;
HSPLandroidx/compose/ui/platform/AbstractComposeView;->checkAddView()V
+HSPLandroidx/compose/ui/platform/AbstractComposeView;->disposeComposition()V
HSPLandroidx/compose/ui/platform/AbstractComposeView;->ensureCompositionCreated()V
HSPLandroidx/compose/ui/platform/AbstractComposeView;->internalOnLayout$ui_release(ZIIII)V
HSPLandroidx/compose/ui/platform/AbstractComposeView;->internalOnMeasure$ui_release(II)V
@@ -4676,6 +6456,7 @@
HSPLandroidx/compose/ui/platform/AbstractComposeView;->setParentCompositionContext(Landroidx/compose/runtime/CompositionContext;)V
HSPLandroidx/compose/ui/platform/AbstractComposeView;->setParentContext(Landroidx/compose/runtime/CompositionContext;)V
HSPLandroidx/compose/ui/platform/AbstractComposeView;->setPreviousAttachedWindowToken(Landroid/os/IBinder;)V
+HSPLandroidx/compose/ui/platform/AbstractComposeView;->shouldDelayChildPressedState()Z
HSPLandroidx/compose/ui/platform/AndroidAccessibilityManager$Companion;-><init>()V
HSPLandroidx/compose/ui/platform/AndroidAccessibilityManager$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/ui/platform/AndroidAccessibilityManager;-><clinit>()V
@@ -4699,6 +6480,9 @@
HSPLandroidx/compose/ui/platform/AndroidComposeView$_inputModeManager$1;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V
HSPLandroidx/compose/ui/platform/AndroidComposeView$configurationChangeObserver$1;-><clinit>()V
HSPLandroidx/compose/ui/platform/AndroidComposeView$configurationChangeObserver$1;-><init>()V
+HSPLandroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;->invoke(Lkotlin/jvm/functions/Function0;)V
HSPLandroidx/compose/ui/platform/AndroidComposeView$keyInputModifier$1;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V
HSPLandroidx/compose/ui/platform/AndroidComposeView$pointerIconService$1;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V
HSPLandroidx/compose/ui/platform/AndroidComposeView$resendMotionEventOnLayout$1;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V
@@ -4707,11 +6491,6 @@
HSPLandroidx/compose/ui/platform/AndroidComposeView$resendMotionEventRunnable$1;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V
HSPLandroidx/compose/ui/platform/AndroidComposeView$rotaryInputModifier$1;-><clinit>()V
HSPLandroidx/compose/ui/platform/AndroidComposeView$rotaryInputModifier$1;-><init>()V
-HSPLandroidx/compose/ui/platform/AndroidComposeView$scrollContainerInfo$1$value$1;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView$scrollContainerInfo$1;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView$scrollContainerInfo$1;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
-HSPLandroidx/compose/ui/platform/AndroidComposeView$scrollContainerInfo$1;->getValue()Landroidx/compose/ui/platform/AndroidComposeView$scrollContainerInfo$1$value$1;
-HSPLandroidx/compose/ui/platform/AndroidComposeView$scrollContainerInfo$1;->getValue()Ljava/lang/Object;
HSPLandroidx/compose/ui/platform/AndroidComposeView$semanticsModifier$1;-><clinit>()V
HSPLandroidx/compose/ui/platform/AndroidComposeView$semanticsModifier$1;-><init>()V
HSPLandroidx/compose/ui/platform/AndroidComposeView$semanticsModifier$1;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V
@@ -4730,9 +6509,11 @@
HSPLandroidx/compose/ui/platform/AndroidComposeView;->access$setSystemPropertiesClass$cp(Ljava/lang/Class;)V
HSPLandroidx/compose/ui/platform/AndroidComposeView;->autofillSupported()Z
HSPLandroidx/compose/ui/platform/AndroidComposeView;->boundsUpdatesEventLoop(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->childSizeCanAffectParentSize(Landroidx/compose/ui/node/LayoutNode;)Z
HSPLandroidx/compose/ui/platform/AndroidComposeView;->convertMeasureSpec(I)Lkotlin/Pair;
HSPLandroidx/compose/ui/platform/AndroidComposeView;->createLayer(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)Landroidx/compose/ui/node/OwnedLayer;
HSPLandroidx/compose/ui/platform/AndroidComposeView;->dispatchDraw(Landroid/graphics/Canvas;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->dispatchTouchEvent(Landroid/view/MotionEvent;)Z
HSPLandroidx/compose/ui/platform/AndroidComposeView;->forceMeasureTheSubtree(Landroidx/compose/ui/node/LayoutNode;)V
HSPLandroidx/compose/ui/platform/AndroidComposeView;->getAccessibilityManager()Landroidx/compose/ui/platform/AccessibilityManager;
HSPLandroidx/compose/ui/platform/AndroidComposeView;->getAccessibilityManager()Landroidx/compose/ui/platform/AndroidAccessibilityManager;
@@ -4741,7 +6522,7 @@
HSPLandroidx/compose/ui/platform/AndroidComposeView;->getClipboardManager()Landroidx/compose/ui/platform/AndroidClipboardManager;
HSPLandroidx/compose/ui/platform/AndroidComposeView;->getClipboardManager()Landroidx/compose/ui/platform/ClipboardManager;
HSPLandroidx/compose/ui/platform/AndroidComposeView;->getDensity()Landroidx/compose/ui/unit/Density;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->getFocusManager()Landroidx/compose/ui/focus/FocusManager;
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->getFocusOwner()Landroidx/compose/ui/focus/FocusOwner;
HSPLandroidx/compose/ui/platform/AndroidComposeView;->getFontFamilyResolver()Landroidx/compose/ui/text/font/FontFamily$Resolver;
HSPLandroidx/compose/ui/platform/AndroidComposeView;->getFontLoader()Landroidx/compose/ui/text/font/Font$ResourceLoader;
HSPLandroidx/compose/ui/platform/AndroidComposeView;->getFontWeightAdjustmentCompat(Landroid/content/res/Configuration;)I
@@ -4762,14 +6543,21 @@
HSPLandroidx/compose/ui/platform/AndroidComposeView;->getViewTreeOwners()Landroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;
HSPLandroidx/compose/ui/platform/AndroidComposeView;->getWindowInfo()Landroidx/compose/ui/platform/WindowInfo;
HSPLandroidx/compose/ui/platform/AndroidComposeView;->globalLayoutListener$lambda$1(Landroidx/compose/ui/platform/AndroidComposeView;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->handleMotionEvent-8iAsVTc(Landroid/view/MotionEvent;)I
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->hasChangedDevices(Landroid/view/MotionEvent;Landroid/view/MotionEvent;)Z
HSPLandroidx/compose/ui/platform/AndroidComposeView;->invalidateLayers(Landroidx/compose/ui/node/LayoutNode;)V
HSPLandroidx/compose/ui/platform/AndroidComposeView;->invalidateLayoutNodeMeasurement(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->isBadMotionEvent(Landroid/view/MotionEvent;)Z
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->isInBounds(Landroid/view/MotionEvent;)Z
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->isPositionChanged(Landroid/view/MotionEvent;)Z
HSPLandroidx/compose/ui/platform/AndroidComposeView;->keyboardVisibilityEventLoop(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
HSPLandroidx/compose/ui/platform/AndroidComposeView;->measureAndLayout(Z)V
HSPLandroidx/compose/ui/platform/AndroidComposeView;->notifyLayerIsDirty$ui_release(Landroidx/compose/ui/node/OwnedLayer;Z)V
HSPLandroidx/compose/ui/platform/AndroidComposeView;->onAttach(Landroidx/compose/ui/node/LayoutNode;)V
HSPLandroidx/compose/ui/platform/AndroidComposeView;->onAttachedToWindow()V
HSPLandroidx/compose/ui/platform/AndroidComposeView;->onCheckIsTextEditor()Z
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->onDetach(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->onDetachedFromWindow()V
HSPLandroidx/compose/ui/platform/AndroidComposeView;->onDraw(Landroid/graphics/Canvas;)V
HSPLandroidx/compose/ui/platform/AndroidComposeView;->onEndApplyChanges()V
HSPLandroidx/compose/ui/platform/AndroidComposeView;->onLayout(ZIIII)V
@@ -4781,10 +6569,16 @@
HSPLandroidx/compose/ui/platform/AndroidComposeView;->onRtlPropertiesChanged(I)V
HSPLandroidx/compose/ui/platform/AndroidComposeView;->onSemanticsChange()V
HSPLandroidx/compose/ui/platform/AndroidComposeView;->onWindowFocusChanged(Z)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->recalculateWindowPosition()V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->recalculateWindowPosition(Landroid/view/MotionEvent;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->recalculateWindowViewTransforms()V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->recycle$ui_release(Landroidx/compose/ui/node/OwnedLayer;)Z
HSPLandroidx/compose/ui/platform/AndroidComposeView;->registerOnEndApplyChangesListener(Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->registerOnLayoutCompletedListener(Landroidx/compose/ui/node/Owner$OnLayoutCompletedListener;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->requestClearInvalidObservations()V
HSPLandroidx/compose/ui/platform/AndroidComposeView;->scheduleMeasureAndLayout$default(Landroidx/compose/ui/platform/AndroidComposeView;Landroidx/compose/ui/node/LayoutNode;ILjava/lang/Object;)V
HSPLandroidx/compose/ui/platform/AndroidComposeView;->scheduleMeasureAndLayout(Landroidx/compose/ui/node/LayoutNode;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->screenToLocal-MK-Hz9U(J)J
+HSPLandroidx/compose/ui/platform/AndroidComposeView;->sendMotionEvent-8iAsVTc(Landroid/view/MotionEvent;)I
HSPLandroidx/compose/ui/platform/AndroidComposeView;->setConfigurationChangeObserver(Lkotlin/jvm/functions/Function1;)V
HSPLandroidx/compose/ui/platform/AndroidComposeView;->setLayoutDirection(Landroidx/compose/ui/unit/LayoutDirection;)V
HSPLandroidx/compose/ui/platform/AndroidComposeView;->setOnViewTreeOwnersAvailable(Lkotlin/jvm/functions/Function1;)V
@@ -4797,14 +6591,18 @@
HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda2;-><init>(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V
HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1;-><init>(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V
HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1;->onViewAttachedToWindow(Landroid/view/View;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1;->onViewDetachedFromWindow(Landroid/view/View;)V
HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$Companion;-><init>()V
HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$MyNodeProvider;-><init>(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V
HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$SemanticsNodeCopy;-><init>(Landroidx/compose/ui/semantics/SemanticsNode;Ljava/util/Map;)V
HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$boundsUpdatesEventLoop$1;-><init>(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$boundsUpdatesEventLoop$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$sendScrollEventIfNeededLambda$1;-><init>(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V
HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;-><clinit>()V
HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->access$getHandler$p(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)Landroid/os/Handler;
+HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->access$getSemanticsChangeChecker$p(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)Ljava/lang/Runnable;
HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->boundsUpdatesEventLoop(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getAccessibilityManager$ui_release()Landroid/view/accessibility/AccessibilityManager;
HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getEnabledStateListener$ui_release()Landroid/view/accessibility/AccessibilityManager$AccessibilityStateChangeListener;
@@ -4815,6 +6613,9 @@
HSPLandroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ;-><clinit>()V
HSPLandroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ;-><init>()V
HSPLandroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ;->disallowForceDark(Landroid/view/View;)V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsN;-><clinit>()V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsN;-><init>()V
+HSPLandroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsN;->setPointerIcon(Landroid/view/View;Landroidx/compose/ui/input/pointer/PointerIcon;)V
HSPLandroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsO;-><clinit>()V
HSPLandroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsO;-><init>()V
HSPLandroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsO;->focusable(Landroid/view/View;IZ)V
@@ -4841,6 +6642,7 @@
HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalView$1;-><init>()V
HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$1$1;-><init>(Landroidx/compose/runtime/MutableState;)V
HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$2$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/ui/platform/DisposableSaveableStateRegistry;)V
+HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$2$invoke$$inlined$onDispose$1;->dispose()V
HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$2;-><init>(Landroidx/compose/ui/platform/DisposableSaveableStateRegistry;)V
HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$2;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult;
HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
@@ -4851,6 +6653,7 @@
HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$4;->invoke(Landroidx/compose/runtime/Composer;I)V
HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$1$invoke$$inlined$onDispose$1;-><init>(Landroid/content/Context;Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$callbacks$1$1;)V
+HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$1$invoke$$inlined$onDispose$1;->dispose()V
HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$1;-><init>(Landroid/content/Context;Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$callbacks$1$1;)V
HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult;
HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
@@ -4910,7 +6713,9 @@
HSPLandroidx/compose/ui/platform/AndroidUriHandler;-><init>(Landroid/content/Context;)V
HSPLandroidx/compose/ui/platform/AndroidViewConfiguration;-><clinit>()V
HSPLandroidx/compose/ui/platform/AndroidViewConfiguration;-><init>(Landroid/view/ViewConfiguration;)V
+HSPLandroidx/compose/ui/platform/AndroidViewConfiguration;->getTouchSlop()F
HSPLandroidx/compose/ui/platform/CalculateMatrixToWindowApi29;-><init>()V
+HSPLandroidx/compose/ui/platform/CalculateMatrixToWindowApi29;->calculateMatrixToWindow-EL8BTi8(Landroid/view/View;[F)V
HSPLandroidx/compose/ui/platform/ComposableSingletons$Wrapper_androidKt$lambda-1$1;-><clinit>()V
HSPLandroidx/compose/ui/platform/ComposableSingletons$Wrapper_androidKt$lambda-1$1;-><init>()V
HSPLandroidx/compose/ui/platform/ComposableSingletons$Wrapper_androidKt;-><clinit>()V
@@ -4960,6 +6765,7 @@
HSPLandroidx/compose/ui/platform/CompositionLocalsKt$ProvideCommonCompositionLocals$1;-><init>(Landroidx/compose/ui/node/Owner;Landroidx/compose/ui/platform/UriHandler;Lkotlin/jvm/functions/Function2;I)V
HSPLandroidx/compose/ui/platform/CompositionLocalsKt;-><clinit>()V
HSPLandroidx/compose/ui/platform/CompositionLocalsKt;->ProvideCommonCompositionLocals(Landroidx/compose/ui/node/Owner;Landroidx/compose/ui/platform/UriHandler;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalAccessibilityManager()Landroidx/compose/runtime/ProvidableCompositionLocal;
HSPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalDensity()Landroidx/compose/runtime/ProvidableCompositionLocal;
HSPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalFontFamilyResolver()Landroidx/compose/runtime/ProvidableCompositionLocal;
HSPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalInputModeManager()Landroidx/compose/runtime/ProvidableCompositionLocal;
@@ -4968,8 +6774,11 @@
HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistry;Lkotlin/jvm/functions/Function0;)V
HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry;->canBeSaved(Ljava/lang/Object;)Z
HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry;->consumeRestored(Ljava/lang/String;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry;->dispose()V
HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry;->registerProvider(Ljava/lang/String;Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/saveable/SaveableStateRegistry$Entry;
HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$1;-><init>(ZLandroidx/savedstate/SavedStateRegistry;Ljava/lang/String;)V
+HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$1;->invoke()V
HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$registered$1;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistry;)V
HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$saveableStateRegistry$1;-><clinit>()V
HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$saveableStateRegistry$1;-><init>()V
@@ -5001,7 +6810,10 @@
HSPLandroidx/compose/ui/platform/InspectableValueKt;->isDebugInspectorInfoEnabled()Z
HSPLandroidx/compose/ui/platform/InspectorValueInfo;-><clinit>()V
HSPLandroidx/compose/ui/platform/InspectorValueInfo;-><init>(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/platform/InvertMatrixKt;->invertTo-JiSxe2E([F[F)Z
HSPLandroidx/compose/ui/platform/LayerMatrixCache;-><init>(Lkotlin/jvm/functions/Function2;)V
+HSPLandroidx/compose/ui/platform/LayerMatrixCache;->calculateInverseMatrix-bWbORWo(Ljava/lang/Object;)[F
+HSPLandroidx/compose/ui/platform/LayerMatrixCache;->calculateMatrix-GrdbGEg(Ljava/lang/Object;)[F
HSPLandroidx/compose/ui/platform/LayerMatrixCache;->invalidate()V
HSPLandroidx/compose/ui/platform/MotionDurationScaleImpl;-><init>()V
HSPLandroidx/compose/ui/platform/MotionDurationScaleImpl;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
@@ -5012,19 +6824,24 @@
HSPLandroidx/compose/ui/platform/OutlineResolver;-><init>(Landroidx/compose/ui/unit/Density;)V
HSPLandroidx/compose/ui/platform/OutlineResolver;->getOutline()Landroid/graphics/Outline;
HSPLandroidx/compose/ui/platform/OutlineResolver;->getOutlineClipSupported()Z
+HSPLandroidx/compose/ui/platform/OutlineResolver;->isInOutline-k-4lQ0M(J)Z
HSPLandroidx/compose/ui/platform/OutlineResolver;->update(Landroidx/compose/ui/graphics/Shape;FZFLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)Z
HSPLandroidx/compose/ui/platform/OutlineResolver;->update-uvyYCjk(J)V
HSPLandroidx/compose/ui/platform/OutlineResolver;->updateCache()V
HSPLandroidx/compose/ui/platform/OutlineResolver;->updateCacheWithPath(Landroidx/compose/ui/graphics/Path;)V
+HSPLandroidx/compose/ui/platform/OutlineResolver;->updateCacheWithRect(Landroidx/compose/ui/geometry/Rect;)V
HSPLandroidx/compose/ui/platform/OutlineResolver;->updateCacheWithRoundRect(Landroidx/compose/ui/geometry/RoundRect;)V
HSPLandroidx/compose/ui/platform/RenderNodeApi29;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->discardDisplayList()V
HSPLandroidx/compose/ui/platform/RenderNodeApi29;->drawInto(Landroid/graphics/Canvas;)V
HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getAlpha()F
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getClipToBounds()Z
HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getClipToOutline()Z
HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getElevation()F
HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getHasDisplayList()Z
HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getHeight()I
HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getLeft()I
+HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getMatrix(Landroid/graphics/Matrix;)V
HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getTop()I
HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getWidth()I
HSPLandroidx/compose/ui/platform/RenderNodeApi29;->offsetLeftAndRight(I)V
@@ -5056,18 +6873,29 @@
HSPLandroidx/compose/ui/platform/RenderNodeApi29VerificationHelper;->setRenderEffect(Landroid/graphics/RenderNode;Landroidx/compose/ui/graphics/RenderEffect;)V
HSPLandroidx/compose/ui/platform/RenderNodeLayer$Companion$getMatrix$1;-><clinit>()V
HSPLandroidx/compose/ui/platform/RenderNodeLayer$Companion$getMatrix$1;-><init>()V
+HSPLandroidx/compose/ui/platform/RenderNodeLayer$Companion$getMatrix$1;->invoke(Landroidx/compose/ui/platform/DeviceRenderNode;Landroid/graphics/Matrix;)V
+HSPLandroidx/compose/ui/platform/RenderNodeLayer$Companion$getMatrix$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/ui/platform/RenderNodeLayer$Companion;-><init>()V
HSPLandroidx/compose/ui/platform/RenderNodeLayer$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/ui/platform/RenderNodeLayer;-><clinit>()V
HSPLandroidx/compose/ui/platform/RenderNodeLayer;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V
+HSPLandroidx/compose/ui/platform/RenderNodeLayer;->destroy()V
HSPLandroidx/compose/ui/platform/RenderNodeLayer;->drawLayer(Landroidx/compose/ui/graphics/Canvas;)V
HSPLandroidx/compose/ui/platform/RenderNodeLayer;->invalidate()V
+HSPLandroidx/compose/ui/platform/RenderNodeLayer;->isInLayer-k-4lQ0M(J)Z
+HSPLandroidx/compose/ui/platform/RenderNodeLayer;->mapOffset-8S9VItk(JZ)J
HSPLandroidx/compose/ui/platform/RenderNodeLayer;->move--gyyYBs(J)V
HSPLandroidx/compose/ui/platform/RenderNodeLayer;->resize-ozmzZPI(J)V
+HSPLandroidx/compose/ui/platform/RenderNodeLayer;->reuseLayer(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V
HSPLandroidx/compose/ui/platform/RenderNodeLayer;->setDirty(Z)V
HSPLandroidx/compose/ui/platform/RenderNodeLayer;->triggerRepaint()V
HSPLandroidx/compose/ui/platform/RenderNodeLayer;->updateDisplayList()V
HSPLandroidx/compose/ui/platform/RenderNodeLayer;->updateLayerProperties-dDxr-wY(FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZLandroidx/compose/ui/graphics/RenderEffect;JJILandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)V
+HSPLandroidx/compose/ui/platform/ShapeContainingUtilKt;->cornersFit(Landroidx/compose/ui/geometry/RoundRect;)Z
+HSPLandroidx/compose/ui/platform/ShapeContainingUtilKt;->isInOutline(Landroidx/compose/ui/graphics/Outline;FFLandroidx/compose/ui/graphics/Path;Landroidx/compose/ui/graphics/Path;)Z
+HSPLandroidx/compose/ui/platform/ShapeContainingUtilKt;->isInRectangle(Landroidx/compose/ui/geometry/Rect;FF)Z
+HSPLandroidx/compose/ui/platform/ShapeContainingUtilKt;->isInRoundedRect(Landroidx/compose/ui/graphics/Outline$Rounded;FFLandroidx/compose/ui/graphics/Path;Landroidx/compose/ui/graphics/Path;)Z
+HSPLandroidx/compose/ui/platform/ShapeContainingUtilKt;->isWithinEllipse-VE1yxkc(FFJFF)Z
HSPLandroidx/compose/ui/platform/TextToolbarStatus;->$values()[Landroidx/compose/ui/platform/TextToolbarStatus;
HSPLandroidx/compose/ui/platform/TextToolbarStatus;-><clinit>()V
HSPLandroidx/compose/ui/platform/TextToolbarStatus;-><init>(Ljava/lang/String;I)V
@@ -5077,6 +6905,7 @@
HSPLandroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$1;-><init>(Landroidx/compose/ui/platform/AbstractComposeView;Landroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$listener$1;Landroidx/customview/poolingcontainer/PoolingContainerListener;)V
HSPLandroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$listener$1;-><init>(Landroidx/compose/ui/platform/AbstractComposeView;)V
HSPLandroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$listener$1;->onViewAttachedToWindow(Landroid/view/View;)V
+HSPLandroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$listener$1;->onViewDetachedFromWindow(Landroid/view/View;)V
HSPLandroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$poolingContainerListener$1;-><init>(Landroidx/compose/ui/platform/AbstractComposeView;)V
HSPLandroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool;-><clinit>()V
HSPLandroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool;-><init>()V
@@ -5098,10 +6927,12 @@
HSPLandroidx/compose/ui/platform/WeakCache;-><init>()V
HSPLandroidx/compose/ui/platform/WeakCache;->clearWeakReferences()V
HSPLandroidx/compose/ui/platform/WeakCache;->pop()Ljava/lang/Object;
+HSPLandroidx/compose/ui/platform/WeakCache;->push(Ljava/lang/Object;)V
HSPLandroidx/compose/ui/platform/WindowInfoImpl$Companion;-><init>()V
HSPLandroidx/compose/ui/platform/WindowInfoImpl$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/ui/platform/WindowInfoImpl;-><clinit>()V
HSPLandroidx/compose/ui/platform/WindowInfoImpl;-><init>()V
+HSPLandroidx/compose/ui/platform/WindowInfoImpl;->setKeyboardModifiers-5xRPYO0(I)V
HSPLandroidx/compose/ui/platform/WindowInfoImpl;->setWindowFocused(Z)V
HSPLandroidx/compose/ui/platform/WindowRecomposerFactory$Companion$LifecycleAware$1;-><clinit>()V
HSPLandroidx/compose/ui/platform/WindowRecomposerFactory$Companion$LifecycleAware$1;-><init>()V
@@ -5112,6 +6943,7 @@
HSPLandroidx/compose/ui/platform/WindowRecomposerFactory;-><clinit>()V
HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$1;-><init>(Lkotlinx/coroutines/Job;)V
HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$1;->onViewAttachedToWindow(Landroid/view/View;)V
+HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$1;->onViewDetachedFromWindow(Landroid/view/View;)V
HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$unsetJob$1;-><init>(Landroidx/compose/runtime/Recomposer;Landroid/view/View;Lkotlin/coroutines/Continuation;)V
HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$unsetJob$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$unsetJob$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
@@ -5120,6 +6952,7 @@
HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy;->createAndInstallWindowRecomposer$ui_release(Landroid/view/View;)Landroidx/compose/runtime/Recomposer;
HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$1;-><init>(Landroid/view/View;Landroidx/compose/runtime/Recomposer;)V
HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$1;->onViewAttachedToWindow(Landroid/view/View;)V
+HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$1;->onViewDetachedFromWindow(Landroid/view/View;)V
HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$WhenMappings;-><clinit>()V
HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1$1;-><init>(Landroidx/compose/ui/platform/MotionDurationScaleImpl;)V
HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1$1;->emit(FLkotlin/coroutines/Continuation;)Ljava/lang/Object;
@@ -5170,6 +7003,7 @@
HSPLandroidx/compose/ui/platform/WrappedComposition;->access$getDisposed$p(Landroidx/compose/ui/platform/WrappedComposition;)Z
HSPLandroidx/compose/ui/platform/WrappedComposition;->access$setAddedToLifecycle$p(Landroidx/compose/ui/platform/WrappedComposition;Landroidx/lifecycle/Lifecycle;)V
HSPLandroidx/compose/ui/platform/WrappedComposition;->access$setLastContent$p(Landroidx/compose/ui/platform/WrappedComposition;Lkotlin/jvm/functions/Function2;)V
+HSPLandroidx/compose/ui/platform/WrappedComposition;->dispose()V
HSPLandroidx/compose/ui/platform/WrappedComposition;->getOriginal()Landroidx/compose/runtime/Composition;
HSPLandroidx/compose/ui/platform/WrappedComposition;->getOwner()Landroidx/compose/ui/platform/AndroidComposeView;
HSPLandroidx/compose/ui/platform/WrappedComposition;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
@@ -5190,21 +7024,26 @@
HSPLandroidx/compose/ui/res/ImageVectorCache;-><init>()V
HSPLandroidx/compose/ui/res/Resources_androidKt;->resources(Landroidx/compose/runtime/Composer;I)Landroid/content/res/Resources;
HSPLandroidx/compose/ui/res/StringResources_androidKt;->stringResource(ILandroidx/compose/runtime/Composer;I)Ljava/lang/String;
-HSPLandroidx/compose/ui/res/StringResources_androidKt;->stringResource(I[Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Ljava/lang/String;
HSPLandroidx/compose/ui/semantics/AccessibilityAction;-><clinit>()V
HSPLandroidx/compose/ui/semantics/AccessibilityAction;-><init>(Ljava/lang/String;Lkotlin/Function;)V
HSPLandroidx/compose/ui/semantics/AccessibilityAction;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/semantics/CollectionInfo;-><clinit>()V
+HSPLandroidx/compose/ui/semantics/CollectionInfo;-><init>(II)V
HSPLandroidx/compose/ui/semantics/Role$Companion;-><init>()V
HSPLandroidx/compose/ui/semantics/Role$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/ui/semantics/Role$Companion;->getButton-o7Vup1c()I
+HSPLandroidx/compose/ui/semantics/Role$Companion;->getImage-o7Vup1c()I
HSPLandroidx/compose/ui/semantics/Role;-><clinit>()V
HSPLandroidx/compose/ui/semantics/Role;-><init>(I)V
HSPLandroidx/compose/ui/semantics/Role;->access$getButton$cp()I
+HSPLandroidx/compose/ui/semantics/Role;->access$getImage$cp()I
HSPLandroidx/compose/ui/semantics/Role;->box-impl(I)Landroidx/compose/ui/semantics/Role;
HSPLandroidx/compose/ui/semantics/Role;->constructor-impl(I)I
HSPLandroidx/compose/ui/semantics/Role;->equals(Ljava/lang/Object;)Z
HSPLandroidx/compose/ui/semantics/Role;->equals-impl(ILjava/lang/Object;)Z
HSPLandroidx/compose/ui/semantics/Role;->unbox-impl()I
+HSPLandroidx/compose/ui/semantics/ScrollAxisRange;-><clinit>()V
+HSPLandroidx/compose/ui/semantics/ScrollAxisRange;-><init>(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Z)V
HSPLandroidx/compose/ui/semantics/SemanticsActions;-><clinit>()V
HSPLandroidx/compose/ui/semantics/SemanticsActions;-><init>()V
HSPLandroidx/compose/ui/semantics/SemanticsActions;->getCustomActions()Landroidx/compose/ui/semantics/SemanticsPropertyKey;
@@ -5212,6 +7051,8 @@
HSPLandroidx/compose/ui/semantics/SemanticsActions;->getGetTextLayoutResult()Landroidx/compose/ui/semantics/SemanticsPropertyKey;
HSPLandroidx/compose/ui/semantics/SemanticsActions;->getOnClick()Landroidx/compose/ui/semantics/SemanticsPropertyKey;
HSPLandroidx/compose/ui/semantics/SemanticsActions;->getRequestFocus()Landroidx/compose/ui/semantics/SemanticsPropertyKey;
+HSPLandroidx/compose/ui/semantics/SemanticsActions;->getScrollBy()Landroidx/compose/ui/semantics/SemanticsPropertyKey;
+HSPLandroidx/compose/ui/semantics/SemanticsActions;->getScrollToIndex()Landroidx/compose/ui/semantics/SemanticsPropertyKey;
HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;-><clinit>()V
HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;-><init>()V
HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->contains(Landroidx/compose/ui/semantics/SemanticsPropertyKey;)Z
@@ -5278,6 +7119,8 @@
HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getFocused()Landroidx/compose/ui/semantics/SemanticsPropertyKey;
HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getHorizontalScrollAxisRange()Landroidx/compose/ui/semantics/SemanticsPropertyKey;
HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getImeAction()Landroidx/compose/ui/semantics/SemanticsPropertyKey;
+HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getIndexForKey()Landroidx/compose/ui/semantics/SemanticsPropertyKey;
+HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getIsContainer()Landroidx/compose/ui/semantics/SemanticsPropertyKey;
HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getLiveRegion()Landroidx/compose/ui/semantics/SemanticsPropertyKey;
HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getPaneTitle()Landroidx/compose/ui/semantics/SemanticsPropertyKey;
HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getProgressBarRangeInfo()Landroidx/compose/ui/semantics/SemanticsPropertyKey;
@@ -5296,14 +7139,22 @@
HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->dismiss(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function0;)V
HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->getTextLayoutResult$default(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V
HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->getTextLayoutResult(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->indexForKey(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Lkotlin/jvm/functions/Function1;)V
HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->onClick$default(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function0;ILjava/lang/Object;)V
HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->onClick(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function0;)V
HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->requestFocus$default(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function0;ILjava/lang/Object;)V
HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->requestFocus(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function0;)V
+HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->scrollBy$default(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)V
+HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->scrollBy(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function2;)V
+HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->scrollToIndex$default(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V
+HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->scrollToIndex(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setCollectionInfo(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Landroidx/compose/ui/semantics/CollectionInfo;)V
+HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setContainer(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Z)V
HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setContentDescription(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;)V
HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setFocused(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Z)V
HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setRole-kuIjeqM(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;I)V
HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setText(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Landroidx/compose/ui/text/AnnotatedString;)V
+HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setVerticalScrollAxisRange(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Landroidx/compose/ui/semantics/ScrollAxisRange;)V
HSPLandroidx/compose/ui/semantics/SemanticsPropertyKey$1;-><clinit>()V
HSPLandroidx/compose/ui/semantics/SemanticsPropertyKey$1;-><init>()V
HSPLandroidx/compose/ui/semantics/SemanticsPropertyKey;-><clinit>()V
@@ -5329,33 +7180,42 @@
HSPLandroidx/compose/ui/text/AndroidParagraph_androidKt;->access$shouldAttachIndentationFixSpan(Landroidx/compose/ui/text/TextStyle;Z)Z
HSPLandroidx/compose/ui/text/AndroidParagraph_androidKt;->access$toLayoutAlign-AMY3VfE(Landroidx/compose/ui/text/style/TextAlign;)I
HSPLandroidx/compose/ui/text/AndroidParagraph_androidKt;->access$toLayoutBreakStrategy-u6PBz3U(Landroidx/compose/ui/text/style/LineBreak$Strategy;)I
-HSPLandroidx/compose/ui/text/AndroidParagraph_androidKt;->access$toLayoutHyphenationFrequency(Landroidx/compose/ui/text/style/Hyphens;)I
+HSPLandroidx/compose/ui/text/AndroidParagraph_androidKt;->access$toLayoutHyphenationFrequency-0_XeFpE(Landroidx/compose/ui/text/style/Hyphens;)I
HSPLandroidx/compose/ui/text/AndroidParagraph_androidKt;->access$toLayoutLineBreakStyle-4a2g8L8(Landroidx/compose/ui/text/style/LineBreak$Strictness;)I
HSPLandroidx/compose/ui/text/AndroidParagraph_androidKt;->access$toLayoutLineBreakWordStyle-gvcdTPQ(Landroidx/compose/ui/text/style/LineBreak$WordBreak;)I
HSPLandroidx/compose/ui/text/AndroidParagraph_androidKt;->shouldAttachIndentationFixSpan(Landroidx/compose/ui/text/TextStyle;Z)Z
HSPLandroidx/compose/ui/text/AndroidParagraph_androidKt;->toLayoutAlign-AMY3VfE(Landroidx/compose/ui/text/style/TextAlign;)I
HSPLandroidx/compose/ui/text/AndroidParagraph_androidKt;->toLayoutBreakStrategy-u6PBz3U(Landroidx/compose/ui/text/style/LineBreak$Strategy;)I
-HSPLandroidx/compose/ui/text/AndroidParagraph_androidKt;->toLayoutHyphenationFrequency(Landroidx/compose/ui/text/style/Hyphens;)I
+HSPLandroidx/compose/ui/text/AndroidParagraph_androidKt;->toLayoutHyphenationFrequency-0_XeFpE(Landroidx/compose/ui/text/style/Hyphens;)I
HSPLandroidx/compose/ui/text/AndroidParagraph_androidKt;->toLayoutLineBreakStyle-4a2g8L8(Landroidx/compose/ui/text/style/LineBreak$Strictness;)I
HSPLandroidx/compose/ui/text/AndroidParagraph_androidKt;->toLayoutLineBreakWordStyle-gvcdTPQ(Landroidx/compose/ui/text/style/LineBreak$WordBreak;)I
+HSPLandroidx/compose/ui/text/AnnotatedString$Range;-><clinit>()V
HSPLandroidx/compose/ui/text/AnnotatedString$Range;-><init>(Ljava/lang/Object;II)V
HSPLandroidx/compose/ui/text/AnnotatedString$Range;-><init>(Ljava/lang/Object;IILjava/lang/String;)V
HSPLandroidx/compose/ui/text/AnnotatedString$Range;->getEnd()I
HSPLandroidx/compose/ui/text/AnnotatedString$Range;->getItem()Ljava/lang/Object;
HSPLandroidx/compose/ui/text/AnnotatedString$Range;->getStart()I
-HSPLandroidx/compose/ui/text/AnnotatedString$special$$inlined$sortedBy$1;-><init>()V
+HSPLandroidx/compose/ui/text/AnnotatedString;-><clinit>()V
HSPLandroidx/compose/ui/text/AnnotatedString;-><init>(Ljava/lang/String;Ljava/util/List;Ljava/util/List;)V
HSPLandroidx/compose/ui/text/AnnotatedString;-><init>(Ljava/lang/String;Ljava/util/List;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/ui/text/AnnotatedString;-><init>(Ljava/lang/String;Ljava/util/List;Ljava/util/List;Ljava/util/List;)V
+HSPLandroidx/compose/ui/text/AnnotatedString;-><init>(Ljava/lang/String;Ljava/util/List;Ljava/util/List;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/ui/text/AnnotatedString;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/text/AnnotatedString;->getParagraphStyles()Ljava/util/List;
+HSPLandroidx/compose/ui/text/AnnotatedString;->getParagraphStylesOrNull$ui_text_release()Ljava/util/List;
HSPLandroidx/compose/ui/text/AnnotatedString;->getSpanStyles()Ljava/util/List;
+HSPLandroidx/compose/ui/text/AnnotatedString;->getSpanStylesOrNull$ui_text_release()Ljava/util/List;
HSPLandroidx/compose/ui/text/AnnotatedString;->getText()Ljava/lang/String;
HSPLandroidx/compose/ui/text/AnnotatedStringKt;-><clinit>()V
HSPLandroidx/compose/ui/text/AnnotatedStringKt;->access$substringWithoutParagraphStyles(Landroidx/compose/ui/text/AnnotatedString;II)Landroidx/compose/ui/text/AnnotatedString;
HSPLandroidx/compose/ui/text/AnnotatedStringKt;->getLocalSpanStyles(Landroidx/compose/ui/text/AnnotatedString;II)Ljava/util/List;
HSPLandroidx/compose/ui/text/AnnotatedStringKt;->normalizedParagraphStyles(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/ParagraphStyle;)Ljava/util/List;
HSPLandroidx/compose/ui/text/AnnotatedStringKt;->substringWithoutParagraphStyles(Landroidx/compose/ui/text/AnnotatedString;II)Landroidx/compose/ui/text/AnnotatedString;
+HSPLandroidx/compose/ui/text/EmojiSupportMatch$Companion;-><init>()V
+HSPLandroidx/compose/ui/text/EmojiSupportMatch$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/ui/text/EmojiSupportMatch$Companion;->getNone-_3YsG6Y()I
+HSPLandroidx/compose/ui/text/EmojiSupportMatch;-><clinit>()V
+HSPLandroidx/compose/ui/text/EmojiSupportMatch;->access$getNone$cp()I
+HSPLandroidx/compose/ui/text/EmojiSupportMatch;->constructor-impl(I)I
HSPLandroidx/compose/ui/text/MultiParagraph;-><clinit>()V
HSPLandroidx/compose/ui/text/MultiParagraph;-><init>(Landroidx/compose/ui/text/MultiParagraphIntrinsics;JIZ)V
HSPLandroidx/compose/ui/text/MultiParagraph;-><init>(Landroidx/compose/ui/text/MultiParagraphIntrinsics;JIZLkotlin/jvm/internal/DefaultConstructorMarker;)V
@@ -5391,21 +7251,26 @@
HSPLandroidx/compose/ui/text/ParagraphIntrinsicsKt;->ParagraphIntrinsics(Ljava/lang/String;Landroidx/compose/ui/text/TextStyle;Ljava/util/List;Ljava/util/List;Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/font/FontFamily$Resolver;)Landroidx/compose/ui/text/ParagraphIntrinsics;
HSPLandroidx/compose/ui/text/ParagraphKt;->Paragraph-_EkL_-Y(Landroidx/compose/ui/text/ParagraphIntrinsics;JIZ)Landroidx/compose/ui/text/Paragraph;
HSPLandroidx/compose/ui/text/ParagraphKt;->ceilToInt(F)I
+HSPLandroidx/compose/ui/text/ParagraphStyle;-><clinit>()V
HSPLandroidx/compose/ui/text/ParagraphStyle;-><init>(Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/style/TextDirection;JLandroidx/compose/ui/text/style/TextIndent;Landroidx/compose/ui/text/PlatformParagraphStyle;Landroidx/compose/ui/text/style/LineHeightStyle;Landroidx/compose/ui/text/style/LineBreak;Landroidx/compose/ui/text/style/Hyphens;)V
+HSPLandroidx/compose/ui/text/ParagraphStyle;-><init>(Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/style/TextDirection;JLandroidx/compose/ui/text/style/TextIndent;Landroidx/compose/ui/text/PlatformParagraphStyle;Landroidx/compose/ui/text/style/LineHeightStyle;Landroidx/compose/ui/text/style/LineBreak;Landroidx/compose/ui/text/style/Hyphens;Landroidx/compose/ui/text/style/TextMotion;)V
+HSPLandroidx/compose/ui/text/ParagraphStyle;-><init>(Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/style/TextDirection;JLandroidx/compose/ui/text/style/TextIndent;Landroidx/compose/ui/text/PlatformParagraphStyle;Landroidx/compose/ui/text/style/LineHeightStyle;Landroidx/compose/ui/text/style/LineBreak;Landroidx/compose/ui/text/style/Hyphens;Landroidx/compose/ui/text/style/TextMotion;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/ui/text/ParagraphStyle;-><init>(Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/style/TextDirection;JLandroidx/compose/ui/text/style/TextIndent;Landroidx/compose/ui/text/PlatformParagraphStyle;Landroidx/compose/ui/text/style/LineHeightStyle;Landroidx/compose/ui/text/style/LineBreak;Landroidx/compose/ui/text/style/Hyphens;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/ui/text/ParagraphStyle;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/text/ParagraphStyle;->getHyphens()Landroidx/compose/ui/text/style/Hyphens;
-HSPLandroidx/compose/ui/text/ParagraphStyle;->getLineBreak()Landroidx/compose/ui/text/style/LineBreak;
+HSPLandroidx/compose/ui/text/ParagraphStyle;->getHyphens-EaSxIns()Landroidx/compose/ui/text/style/Hyphens;
+HSPLandroidx/compose/ui/text/ParagraphStyle;->getLineBreak-LgCVezo()Landroidx/compose/ui/text/style/LineBreak;
HSPLandroidx/compose/ui/text/ParagraphStyle;->getLineHeight-XSAIIZE()J
HSPLandroidx/compose/ui/text/ParagraphStyle;->getLineHeightStyle()Landroidx/compose/ui/text/style/LineHeightStyle;
HSPLandroidx/compose/ui/text/ParagraphStyle;->getPlatformStyle()Landroidx/compose/ui/text/PlatformParagraphStyle;
HSPLandroidx/compose/ui/text/ParagraphStyle;->getTextAlign-buA522U()Landroidx/compose/ui/text/style/TextAlign;
HSPLandroidx/compose/ui/text/ParagraphStyle;->getTextDirection-mmuk1to()Landroidx/compose/ui/text/style/TextDirection;
HSPLandroidx/compose/ui/text/ParagraphStyle;->getTextIndent()Landroidx/compose/ui/text/style/TextIndent;
+HSPLandroidx/compose/ui/text/ParagraphStyle;->getTextMotion()Landroidx/compose/ui/text/style/TextMotion;
HSPLandroidx/compose/ui/text/ParagraphStyle;->merge(Landroidx/compose/ui/text/ParagraphStyle;)Landroidx/compose/ui/text/ParagraphStyle;
HSPLandroidx/compose/ui/text/ParagraphStyle;->mergePlatformStyle(Landroidx/compose/ui/text/PlatformParagraphStyle;)Landroidx/compose/ui/text/PlatformParagraphStyle;
HSPLandroidx/compose/ui/text/ParagraphStyleKt;-><clinit>()V
HSPLandroidx/compose/ui/text/ParagraphStyleKt;->resolveParagraphStyleDefaults(Landroidx/compose/ui/text/ParagraphStyle;Landroidx/compose/ui/unit/LayoutDirection;)Landroidx/compose/ui/text/ParagraphStyle;
+HSPLandroidx/compose/ui/text/SpanStyle;-><clinit>()V
HSPLandroidx/compose/ui/text/SpanStyle;-><init>(JJLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontSynthesis;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/text/style/BaselineShift;Landroidx/compose/ui/text/style/TextGeometricTransform;Landroidx/compose/ui/text/intl/LocaleList;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/Shadow;)V
HSPLandroidx/compose/ui/text/SpanStyle;-><init>(JJLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontSynthesis;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/text/style/BaselineShift;Landroidx/compose/ui/text/style/TextGeometricTransform;Landroidx/compose/ui/text/intl/LocaleList;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/Shadow;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/ui/text/SpanStyle;-><init>(JJLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontSynthesis;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/text/style/BaselineShift;Landroidx/compose/ui/text/style/TextGeometricTransform;Landroidx/compose/ui/text/intl/LocaleList;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/Shadow;Landroidx/compose/ui/text/PlatformSpanStyle;)V
@@ -5481,21 +7346,21 @@
HSPLandroidx/compose/ui/text/TextStyle$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/ui/text/TextStyle$Companion;->getDefault()Landroidx/compose/ui/text/TextStyle;
HSPLandroidx/compose/ui/text/TextStyle;-><clinit>()V
-HSPLandroidx/compose/ui/text/TextStyle;-><init>(JJLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontSynthesis;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/text/style/BaselineShift;Landroidx/compose/ui/text/style/TextGeometricTransform;Landroidx/compose/ui/text/intl/LocaleList;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/Shadow;Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/style/TextDirection;JLandroidx/compose/ui/text/style/TextIndent;)V
-HSPLandroidx/compose/ui/text/TextStyle;-><init>(JJLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontSynthesis;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/text/style/BaselineShift;Landroidx/compose/ui/text/style/TextGeometricTransform;Landroidx/compose/ui/text/intl/LocaleList;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/Shadow;Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/style/TextDirection;JLandroidx/compose/ui/text/style/TextIndent;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/TextStyle;-><init>(JJLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontSynthesis;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/text/style/BaselineShift;Landroidx/compose/ui/text/style/TextGeometricTransform;Landroidx/compose/ui/text/intl/LocaleList;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/Shadow;Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/style/TextDirection;JLandroidx/compose/ui/text/style/TextIndent;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/ui/text/TextStyle;-><init>(JJLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontSynthesis;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/text/style/BaselineShift;Landroidx/compose/ui/text/style/TextGeometricTransform;Landroidx/compose/ui/text/intl/LocaleList;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/Shadow;Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/style/TextDirection;JLandroidx/compose/ui/text/style/TextIndent;Landroidx/compose/ui/text/PlatformTextStyle;Landroidx/compose/ui/text/style/LineHeightStyle;Landroidx/compose/ui/text/style/LineBreak;Landroidx/compose/ui/text/style/Hyphens;)V
+HSPLandroidx/compose/ui/text/TextStyle;-><init>(JJLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontSynthesis;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/text/style/BaselineShift;Landroidx/compose/ui/text/style/TextGeometricTransform;Landroidx/compose/ui/text/intl/LocaleList;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/Shadow;Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/style/TextDirection;JLandroidx/compose/ui/text/style/TextIndent;Landroidx/compose/ui/text/PlatformTextStyle;Landroidx/compose/ui/text/style/LineHeightStyle;Landroidx/compose/ui/text/style/LineBreak;Landroidx/compose/ui/text/style/Hyphens;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/ui/text/TextStyle;-><init>(JJLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontSynthesis;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/text/style/BaselineShift;Landroidx/compose/ui/text/style/TextGeometricTransform;Landroidx/compose/ui/text/intl/LocaleList;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/Shadow;Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/style/TextDirection;JLandroidx/compose/ui/text/style/TextIndent;Landroidx/compose/ui/text/PlatformTextStyle;Landroidx/compose/ui/text/style/LineHeightStyle;Landroidx/compose/ui/text/style/LineBreak;Landroidx/compose/ui/text/style/Hyphens;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/ui/text/TextStyle;-><init>(Landroidx/compose/ui/text/SpanStyle;Landroidx/compose/ui/text/ParagraphStyle;)V
HSPLandroidx/compose/ui/text/TextStyle;-><init>(Landroidx/compose/ui/text/SpanStyle;Landroidx/compose/ui/text/ParagraphStyle;Landroidx/compose/ui/text/PlatformTextStyle;)V
HSPLandroidx/compose/ui/text/TextStyle;->access$getDefault$cp()Landroidx/compose/ui/text/TextStyle;
HSPLandroidx/compose/ui/text/TextStyle;->equals(Ljava/lang/Object;)Z
HSPLandroidx/compose/ui/text/TextStyle;->getAlpha()F
HSPLandroidx/compose/ui/text/TextStyle;->getBrush()Landroidx/compose/ui/graphics/Brush;
-HSPLandroidx/compose/ui/text/TextStyle;->getColor-0d7_KjU()J
HSPLandroidx/compose/ui/text/TextStyle;->getFontFamily()Landroidx/compose/ui/text/font/FontFamily;
HSPLandroidx/compose/ui/text/TextStyle;->getFontStyle-4Lr2A7w()Landroidx/compose/ui/text/font/FontStyle;
HSPLandroidx/compose/ui/text/TextStyle;->getFontSynthesis-ZQGJjVo()Landroidx/compose/ui/text/font/FontSynthesis;
HSPLandroidx/compose/ui/text/TextStyle;->getFontWeight()Landroidx/compose/ui/text/font/FontWeight;
-HSPLandroidx/compose/ui/text/TextStyle;->getLineBreak()Landroidx/compose/ui/text/style/LineBreak;
+HSPLandroidx/compose/ui/text/TextStyle;->getLetterSpacing-XSAIIZE()J
+HSPLandroidx/compose/ui/text/TextStyle;->getLineBreak-LgCVezo()Landroidx/compose/ui/text/style/LineBreak;
HSPLandroidx/compose/ui/text/TextStyle;->getLineHeight-XSAIIZE()J
HSPLandroidx/compose/ui/text/TextStyle;->getLineHeightStyle()Landroidx/compose/ui/text/style/LineHeightStyle;
HSPLandroidx/compose/ui/text/TextStyle;->getLocaleList()Landroidx/compose/ui/text/intl/LocaleList;
@@ -5506,6 +7371,7 @@
HSPLandroidx/compose/ui/text/TextStyle;->getTextDecoration()Landroidx/compose/ui/text/style/TextDecoration;
HSPLandroidx/compose/ui/text/TextStyle;->getTextDirection-mmuk1to()Landroidx/compose/ui/text/style/TextDirection;
HSPLandroidx/compose/ui/text/TextStyle;->getTextIndent()Landroidx/compose/ui/text/style/TextIndent;
+HSPLandroidx/compose/ui/text/TextStyle;->getTextMotion()Landroidx/compose/ui/text/style/TextMotion;
HSPLandroidx/compose/ui/text/TextStyle;->merge(Landroidx/compose/ui/text/ParagraphStyle;)Landroidx/compose/ui/text/TextStyle;
HSPLandroidx/compose/ui/text/TextStyle;->merge(Landroidx/compose/ui/text/TextStyle;)Landroidx/compose/ui/text/TextStyle;
HSPLandroidx/compose/ui/text/TextStyle;->toParagraphStyle()Landroidx/compose/ui/text/ParagraphStyle;
@@ -5623,23 +7489,61 @@
HSPLandroidx/compose/ui/text/caches/LruCache;->trimToSize(I)V
HSPLandroidx/compose/ui/text/caches/SimpleArrayMap;-><init>(I)V
HSPLandroidx/compose/ui/text/caches/SimpleArrayMap;-><init>(IILkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/ui/text/caches/SimpleArrayMap;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/text/caches/SimpleArrayMap;->indexOf(Ljava/lang/Object;I)I
+HSPLandroidx/compose/ui/text/caches/SimpleArrayMap;->indexOfKey(Ljava/lang/Object;)I
+HSPLandroidx/compose/ui/text/font/AndroidFont;-><clinit>()V
+HSPLandroidx/compose/ui/text/font/AndroidFont;-><init>(ILandroidx/compose/ui/text/font/AndroidFont$TypefaceLoader;Landroidx/compose/ui/text/font/FontVariation$Settings;)V
+HSPLandroidx/compose/ui/text/font/AndroidFont;-><init>(ILandroidx/compose/ui/text/font/AndroidFont$TypefaceLoader;Landroidx/compose/ui/text/font/FontVariation$Settings;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/ui/text/font/AndroidFont;->getLoadingStrategy-PKNRLFQ()I
+HSPLandroidx/compose/ui/text/font/AndroidFont;->getTypefaceLoader()Landroidx/compose/ui/text/font/AndroidFont$TypefaceLoader;
+HSPLandroidx/compose/ui/text/font/AndroidFont;->getVariationSettings()Landroidx/compose/ui/text/font/FontVariation$Settings;
HSPLandroidx/compose/ui/text/font/AndroidFontLoader;-><init>(Landroid/content/Context;)V
HSPLandroidx/compose/ui/text/font/AndroidFontLoader;->getCacheKey()Ljava/lang/Object;
+HSPLandroidx/compose/ui/text/font/AndroidFontLoader;->loadBlocking(Landroidx/compose/ui/text/font/Font;)Landroid/graphics/Typeface;
+HSPLandroidx/compose/ui/text/font/AndroidFontLoader;->loadBlocking(Landroidx/compose/ui/text/font/Font;)Ljava/lang/Object;
HSPLandroidx/compose/ui/text/font/AndroidFontResolveInterceptor;-><init>(I)V
HSPLandroidx/compose/ui/text/font/AndroidFontResolveInterceptor;->interceptFontWeight(Landroidx/compose/ui/text/font/FontWeight;)Landroidx/compose/ui/text/font/FontWeight;
HSPLandroidx/compose/ui/text/font/AndroidFontResolveInterceptor_androidKt;->AndroidFontResolveInterceptor(Landroid/content/Context;)Landroidx/compose/ui/text/font/AndroidFontResolveInterceptor;
+HSPLandroidx/compose/ui/text/font/AsyncTypefaceCache$AsyncTypefaceResult;-><init>(Ljava/lang/Object;)V
+HSPLandroidx/compose/ui/text/font/AsyncTypefaceCache$AsyncTypefaceResult;->box-impl(Ljava/lang/Object;)Landroidx/compose/ui/text/font/AsyncTypefaceCache$AsyncTypefaceResult;
HSPLandroidx/compose/ui/text/font/AsyncTypefaceCache$AsyncTypefaceResult;->constructor-impl(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/ui/text/font/AsyncTypefaceCache$Key;-><init>(Landroidx/compose/ui/text/font/Font;Ljava/lang/Object;)V
+HSPLandroidx/compose/ui/text/font/AsyncTypefaceCache$Key;->hashCode()I
HSPLandroidx/compose/ui/text/font/AsyncTypefaceCache;-><init>()V
+HSPLandroidx/compose/ui/text/font/AsyncTypefaceCache;->access$getCacheLock$p(Landroidx/compose/ui/text/font/AsyncTypefaceCache;)Landroidx/compose/ui/text/platform/SynchronizedObject;
+HSPLandroidx/compose/ui/text/font/AsyncTypefaceCache;->access$getPermanentCache$p(Landroidx/compose/ui/text/font/AsyncTypefaceCache;)Landroidx/compose/ui/text/caches/SimpleArrayMap;
+HSPLandroidx/compose/ui/text/font/AsyncTypefaceCache;->access$getResultCache$p(Landroidx/compose/ui/text/font/AsyncTypefaceCache;)Landroidx/compose/ui/text/caches/LruCache;
+HSPLandroidx/compose/ui/text/font/AsyncTypefaceCache;->put$default(Landroidx/compose/ui/text/font/AsyncTypefaceCache;Landroidx/compose/ui/text/font/Font;Landroidx/compose/ui/text/font/PlatformFontLoader;Ljava/lang/Object;ZILjava/lang/Object;)V
+HSPLandroidx/compose/ui/text/font/AsyncTypefaceCache;->put(Landroidx/compose/ui/text/font/Font;Landroidx/compose/ui/text/font/PlatformFontLoader;Ljava/lang/Object;Z)V
HSPLandroidx/compose/ui/text/font/DefaultFontFamily;-><init>()V
+HSPLandroidx/compose/ui/text/font/DeviceFontFamilyName;->constructor-impl(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroidx/compose/ui/text/font/DeviceFontFamilyName;->hashCode-impl(Ljava/lang/String;)I
+HSPLandroidx/compose/ui/text/font/DeviceFontFamilyNameFont;-><init>(Ljava/lang/String;Landroidx/compose/ui/text/font/FontWeight;ILandroidx/compose/ui/text/font/FontVariation$Settings;)V
+HSPLandroidx/compose/ui/text/font/DeviceFontFamilyNameFont;-><init>(Ljava/lang/String;Landroidx/compose/ui/text/font/FontWeight;ILandroidx/compose/ui/text/font/FontVariation$Settings;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/ui/text/font/DeviceFontFamilyNameFont;->getStyle-_-LCdwA()I
+HSPLandroidx/compose/ui/text/font/DeviceFontFamilyNameFont;->getWeight()Landroidx/compose/ui/text/font/FontWeight;
+HSPLandroidx/compose/ui/text/font/DeviceFontFamilyNameFont;->hashCode()I
+HSPLandroidx/compose/ui/text/font/DeviceFontFamilyNameFont;->loadCached(Landroid/content/Context;)Landroid/graphics/Typeface;
+HSPLandroidx/compose/ui/text/font/DeviceFontFamilyNameFontKt;->Font-vxs03AY$default(Ljava/lang/String;Landroidx/compose/ui/text/font/FontWeight;ILandroidx/compose/ui/text/font/FontVariation$Settings;ILjava/lang/Object;)Landroidx/compose/ui/text/font/Font;
+HSPLandroidx/compose/ui/text/font/DeviceFontFamilyNameFontKt;->Font-vxs03AY(Ljava/lang/String;Landroidx/compose/ui/text/font/FontWeight;ILandroidx/compose/ui/text/font/FontVariation$Settings;)Landroidx/compose/ui/text/font/Font;
+HSPLandroidx/compose/ui/text/font/FileBasedFontFamily;-><clinit>()V
+HSPLandroidx/compose/ui/text/font/FileBasedFontFamily;-><init>()V
+HSPLandroidx/compose/ui/text/font/FileBasedFontFamily;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/ui/text/font/FontFamily$Companion;-><init>()V
HSPLandroidx/compose/ui/text/font/FontFamily$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/font/FontFamily$Companion;->getDefault()Landroidx/compose/ui/text/font/SystemFontFamily;
+HSPLandroidx/compose/ui/text/font/FontFamily$Companion;->getCursive()Landroidx/compose/ui/text/font/GenericFontFamily;
+HSPLandroidx/compose/ui/text/font/FontFamily$Companion;->getMonospace()Landroidx/compose/ui/text/font/GenericFontFamily;
HSPLandroidx/compose/ui/text/font/FontFamily$Companion;->getSansSerif()Landroidx/compose/ui/text/font/GenericFontFamily;
+HSPLandroidx/compose/ui/text/font/FontFamily$Companion;->getSerif()Landroidx/compose/ui/text/font/GenericFontFamily;
HSPLandroidx/compose/ui/text/font/FontFamily;-><clinit>()V
HSPLandroidx/compose/ui/text/font/FontFamily;-><init>(Z)V
HSPLandroidx/compose/ui/text/font/FontFamily;-><init>(ZLkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/font/FontFamily;->access$getDefault$cp()Landroidx/compose/ui/text/font/SystemFontFamily;
+HSPLandroidx/compose/ui/text/font/FontFamily;->access$getCursive$cp()Landroidx/compose/ui/text/font/GenericFontFamily;
+HSPLandroidx/compose/ui/text/font/FontFamily;->access$getMonospace$cp()Landroidx/compose/ui/text/font/GenericFontFamily;
HSPLandroidx/compose/ui/text/font/FontFamily;->access$getSansSerif$cp()Landroidx/compose/ui/text/font/GenericFontFamily;
+HSPLandroidx/compose/ui/text/font/FontFamily;->access$getSerif$cp()Landroidx/compose/ui/text/font/GenericFontFamily;
+HSPLandroidx/compose/ui/text/font/FontFamilyKt;->FontFamily([Landroidx/compose/ui/text/font/Font;)Landroidx/compose/ui/text/font/FontFamily;
HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl$createDefaultTypeface$1;-><init>(Landroidx/compose/ui/text/font/FontFamilyResolverImpl;)V
HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl$resolve$result$1;-><init>(Landroidx/compose/ui/text/font/FontFamilyResolverImpl;Landroidx/compose/ui/text/font/TypefaceRequest;)V
HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl$resolve$result$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
@@ -5648,7 +7552,6 @@
HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;-><init>(Landroidx/compose/ui/text/font/PlatformFontLoader;Landroidx/compose/ui/text/font/PlatformResolveInterceptor;Landroidx/compose/ui/text/font/TypefaceRequestCache;Landroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;Landroidx/compose/ui/text/font/PlatformFontFamilyTypefaceAdapter;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->access$getCreateDefaultTypeface$p(Landroidx/compose/ui/text/font/FontFamilyResolverImpl;)Lkotlin/jvm/functions/Function1;
HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->access$getFontListFontFamilyTypefaceAdapter$p(Landroidx/compose/ui/text/font/FontFamilyResolverImpl;)Landroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;
-HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->access$getPlatformFamilyTypefaceAdapter$p(Landroidx/compose/ui/text/font/FontFamilyResolverImpl;)Landroidx/compose/ui/text/font/PlatformFontFamilyTypefaceAdapter;
HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->getPlatformFontLoader$ui_text_release()Landroidx/compose/ui/text/font/PlatformFontLoader;
HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->resolve(Landroidx/compose/ui/text/font/TypefaceRequest;)Landroidx/compose/runtime/State;
HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->resolve-DPcqOEQ(Landroidx/compose/ui/text/font/FontFamily;Landroidx/compose/ui/text/font/FontWeight;II)Landroidx/compose/runtime/State;
@@ -5656,6 +7559,11 @@
HSPLandroidx/compose/ui/text/font/FontFamilyResolverKt;->getGlobalAsyncTypefaceCache()Landroidx/compose/ui/text/font/AsyncTypefaceCache;
HSPLandroidx/compose/ui/text/font/FontFamilyResolverKt;->getGlobalTypefaceRequestCache()Landroidx/compose/ui/text/font/TypefaceRequestCache;
HSPLandroidx/compose/ui/text/font/FontFamilyResolver_androidKt;->createFontFamilyResolver(Landroid/content/Context;)Landroidx/compose/ui/text/font/FontFamily$Resolver;
+HSPLandroidx/compose/ui/text/font/FontListFontFamily;-><clinit>()V
+HSPLandroidx/compose/ui/text/font/FontListFontFamily;-><init>(Ljava/util/List;)V
+HSPLandroidx/compose/ui/text/font/FontListFontFamily;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/text/font/FontListFontFamily;->getFonts()Ljava/util/List;
+HSPLandroidx/compose/ui/text/font/FontListFontFamily;->hashCode()I
HSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter$Companion;-><init>()V
HSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter$special$$inlined$CoroutineExceptionHandler$1;-><init>(Lkotlinx/coroutines/CoroutineExceptionHandler$Key;)V
@@ -5663,7 +7571,19 @@
HSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;-><init>(Landroidx/compose/ui/text/font/AsyncTypefaceCache;Lkotlin/coroutines/CoroutineContext;)V
HSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;-><init>(Landroidx/compose/ui/text/font/AsyncTypefaceCache;Lkotlin/coroutines/CoroutineContext;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;->resolve(Landroidx/compose/ui/text/font/TypefaceRequest;Landroidx/compose/ui/text/font/PlatformFontLoader;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/text/font/TypefaceResult;
+HSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapterKt;->access$firstImmediatelyAvailable(Ljava/util/List;Landroidx/compose/ui/text/font/TypefaceRequest;Landroidx/compose/ui/text/font/AsyncTypefaceCache;Landroidx/compose/ui/text/font/PlatformFontLoader;Lkotlin/jvm/functions/Function1;)Lkotlin/Pair;
+HSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapterKt;->firstImmediatelyAvailable(Ljava/util/List;Landroidx/compose/ui/text/font/TypefaceRequest;Landroidx/compose/ui/text/font/AsyncTypefaceCache;Landroidx/compose/ui/text/font/PlatformFontLoader;Lkotlin/jvm/functions/Function1;)Lkotlin/Pair;
+HSPLandroidx/compose/ui/text/font/FontLoadingStrategy$Companion;-><init>()V
+HSPLandroidx/compose/ui/text/font/FontLoadingStrategy$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/ui/text/font/FontLoadingStrategy$Companion;->getBlocking-PKNRLFQ()I
+HSPLandroidx/compose/ui/text/font/FontLoadingStrategy$Companion;->getOptionalLocal-PKNRLFQ()I
+HSPLandroidx/compose/ui/text/font/FontLoadingStrategy;-><clinit>()V
+HSPLandroidx/compose/ui/text/font/FontLoadingStrategy;->access$getBlocking$cp()I
+HSPLandroidx/compose/ui/text/font/FontLoadingStrategy;->access$getOptionalLocal$cp()I
+HSPLandroidx/compose/ui/text/font/FontLoadingStrategy;->constructor-impl(I)I
+HSPLandroidx/compose/ui/text/font/FontLoadingStrategy;->equals-impl0(II)Z
HSPLandroidx/compose/ui/text/font/FontMatcher;-><init>()V
+HSPLandroidx/compose/ui/text/font/FontMatcher;->matchFont-RetOiIg(Ljava/util/List;Landroidx/compose/ui/text/font/FontWeight;I)Ljava/util/List;
HSPLandroidx/compose/ui/text/font/FontStyle$Companion;-><init>()V
HSPLandroidx/compose/ui/text/font/FontStyle$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/ui/text/font/FontStyle$Companion;->getItalic-_-LCdwA()I
@@ -5687,23 +7607,32 @@
HSPLandroidx/compose/ui/text/font/FontSynthesis;->constructor-impl(I)I
HSPLandroidx/compose/ui/text/font/FontSynthesis;->equals-impl0(II)Z
HSPLandroidx/compose/ui/text/font/FontSynthesis;->hashCode-impl(I)I
+HSPLandroidx/compose/ui/text/font/FontSynthesis;->isStyleOn-impl$ui_text_release(I)Z
+HSPLandroidx/compose/ui/text/font/FontSynthesis;->isWeightOn-impl$ui_text_release(I)Z
HSPLandroidx/compose/ui/text/font/FontSynthesis;->unbox-impl()I
+HSPLandroidx/compose/ui/text/font/FontSynthesis_androidKt;->synthesizeTypeface-FxwP2eA(ILjava/lang/Object;Landroidx/compose/ui/text/font/Font;Landroidx/compose/ui/text/font/FontWeight;I)Ljava/lang/Object;
+HSPLandroidx/compose/ui/text/font/FontVariation$Settings;-><clinit>()V
+HSPLandroidx/compose/ui/text/font/FontVariation$Settings;-><init>([Landroidx/compose/ui/text/font/FontVariation$Setting;)V
+HSPLandroidx/compose/ui/text/font/FontVariation$Settings;->getSettings()Ljava/util/List;
+HSPLandroidx/compose/ui/text/font/FontVariation$Settings;->hashCode()I
HSPLandroidx/compose/ui/text/font/FontWeight$Companion;-><init>()V
HSPLandroidx/compose/ui/text/font/FontWeight$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/font/FontWeight$Companion;->getBold()Landroidx/compose/ui/text/font/FontWeight;
HSPLandroidx/compose/ui/text/font/FontWeight$Companion;->getMedium()Landroidx/compose/ui/text/font/FontWeight;
HSPLandroidx/compose/ui/text/font/FontWeight$Companion;->getNormal()Landroidx/compose/ui/text/font/FontWeight;
HSPLandroidx/compose/ui/text/font/FontWeight;-><clinit>()V
HSPLandroidx/compose/ui/text/font/FontWeight;-><init>(I)V
-HSPLandroidx/compose/ui/text/font/FontWeight;->access$getBold$cp()Landroidx/compose/ui/text/font/FontWeight;
HSPLandroidx/compose/ui/text/font/FontWeight;->access$getMedium$cp()Landroidx/compose/ui/text/font/FontWeight;
HSPLandroidx/compose/ui/text/font/FontWeight;->access$getNormal$cp()Landroidx/compose/ui/text/font/FontWeight;
HSPLandroidx/compose/ui/text/font/FontWeight;->equals(Ljava/lang/Object;)Z
HSPLandroidx/compose/ui/text/font/FontWeight;->getWeight()I
HSPLandroidx/compose/ui/text/font/FontWeight;->hashCode()I
+HSPLandroidx/compose/ui/text/font/GenericFontFamily;-><clinit>()V
HSPLandroidx/compose/ui/text/font/GenericFontFamily;-><init>(Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroidx/compose/ui/text/font/GenericFontFamily;->getName()Ljava/lang/String;
+HSPLandroidx/compose/ui/text/font/NamedFontLoader;-><clinit>()V
+HSPLandroidx/compose/ui/text/font/NamedFontLoader;-><init>()V
+HSPLandroidx/compose/ui/text/font/NamedFontLoader;->loadBlocking(Landroid/content/Context;Landroidx/compose/ui/text/font/AndroidFont;)Landroid/graphics/Typeface;
HSPLandroidx/compose/ui/text/font/PlatformFontFamilyTypefaceAdapter;-><init>()V
-HSPLandroidx/compose/ui/text/font/PlatformFontFamilyTypefaceAdapter;->resolve(Landroidx/compose/ui/text/font/TypefaceRequest;Landroidx/compose/ui/text/font/PlatformFontLoader;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/text/font/TypefaceResult;
HSPLandroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion$Default$1;-><init>()V
HSPLandroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion;-><clinit>()V
HSPLandroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion;-><init>()V
@@ -5713,16 +7642,25 @@
HSPLandroidx/compose/ui/text/font/PlatformResolveInterceptor;->interceptFontSynthesis-Mscr08Y(I)I
HSPLandroidx/compose/ui/text/font/PlatformTypefacesApi28;-><init>()V
HSPLandroidx/compose/ui/text/font/PlatformTypefacesApi28;->createAndroidTypefaceApi28-RetOiIg(Ljava/lang/String;Landroidx/compose/ui/text/font/FontWeight;I)Landroid/graphics/Typeface;
-HSPLandroidx/compose/ui/text/font/PlatformTypefacesApi28;->createDefault-FO1MlWM(Landroidx/compose/ui/text/font/FontWeight;I)Landroid/graphics/Typeface;
+HSPLandroidx/compose/ui/text/font/PlatformTypefacesApi28;->loadNamedFromTypefaceCacheOrNull-RetOiIg(Ljava/lang/String;Landroidx/compose/ui/text/font/FontWeight;I)Landroid/graphics/Typeface;
+HSPLandroidx/compose/ui/text/font/PlatformTypefacesApi28;->optionalOnDeviceFontFamilyByName-78DK7lM(Ljava/lang/String;Landroidx/compose/ui/text/font/FontWeight;ILandroidx/compose/ui/text/font/FontVariation$Settings;Landroid/content/Context;)Landroid/graphics/Typeface;
HSPLandroidx/compose/ui/text/font/PlatformTypefacesKt;->PlatformTypefaces()Landroidx/compose/ui/text/font/PlatformTypefaces;
+HSPLandroidx/compose/ui/text/font/PlatformTypefacesKt;->setFontVariationSettings(Landroid/graphics/Typeface;Landroidx/compose/ui/text/font/FontVariation$Settings;Landroid/content/Context;)Landroid/graphics/Typeface;
HSPLandroidx/compose/ui/text/font/SystemFontFamily;-><clinit>()V
HSPLandroidx/compose/ui/text/font/SystemFontFamily;-><init>()V
HSPLandroidx/compose/ui/text/font/SystemFontFamily;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/ui/text/font/TypefaceCompatApi26;-><clinit>()V
+HSPLandroidx/compose/ui/text/font/TypefaceCompatApi26;-><init>()V
+HSPLandroidx/compose/ui/text/font/TypefaceCompatApi26;->setFontVariationSettings(Landroid/graphics/Typeface;Landroidx/compose/ui/text/font/FontVariation$Settings;Landroid/content/Context;)Landroid/graphics/Typeface;
+HSPLandroidx/compose/ui/text/font/TypefaceHelperMethodsApi28;-><clinit>()V
+HSPLandroidx/compose/ui/text/font/TypefaceHelperMethodsApi28;-><init>()V
+HSPLandroidx/compose/ui/text/font/TypefaceHelperMethodsApi28;->create(Landroid/graphics/Typeface;IZ)Landroid/graphics/Typeface;
HSPLandroidx/compose/ui/text/font/TypefaceRequest;-><init>(Landroidx/compose/ui/text/font/FontFamily;Landroidx/compose/ui/text/font/FontWeight;IILjava/lang/Object;)V
HSPLandroidx/compose/ui/text/font/TypefaceRequest;-><init>(Landroidx/compose/ui/text/font/FontFamily;Landroidx/compose/ui/text/font/FontWeight;IILjava/lang/Object;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/ui/text/font/TypefaceRequest;->equals(Ljava/lang/Object;)Z
HSPLandroidx/compose/ui/text/font/TypefaceRequest;->getFontFamily()Landroidx/compose/ui/text/font/FontFamily;
HSPLandroidx/compose/ui/text/font/TypefaceRequest;->getFontStyle-_-LCdwA()I
+HSPLandroidx/compose/ui/text/font/TypefaceRequest;->getFontSynthesis-GVVA2EU()I
HSPLandroidx/compose/ui/text/font/TypefaceRequest;->getFontWeight()Landroidx/compose/ui/text/font/FontWeight;
HSPLandroidx/compose/ui/text/font/TypefaceRequest;->hashCode()I
HSPLandroidx/compose/ui/text/font/TypefaceRequestCache$runCached$currentTypefaceResult$1;-><init>(Landroidx/compose/ui/text/font/TypefaceRequestCache;Landroidx/compose/ui/text/font/TypefaceRequest;)V
@@ -5783,21 +7721,19 @@
HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid$onImeActionPerformed$1;-><clinit>()V
HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid$onImeActionPerformed$1;-><init>()V
HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid$textInputCommandEventLoop$1;-><init>(Landroidx/compose/ui/text/input/TextInputServiceAndroid;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid$textInputCommandEventLoop$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid;-><init>(Landroid/view/View;)V
HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid;-><init>(Landroid/view/View;Landroidx/compose/ui/text/input/InputMethodManager;)V
HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid;->isEditorFocused()Z
HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid;->textInputCommandEventLoop(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
HSPLandroidx/compose/ui/text/intl/AndroidLocale;-><init>(Ljava/util/Locale;)V
-HSPLandroidx/compose/ui/text/intl/AndroidLocale;->toLanguageTag()Ljava/lang/String;
HSPLandroidx/compose/ui/text/intl/AndroidLocaleDelegateAPI24;-><init>()V
-HSPLandroidx/compose/ui/text/intl/AndroidLocaleDelegateAPI24;->getCurrent()Ljava/util/List;
+HSPLandroidx/compose/ui/text/intl/AndroidLocaleDelegateAPI24;->getCurrent()Landroidx/compose/ui/text/intl/LocaleList;
HSPLandroidx/compose/ui/text/intl/AndroidPlatformLocale_androidKt;->createPlatformLocaleDelegate()Landroidx/compose/ui/text/intl/PlatformLocaleDelegate;
HSPLandroidx/compose/ui/text/intl/Locale$Companion;-><init>()V
HSPLandroidx/compose/ui/text/intl/Locale$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/ui/text/intl/Locale;-><clinit>()V
HSPLandroidx/compose/ui/text/intl/Locale;-><init>(Landroidx/compose/ui/text/intl/PlatformLocale;)V
-HSPLandroidx/compose/ui/text/intl/Locale;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/text/intl/Locale;->toLanguageTag()Ljava/lang/String;
HSPLandroidx/compose/ui/text/intl/LocaleList$Companion;-><init>()V
HSPLandroidx/compose/ui/text/intl/LocaleList$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/ui/text/intl/LocaleList$Companion;->getCurrent()Landroidx/compose/ui/text/intl/LocaleList;
@@ -5814,7 +7750,6 @@
HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics$resolveTypeface$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics$resolveTypeface$1;->invoke-DPcqOEQ(Landroidx/compose/ui/text/font/FontFamily;Landroidx/compose/ui/text/font/FontWeight;II)Landroid/graphics/Typeface;
HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;-><init>(Ljava/lang/String;Landroidx/compose/ui/text/TextStyle;Ljava/util/List;Ljava/util/List;Landroidx/compose/ui/text/font/FontFamily$Resolver;Landroidx/compose/ui/unit/Density;)V
-HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->access$getResolvedTypefaces$p(Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;)Ljava/util/List;
HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getCharSequence$ui_text_release()Ljava/lang/CharSequence;
HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getFontFamilyResolver()Landroidx/compose/ui/text/font/FontFamily$Resolver;
HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getHasStaleResolvedFonts()Z
@@ -5824,6 +7759,8 @@
HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getTextDirectionHeuristic$ui_text_release()I
HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getTextPaint$ui_text_release()Landroidx/compose/ui/text/platform/AndroidTextPaint;
HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics_androidKt;->ActualParagraphIntrinsics(Ljava/lang/String;Landroidx/compose/ui/text/TextStyle;Ljava/util/List;Ljava/util/List;Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/font/FontFamily$Resolver;)Landroidx/compose/ui/text/ParagraphIntrinsics;
+HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics_androidKt;->access$getHasEmojiCompat(Landroidx/compose/ui/text/TextStyle;)Z
+HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics_androidKt;->getHasEmojiCompat(Landroidx/compose/ui/text/TextStyle;)Z
HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics_androidKt;->resolveTextDirectionHeuristics-9GRLPo0(Landroidx/compose/ui/text/style/TextDirection;Landroidx/compose/ui/text/intl/LocaleList;)I
HSPLandroidx/compose/ui/text/platform/AndroidParagraph_androidKt;->ActualParagraph--hBUhpc(Landroidx/compose/ui/text/ParagraphIntrinsics;IZJ)Landroidx/compose/ui/text/Paragraph;
HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;-><init>(IF)V
@@ -5846,34 +7783,20 @@
HSPLandroidx/compose/ui/text/platform/ImmutableBool;->getValue()Ljava/lang/Object;
HSPLandroidx/compose/ui/text/platform/Synchronization_jvmKt;->createSynchronizedObject()Landroidx/compose/ui/text/platform/SynchronizedObject;
HSPLandroidx/compose/ui/text/platform/SynchronizedObject;-><init>()V
-HSPLandroidx/compose/ui/text/platform/TypefaceDirtyTracker;-><init>(Landroidx/compose/runtime/State;)V
-HSPLandroidx/compose/ui/text/platform/TypefaceDirtyTracker;->getTypeface()Landroid/graphics/Typeface;
-HSPLandroidx/compose/ui/text/platform/TypefaceDirtyTracker;->isStaleResolvedFont()Z
HSPLandroidx/compose/ui/text/platform/extensions/PlaceholderExtensions_androidKt;->setPlaceholders(Landroid/text/Spannable;Ljava/util/List;Landroidx/compose/ui/unit/Density;)V
HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt$setFontAttributes$1;-><init>(Landroid/text/Spannable;Lkotlin/jvm/functions/Function4;)V
-HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->createLetterSpacingSpan-eAf_CNQ(JLandroidx/compose/ui/unit/Density;)Landroid/text/style/MetricAffectingSpan;
HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->flattenFontStylesAndApply(Landroidx/compose/ui/text/SpanStyle;Ljava/util/List;Lkotlin/jvm/functions/Function3;)V
HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->hasFontAttributes(Landroidx/compose/ui/text/TextStyle;)Z
HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->resolveLineHeightInPx-o2QH7mI(JFLandroidx/compose/ui/unit/Density;)F
-HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setBackground-RPmYEkk(Landroid/text/Spannable;JII)V
-HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setBaselineShift-0ocSgnM(Landroid/text/Spannable;Landroidx/compose/ui/text/style/BaselineShift;II)V
-HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setBrush(Landroid/text/Spannable;Landroidx/compose/ui/graphics/Brush;FII)V
-HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setColor-RPmYEkk(Landroid/text/Spannable;JII)V
-HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setDrawStyle(Landroid/text/Spannable;Landroidx/compose/ui/graphics/drawscope/DrawStyle;II)V
HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setFontAttributes(Landroid/text/Spannable;Landroidx/compose/ui/text/TextStyle;Ljava/util/List;Lkotlin/jvm/functions/Function4;)V
-HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setFontFeatureSettings(Landroid/text/Spannable;Ljava/lang/String;II)V
-HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setFontSize-KmRG4DE(Landroid/text/Spannable;JLandroidx/compose/ui/unit/Density;II)V
-HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setGeometricTransform(Landroid/text/Spannable;Landroidx/compose/ui/text/style/TextGeometricTransform;II)V
HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setLineHeight-r9BaKPg(Landroid/text/Spannable;JFLandroidx/compose/ui/unit/Density;)V
-HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setLocaleList(Landroid/text/Spannable;Landroidx/compose/ui/text/intl/LocaleList;II)V
-HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setShadow(Landroid/text/Spannable;Landroidx/compose/ui/graphics/Shadow;II)V
HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setSpan(Landroid/text/Spannable;Ljava/lang/Object;II)V
-HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setSpanStyle(Landroid/text/Spannable;Landroidx/compose/ui/text/AnnotatedString$Range;Landroidx/compose/ui/unit/Density;Ljava/util/ArrayList;)V
HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setSpanStyles(Landroid/text/Spannable;Landroidx/compose/ui/text/TextStyle;Ljava/util/List;Landroidx/compose/ui/unit/Density;Lkotlin/jvm/functions/Function4;)V
-HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setTextDecoration(Landroid/text/Spannable;Landroidx/compose/ui/text/style/TextDecoration;II)V
HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setTextIndent(Landroid/text/Spannable;Landroidx/compose/ui/text/style/TextIndent;FLandroidx/compose/ui/unit/Density;)V
-HSPLandroidx/compose/ui/text/platform/extensions/TextPaintExtensions_androidKt;->applySpanStyle(Landroidx/compose/ui/text/platform/AndroidTextPaint;Landroidx/compose/ui/text/SpanStyle;Lkotlin/jvm/functions/Function4;Landroidx/compose/ui/unit/Density;)Landroidx/compose/ui/text/SpanStyle;
+HSPLandroidx/compose/ui/text/platform/extensions/TextPaintExtensions_androidKt;->applySpanStyle(Landroidx/compose/ui/text/platform/AndroidTextPaint;Landroidx/compose/ui/text/SpanStyle;Lkotlin/jvm/functions/Function4;Landroidx/compose/ui/unit/Density;Z)Landroidx/compose/ui/text/SpanStyle;
+HSPLandroidx/compose/ui/text/platform/extensions/TextPaintExtensions_androidKt;->generateFallbackSpanStyle-62GTOB8(JZJLandroidx/compose/ui/text/style/BaselineShift;)Landroidx/compose/ui/text/SpanStyle;
HSPLandroidx/compose/ui/text/platform/extensions/TextPaintExtensions_androidKt;->hasFontAttributes(Landroidx/compose/ui/text/SpanStyle;)Z
+HSPLandroidx/compose/ui/text/platform/extensions/TextPaintExtensions_androidKt;->setTextMotion(Landroidx/compose/ui/text/platform/AndroidTextPaint;Landroidx/compose/ui/text/style/TextMotion;)V
HSPLandroidx/compose/ui/text/style/BaselineShift$Companion;-><init>()V
HSPLandroidx/compose/ui/text/style/BaselineShift$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/ui/text/style/BaselineShift$Companion;->getNone-y9eOQZs()F
@@ -5892,15 +7815,19 @@
HSPLandroidx/compose/ui/text/style/ColorStyle;->getColor-0d7_KjU()J
HSPLandroidx/compose/ui/text/style/Hyphens$Companion;-><init>()V
HSPLandroidx/compose/ui/text/style/Hyphens$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/style/Hyphens$Companion;->getAuto()Landroidx/compose/ui/text/style/Hyphens;
-HSPLandroidx/compose/ui/text/style/Hyphens$Companion;->getNone()Landroidx/compose/ui/text/style/Hyphens;
+HSPLandroidx/compose/ui/text/style/Hyphens$Companion;->getAuto-vmbZdU8()I
+HSPLandroidx/compose/ui/text/style/Hyphens$Companion;->getNone-vmbZdU8()I
HSPLandroidx/compose/ui/text/style/Hyphens;-><clinit>()V
-HSPLandroidx/compose/ui/text/style/Hyphens;-><init>()V
-HSPLandroidx/compose/ui/text/style/Hyphens;->access$getAuto$cp()Landroidx/compose/ui/text/style/Hyphens;
-HSPLandroidx/compose/ui/text/style/Hyphens;->access$getNone$cp()Landroidx/compose/ui/text/style/Hyphens;
+HSPLandroidx/compose/ui/text/style/Hyphens;-><init>(I)V
+HSPLandroidx/compose/ui/text/style/Hyphens;->access$getAuto$cp()I
+HSPLandroidx/compose/ui/text/style/Hyphens;->access$getNone$cp()I
+HSPLandroidx/compose/ui/text/style/Hyphens;->box-impl(I)Landroidx/compose/ui/text/style/Hyphens;
+HSPLandroidx/compose/ui/text/style/Hyphens;->constructor-impl(I)I
+HSPLandroidx/compose/ui/text/style/Hyphens;->equals-impl0(II)Z
+HSPLandroidx/compose/ui/text/style/Hyphens;->unbox-impl()I
HSPLandroidx/compose/ui/text/style/LineBreak$Companion;-><init>()V
HSPLandroidx/compose/ui/text/style/LineBreak$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/style/LineBreak$Companion;->getSimple()Landroidx/compose/ui/text/style/LineBreak;
+HSPLandroidx/compose/ui/text/style/LineBreak$Companion;->getSimple-rAG3T2k()I
HSPLandroidx/compose/ui/text/style/LineBreak$Strategy$Companion;-><init>()V
HSPLandroidx/compose/ui/text/style/LineBreak$Strategy$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/ui/text/style/LineBreak$Strategy$Companion;->getBalanced-fcGXIks()I
@@ -5944,12 +7871,23 @@
HSPLandroidx/compose/ui/text/style/LineBreak$WordBreak;->equals-impl0(II)Z
HSPLandroidx/compose/ui/text/style/LineBreak$WordBreak;->unbox-impl()I
HSPLandroidx/compose/ui/text/style/LineBreak;-><clinit>()V
-HSPLandroidx/compose/ui/text/style/LineBreak;-><init>(III)V
-HSPLandroidx/compose/ui/text/style/LineBreak;-><init>(IIILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/style/LineBreak;->access$getSimple$cp()Landroidx/compose/ui/text/style/LineBreak;
-HSPLandroidx/compose/ui/text/style/LineBreak;->getStrategy-fcGXIks()I
-HSPLandroidx/compose/ui/text/style/LineBreak;->getStrictness-usljTpc()I
-HSPLandroidx/compose/ui/text/style/LineBreak;->getWordBreak-jp8hJ3c()I
+HSPLandroidx/compose/ui/text/style/LineBreak;-><init>(I)V
+HSPLandroidx/compose/ui/text/style/LineBreak;->access$getSimple$cp()I
+HSPLandroidx/compose/ui/text/style/LineBreak;->box-impl(I)Landroidx/compose/ui/text/style/LineBreak;
+HSPLandroidx/compose/ui/text/style/LineBreak;->constructor-impl(I)I
+HSPLandroidx/compose/ui/text/style/LineBreak;->constructor-impl(III)I
+HSPLandroidx/compose/ui/text/style/LineBreak;->getStrategy-fcGXIks(I)I
+HSPLandroidx/compose/ui/text/style/LineBreak;->getStrictness-usljTpc(I)I
+HSPLandroidx/compose/ui/text/style/LineBreak;->getWordBreak-jp8hJ3c(I)I
+HSPLandroidx/compose/ui/text/style/LineBreak;->unbox-impl()I
+HSPLandroidx/compose/ui/text/style/LineBreak_androidKt;->access$packBytes(III)I
+HSPLandroidx/compose/ui/text/style/LineBreak_androidKt;->access$unpackByte1(I)I
+HSPLandroidx/compose/ui/text/style/LineBreak_androidKt;->access$unpackByte2(I)I
+HSPLandroidx/compose/ui/text/style/LineBreak_androidKt;->access$unpackByte3(I)I
+HSPLandroidx/compose/ui/text/style/LineBreak_androidKt;->packBytes(III)I
+HSPLandroidx/compose/ui/text/style/LineBreak_androidKt;->unpackByte1(I)I
+HSPLandroidx/compose/ui/text/style/LineBreak_androidKt;->unpackByte2(I)I
+HSPLandroidx/compose/ui/text/style/LineBreak_androidKt;->unpackByte3(I)I
HSPLandroidx/compose/ui/text/style/TextAlign$Companion;-><init>()V
HSPLandroidx/compose/ui/text/style/TextAlign$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/ui/text/style/TextAlign$Companion;->getCenter-e0LSkKk()I
@@ -5966,8 +7904,6 @@
HSPLandroidx/compose/ui/text/style/TextAlign;->access$getStart$cp()I
HSPLandroidx/compose/ui/text/style/TextAlign;->box-impl(I)Landroidx/compose/ui/text/style/TextAlign;
HSPLandroidx/compose/ui/text/style/TextAlign;->constructor-impl(I)I
-HSPLandroidx/compose/ui/text/style/TextAlign;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/text/style/TextAlign;->equals-impl(ILjava/lang/Object;)Z
HSPLandroidx/compose/ui/text/style/TextAlign;->equals-impl0(II)Z
HSPLandroidx/compose/ui/text/style/TextAlign;->unbox-impl()I
HSPLandroidx/compose/ui/text/style/TextDecoration$Companion;-><init>()V
@@ -6000,9 +7936,6 @@
HSPLandroidx/compose/ui/text/style/TextForegroundStyle$Companion;->from-8_81llA(J)Landroidx/compose/ui/text/style/TextForegroundStyle;
HSPLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;-><clinit>()V
HSPLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;-><init>()V
-HSPLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;->getAlpha()F
-HSPLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;->getBrush()Landroidx/compose/ui/graphics/Brush;
-HSPLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;->getColor-0d7_KjU()J
HSPLandroidx/compose/ui/text/style/TextForegroundStyle$merge$2;-><init>(Landroidx/compose/ui/text/style/TextForegroundStyle;)V
HSPLandroidx/compose/ui/text/style/TextForegroundStyle$merge$2;->invoke()Landroidx/compose/ui/text/style/TextForegroundStyle;
HSPLandroidx/compose/ui/text/style/TextForegroundStyle$merge$2;->invoke()Ljava/lang/Object;
@@ -6024,8 +7957,27 @@
HSPLandroidx/compose/ui/text/style/TextIndent;-><init>(JJILkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/ui/text/style/TextIndent;-><init>(JJLkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/ui/text/style/TextIndent;->access$getNone$cp()Landroidx/compose/ui/text/style/TextIndent;
+HSPLandroidx/compose/ui/text/style/TextIndent;->equals(Ljava/lang/Object;)Z
HSPLandroidx/compose/ui/text/style/TextIndent;->getFirstLine-XSAIIZE()J
HSPLandroidx/compose/ui/text/style/TextIndent;->getRestLine-XSAIIZE()J
+HSPLandroidx/compose/ui/text/style/TextMotion$Companion;-><init>()V
+HSPLandroidx/compose/ui/text/style/TextMotion$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/ui/text/style/TextMotion$Companion;->getStatic()Landroidx/compose/ui/text/style/TextMotion;
+HSPLandroidx/compose/ui/text/style/TextMotion$Linearity$Companion;-><init>()V
+HSPLandroidx/compose/ui/text/style/TextMotion$Linearity$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/ui/text/style/TextMotion$Linearity$Companion;->getFontHinting-4e0Vf04()I
+HSPLandroidx/compose/ui/text/style/TextMotion$Linearity$Companion;->getLinear-4e0Vf04()I
+HSPLandroidx/compose/ui/text/style/TextMotion$Linearity;-><clinit>()V
+HSPLandroidx/compose/ui/text/style/TextMotion$Linearity;->access$getFontHinting$cp()I
+HSPLandroidx/compose/ui/text/style/TextMotion$Linearity;->access$getLinear$cp()I
+HSPLandroidx/compose/ui/text/style/TextMotion$Linearity;->constructor-impl(I)I
+HSPLandroidx/compose/ui/text/style/TextMotion$Linearity;->equals-impl0(II)Z
+HSPLandroidx/compose/ui/text/style/TextMotion;-><clinit>()V
+HSPLandroidx/compose/ui/text/style/TextMotion;-><init>(IZ)V
+HSPLandroidx/compose/ui/text/style/TextMotion;-><init>(IZLkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/ui/text/style/TextMotion;->access$getStatic$cp()Landroidx/compose/ui/text/style/TextMotion;
+HSPLandroidx/compose/ui/text/style/TextMotion;->getLinearity-4e0Vf04$ui_text_release()I
+HSPLandroidx/compose/ui/text/style/TextMotion;->getSubpixelTextPositioning$ui_text_release()Z
HSPLandroidx/compose/ui/text/style/TextOverflow$Companion;-><init>()V
HSPLandroidx/compose/ui/text/style/TextOverflow$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/ui/text/style/TextOverflow$Companion;->getClip-gIe3tQ8()I
@@ -6047,6 +7999,8 @@
HSPLandroidx/compose/ui/unit/Constraints;->constructor-impl(J)J
HSPLandroidx/compose/ui/unit/Constraints;->copy-Zbe2FdA$default(JIIIIILjava/lang/Object;)J
HSPLandroidx/compose/ui/unit/Constraints;->copy-Zbe2FdA(JIIII)J
+HSPLandroidx/compose/ui/unit/Constraints;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/ui/unit/Constraints;->equals-impl(JLjava/lang/Object;)Z
HSPLandroidx/compose/ui/unit/Constraints;->equals-impl0(JJ)Z
HSPLandroidx/compose/ui/unit/Constraints;->getFocusIndex-impl(J)I
HSPLandroidx/compose/ui/unit/Constraints;->getHasBoundedHeight-impl(J)Z
@@ -6067,8 +8021,10 @@
HSPLandroidx/compose/ui/unit/ConstraintsKt;->constrainWidth-K40F9xA(JI)I
HSPLandroidx/compose/ui/unit/ConstraintsKt;->offset-NN6Ew-U(JII)J
HSPLandroidx/compose/ui/unit/Density;->roundToPx-0680j_4(F)I
+HSPLandroidx/compose/ui/unit/Density;->toDp-u2uoSUM(I)F
HSPLandroidx/compose/ui/unit/Density;->toPx--R2X_6o(J)F
HSPLandroidx/compose/ui/unit/Density;->toPx-0680j_4(F)F
+HSPLandroidx/compose/ui/unit/Density;->toSize-XkaWNTQ(J)J
HSPLandroidx/compose/ui/unit/DensityImpl;-><init>(FF)V
HSPLandroidx/compose/ui/unit/DensityImpl;->equals(Ljava/lang/Object;)Z
HSPLandroidx/compose/ui/unit/DensityImpl;->getDensity()F
@@ -6077,11 +8033,9 @@
HSPLandroidx/compose/ui/unit/DensityKt;->Density(FF)Landroidx/compose/ui/unit/Density;
HSPLandroidx/compose/ui/unit/Dp$Companion;-><init>()V
HSPLandroidx/compose/ui/unit/Dp$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/unit/Dp$Companion;->getHairline-D9Ej5fM()F
HSPLandroidx/compose/ui/unit/Dp$Companion;->getUnspecified-D9Ej5fM()F
HSPLandroidx/compose/ui/unit/Dp;-><clinit>()V
HSPLandroidx/compose/ui/unit/Dp;-><init>(F)V
-HSPLandroidx/compose/ui/unit/Dp;->access$getHairline$cp()F
HSPLandroidx/compose/ui/unit/Dp;->access$getUnspecified$cp()F
HSPLandroidx/compose/ui/unit/Dp;->box-impl(F)Landroidx/compose/ui/unit/Dp;
HSPLandroidx/compose/ui/unit/Dp;->compareTo(Ljava/lang/Object;)I
@@ -6100,7 +8054,9 @@
HSPLandroidx/compose/ui/unit/DpOffset;->constructor-impl(J)J
HSPLandroidx/compose/ui/unit/DpSize$Companion;-><init>()V
HSPLandroidx/compose/ui/unit/DpSize$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/compose/ui/unit/DpSize$Companion;->getUnspecified-MYxV2XQ()J
HSPLandroidx/compose/ui/unit/DpSize;-><clinit>()V
+HSPLandroidx/compose/ui/unit/DpSize;->access$getUnspecified$cp()J
HSPLandroidx/compose/ui/unit/DpSize;->constructor-impl(J)J
HSPLandroidx/compose/ui/unit/DpSize;->equals-impl0(JJ)Z
HSPLandroidx/compose/ui/unit/DpSize;->getHeight-D9Ej5fM(J)F
@@ -6120,6 +8076,8 @@
HSPLandroidx/compose/ui/unit/IntOffset;->getY-impl(J)I
HSPLandroidx/compose/ui/unit/IntOffset;->unbox-impl()J
HSPLandroidx/compose/ui/unit/IntOffsetKt;->IntOffset(II)J
+HSPLandroidx/compose/ui/unit/IntOffsetKt;->minus-Nv-tHpc(JJ)J
+HSPLandroidx/compose/ui/unit/IntOffsetKt;->plus-Nv-tHpc(JJ)J
HSPLandroidx/compose/ui/unit/IntSize$Companion;-><init>()V
HSPLandroidx/compose/ui/unit/IntSize$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/compose/ui/unit/IntSize$Companion;->getZero-YbymL2g()J
@@ -6131,6 +8089,7 @@
HSPLandroidx/compose/ui/unit/IntSize;->equals-impl0(JJ)Z
HSPLandroidx/compose/ui/unit/IntSize;->getHeight-impl(J)I
HSPLandroidx/compose/ui/unit/IntSize;->getWidth-impl(J)I
+HSPLandroidx/compose/ui/unit/IntSize;->unbox-impl()J
HSPLandroidx/compose/ui/unit/IntSizeKt;->IntSize(II)J
HSPLandroidx/compose/ui/unit/IntSizeKt;->getCenter-ozmzZPI(J)J
HSPLandroidx/compose/ui/unit/IntSizeKt;->toSize-ozmzZPI(J)J
@@ -6148,7 +8107,6 @@
HSPLandroidx/compose/ui/unit/TextUnit;->getRawType-impl(J)J
HSPLandroidx/compose/ui/unit/TextUnit;->getType-UIouoOA(J)J
HSPLandroidx/compose/ui/unit/TextUnit;->getValue-impl(J)F
-HSPLandroidx/compose/ui/unit/TextUnitKt;->checkArithmetic--R2X_6o(J)V
HSPLandroidx/compose/ui/unit/TextUnitKt;->getSp(D)J
HSPLandroidx/compose/ui/unit/TextUnitKt;->getSp(I)J
HSPLandroidx/compose/ui/unit/TextUnitKt;->isUnspecified--R2X_6o(J)Z
@@ -6167,6 +8125,7 @@
HSPLandroidx/compose/ui/unit/TextUnitType;->constructor-impl(J)J
HSPLandroidx/compose/ui/unit/TextUnitType;->equals-impl0(JJ)Z
HSPLandroidx/compose/ui/unit/TextUnitType;->unbox-impl()J
+HSPLandroidx/compose/ui/util/MathHelpersKt;->lerp(FFF)F
HSPLandroidx/core/app/ComponentActivity;-><init>()V
HSPLandroidx/core/app/ComponentActivity;->onCreate(Landroid/os/Bundle;)V
HSPLandroidx/core/app/CoreComponentFactory;-><init>()V
@@ -6174,6 +8133,8 @@
HSPLandroidx/core/app/CoreComponentFactory;->instantiateActivity(Ljava/lang/ClassLoader;Ljava/lang/String;Landroid/content/Intent;)Landroid/app/Activity;
HSPLandroidx/core/app/CoreComponentFactory;->instantiateApplication(Ljava/lang/ClassLoader;Ljava/lang/String;)Landroid/app/Application;
HSPLandroidx/core/app/CoreComponentFactory;->instantiateProvider(Ljava/lang/ClassLoader;Ljava/lang/String;)Landroid/content/ContentProvider;
+HSPLandroidx/core/graphics/Insets;-><clinit>()V
+HSPLandroidx/core/graphics/Insets;-><init>(IIII)V
HSPLandroidx/core/graphics/TypefaceCompat;-><clinit>()V
HSPLandroidx/core/graphics/TypefaceCompat;->createFromFontInfo(Landroid/content/Context;Landroid/os/CancellationSignal;[Landroidx/core/provider/FontsContractCompat$FontInfo;I)Landroid/graphics/Typeface;
HSPLandroidx/core/graphics/TypefaceCompatApi29Impl;-><init>()V
@@ -6185,6 +8146,8 @@
HSPLandroidx/core/graphics/TypefaceCompatUtil;->mmap(Landroid/content/Context;Landroid/os/CancellationSignal;Landroid/net/Uri;)Ljava/nio/ByteBuffer;
HSPLandroidx/core/graphics/drawable/DrawableKt;->toBitmap$default(Landroid/graphics/drawable/Drawable;IILandroid/graphics/Bitmap$Config;ILjava/lang/Object;)Landroid/graphics/Bitmap;
HSPLandroidx/core/graphics/drawable/DrawableKt;->toBitmap(Landroid/graphics/drawable/Drawable;IILandroid/graphics/Bitmap$Config;)Landroid/graphics/Bitmap;
+HSPLandroidx/core/os/BuildCompat$Extensions30Impl;-><clinit>()V
+HSPLandroidx/core/os/BuildCompat;-><clinit>()V
HSPLandroidx/core/os/BuildCompat;->isAtLeastT()Z
HSPLandroidx/core/os/HandlerCompat$Api28Impl;->createAsync(Landroid/os/Looper;)Landroid/os/Handler;
HSPLandroidx/core/os/HandlerCompat;->createAsync(Landroid/os/Looper;)Landroid/os/Handler;
@@ -6234,12 +8197,61 @@
HSPLandroidx/core/view/MenuHostHelper;-><init>(Ljava/lang/Runnable;)V
HSPLandroidx/core/view/ViewCompat$$ExternalSyntheticLambda0;-><init>()V
HSPLandroidx/core/view/ViewCompat$AccessibilityPaneVisibilityManager;-><init>()V
+HSPLandroidx/core/view/ViewCompat$Api21Impl$1;-><init>(Landroid/view/View;Landroidx/core/view/OnApplyWindowInsetsListener;)V
+HSPLandroidx/core/view/ViewCompat$Api21Impl;->setOnApplyWindowInsetsListener(Landroid/view/View;Landroidx/core/view/OnApplyWindowInsetsListener;)V
HSPLandroidx/core/view/ViewCompat;-><clinit>()V
HSPLandroidx/core/view/ViewCompat;->setAccessibilityDelegate(Landroid/view/View;Landroidx/core/view/AccessibilityDelegateCompat;)V
+HSPLandroidx/core/view/ViewCompat;->setOnApplyWindowInsetsListener(Landroid/view/View;Landroidx/core/view/OnApplyWindowInsetsListener;)V
+HSPLandroidx/core/view/ViewCompat;->setWindowInsetsAnimationCallback(Landroid/view/View;Landroidx/core/view/WindowInsetsAnimationCompat$Callback;)V
+HSPLandroidx/core/view/ViewKt$ancestors$1;-><clinit>()V
+HSPLandroidx/core/view/ViewKt$ancestors$1;-><init>()V
+HSPLandroidx/core/view/ViewKt$ancestors$1;->invoke(Landroid/view/ViewParent;)Landroid/view/ViewParent;
+HSPLandroidx/core/view/ViewKt$ancestors$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/core/view/ViewKt;->getAncestors(Landroid/view/View;)Lkotlin/sequences/Sequence;
+HSPLandroidx/core/view/WindowCompat;->getInsetsController(Landroid/view/Window;Landroid/view/View;)Landroidx/core/view/WindowInsetsControllerCompat;
+HSPLandroidx/core/view/WindowInsetsAnimationCompat$Callback;-><init>(I)V
+HSPLandroidx/core/view/WindowInsetsAnimationCompat$Callback;->getDispatchMode()I
+HSPLandroidx/core/view/WindowInsetsAnimationCompat$Impl30$ProxyCallback;-><init>(Landroidx/core/view/WindowInsetsAnimationCompat$Callback;)V
+HSPLandroidx/core/view/WindowInsetsAnimationCompat$Impl30;->setCallback(Landroid/view/View;Landroidx/core/view/WindowInsetsAnimationCompat$Callback;)V
+HSPLandroidx/core/view/WindowInsetsAnimationCompat;->setCallback(Landroid/view/View;Landroidx/core/view/WindowInsetsAnimationCompat$Callback;)V
+HSPLandroidx/core/view/WindowInsetsCompat$Type;->captionBar()I
+HSPLandroidx/core/view/WindowInsetsCompat$Type;->displayCutout()I
+HSPLandroidx/core/view/WindowInsetsCompat$Type;->ime()I
+HSPLandroidx/core/view/WindowInsetsCompat$Type;->mandatorySystemGestures()I
+HSPLandroidx/core/view/WindowInsetsCompat$Type;->navigationBars()I
+HSPLandroidx/core/view/WindowInsetsCompat$Type;->statusBars()I
+HSPLandroidx/core/view/WindowInsetsCompat$Type;->systemBars()I
+HSPLandroidx/core/view/WindowInsetsCompat$Type;->systemGestures()I
+HSPLandroidx/core/view/WindowInsetsCompat$Type;->tappableElement()I
+HSPLandroidx/core/view/WindowInsetsControllerCompat$Impl30;-><init>(Landroid/view/Window;Landroidx/core/view/WindowInsetsControllerCompat;)V
+HSPLandroidx/core/view/WindowInsetsControllerCompat$Impl30;-><init>(Landroid/view/WindowInsetsController;Landroidx/core/view/WindowInsetsControllerCompat;)V
+HSPLandroidx/core/view/WindowInsetsControllerCompat$Impl30;->setAppearanceLightNavigationBars(Z)V
+HSPLandroidx/core/view/WindowInsetsControllerCompat$Impl30;->setAppearanceLightStatusBars(Z)V
+HSPLandroidx/core/view/WindowInsetsControllerCompat$Impl30;->unsetSystemUiFlag(I)V
+HSPLandroidx/core/view/WindowInsetsControllerCompat$Impl;-><init>()V
+HSPLandroidx/core/view/WindowInsetsControllerCompat;-><init>(Landroid/view/Window;Landroid/view/View;)V
+HSPLandroidx/core/view/WindowInsetsControllerCompat;->setAppearanceLightNavigationBars(Z)V
+HSPLandroidx/core/view/WindowInsetsControllerCompat;->setAppearanceLightStatusBars(Z)V
HSPLandroidx/core/view/accessibility/AccessibilityNodeProviderCompat;-><init>(Ljava/lang/Object;)V
+HSPLandroidx/credentials/provider/Action$Companion;-><init>()V
+HSPLandroidx/credentials/provider/Action$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/credentials/provider/Action$Companion;->fromSlice(Landroid/app/slice/Slice;)Landroidx/credentials/provider/Action;
+HSPLandroidx/credentials/provider/Action;-><clinit>()V
+HSPLandroidx/credentials/provider/Action;-><init>(Ljava/lang/CharSequence;Landroid/app/PendingIntent;Ljava/lang/CharSequence;)V
+HSPLandroidx/credentials/provider/Action;->getPendingIntent()Landroid/app/PendingIntent;
+HSPLandroidx/credentials/provider/Action;->getSubtitle()Ljava/lang/CharSequence;
+HSPLandroidx/credentials/provider/Action;->getTitle()Ljava/lang/CharSequence;
+HSPLandroidx/credentials/provider/RemoteEntry$Companion;-><init>()V
+HSPLandroidx/credentials/provider/RemoteEntry$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLandroidx/credentials/provider/RemoteEntry$Companion;->fromSlice(Landroid/app/slice/Slice;)Landroidx/credentials/provider/RemoteEntry;
+HSPLandroidx/credentials/provider/RemoteEntry;-><clinit>()V
+HSPLandroidx/credentials/provider/RemoteEntry;-><init>(Landroid/app/PendingIntent;)V
+HSPLandroidx/credentials/provider/RemoteEntry;->getPendingIntent()Landroid/app/PendingIntent;
HSPLandroidx/customview/poolingcontainer/PoolingContainer;-><clinit>()V
HSPLandroidx/customview/poolingcontainer/PoolingContainer;->addPoolingContainerListener(Landroid/view/View;Landroidx/customview/poolingcontainer/PoolingContainerListener;)V
HSPLandroidx/customview/poolingcontainer/PoolingContainer;->getPoolingContainerListenerHolder(Landroid/view/View;)Landroidx/customview/poolingcontainer/PoolingContainerListenerHolder;
+HSPLandroidx/customview/poolingcontainer/PoolingContainer;->isPoolingContainer(Landroid/view/View;)Z
+HSPLandroidx/customview/poolingcontainer/PoolingContainer;->isWithinPoolingContainer(Landroid/view/View;)Z
HSPLandroidx/customview/poolingcontainer/PoolingContainerListenerHolder;-><init>()V
HSPLandroidx/customview/poolingcontainer/PoolingContainerListenerHolder;->addListener(Landroidx/customview/poolingcontainer/PoolingContainerListener;)V
HSPLandroidx/emoji2/text/ConcurrencyHelpers$$ExternalSyntheticLambda0;-><init>(Ljava/lang/String;)V
@@ -6277,15 +8289,16 @@
HSPLandroidx/emoji2/text/EmojiCompat$Config;-><init>(Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoader;)V
HSPLandroidx/emoji2/text/EmojiCompat$Config;->getMetadataRepoLoader()Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoader;
HSPLandroidx/emoji2/text/EmojiCompat$Config;->setMetadataLoadStrategy(I)Landroidx/emoji2/text/EmojiCompat$Config;
+HSPLandroidx/emoji2/text/EmojiCompat$DefaultSpanFactory;-><init>()V
HSPLandroidx/emoji2/text/EmojiCompat$InitCallback;-><init>()V
HSPLandroidx/emoji2/text/EmojiCompat$ListenerDispatcher;-><init>(Ljava/util/Collection;I)V
HSPLandroidx/emoji2/text/EmojiCompat$ListenerDispatcher;-><init>(Ljava/util/Collection;ILjava/lang/Throwable;)V
HSPLandroidx/emoji2/text/EmojiCompat$ListenerDispatcher;->run()V
HSPLandroidx/emoji2/text/EmojiCompat$MetadataRepoLoaderCallback;-><init>()V
-HSPLandroidx/emoji2/text/EmojiCompat$SpanFactory;-><init>()V
HSPLandroidx/emoji2/text/EmojiCompat;-><clinit>()V
HSPLandroidx/emoji2/text/EmojiCompat;-><init>(Landroidx/emoji2/text/EmojiCompat$Config;)V
-HSPLandroidx/emoji2/text/EmojiCompat;->access$000(Landroidx/emoji2/text/EmojiCompat;)Landroidx/emoji2/text/EmojiCompat$GlyphChecker;
+HSPLandroidx/emoji2/text/EmojiCompat;->access$000(Landroidx/emoji2/text/EmojiCompat;)Landroidx/emoji2/text/EmojiCompat$SpanFactory;
+HSPLandroidx/emoji2/text/EmojiCompat;->access$100(Landroidx/emoji2/text/EmojiCompat;)Landroidx/emoji2/text/EmojiCompat$GlyphChecker;
HSPLandroidx/emoji2/text/EmojiCompat;->get()Landroidx/emoji2/text/EmojiCompat;
HSPLandroidx/emoji2/text/EmojiCompat;->getLoadState()I
HSPLandroidx/emoji2/text/EmojiCompat;->init(Landroidx/emoji2/text/EmojiCompat$Config;)Landroidx/emoji2/text/EmojiCompat;
@@ -6319,18 +8332,20 @@
HSPLandroidx/emoji2/text/EmojiCompatInitializer;->delayUntilFirstResume(Landroid/content/Context;)V
HSPLandroidx/emoji2/text/EmojiCompatInitializer;->dependencies()Ljava/util/List;
HSPLandroidx/emoji2/text/EmojiCompatInitializer;->loadEmojiCompatAfterDelay()V
-HSPLandroidx/emoji2/text/EmojiMetadata;-><clinit>()V
-HSPLandroidx/emoji2/text/EmojiMetadata;-><init>(Landroidx/emoji2/text/MetadataRepo;I)V
-HSPLandroidx/emoji2/text/EmojiMetadata;->getCodepointAt(I)I
-HSPLandroidx/emoji2/text/EmojiMetadata;->getCodepointsLength()I
-HSPLandroidx/emoji2/text/EmojiMetadata;->getId()I
-HSPLandroidx/emoji2/text/EmojiMetadata;->getMetadataItem()Landroidx/emoji2/text/flatbuffer/MetadataItem;+]Landroidx/emoji2/text/flatbuffer/MetadataList;Landroidx/emoji2/text/flatbuffer/MetadataList;]Landroidx/emoji2/text/MetadataRepo;Landroidx/emoji2/text/MetadataRepo;
+HSPLandroidx/emoji2/text/EmojiExclusions$EmojiExclusions_Api34;->getExclusions()Ljava/util/Set;
+HSPLandroidx/emoji2/text/EmojiExclusions$EmojiExclusions_Reflections;->getExclusions()Ljava/util/Set;
+HSPLandroidx/emoji2/text/EmojiExclusions;->getEmojiExclusions()Ljava/util/Set;
+HSPLandroidx/emoji2/text/EmojiProcessor$EmojiProcessAddSpanCallback;-><init>(Landroidx/emoji2/text/UnprecomputeTextOnModificationSpannable;Landroidx/emoji2/text/EmojiCompat$SpanFactory;)V
+HSPLandroidx/emoji2/text/EmojiProcessor$EmojiProcessAddSpanCallback;->getResult()Landroidx/emoji2/text/UnprecomputeTextOnModificationSpannable;
+HSPLandroidx/emoji2/text/EmojiProcessor$EmojiProcessAddSpanCallback;->getResult()Ljava/lang/Object;
HSPLandroidx/emoji2/text/EmojiProcessor$ProcessorSm;-><init>(Landroidx/emoji2/text/MetadataRepo$Node;Z[I)V
HSPLandroidx/emoji2/text/EmojiProcessor$ProcessorSm;->check(I)I
HSPLandroidx/emoji2/text/EmojiProcessor$ProcessorSm;->isInFlushableState()Z
HSPLandroidx/emoji2/text/EmojiProcessor$ProcessorSm;->reset()I
-HSPLandroidx/emoji2/text/EmojiProcessor;-><init>(Landroidx/emoji2/text/MetadataRepo;Landroidx/emoji2/text/EmojiCompat$SpanFactory;Landroidx/emoji2/text/EmojiCompat$GlyphChecker;Z[I)V
+HSPLandroidx/emoji2/text/EmojiProcessor;-><init>(Landroidx/emoji2/text/MetadataRepo;Landroidx/emoji2/text/EmojiCompat$SpanFactory;Landroidx/emoji2/text/EmojiCompat$GlyphChecker;Z[ILjava/util/Set;)V
+HSPLandroidx/emoji2/text/EmojiProcessor;->initExclusions(Ljava/util/Set;)V
HSPLandroidx/emoji2/text/EmojiProcessor;->process(Ljava/lang/CharSequence;IIIZ)Ljava/lang/CharSequence;
+HSPLandroidx/emoji2/text/EmojiProcessor;->process(Ljava/lang/CharSequence;IIIZLandroidx/emoji2/text/EmojiProcessor$EmojiProcessCallback;)Ljava/lang/Object;
HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontProviderHelper;-><init>()V
HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontProviderHelper;->buildTypeface(Landroid/content/Context;Landroidx/core/provider/FontsContractCompat$FontInfo;)Landroid/graphics/Typeface;
HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontProviderHelper;->fetchFonts(Landroid/content/Context;Landroidx/core/provider/FontRequest;)Landroidx/core/provider/FontsContractCompat$FontFamilyResult;
@@ -6361,18 +8376,23 @@
HSPLandroidx/emoji2/text/MetadataRepo$Node;-><init>()V
HSPLandroidx/emoji2/text/MetadataRepo$Node;-><init>(I)V
HSPLandroidx/emoji2/text/MetadataRepo$Node;->get(I)Landroidx/emoji2/text/MetadataRepo$Node;
-HSPLandroidx/emoji2/text/MetadataRepo$Node;->put(Landroidx/emoji2/text/EmojiMetadata;II)V
+HSPLandroidx/emoji2/text/MetadataRepo$Node;->put(Landroidx/emoji2/text/TypefaceEmojiRasterizer;II)V
HSPLandroidx/emoji2/text/MetadataRepo;-><init>(Landroid/graphics/Typeface;Landroidx/emoji2/text/flatbuffer/MetadataList;)V
-HSPLandroidx/emoji2/text/MetadataRepo;->constructIndex(Landroidx/emoji2/text/flatbuffer/MetadataList;)V
HSPLandroidx/emoji2/text/MetadataRepo;->create(Landroid/graphics/Typeface;Ljava/nio/ByteBuffer;)Landroidx/emoji2/text/MetadataRepo;
HSPLandroidx/emoji2/text/MetadataRepo;->getMetadataList()Landroidx/emoji2/text/flatbuffer/MetadataList;
HSPLandroidx/emoji2/text/MetadataRepo;->getRootNode()Landroidx/emoji2/text/MetadataRepo$Node;
-HSPLandroidx/emoji2/text/MetadataRepo;->put(Landroidx/emoji2/text/EmojiMetadata;)V
+HSPLandroidx/emoji2/text/MetadataRepo;->put(Landroidx/emoji2/text/TypefaceEmojiRasterizer;)V
+HSPLandroidx/emoji2/text/TypefaceEmojiRasterizer;-><clinit>()V
+HSPLandroidx/emoji2/text/TypefaceEmojiRasterizer;-><init>(Landroidx/emoji2/text/MetadataRepo;I)V
+HSPLandroidx/emoji2/text/TypefaceEmojiRasterizer;->getCodepointAt(I)I+]Landroidx/emoji2/text/flatbuffer/MetadataItem;Landroidx/emoji2/text/flatbuffer/MetadataItem;
+HSPLandroidx/emoji2/text/TypefaceEmojiRasterizer;->getCodepointsLength()I+]Landroidx/emoji2/text/flatbuffer/MetadataItem;Landroidx/emoji2/text/flatbuffer/MetadataItem;
+HSPLandroidx/emoji2/text/TypefaceEmojiRasterizer;->getId()I
+HSPLandroidx/emoji2/text/TypefaceEmojiRasterizer;->getMetadataItem()Landroidx/emoji2/text/flatbuffer/MetadataItem;+]Landroidx/emoji2/text/flatbuffer/MetadataList;Landroidx/emoji2/text/flatbuffer/MetadataList;]Landroidx/emoji2/text/MetadataRepo;Landroidx/emoji2/text/MetadataRepo;
HSPLandroidx/emoji2/text/flatbuffer/MetadataItem;-><init>()V
HSPLandroidx/emoji2/text/flatbuffer/MetadataItem;->__assign(ILjava/nio/ByteBuffer;)Landroidx/emoji2/text/flatbuffer/MetadataItem;
HSPLandroidx/emoji2/text/flatbuffer/MetadataItem;->__init(ILjava/nio/ByteBuffer;)V
-HSPLandroidx/emoji2/text/flatbuffer/MetadataItem;->codepoints(I)I
-HSPLandroidx/emoji2/text/flatbuffer/MetadataItem;->codepointsLength()I
+HSPLandroidx/emoji2/text/flatbuffer/MetadataItem;->codepoints(I)I+]Landroidx/emoji2/text/flatbuffer/Table;Landroidx/emoji2/text/flatbuffer/MetadataItem;
+HSPLandroidx/emoji2/text/flatbuffer/MetadataItem;->codepointsLength()I+]Landroidx/emoji2/text/flatbuffer/Table;Landroidx/emoji2/text/flatbuffer/MetadataItem;
HSPLandroidx/emoji2/text/flatbuffer/MetadataItem;->id()I
HSPLandroidx/emoji2/text/flatbuffer/MetadataList;-><init>()V
HSPLandroidx/emoji2/text/flatbuffer/MetadataList;->__assign(ILjava/nio/ByteBuffer;)Landroidx/emoji2/text/flatbuffer/MetadataList;
@@ -6391,19 +8411,25 @@
HSPLandroidx/emoji2/text/flatbuffer/Utf8;->getDefault()Landroidx/emoji2/text/flatbuffer/Utf8;
HSPLandroidx/emoji2/text/flatbuffer/Utf8Safe;-><init>()V
HSPLandroidx/lifecycle/DefaultLifecycleObserver;->onCreate(Landroidx/lifecycle/LifecycleOwner;)V
+HSPLandroidx/lifecycle/DefaultLifecycleObserver;->onDestroy(Landroidx/lifecycle/LifecycleOwner;)V
+HSPLandroidx/lifecycle/DefaultLifecycleObserver;->onPause(Landroidx/lifecycle/LifecycleOwner;)V
HSPLandroidx/lifecycle/DefaultLifecycleObserver;->onStart(Landroidx/lifecycle/LifecycleOwner;)V
+HSPLandroidx/lifecycle/DefaultLifecycleObserver;->onStop(Landroidx/lifecycle/LifecycleOwner;)V
HSPLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;-><init>()V
HSPLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V
+HSPLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityDestroyed(Landroid/app/Activity;)V
+HSPLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityPaused(Landroid/app/Activity;)V
HSPLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityResumed(Landroid/app/Activity;)V
HSPLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityStarted(Landroid/app/Activity;)V
+HSPLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityStopped(Landroid/app/Activity;)V
HSPLandroidx/lifecycle/FullLifecycleObserverAdapter$1;-><clinit>()V
HSPLandroidx/lifecycle/FullLifecycleObserverAdapter;-><init>(Landroidx/lifecycle/FullLifecycleObserver;Landroidx/lifecycle/LifecycleEventObserver;)V
HSPLandroidx/lifecycle/FullLifecycleObserverAdapter;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
-HSPLandroidx/lifecycle/LegacySavedStateHandleController;->attachHandleIfNeeded(Landroidx/lifecycle/ViewModel;Landroidx/savedstate/SavedStateRegistry;Landroidx/lifecycle/Lifecycle;)V
HSPLandroidx/lifecycle/Lifecycle$1;-><clinit>()V
HSPLandroidx/lifecycle/Lifecycle$Event;->$values()[Landroidx/lifecycle/Lifecycle$Event;
HSPLandroidx/lifecycle/Lifecycle$Event;-><clinit>()V
HSPLandroidx/lifecycle/Lifecycle$Event;-><init>(Ljava/lang/String;I)V
+HSPLandroidx/lifecycle/Lifecycle$Event;->downFrom(Landroidx/lifecycle/Lifecycle$State;)Landroidx/lifecycle/Lifecycle$Event;
HSPLandroidx/lifecycle/Lifecycle$Event;->getTargetState()Landroidx/lifecycle/Lifecycle$State;
HSPLandroidx/lifecycle/Lifecycle$Event;->upFrom(Landroidx/lifecycle/Lifecycle$State;)Landroidx/lifecycle/Lifecycle$Event;
HSPLandroidx/lifecycle/Lifecycle$Event;->values()[Landroidx/lifecycle/Lifecycle$Event;
@@ -6415,6 +8441,7 @@
HSPLandroidx/lifecycle/Lifecycle;-><init>()V
HSPLandroidx/lifecycle/LifecycleDispatcher$DispatcherActivityCallback;-><init>()V
HSPLandroidx/lifecycle/LifecycleDispatcher$DispatcherActivityCallback;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V
+HSPLandroidx/lifecycle/LifecycleDispatcher$DispatcherActivityCallback;->onActivityStopped(Landroid/app/Activity;)V
HSPLandroidx/lifecycle/LifecycleDispatcher;-><clinit>()V
HSPLandroidx/lifecycle/LifecycleDispatcher;->init(Landroid/content/Context;)V
HSPLandroidx/lifecycle/LifecycleRegistry$ObserverWithState;-><init>(Landroidx/lifecycle/LifecycleObserver;Landroidx/lifecycle/Lifecycle$State;)V
@@ -6422,6 +8449,7 @@
HSPLandroidx/lifecycle/LifecycleRegistry;-><init>(Landroidx/lifecycle/LifecycleOwner;)V
HSPLandroidx/lifecycle/LifecycleRegistry;-><init>(Landroidx/lifecycle/LifecycleOwner;Z)V
HSPLandroidx/lifecycle/LifecycleRegistry;->addObserver(Landroidx/lifecycle/LifecycleObserver;)V
+HSPLandroidx/lifecycle/LifecycleRegistry;->backwardPass(Landroidx/lifecycle/LifecycleOwner;)V
HSPLandroidx/lifecycle/LifecycleRegistry;->calculateTargetState(Landroidx/lifecycle/LifecycleObserver;)Landroidx/lifecycle/Lifecycle$State;
HSPLandroidx/lifecycle/LifecycleRegistry;->enforceMainThreadIfNeeded(Ljava/lang/String;)V
HSPLandroidx/lifecycle/LifecycleRegistry;->forwardPass(Landroidx/lifecycle/LifecycleOwner;)V
@@ -6436,50 +8464,47 @@
HSPLandroidx/lifecycle/LifecycleRegistry;->sync()V
HSPLandroidx/lifecycle/Lifecycling;-><clinit>()V
HSPLandroidx/lifecycle/Lifecycling;->lifecycleEventObserver(Ljava/lang/Object;)Landroidx/lifecycle/LifecycleEventObserver;
-HSPLandroidx/lifecycle/LiveData$1;-><init>(Landroidx/lifecycle/LiveData;)V
-HSPLandroidx/lifecycle/LiveData$LifecycleBoundObserver;-><init>(Landroidx/lifecycle/LiveData;Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Observer;)V
-HSPLandroidx/lifecycle/LiveData$LifecycleBoundObserver;->isAttachedTo(Landroidx/lifecycle/LifecycleOwner;)Z
-HSPLandroidx/lifecycle/LiveData$LifecycleBoundObserver;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
-HSPLandroidx/lifecycle/LiveData$LifecycleBoundObserver;->shouldBeActive()Z
-HSPLandroidx/lifecycle/LiveData$ObserverWrapper;-><init>(Landroidx/lifecycle/LiveData;Landroidx/lifecycle/Observer;)V
-HSPLandroidx/lifecycle/LiveData$ObserverWrapper;->activeStateChanged(Z)V
-HSPLandroidx/lifecycle/LiveData;-><clinit>()V
-HSPLandroidx/lifecycle/LiveData;-><init>()V
-HSPLandroidx/lifecycle/LiveData;->assertMainThread(Ljava/lang/String;)V
-HSPLandroidx/lifecycle/LiveData;->changeActiveCounter(I)V
-HSPLandroidx/lifecycle/LiveData;->considerNotify(Landroidx/lifecycle/LiveData$ObserverWrapper;)V
-HSPLandroidx/lifecycle/LiveData;->dispatchingValue(Landroidx/lifecycle/LiveData$ObserverWrapper;)V
-HSPLandroidx/lifecycle/LiveData;->observe(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Observer;)V
-HSPLandroidx/lifecycle/LiveData;->onActive()V
-HSPLandroidx/lifecycle/MutableLiveData;-><init>()V
HSPLandroidx/lifecycle/ProcessLifecycleInitializer;-><init>()V
HSPLandroidx/lifecycle/ProcessLifecycleInitializer;->create(Landroid/content/Context;)Landroidx/lifecycle/LifecycleOwner;
HSPLandroidx/lifecycle/ProcessLifecycleInitializer;->create(Landroid/content/Context;)Ljava/lang/Object;
HSPLandroidx/lifecycle/ProcessLifecycleInitializer;->dependencies()Ljava/util/List;
HSPLandroidx/lifecycle/ProcessLifecycleOwner$1;-><init>(Landroidx/lifecycle/ProcessLifecycleOwner;)V
+HSPLandroidx/lifecycle/ProcessLifecycleOwner$1;->run()V
HSPLandroidx/lifecycle/ProcessLifecycleOwner$2;-><init>(Landroidx/lifecycle/ProcessLifecycleOwner;)V
HSPLandroidx/lifecycle/ProcessLifecycleOwner$3$1;-><init>(Landroidx/lifecycle/ProcessLifecycleOwner$3;)V
HSPLandroidx/lifecycle/ProcessLifecycleOwner$3$1;->onActivityPostResumed(Landroid/app/Activity;)V
HSPLandroidx/lifecycle/ProcessLifecycleOwner$3$1;->onActivityPostStarted(Landroid/app/Activity;)V
HSPLandroidx/lifecycle/ProcessLifecycleOwner$3;-><init>(Landroidx/lifecycle/ProcessLifecycleOwner;)V
HSPLandroidx/lifecycle/ProcessLifecycleOwner$3;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V
+HSPLandroidx/lifecycle/ProcessLifecycleOwner$3;->onActivityPaused(Landroid/app/Activity;)V
HSPLandroidx/lifecycle/ProcessLifecycleOwner$3;->onActivityPreCreated(Landroid/app/Activity;Landroid/os/Bundle;)V
+HSPLandroidx/lifecycle/ProcessLifecycleOwner$3;->onActivityStopped(Landroid/app/Activity;)V
HSPLandroidx/lifecycle/ProcessLifecycleOwner$Api29Impl;->registerActivityLifecycleCallbacks(Landroid/app/Activity;Landroid/app/Application$ActivityLifecycleCallbacks;)V
HSPLandroidx/lifecycle/ProcessLifecycleOwner;-><clinit>()V
HSPLandroidx/lifecycle/ProcessLifecycleOwner;-><init>()V
+HSPLandroidx/lifecycle/ProcessLifecycleOwner;->activityPaused()V
HSPLandroidx/lifecycle/ProcessLifecycleOwner;->activityResumed()V
HSPLandroidx/lifecycle/ProcessLifecycleOwner;->activityStarted()V
+HSPLandroidx/lifecycle/ProcessLifecycleOwner;->activityStopped()V
HSPLandroidx/lifecycle/ProcessLifecycleOwner;->attach(Landroid/content/Context;)V
+HSPLandroidx/lifecycle/ProcessLifecycleOwner;->dispatchPauseIfNeeded()V
+HSPLandroidx/lifecycle/ProcessLifecycleOwner;->dispatchStopIfNeeded()V
HSPLandroidx/lifecycle/ProcessLifecycleOwner;->get()Landroidx/lifecycle/LifecycleOwner;
HSPLandroidx/lifecycle/ProcessLifecycleOwner;->getLifecycle()Landroidx/lifecycle/Lifecycle;
HSPLandroidx/lifecycle/ProcessLifecycleOwner;->init(Landroid/content/Context;)V
HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;-><init>()V
HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V
+HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityDestroyed(Landroid/app/Activity;)V
+HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPaused(Landroid/app/Activity;)V
HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPostCreated(Landroid/app/Activity;Landroid/os/Bundle;)V
HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPostResumed(Landroid/app/Activity;)V
HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPostStarted(Landroid/app/Activity;)V
+HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPreDestroyed(Landroid/app/Activity;)V
+HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPrePaused(Landroid/app/Activity;)V
+HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPreStopped(Landroid/app/Activity;)V
HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityResumed(Landroid/app/Activity;)V
HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityStarted(Landroid/app/Activity;)V
+HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityStopped(Landroid/app/Activity;)V
HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->registerIn(Landroid/app/Activity;)V
HSPLandroidx/lifecycle/ReportFragment;-><init>()V
HSPLandroidx/lifecycle/ReportFragment;->dispatch(Landroid/app/Activity;Landroidx/lifecycle/Lifecycle$Event;)V
@@ -6489,8 +8514,11 @@
HSPLandroidx/lifecycle/ReportFragment;->dispatchStart(Landroidx/lifecycle/ReportFragment$ActivityInitializationListener;)V
HSPLandroidx/lifecycle/ReportFragment;->injectIfNeededIn(Landroid/app/Activity;)V
HSPLandroidx/lifecycle/ReportFragment;->onActivityCreated(Landroid/os/Bundle;)V
+HSPLandroidx/lifecycle/ReportFragment;->onDestroy()V
+HSPLandroidx/lifecycle/ReportFragment;->onPause()V
HSPLandroidx/lifecycle/ReportFragment;->onResume()V
HSPLandroidx/lifecycle/ReportFragment;->onStart()V
+HSPLandroidx/lifecycle/ReportFragment;->onStop()V
HSPLandroidx/lifecycle/SavedStateHandleAttacher;-><init>(Landroidx/lifecycle/SavedStateHandlesProvider;)V
HSPLandroidx/lifecycle/SavedStateHandleAttacher;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
HSPLandroidx/lifecycle/SavedStateHandleSupport$DEFAULT_ARGS_KEY$1;-><init>()V
@@ -6510,27 +8538,14 @@
HSPLandroidx/lifecycle/SavedStateHandlesProvider;->getViewModel()Landroidx/lifecycle/SavedStateHandlesVM;
HSPLandroidx/lifecycle/SavedStateHandlesProvider;->performRestore()V
HSPLandroidx/lifecycle/SavedStateHandlesVM;-><init>()V
-HSPLandroidx/lifecycle/SavedStateViewModelFactory;-><init>(Landroid/app/Application;Landroidx/savedstate/SavedStateRegistryOwner;Landroid/os/Bundle;)V
-HSPLandroidx/lifecycle/SavedStateViewModelFactory;->create(Ljava/lang/Class;Landroidx/lifecycle/viewmodel/CreationExtras;)Landroidx/lifecycle/ViewModel;
-HSPLandroidx/lifecycle/SavedStateViewModelFactory;->onRequery(Landroidx/lifecycle/ViewModel;)V
-HSPLandroidx/lifecycle/SavedStateViewModelFactoryKt;-><clinit>()V
-HSPLandroidx/lifecycle/SavedStateViewModelFactoryKt;->access$getVIEWMODEL_SIGNATURE$p()Ljava/util/List;
-HSPLandroidx/lifecycle/SavedStateViewModelFactoryKt;->findMatchingConstructor(Ljava/lang/Class;Ljava/util/List;)Ljava/lang/reflect/Constructor;
HSPLandroidx/lifecycle/ViewModel;-><init>()V
-HSPLandroidx/lifecycle/ViewModel;->getTag(Ljava/lang/String;)Ljava/lang/Object;
+HSPLandroidx/lifecycle/ViewModel;->clear()V
+HSPLandroidx/lifecycle/ViewModel;->onCleared()V
HSPLandroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory$Companion$ApplicationKeyImpl;-><clinit>()V
HSPLandroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory$Companion$ApplicationKeyImpl;-><init>()V
HSPLandroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory$Companion;-><init>()V
HSPLandroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory$Companion;->getInstance(Landroid/app/Application;)Landroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory;
HSPLandroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory;-><clinit>()V
-HSPLandroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory;-><init>(Landroid/app/Application;)V
-HSPLandroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory;-><init>(Landroid/app/Application;I)V
-HSPLandroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory;->access$getSInstance$cp()Landroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory;
-HSPLandroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory;->access$setSInstance$cp(Landroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory;)V
-HSPLandroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory;->create(Ljava/lang/Class;)Landroidx/lifecycle/ViewModel;
-HSPLandroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory;->create(Ljava/lang/Class;Landroid/app/Application;)Landroidx/lifecycle/ViewModel;
-HSPLandroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory;->create(Ljava/lang/Class;Landroidx/lifecycle/viewmodel/CreationExtras;)Landroidx/lifecycle/ViewModel;
HSPLandroidx/lifecycle/ViewModelProvider$Factory$Companion;-><clinit>()V
HSPLandroidx/lifecycle/ViewModelProvider$Factory$Companion;-><init>()V
HSPLandroidx/lifecycle/ViewModelProvider$Factory;-><clinit>()V
@@ -6539,15 +8554,13 @@
HSPLandroidx/lifecycle/ViewModelProvider$NewInstanceFactory$Companion;-><init>()V
HSPLandroidx/lifecycle/ViewModelProvider$NewInstanceFactory$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/lifecycle/ViewModelProvider$NewInstanceFactory;-><clinit>()V
-HSPLandroidx/lifecycle/ViewModelProvider$NewInstanceFactory;-><init>()V
-HSPLandroidx/lifecycle/ViewModelProvider$NewInstanceFactory;->create(Ljava/lang/Class;)Landroidx/lifecycle/ViewModel;
-HSPLandroidx/lifecycle/ViewModelProvider$OnRequeryFactory;-><init>()V
HSPLandroidx/lifecycle/ViewModelProvider;-><init>(Landroidx/lifecycle/ViewModelStore;Landroidx/lifecycle/ViewModelProvider$Factory;Landroidx/lifecycle/viewmodel/CreationExtras;)V
HSPLandroidx/lifecycle/ViewModelProvider;-><init>(Landroidx/lifecycle/ViewModelStoreOwner;Landroidx/lifecycle/ViewModelProvider$Factory;)V
HSPLandroidx/lifecycle/ViewModelProvider;->get(Ljava/lang/Class;)Landroidx/lifecycle/ViewModel;
HSPLandroidx/lifecycle/ViewModelProvider;->get(Ljava/lang/String;Ljava/lang/Class;)Landroidx/lifecycle/ViewModel;
HSPLandroidx/lifecycle/ViewModelProviderGetKt;->defaultCreationExtras(Landroidx/lifecycle/ViewModelStoreOwner;)Landroidx/lifecycle/viewmodel/CreationExtras;
HSPLandroidx/lifecycle/ViewModelStore;-><init>()V
+HSPLandroidx/lifecycle/ViewModelStore;->clear()V
HSPLandroidx/lifecycle/ViewModelStore;->get(Ljava/lang/String;)Landroidx/lifecycle/ViewModel;
HSPLandroidx/lifecycle/ViewModelStore;->put(Ljava/lang/String;Landroidx/lifecycle/ViewModel;)V
HSPLandroidx/lifecycle/ViewTreeLifecycleOwner;->get(Landroid/view/View;)Landroidx/lifecycle/LifecycleOwner;
@@ -6566,7 +8579,6 @@
HSPLandroidx/lifecycle/viewmodel/MutableCreationExtras;-><init>()V
HSPLandroidx/lifecycle/viewmodel/MutableCreationExtras;-><init>(Landroidx/lifecycle/viewmodel/CreationExtras;)V
HSPLandroidx/lifecycle/viewmodel/MutableCreationExtras;-><init>(Landroidx/lifecycle/viewmodel/CreationExtras;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/lifecycle/viewmodel/MutableCreationExtras;->get(Landroidx/lifecycle/viewmodel/CreationExtras$Key;)Ljava/lang/Object;
HSPLandroidx/lifecycle/viewmodel/MutableCreationExtras;->set(Landroidx/lifecycle/viewmodel/CreationExtras$Key;Ljava/lang/Object;)V
HSPLandroidx/lifecycle/viewmodel/ViewModelInitializer;-><init>(Ljava/lang/Class;Lkotlin/jvm/functions/Function1;)V
HSPLandroidx/lifecycle/viewmodel/ViewModelInitializer;->getClazz$lifecycle_viewmodel_release()Ljava/lang/Class;
@@ -6616,6 +8628,7 @@
HSPLandroidx/savedstate/SavedStateRegistry;->performAttach$savedstate_release(Landroidx/lifecycle/Lifecycle;)V
HSPLandroidx/savedstate/SavedStateRegistry;->performRestore$savedstate_release(Landroid/os/Bundle;)V
HSPLandroidx/savedstate/SavedStateRegistry;->registerSavedStateProvider(Ljava/lang/String;Landroidx/savedstate/SavedStateRegistry$SavedStateProvider;)V
+HSPLandroidx/savedstate/SavedStateRegistry;->unregisterSavedStateProvider(Ljava/lang/String;)V
HSPLandroidx/savedstate/SavedStateRegistryController$Companion;-><init>()V
HSPLandroidx/savedstate/SavedStateRegistryController$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/savedstate/SavedStateRegistryController$Companion;->create(Landroidx/savedstate/SavedStateRegistryOwner;)Landroidx/savedstate/SavedStateRegistryController;
@@ -6653,83 +8666,137 @@
HSPLandroidx/tracing/TraceApi18Impl;->beginSection(Ljava/lang/String;)V
HSPLandroidx/tracing/TraceApi18Impl;->endSection()V
HSPLandroidx/tracing/TraceApi29Impl;->isEnabled()Z
-HSPLcom/android/credentialmanager/CreateFlowUtils$Companion$toCreateCredentialUiState$$inlined$compareByDescending$1;-><init>()V
-HSPLcom/android/credentialmanager/CreateFlowUtils$Companion$toCreateCredentialUiState$$inlined$compareByDescending$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
-HSPLcom/android/credentialmanager/CreateFlowUtils$Companion;-><init>()V
-HSPLcom/android/credentialmanager/CreateFlowUtils$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLcom/android/credentialmanager/CreateFlowUtils$Companion;->toActiveEntry(Lcom/android/credentialmanager/createflow/EnabledProviderInfo;ILcom/android/credentialmanager/createflow/EnabledProviderInfo;Lcom/android/credentialmanager/createflow/RemoteInfo;)Lcom/android/credentialmanager/createflow/ActiveEntry;
-HSPLcom/android/credentialmanager/CreateFlowUtils$Companion;->toCreateCredentialUiState(Ljava/util/List;Ljava/util/List;Ljava/lang/String;Lcom/android/credentialmanager/createflow/RequestDisplayInfo;ZZ)Lcom/android/credentialmanager/createflow/CreateCredentialUiState;
-HSPLcom/android/credentialmanager/CreateFlowUtils$Companion;->toCreateScreenState(IZLcom/android/credentialmanager/createflow/RequestDisplayInfo;Lcom/android/credentialmanager/createflow/EnabledProviderInfo;Lcom/android/credentialmanager/createflow/RemoteInfo;Z)Lcom/android/credentialmanager/createflow/CreateScreenState;
-HSPLcom/android/credentialmanager/CreateFlowUtils$Companion;->toCreationOptionInfoList(Ljava/lang/String;Ljava/util/List;Landroid/content/Context;)Ljava/util/List;
-HSPLcom/android/credentialmanager/CreateFlowUtils$Companion;->toDisabledProviderList(Ljava/util/List;Landroid/content/Context;)Ljava/util/List;
-HSPLcom/android/credentialmanager/CreateFlowUtils$Companion;->toEnabledProviderList(Ljava/util/List;Landroid/content/Context;)Ljava/util/List;
-HSPLcom/android/credentialmanager/CreateFlowUtils$Companion;->toRemoteInfo(Ljava/lang/String;Landroid/credentials/ui/Entry;)Lcom/android/credentialmanager/createflow/RemoteInfo;
-HSPLcom/android/credentialmanager/CreateFlowUtils$Companion;->toRequestDisplayInfo(Landroid/credentials/ui/RequestInfo;Landroid/content/Context;)Lcom/android/credentialmanager/createflow/RequestDisplayInfo;
-HSPLcom/android/credentialmanager/CreateFlowUtils;-><clinit>()V
+HSPLcom/android/compose/AndroidSystemUiController;-><init>(Landroid/view/View;Landroid/view/Window;)V
+HSPLcom/android/compose/AndroidSystemUiController;->setNavigationBarColor-Iv8Zu3U(JZZLkotlin/jvm/functions/Function1;)V
+HSPLcom/android/compose/AndroidSystemUiController;->setNavigationBarContrastEnforced(Z)V
+HSPLcom/android/compose/AndroidSystemUiController;->setNavigationBarDarkContentEnabled(Z)V
+HSPLcom/android/compose/AndroidSystemUiController;->setStatusBarColor-ek8zF_U(JZLkotlin/jvm/functions/Function1;)V
+HSPLcom/android/compose/AndroidSystemUiController;->setStatusBarDarkContentEnabled(Z)V
+HSPLcom/android/compose/SystemUiController;->setNavigationBarColor-Iv8Zu3U$default(Lcom/android/compose/SystemUiController;JZZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)V
+HSPLcom/android/compose/SystemUiController;->setStatusBarColor-ek8zF_U$default(Lcom/android/compose/SystemUiController;JZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)V
+HSPLcom/android/compose/SystemUiController;->setSystemBarsColor-Iv8Zu3U$default(Lcom/android/compose/SystemUiController;JZZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)V
+HSPLcom/android/compose/SystemUiController;->setSystemBarsColor-Iv8Zu3U(JZZLkotlin/jvm/functions/Function1;)V
+HSPLcom/android/compose/SystemUiControllerKt$BlackScrimmed$1;-><clinit>()V
+HSPLcom/android/compose/SystemUiControllerKt$BlackScrimmed$1;-><init>()V
+HSPLcom/android/compose/SystemUiControllerKt;-><clinit>()V
+HSPLcom/android/compose/SystemUiControllerKt;->access$getBlackScrimmed$p()Lkotlin/jvm/functions/Function1;
+HSPLcom/android/compose/SystemUiControllerKt;->findWindow(Landroid/content/Context;)Landroid/view/Window;
+HSPLcom/android/compose/SystemUiControllerKt;->findWindow(Landroidx/compose/runtime/Composer;I)Landroid/view/Window;
+HSPLcom/android/compose/SystemUiControllerKt;->rememberSystemUiController(Landroid/view/Window;Landroidx/compose/runtime/Composer;II)Lcom/android/compose/SystemUiController;
HSPLcom/android/credentialmanager/CredentialManagerRepo$Companion;-><init>()V
HSPLcom/android/credentialmanager/CredentialManagerRepo$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLcom/android/credentialmanager/CredentialManagerRepo$Companion;->getInstance()Lcom/android/credentialmanager/CredentialManagerRepo;
-HSPLcom/android/credentialmanager/CredentialManagerRepo$Companion;->getRepo()Lcom/android/credentialmanager/CredentialManagerRepo;
-HSPLcom/android/credentialmanager/CredentialManagerRepo$Companion;->setRepo(Lcom/android/credentialmanager/CredentialManagerRepo;)V
-HSPLcom/android/credentialmanager/CredentialManagerRepo$Companion;->setup(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/credentialmanager/CredentialManagerRepo$Companion;->getCancelUiRequest(Landroid/content/Intent;)Landroid/credentials/ui/CancelUiRequest;
+HSPLcom/android/credentialmanager/CredentialManagerRepo$Companion;->sendCancellationCode(ILandroid/os/IBinder;Landroid/os/ResultReceiver;)V
HSPLcom/android/credentialmanager/CredentialManagerRepo;-><clinit>()V
-HSPLcom/android/credentialmanager/CredentialManagerRepo;-><init>(Landroid/content/Context;Landroid/content/Intent;)V
-HSPLcom/android/credentialmanager/CredentialManagerRepo;->getCreateProviderDisableListInitialUiState()Ljava/util/List;
-HSPLcom/android/credentialmanager/CredentialManagerRepo;->getCreateProviderEnableListInitialUiState()Ljava/util/List;
-HSPLcom/android/credentialmanager/CredentialManagerRepo;->getCreateRequestDisplayInfoInitialUiState()Lcom/android/credentialmanager/createflow/RequestDisplayInfo;
+HSPLcom/android/credentialmanager/CredentialManagerRepo;-><init>(Landroid/content/Context;Landroid/content/Intent;Lcom/android/credentialmanager/UserConfigRepo;Z)V
+HSPLcom/android/credentialmanager/CredentialManagerRepo;->getCredentialInitialUiState(Ljava/lang/String;)Lcom/android/credentialmanager/getflow/GetCredentialUiState;
HSPLcom/android/credentialmanager/CredentialManagerRepo;->getRequestInfo()Landroid/credentials/ui/RequestInfo;
-HSPLcom/android/credentialmanager/CredentialSelectorActivity$CredentialManagerBottomSheet$3;-><init>(Lcom/android/credentialmanager/CredentialSelectorActivity;Lcom/android/credentialmanager/common/DialogType;I)V
-HSPLcom/android/credentialmanager/CredentialSelectorActivity$CredentialManagerBottomSheet$launcher$1$1;-><init>(Landroidx/compose/runtime/MutableState;)V
-HSPLcom/android/credentialmanager/CredentialSelectorActivity$WhenMappings;-><clinit>()V
-HSPLcom/android/credentialmanager/CredentialSelectorActivity$onCancel$1;-><init>(Lcom/android/credentialmanager/CredentialSelectorActivity;)V
-HSPLcom/android/credentialmanager/CredentialSelectorActivity$onCreate$1$1;-><init>(Lcom/android/credentialmanager/CredentialSelectorActivity;Landroid/credentials/ui/RequestInfo;)V
+HSPLcom/android/credentialmanager/CredentialManagerRepo;->initState()Lcom/android/credentialmanager/UiState;
+HSPLcom/android/credentialmanager/CredentialManagerRepo;->onCancel(I)V
+HSPLcom/android/credentialmanager/CredentialManagerRepo;->onUserCancel()V
+HSPLcom/android/credentialmanager/CredentialSelectorActivity$Companion;-><init>()V
+HSPLcom/android/credentialmanager/CredentialSelectorActivity$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLcom/android/credentialmanager/CredentialSelectorActivity$CredentialManagerBottomSheet$1;-><init>(Lcom/android/credentialmanager/CredentialSelectorActivity;Lcom/android/credentialmanager/CredentialSelectorViewModel;Lkotlin/coroutines/Continuation;)V
+HSPLcom/android/credentialmanager/CredentialSelectorActivity$CredentialManagerBottomSheet$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLcom/android/credentialmanager/CredentialSelectorActivity$CredentialManagerBottomSheet$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/credentialmanager/CredentialSelectorActivity$CredentialManagerBottomSheet$3;-><init>(Lcom/android/credentialmanager/CredentialSelectorActivity;Lcom/android/credentialmanager/CredentialManagerRepo;Lcom/android/credentialmanager/UserConfigRepo;I)V
+HSPLcom/android/credentialmanager/CredentialSelectorActivity$CredentialManagerBottomSheet$3;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLcom/android/credentialmanager/CredentialSelectorActivity$CredentialManagerBottomSheet$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/credentialmanager/CredentialSelectorActivity$CredentialManagerBottomSheet$launcher$1;-><init>(Lcom/android/credentialmanager/CredentialSelectorViewModel;)V
+HSPLcom/android/credentialmanager/CredentialSelectorActivity$CredentialManagerBottomSheet$viewModel$1;-><init>(Lcom/android/credentialmanager/CredentialManagerRepo;Lcom/android/credentialmanager/UserConfigRepo;)V
+HSPLcom/android/credentialmanager/CredentialSelectorActivity$CredentialManagerBottomSheet$viewModel$1;->invoke(Landroidx/lifecycle/viewmodel/CreationExtras;)Lcom/android/credentialmanager/CredentialSelectorViewModel;
+HSPLcom/android/credentialmanager/CredentialSelectorActivity$CredentialManagerBottomSheet$viewModel$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/credentialmanager/CredentialSelectorActivity$onCreate$1$1;-><init>(Lcom/android/credentialmanager/CredentialSelectorActivity;Lcom/android/credentialmanager/CredentialManagerRepo;Lcom/android/credentialmanager/UserConfigRepo;)V
HSPLcom/android/credentialmanager/CredentialSelectorActivity$onCreate$1$1;->invoke(Landroidx/compose/runtime/Composer;I)V
HSPLcom/android/credentialmanager/CredentialSelectorActivity$onCreate$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/CredentialSelectorActivity$onCreate$1;-><init>(Lcom/android/credentialmanager/CredentialSelectorActivity;Landroid/credentials/ui/RequestInfo;)V
+HSPLcom/android/credentialmanager/CredentialSelectorActivity$onCreate$1;-><init>(Lcom/android/credentialmanager/CredentialSelectorActivity;Lcom/android/credentialmanager/CredentialManagerRepo;Lcom/android/credentialmanager/UserConfigRepo;)V
HSPLcom/android/credentialmanager/CredentialSelectorActivity$onCreate$1;->invoke(Landroidx/compose/runtime/Composer;I)V
HSPLcom/android/credentialmanager/CredentialSelectorActivity$onCreate$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/credentialmanager/CredentialSelectorActivity$onCreate$backPressedCallback$1;-><init>(Lcom/android/credentialmanager/CredentialManagerRepo;Lcom/android/credentialmanager/CredentialSelectorActivity;)V
HSPLcom/android/credentialmanager/CredentialSelectorActivity;-><clinit>()V
HSPLcom/android/credentialmanager/CredentialSelectorActivity;-><init>()V
-HSPLcom/android/credentialmanager/CredentialSelectorActivity;->CredentialManagerBottomSheet(Lcom/android/credentialmanager/common/DialogType;Landroidx/compose/runtime/Composer;I)V
+HSPLcom/android/credentialmanager/CredentialSelectorActivity;->CredentialManagerBottomSheet(Lcom/android/credentialmanager/CredentialManagerRepo;Lcom/android/credentialmanager/UserConfigRepo;Landroidx/compose/runtime/Composer;I)V
+HSPLcom/android/credentialmanager/CredentialSelectorActivity;->access$CredentialManagerBottomSheet(Lcom/android/credentialmanager/CredentialSelectorActivity;Lcom/android/credentialmanager/CredentialManagerRepo;Lcom/android/credentialmanager/UserConfigRepo;Landroidx/compose/runtime/Composer;I)V
+HSPLcom/android/credentialmanager/CredentialSelectorActivity;->access$handleDialogState(Lcom/android/credentialmanager/CredentialSelectorActivity;Lcom/android/credentialmanager/common/DialogState;)V
+HSPLcom/android/credentialmanager/CredentialSelectorActivity;->handleDialogState(Lcom/android/credentialmanager/common/DialogState;)V
+HSPLcom/android/credentialmanager/CredentialSelectorActivity;->maybeCancelUIUponRequest$default(Lcom/android/credentialmanager/CredentialSelectorActivity;Landroid/content/Intent;Lcom/android/credentialmanager/CredentialSelectorViewModel;ILjava/lang/Object;)Lkotlin/Triple;
+HSPLcom/android/credentialmanager/CredentialSelectorActivity;->maybeCancelUIUponRequest(Landroid/content/Intent;Lcom/android/credentialmanager/CredentialSelectorViewModel;)Lkotlin/Triple;
HSPLcom/android/credentialmanager/CredentialSelectorActivity;->onCreate(Landroid/os/Bundle;)V
+HSPLcom/android/credentialmanager/CredentialSelectorViewModel;-><clinit>()V
+HSPLcom/android/credentialmanager/CredentialSelectorViewModel;-><init>(Lcom/android/credentialmanager/CredentialManagerRepo;Lcom/android/credentialmanager/UserConfigRepo;)V
+HSPLcom/android/credentialmanager/CredentialSelectorViewModel;->getFlowOnBackToHybridSnackBarScreen()V
+HSPLcom/android/credentialmanager/CredentialSelectorViewModel;->getFlowOnMoreOptionOnSnackBarSelected(Z)V
+HSPLcom/android/credentialmanager/CredentialSelectorViewModel;->getUiMetrics()Lcom/android/credentialmanager/logging/UIMetrics;
+HSPLcom/android/credentialmanager/CredentialSelectorViewModel;->getUiState()Lcom/android/credentialmanager/UiState;
+HSPLcom/android/credentialmanager/CredentialSelectorViewModel;->logUiEvent(Lcom/android/internal/logging/UiEventLogger$UiEventEnum;Landroidx/compose/runtime/Composer;I)V
+HSPLcom/android/credentialmanager/CredentialSelectorViewModel;->onInitialRenderComplete()V
+HSPLcom/android/credentialmanager/CredentialSelectorViewModel;->onUserCancel()V
+HSPLcom/android/credentialmanager/CredentialSelectorViewModel;->setUiState(Lcom/android/credentialmanager/UiState;)V
+HSPLcom/android/credentialmanager/DataConverterKt;->access$getServiceLabelAndIcon(Landroid/content/pm/PackageManager;Ljava/lang/String;)Lkotlin/Pair;
+HSPLcom/android/credentialmanager/DataConverterKt;->getAppLabel(Landroid/content/pm/PackageManager;Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/credentialmanager/DataConverterKt;->getServiceLabelAndIcon(Landroid/content/pm/PackageManager;Ljava/lang/String;)Lkotlin/Pair;
+HSPLcom/android/credentialmanager/GetFlowUtils$Companion;-><init>()V
+HSPLcom/android/credentialmanager/GetFlowUtils$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLcom/android/credentialmanager/GetFlowUtils$Companion;->getActionEntryList(Ljava/lang/String;Ljava/util/List;Landroid/graphics/drawable/Drawable;)Ljava/util/List;
+HSPLcom/android/credentialmanager/GetFlowUtils$Companion;->getAuthenticationEntryList(Ljava/lang/String;Ljava/lang/String;Landroid/graphics/drawable/Drawable;Ljava/util/List;)Ljava/util/List;
+HSPLcom/android/credentialmanager/GetFlowUtils$Companion;->getCredentialOptionInfoList(Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Landroid/content/Context;)Ljava/util/List;
+HSPLcom/android/credentialmanager/GetFlowUtils$Companion;->getRemoteEntry(Ljava/lang/String;Landroid/credentials/ui/Entry;)Lcom/android/credentialmanager/getflow/RemoteEntryInfo;
+HSPLcom/android/credentialmanager/GetFlowUtils$Companion;->toProviderList(Ljava/util/List;Landroid/content/Context;)Ljava/util/List;
+HSPLcom/android/credentialmanager/GetFlowUtils$Companion;->toRequestDisplayInfo(Landroid/credentials/ui/RequestInfo;Landroid/content/Context;Ljava/lang/String;)Lcom/android/credentialmanager/getflow/RequestDisplayInfo;
+HSPLcom/android/credentialmanager/GetFlowUtils;-><clinit>()V
+HSPLcom/android/credentialmanager/UiState;-><clinit>()V
+HSPLcom/android/credentialmanager/UiState;-><init>(Lcom/android/credentialmanager/createflow/CreateCredentialUiState;Lcom/android/credentialmanager/getflow/GetCredentialUiState;Lcom/android/credentialmanager/common/BaseEntry;Lcom/android/credentialmanager/common/ProviderActivityState;Lcom/android/credentialmanager/common/DialogState;ZLcom/android/credentialmanager/CancelUiRequestState;Z)V
+HSPLcom/android/credentialmanager/UiState;-><init>(Lcom/android/credentialmanager/createflow/CreateCredentialUiState;Lcom/android/credentialmanager/getflow/GetCredentialUiState;Lcom/android/credentialmanager/common/BaseEntry;Lcom/android/credentialmanager/common/ProviderActivityState;Lcom/android/credentialmanager/common/DialogState;ZLcom/android/credentialmanager/CancelUiRequestState;ZILkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLcom/android/credentialmanager/UiState;->copy$default(Lcom/android/credentialmanager/UiState;Lcom/android/credentialmanager/createflow/CreateCredentialUiState;Lcom/android/credentialmanager/getflow/GetCredentialUiState;Lcom/android/credentialmanager/common/BaseEntry;Lcom/android/credentialmanager/common/ProviderActivityState;Lcom/android/credentialmanager/common/DialogState;ZLcom/android/credentialmanager/CancelUiRequestState;ZILjava/lang/Object;)Lcom/android/credentialmanager/UiState;
+HSPLcom/android/credentialmanager/UiState;->copy(Lcom/android/credentialmanager/createflow/CreateCredentialUiState;Lcom/android/credentialmanager/getflow/GetCredentialUiState;Lcom/android/credentialmanager/common/BaseEntry;Lcom/android/credentialmanager/common/ProviderActivityState;Lcom/android/credentialmanager/common/DialogState;ZLcom/android/credentialmanager/CancelUiRequestState;Z)Lcom/android/credentialmanager/UiState;
+HSPLcom/android/credentialmanager/UiState;->equals(Ljava/lang/Object;)Z
+HSPLcom/android/credentialmanager/UiState;->getCancelRequestState()Lcom/android/credentialmanager/CancelUiRequestState;
+HSPLcom/android/credentialmanager/UiState;->getCreateCredentialUiState()Lcom/android/credentialmanager/createflow/CreateCredentialUiState;
+HSPLcom/android/credentialmanager/UiState;->getDialogState()Lcom/android/credentialmanager/common/DialogState;
+HSPLcom/android/credentialmanager/UiState;->getGetCredentialUiState()Lcom/android/credentialmanager/getflow/GetCredentialUiState;
+HSPLcom/android/credentialmanager/UiState;->getProviderActivityState()Lcom/android/credentialmanager/common/ProviderActivityState;
+HSPLcom/android/credentialmanager/UiState;->isAutoSelectFlow()Z
+HSPLcom/android/credentialmanager/UiState;->isInitialRender()Z
HSPLcom/android/credentialmanager/UserConfigRepo$Companion;-><init>()V
HSPLcom/android/credentialmanager/UserConfigRepo$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLcom/android/credentialmanager/UserConfigRepo$Companion;->getInstance()Lcom/android/credentialmanager/UserConfigRepo;
-HSPLcom/android/credentialmanager/UserConfigRepo$Companion;->getRepo()Lcom/android/credentialmanager/UserConfigRepo;
-HSPLcom/android/credentialmanager/UserConfigRepo$Companion;->setRepo(Lcom/android/credentialmanager/UserConfigRepo;)V
-HSPLcom/android/credentialmanager/UserConfigRepo$Companion;->setup(Landroid/content/Context;)V
HSPLcom/android/credentialmanager/UserConfigRepo;-><clinit>()V
HSPLcom/android/credentialmanager/UserConfigRepo;-><init>(Landroid/content/Context;)V
-HSPLcom/android/credentialmanager/UserConfigRepo;->getDefaultProviderId()Ljava/lang/String;
-HSPLcom/android/credentialmanager/UserConfigRepo;->getIsPasskeyFirstUse()Z
-HSPLcom/android/credentialmanager/common/DialogType$Companion;-><init>()V
-HSPLcom/android/credentialmanager/common/DialogType$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLcom/android/credentialmanager/common/DialogType$Companion;->toDialogType(Ljava/lang/String;)Lcom/android/credentialmanager/common/DialogType;
-HSPLcom/android/credentialmanager/common/DialogType;->$values()[Lcom/android/credentialmanager/common/DialogType;
-HSPLcom/android/credentialmanager/common/DialogType;-><clinit>()V
-HSPLcom/android/credentialmanager/common/DialogType;-><init>(Ljava/lang/String;I)V
-HSPLcom/android/credentialmanager/common/DialogType;->values()[Lcom/android/credentialmanager/common/DialogType;
+HSPLcom/android/credentialmanager/common/BaseEntry;-><clinit>()V
+HSPLcom/android/credentialmanager/common/BaseEntry;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/app/PendingIntent;Landroid/content/Intent;Z)V
+HSPLcom/android/credentialmanager/common/DialogState;->$values()[Lcom/android/credentialmanager/common/DialogState;
+HSPLcom/android/credentialmanager/common/DialogState;-><clinit>()V
+HSPLcom/android/credentialmanager/common/DialogState;-><init>(Ljava/lang/String;I)V
+HSPLcom/android/credentialmanager/common/ProviderActivityState;->$values()[Lcom/android/credentialmanager/common/ProviderActivityState;
+HSPLcom/android/credentialmanager/common/ProviderActivityState;-><clinit>()V
+HSPLcom/android/credentialmanager/common/ProviderActivityState;-><init>(Ljava/lang/String;I)V
+HSPLcom/android/credentialmanager/common/ProviderActivityState;->values()[Lcom/android/credentialmanager/common/ProviderActivityState;
+HSPLcom/android/credentialmanager/common/StartBalIntentSenderForResultContract;-><clinit>()V
+HSPLcom/android/credentialmanager/common/StartBalIntentSenderForResultContract;-><init>()V
HSPLcom/android/credentialmanager/common/material/ModalBottomSheetDefaults;-><clinit>()V
HSPLcom/android/credentialmanager/common/material/ModalBottomSheetDefaults;-><init>()V
HSPLcom/android/credentialmanager/common/material/ModalBottomSheetDefaults;->getElevation-D9Ej5fM()F
+HSPLcom/android/credentialmanager/common/material/ModalBottomSheetDefaults;->getMaxCompactWidth-D9Ej5fM()F
+HSPLcom/android/credentialmanager/common/material/ModalBottomSheetDefaults;->getMaxSheetWidth-D9Ej5fM()F
+HSPLcom/android/credentialmanager/common/material/ModalBottomSheetDefaults;->getMinScrimHeight-D9Ej5fM()F
+HSPLcom/android/credentialmanager/common/material/ModalBottomSheetDefaults;->getScrimColor(Landroidx/compose/runtime/Composer;I)J
HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$1$1;-><init>(Lcom/android/credentialmanager/common/material/ModalBottomSheetState;Lkotlinx/coroutines/CoroutineScope;)V
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$2$1;-><init>(Lcom/android/credentialmanager/common/material/ModalBottomSheetState;F)V
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$2$1;->invoke-Bjo55l4(Landroidx/compose/ui/unit/Density;)J
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$3$1;-><init>(Landroidx/compose/runtime/MutableState;)V
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$3$1;->invoke(Landroidx/compose/ui/layout/LayoutCoordinates;)V
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$3$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$4$1;-><init>(Lcom/android/credentialmanager/common/material/ModalBottomSheetState;Lkotlinx/coroutines/CoroutineScope;)V
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$4;-><init>(Lcom/android/credentialmanager/common/material/ModalBottomSheetState;Lkotlinx/coroutines/CoroutineScope;)V
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$4;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$4;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$5;-><init>(Lkotlin/jvm/functions/Function3;I)V
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$5;->invoke(Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1;-><init>(Lcom/android/credentialmanager/common/material/ModalBottomSheetState;ILandroidx/compose/ui/graphics/Shape;JJFLkotlin/jvm/functions/Function2;JLkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function3;)V
+HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$2$1$1;-><init>(Lcom/android/credentialmanager/common/material/ModalBottomSheetState;F)V
+HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$2$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$2$1$1;->invoke-Bjo55l4(Landroidx/compose/ui/unit/Density;)J
+HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$2$2$1;-><init>(Landroidx/compose/runtime/MutableState;)V
+HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$2$2$1;->invoke(Landroidx/compose/ui/layout/LayoutCoordinates;)V
+HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$2$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$2$3$1;-><init>(Lcom/android/credentialmanager/common/material/ModalBottomSheetState;Lkotlinx/coroutines/CoroutineScope;)V
+HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$2$3;-><init>(Lcom/android/credentialmanager/common/material/ModalBottomSheetState;Lkotlinx/coroutines/CoroutineScope;)V
+HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$2$3;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V
+HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$2$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$2$4;-><init>(Lkotlin/jvm/functions/Function3;I)V
+HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$2$4;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$2$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1;-><init>(Lkotlin/jvm/functions/Function2;ILcom/android/credentialmanager/common/material/ModalBottomSheetState;Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/ui/graphics/Shape;JJFLkotlin/jvm/functions/Function3;)V
HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1;->invoke(Landroidx/compose/foundation/layout/BoxWithConstraintsScope;Landroidx/compose/runtime/Composer;I)V
HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$2;-><init>(Lkotlin/jvm/functions/Function3;Landroidx/compose/ui/Modifier;Lcom/android/credentialmanager/common/material/ModalBottomSheetState;Landroidx/compose/ui/graphics/Shape;FJJJLkotlin/jvm/functions/Function2;II)V
+HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$2;-><init>(Lkotlin/jvm/functions/Function3;Landroidx/compose/ui/Modifier;Lcom/android/credentialmanager/common/material/ModalBottomSheetState;Landroidx/compose/ui/graphics/Shape;FJJLkotlin/jvm/functions/Function2;II)V
HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$Scrim$1$1;-><init>(JLandroidx/compose/runtime/State;)V
HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$Scrim$1$1;->invoke(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V
HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$Scrim$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
@@ -6749,10 +8816,9 @@
HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$rememberModalBottomSheetState$2;-><init>(Lcom/android/credentialmanager/common/material/ModalBottomSheetValue;Landroidx/compose/animation/core/AnimationSpec;ZLkotlin/jvm/functions/Function1;)V
HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$rememberModalBottomSheetState$2;->invoke()Lcom/android/credentialmanager/common/material/ModalBottomSheetState;
HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$rememberModalBottomSheetState$2;->invoke()Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt;->ModalBottomSheetLayout-BzaUkTc(Lkotlin/jvm/functions/Function3;Landroidx/compose/ui/Modifier;Lcom/android/credentialmanager/common/material/ModalBottomSheetState;Landroidx/compose/ui/graphics/Shape;FJJJLkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
+HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt;->ModalBottomSheetLayout-XBZIF-8(Lkotlin/jvm/functions/Function3;Landroidx/compose/ui/Modifier;Lcom/android/credentialmanager/common/material/ModalBottomSheetState;Landroidx/compose/ui/graphics/Shape;FJJLkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt;->Scrim-3J-VO9M(JLkotlin/jvm/functions/Function0;ZLandroidx/compose/runtime/Composer;I)V
HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt;->Scrim_3J_VO9M$lambda$0(Landroidx/compose/runtime/State;)F
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt;->access$Scrim-3J-VO9M(JLkotlin/jvm/functions/Function0;ZLandroidx/compose/runtime/Composer;I)V
HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt;->access$Scrim_3J_VO9M$lambda$0(Landroidx/compose/runtime/State;)F
HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt;->access$bottomSheetSwipeable(Landroidx/compose/ui/Modifier;Lcom/android/credentialmanager/common/material/ModalBottomSheetState;FLandroidx/compose/runtime/State;)Landroidx/compose/ui/Modifier;
HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt;->bottomSheetSwipeable(Landroidx/compose/ui/Modifier;Lcom/android/credentialmanager/common/material/ModalBottomSheetState;FLandroidx/compose/runtime/State;)Landroidx/compose/ui/Modifier;
@@ -6769,14 +8835,15 @@
HSPLcom/android/credentialmanager/common/material/ModalBottomSheetState;-><init>(Lcom/android/credentialmanager/common/material/ModalBottomSheetValue;Landroidx/compose/animation/core/AnimationSpec;ZLkotlin/jvm/functions/Function1;)V
HSPLcom/android/credentialmanager/common/material/ModalBottomSheetState;->getHasHalfExpandedState$frameworks__base__packages__CredentialManager__android_common__CredentialManager()Z
HSPLcom/android/credentialmanager/common/material/ModalBottomSheetState;->getNestedScrollConnection$frameworks__base__packages__CredentialManager__android_common__CredentialManager()Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection;
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetState;->isSkipHalfExpanded$frameworks__base__packages__CredentialManager__android_common__CredentialManager()Z
HSPLcom/android/credentialmanager/common/material/ModalBottomSheetState;->isVisible()Z
+HSPLcom/android/credentialmanager/common/material/ModalBottomSheetState;->show(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
HSPLcom/android/credentialmanager/common/material/ModalBottomSheetValue;->$values()[Lcom/android/credentialmanager/common/material/ModalBottomSheetValue;
HSPLcom/android/credentialmanager/common/material/ModalBottomSheetValue;-><clinit>()V
HSPLcom/android/credentialmanager/common/material/ModalBottomSheetValue;-><init>(Ljava/lang/String;I)V
HSPLcom/android/credentialmanager/common/material/SwipeableDefaults;-><clinit>()V
HSPLcom/android/credentialmanager/common/material/SwipeableDefaults;-><init>()V
HSPLcom/android/credentialmanager/common/material/SwipeableDefaults;->getAnimationSpec()Landroidx/compose/animation/core/SpringSpec;
+HSPLcom/android/credentialmanager/common/material/SwipeableDefaults;->getDefaultDurationMillis()I
HSPLcom/android/credentialmanager/common/material/SwipeableDefaults;->getVelocityThreshold-D9Ej5fM()F
HSPLcom/android/credentialmanager/common/material/SwipeableKt$PreUpPostDownNestedScrollConnection$1;-><init>(Lcom/android/credentialmanager/common/material/SwipeableState;)V
HSPLcom/android/credentialmanager/common/material/SwipeableKt$swipeable$1;-><clinit>()V
@@ -6799,24 +8866,51 @@
HSPLcom/android/credentialmanager/common/material/SwipeableKt;->swipeable-pPrIpRY(Landroidx/compose/ui/Modifier;Lcom/android/credentialmanager/common/material/SwipeableState;Ljava/util/Map;Landroidx/compose/foundation/gestures/Orientation;ZZLandroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function2;Lcom/android/credentialmanager/common/material/ResistanceConfig;F)Landroidx/compose/ui/Modifier;
HSPLcom/android/credentialmanager/common/material/SwipeableState$Companion;-><init>()V
HSPLcom/android/credentialmanager/common/material/SwipeableState$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLcom/android/credentialmanager/common/material/SwipeableState$animateInternalToOffset$2$1;-><init>(Landroidx/compose/foundation/gestures/DragScope;Lkotlin/jvm/internal/Ref$FloatRef;)V
+HSPLcom/android/credentialmanager/common/material/SwipeableState$animateInternalToOffset$2$1;->invoke(Landroidx/compose/animation/core/Animatable;)V
+HSPLcom/android/credentialmanager/common/material/SwipeableState$animateInternalToOffset$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/credentialmanager/common/material/SwipeableState$animateInternalToOffset$2;-><init>(Lcom/android/credentialmanager/common/material/SwipeableState;FLandroidx/compose/animation/core/AnimationSpec;Lkotlin/coroutines/Continuation;)V
+HSPLcom/android/credentialmanager/common/material/SwipeableState$animateInternalToOffset$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLcom/android/credentialmanager/common/material/SwipeableState$animateInternalToOffset$2;->invoke(Landroidx/compose/foundation/gestures/DragScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLcom/android/credentialmanager/common/material/SwipeableState$animateInternalToOffset$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/credentialmanager/common/material/SwipeableState$animateInternalToOffset$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/credentialmanager/common/material/SwipeableState$animateTo$2$emit$1;-><init>(Lcom/android/credentialmanager/common/material/SwipeableState$animateTo$2;Lkotlin/coroutines/Continuation;)V
+HSPLcom/android/credentialmanager/common/material/SwipeableState$animateTo$2$emit$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/credentialmanager/common/material/SwipeableState$animateTo$2;-><init>(Ljava/lang/Object;Lcom/android/credentialmanager/common/material/SwipeableState;Landroidx/compose/animation/core/AnimationSpec;)V
+HSPLcom/android/credentialmanager/common/material/SwipeableState$animateTo$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLcom/android/credentialmanager/common/material/SwipeableState$animateTo$2;->emit(Ljava/util/Map;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
HSPLcom/android/credentialmanager/common/material/SwipeableState$draggableState$1;-><init>(Lcom/android/credentialmanager/common/material/SwipeableState;)V
HSPLcom/android/credentialmanager/common/material/SwipeableState$draggableState$1;->invoke(F)V
HSPLcom/android/credentialmanager/common/material/SwipeableState$draggableState$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
HSPLcom/android/credentialmanager/common/material/SwipeableState$latestNonEmptyAnchorsFlow$1;-><init>(Lcom/android/credentialmanager/common/material/SwipeableState;)V
+HSPLcom/android/credentialmanager/common/material/SwipeableState$latestNonEmptyAnchorsFlow$1;->invoke()Ljava/lang/Object;
+HSPLcom/android/credentialmanager/common/material/SwipeableState$latestNonEmptyAnchorsFlow$1;->invoke()Ljava/util/Map;
HSPLcom/android/credentialmanager/common/material/SwipeableState$processNewAnchors$1;-><init>(Lcom/android/credentialmanager/common/material/SwipeableState;Lkotlin/coroutines/Continuation;)V
HSPLcom/android/credentialmanager/common/material/SwipeableState$snapInternalToOffset$2;-><init>(FLcom/android/credentialmanager/common/material/SwipeableState;Lkotlin/coroutines/Continuation;)V
HSPLcom/android/credentialmanager/common/material/SwipeableState$snapInternalToOffset$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
HSPLcom/android/credentialmanager/common/material/SwipeableState$snapInternalToOffset$2;->invoke(Landroidx/compose/foundation/gestures/DragScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
HSPLcom/android/credentialmanager/common/material/SwipeableState$snapInternalToOffset$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
HSPLcom/android/credentialmanager/common/material/SwipeableState$snapInternalToOffset$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/credentialmanager/common/material/SwipeableState$special$$inlined$filter$1$2$1;-><init>(Lcom/android/credentialmanager/common/material/SwipeableState$special$$inlined$filter$1$2;Lkotlin/coroutines/Continuation;)V
+HSPLcom/android/credentialmanager/common/material/SwipeableState$special$$inlined$filter$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/credentialmanager/common/material/SwipeableState$special$$inlined$filter$1$2;-><init>(Lkotlinx/coroutines/flow/FlowCollector;)V
+HSPLcom/android/credentialmanager/common/material/SwipeableState$special$$inlined$filter$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
HSPLcom/android/credentialmanager/common/material/SwipeableState$special$$inlined$filter$1;-><init>(Lkotlinx/coroutines/flow/Flow;)V
+HSPLcom/android/credentialmanager/common/material/SwipeableState$special$$inlined$filter$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
HSPLcom/android/credentialmanager/common/material/SwipeableState$thresholds$2;-><clinit>()V
HSPLcom/android/credentialmanager/common/material/SwipeableState$thresholds$2;-><init>()V
HSPLcom/android/credentialmanager/common/material/SwipeableState;-><clinit>()V
HSPLcom/android/credentialmanager/common/material/SwipeableState;-><init>(Ljava/lang/Object;Landroidx/compose/animation/core/AnimationSpec;Lkotlin/jvm/functions/Function1;)V
+HSPLcom/android/credentialmanager/common/material/SwipeableState;->access$animateInternalToOffset(Lcom/android/credentialmanager/common/material/SwipeableState;FLandroidx/compose/animation/core/AnimationSpec;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
HSPLcom/android/credentialmanager/common/material/SwipeableState;->access$getAbsoluteOffset$p(Lcom/android/credentialmanager/common/material/SwipeableState;)Landroidx/compose/runtime/MutableState;
+HSPLcom/android/credentialmanager/common/material/SwipeableState;->access$getAnimationTarget$p(Lcom/android/credentialmanager/common/material/SwipeableState;)Landroidx/compose/runtime/MutableState;
HSPLcom/android/credentialmanager/common/material/SwipeableState;->access$getOffsetState$p(Lcom/android/credentialmanager/common/material/SwipeableState;)Landroidx/compose/runtime/MutableState;
HSPLcom/android/credentialmanager/common/material/SwipeableState;->access$getOverflowState$p(Lcom/android/credentialmanager/common/material/SwipeableState;)Landroidx/compose/runtime/MutableState;
+HSPLcom/android/credentialmanager/common/material/SwipeableState;->access$setAnimationRunning(Lcom/android/credentialmanager/common/material/SwipeableState;Z)V
+HSPLcom/android/credentialmanager/common/material/SwipeableState;->access$setCurrentValue(Lcom/android/credentialmanager/common/material/SwipeableState;Ljava/lang/Object;)V
+HSPLcom/android/credentialmanager/common/material/SwipeableState;->animateInternalToOffset(FLandroidx/compose/animation/core/AnimationSpec;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLcom/android/credentialmanager/common/material/SwipeableState;->animateTo$default(Lcom/android/credentialmanager/common/material/SwipeableState;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationSpec;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/credentialmanager/common/material/SwipeableState;->animateTo(Ljava/lang/Object;Landroidx/compose/animation/core/AnimationSpec;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
HSPLcom/android/credentialmanager/common/material/SwipeableState;->ensureInit$frameworks__base__packages__CredentialManager__android_common__CredentialManager(Ljava/util/Map;)V
HSPLcom/android/credentialmanager/common/material/SwipeableState;->getAnchors$frameworks__base__packages__CredentialManager__android_common__CredentialManager()Ljava/util/Map;
HSPLcom/android/credentialmanager/common/material/SwipeableState;->getCurrentValue()Ljava/lang/Object;
@@ -6830,184 +8924,405 @@
HSPLcom/android/credentialmanager/common/material/SwipeableState;->isAnimationRunning()Z
HSPLcom/android/credentialmanager/common/material/SwipeableState;->processNewAnchors$frameworks__base__packages__CredentialManager__android_common__CredentialManager(Ljava/util/Map;Ljava/util/Map;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
HSPLcom/android/credentialmanager/common/material/SwipeableState;->setAnchors$frameworks__base__packages__CredentialManager__android_common__CredentialManager(Ljava/util/Map;)V
+HSPLcom/android/credentialmanager/common/material/SwipeableState;->setAnimationRunning(Z)V
+HSPLcom/android/credentialmanager/common/material/SwipeableState;->setCurrentValue(Ljava/lang/Object;)V
HSPLcom/android/credentialmanager/common/material/SwipeableState;->setResistance$frameworks__base__packages__CredentialManager__android_common__CredentialManager(Lcom/android/credentialmanager/common/material/ResistanceConfig;)V
HSPLcom/android/credentialmanager/common/material/SwipeableState;->setThresholds$frameworks__base__packages__CredentialManager__android_common__CredentialManager(Lkotlin/jvm/functions/Function2;)V
HSPLcom/android/credentialmanager/common/material/SwipeableState;->setVelocityThreshold$frameworks__base__packages__CredentialManager__android_common__CredentialManager(F)V
HSPLcom/android/credentialmanager/common/material/SwipeableState;->snapInternalToOffset(FLkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/ui/ActionButtonKt$ActionButton$1;-><init>(Ljava/lang/String;I)V
-HSPLcom/android/credentialmanager/common/ui/ActionButtonKt$ActionButton$1;->invoke(Landroidx/compose/foundation/layout/RowScope;Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/common/ui/ActionButtonKt$ActionButton$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/ui/ActionButtonKt$ActionButton$2;-><init>(Ljava/lang/String;Lkotlin/jvm/functions/Function0;I)V
-HSPLcom/android/credentialmanager/common/ui/ActionButtonKt;->ActionButton(Ljava/lang/String;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/common/ui/CardsKt$ContainerCard$1;-><init>(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;Landroidx/compose/foundation/BorderStroke;Lkotlin/jvm/functions/Function3;II)V
-HSPLcom/android/credentialmanager/common/ui/CardsKt;->ContainerCard(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;Landroidx/compose/foundation/BorderStroke;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V
-HSPLcom/android/credentialmanager/common/ui/ConfirmButtonKt$ConfirmButton$1;-><init>(Ljava/lang/String;I)V
-HSPLcom/android/credentialmanager/common/ui/ConfirmButtonKt$ConfirmButton$1;->invoke(Landroidx/compose/foundation/layout/RowScope;Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/common/ui/ConfirmButtonKt$ConfirmButton$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/ui/ConfirmButtonKt$ConfirmButton$2;-><init>(Ljava/lang/String;Lkotlin/jvm/functions/Function0;I)V
-HSPLcom/android/credentialmanager/common/ui/ConfirmButtonKt;->ConfirmButton(Ljava/lang/String;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/common/ui/EntryKt$Entry$1;-><init>(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;II)V
-HSPLcom/android/credentialmanager/common/ui/EntryKt;->Entry(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
-HSPLcom/android/credentialmanager/common/ui/TextsKt$TextOnSurface$1;-><init>(Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/TextStyle;II)V
-HSPLcom/android/credentialmanager/common/ui/TextsKt$TextOnSurfaceVariant$1;-><init>(Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/TextStyle;II)V
-HSPLcom/android/credentialmanager/common/ui/TextsKt$TextSecondary$1;-><init>(Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/TextStyle;II)V
-HSPLcom/android/credentialmanager/common/ui/TextsKt;->TextInternal-2rk-Xng(Ljava/lang/String;JLandroidx/compose/ui/Modifier;Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/common/ui/TextsKt;->TextOnSurface-B9Ufvwk(Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/runtime/Composer;II)V
-HSPLcom/android/credentialmanager/common/ui/TextsKt;->TextOnSurfaceVariant-B9Ufvwk(Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/runtime/Composer;II)V
-HSPLcom/android/credentialmanager/common/ui/TextsKt;->TextSecondary-B9Ufvwk(Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/runtime/Composer;II)V
-HSPLcom/android/credentialmanager/createflow/ActiveEntry;-><clinit>()V
-HSPLcom/android/credentialmanager/createflow/ActiveEntry;-><init>(Lcom/android/credentialmanager/createflow/EnabledProviderInfo;Lcom/android/credentialmanager/createflow/EntryInfo;)V
-HSPLcom/android/credentialmanager/createflow/ActiveEntry;->getActiveEntryInfo()Lcom/android/credentialmanager/createflow/EntryInfo;
-HSPLcom/android/credentialmanager/createflow/ActiveEntry;->getActiveProvider()Lcom/android/credentialmanager/createflow/EnabledProviderInfo;
-HSPLcom/android/credentialmanager/createflow/ComposableSingletons$CreateCredentialComponentsKt$lambda-1$1;-><clinit>()V
-HSPLcom/android/credentialmanager/createflow/ComposableSingletons$CreateCredentialComponentsKt$lambda-1$1;-><init>()V
-HSPLcom/android/credentialmanager/createflow/ComposableSingletons$CreateCredentialComponentsKt$lambda-1$1;->invoke(Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/createflow/ComposableSingletons$CreateCredentialComponentsKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/createflow/ComposableSingletons$CreateCredentialComponentsKt$lambda-2$1;-><clinit>()V
-HSPLcom/android/credentialmanager/createflow/ComposableSingletons$CreateCredentialComponentsKt$lambda-2$1;-><init>()V
-HSPLcom/android/credentialmanager/createflow/ComposableSingletons$CreateCredentialComponentsKt$lambda-3$1;-><clinit>()V
-HSPLcom/android/credentialmanager/createflow/ComposableSingletons$CreateCredentialComponentsKt$lambda-3$1;-><init>()V
-HSPLcom/android/credentialmanager/createflow/ComposableSingletons$CreateCredentialComponentsKt$lambda-4$1;-><clinit>()V
-HSPLcom/android/credentialmanager/createflow/ComposableSingletons$CreateCredentialComponentsKt$lambda-4$1;-><init>()V
-HSPLcom/android/credentialmanager/createflow/ComposableSingletons$CreateCredentialComponentsKt$lambda-5$1;-><clinit>()V
-HSPLcom/android/credentialmanager/createflow/ComposableSingletons$CreateCredentialComponentsKt$lambda-5$1;-><init>()V
-HSPLcom/android/credentialmanager/createflow/ComposableSingletons$CreateCredentialComponentsKt;-><clinit>()V
-HSPLcom/android/credentialmanager/createflow/ComposableSingletons$CreateCredentialComponentsKt;-><init>()V
-HSPLcom/android/credentialmanager/createflow/ComposableSingletons$CreateCredentialComponentsKt;->getLambda-1$frameworks__base__packages__CredentialManager__android_common__CredentialManager()Lkotlin/jvm/functions/Function2;
-HSPLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$1$6;-><init>(Ljava/lang/Object;)V
-HSPLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$1$7;-><init>(Ljava/lang/Object;)V
-HSPLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$1$8;-><init>(Ljava/lang/Object;)V
-HSPLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$1$WhenMappings;-><clinit>()V
-HSPLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$1;-><init>(Lcom/android/credentialmanager/createflow/CreateCredentialViewModel;Landroidx/activity/compose/ManagedActivityResultLauncher;)V
-HSPLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$1;->invoke(Landroidx/compose/foundation/layout/ColumnScope;Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$2;-><init>(Lcom/android/credentialmanager/common/material/ModalBottomSheetState;Lcom/android/credentialmanager/createflow/CreateCredentialViewModel;Lkotlin/coroutines/Continuation;)V
-HSPLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$3;-><init>(Lcom/android/credentialmanager/createflow/CreateCredentialViewModel;Landroidx/activity/compose/ManagedActivityResultLauncher;I)V
-HSPLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreationSelectionCard$1$1$1;-><init>(Lcom/android/credentialmanager/createflow/RequestDisplayInfo;Lcom/android/credentialmanager/createflow/CreateOptionInfo;Lkotlin/jvm/functions/Function1;I)V
-HSPLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreationSelectionCard$1$1$1;->invoke(Landroidx/compose/foundation/layout/ColumnScope;Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreationSelectionCard$1$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreationSelectionCard$1;-><init>(Lcom/android/credentialmanager/createflow/EnabledProviderInfo;Lcom/android/credentialmanager/createflow/RequestDisplayInfo;Ljava/util/List;Lcom/android/credentialmanager/createflow/CreateOptionInfo;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;)V
-HSPLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreationSelectionCard$1;->invoke(Landroidx/compose/foundation/layout/ColumnScope;Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreationSelectionCard$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$PrimaryCreateOptionRow$1;-><init>(Lkotlin/jvm/functions/Function1;Lcom/android/credentialmanager/createflow/EntryInfo;)V
-HSPLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$PrimaryCreateOptionRow$2;-><init>(Lcom/android/credentialmanager/createflow/RequestDisplayInfo;)V
-HSPLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$PrimaryCreateOptionRow$2;->invoke(Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$PrimaryCreateOptionRow$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$PrimaryCreateOptionRow$3;-><init>(Lcom/android/credentialmanager/createflow/EntryInfo;Lcom/android/credentialmanager/createflow/RequestDisplayInfo;)V
-HSPLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$PrimaryCreateOptionRow$3;->invoke(Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$PrimaryCreateOptionRow$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt;->CreateCredentialScreen(Lcom/android/credentialmanager/createflow/CreateCredentialViewModel;Landroidx/activity/compose/ManagedActivityResultLauncher;Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt;->CreationSelectionCard(Lcom/android/credentialmanager/createflow/RequestDisplayInfo;Ljava/util/List;Lcom/android/credentialmanager/createflow/EnabledProviderInfo;Lcom/android/credentialmanager/createflow/CreateOptionInfo;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt;->PrimaryCreateOptionRow(Lcom/android/credentialmanager/createflow/RequestDisplayInfo;Lcom/android/credentialmanager/createflow/EntryInfo;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/createflow/CreateCredentialUiState;-><clinit>()V
-HSPLcom/android/credentialmanager/createflow/CreateCredentialUiState;-><init>(Ljava/util/List;Ljava/util/List;Lcom/android/credentialmanager/createflow/CreateScreenState;Lcom/android/credentialmanager/createflow/RequestDisplayInfo;Ljava/util/List;ZLcom/android/credentialmanager/createflow/ActiveEntry;Lcom/android/credentialmanager/createflow/EntryInfo;ZZLjava/lang/Boolean;)V
-HSPLcom/android/credentialmanager/createflow/CreateCredentialUiState;-><init>(Ljava/util/List;Ljava/util/List;Lcom/android/credentialmanager/createflow/CreateScreenState;Lcom/android/credentialmanager/createflow/RequestDisplayInfo;Ljava/util/List;ZLcom/android/credentialmanager/createflow/ActiveEntry;Lcom/android/credentialmanager/createflow/EntryInfo;ZZLjava/lang/Boolean;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLcom/android/credentialmanager/createflow/CreateCredentialUiState;->getActiveEntry()Lcom/android/credentialmanager/createflow/ActiveEntry;
-HSPLcom/android/credentialmanager/createflow/CreateCredentialUiState;->getCurrentScreenState()Lcom/android/credentialmanager/createflow/CreateScreenState;
-HSPLcom/android/credentialmanager/createflow/CreateCredentialUiState;->getEnabledProviders()Ljava/util/List;
-HSPLcom/android/credentialmanager/createflow/CreateCredentialUiState;->getHidden()Z
-HSPLcom/android/credentialmanager/createflow/CreateCredentialUiState;->getRequestDisplayInfo()Lcom/android/credentialmanager/createflow/RequestDisplayInfo;
-HSPLcom/android/credentialmanager/createflow/CreateCredentialViewModel$dialogResult$2;-><clinit>()V
-HSPLcom/android/credentialmanager/createflow/CreateCredentialViewModel$dialogResult$2;-><init>()V
-HSPLcom/android/credentialmanager/createflow/CreateCredentialViewModel$dialogResult$2;->invoke()Landroidx/lifecycle/MutableLiveData;
-HSPLcom/android/credentialmanager/createflow/CreateCredentialViewModel$dialogResult$2;->invoke()Ljava/lang/Object;
-HSPLcom/android/credentialmanager/createflow/CreateCredentialViewModel;-><clinit>()V
-HSPLcom/android/credentialmanager/createflow/CreateCredentialViewModel;-><init>()V
-HSPLcom/android/credentialmanager/createflow/CreateCredentialViewModel;-><init>(Lcom/android/credentialmanager/CredentialManagerRepo;Lcom/android/credentialmanager/UserConfigRepo;)V
-HSPLcom/android/credentialmanager/createflow/CreateCredentialViewModel;-><init>(Lcom/android/credentialmanager/CredentialManagerRepo;Lcom/android/credentialmanager/UserConfigRepo;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLcom/android/credentialmanager/createflow/CreateCredentialViewModel;->getDialogResult()Landroidx/lifecycle/MutableLiveData;
-HSPLcom/android/credentialmanager/createflow/CreateCredentialViewModel;->getUiState()Lcom/android/credentialmanager/createflow/CreateCredentialUiState;
-HSPLcom/android/credentialmanager/createflow/CreateCredentialViewModel;->observeDialogResult()Landroidx/lifecycle/LiveData;
-HSPLcom/android/credentialmanager/createflow/CreateOptionInfo;-><clinit>()V
-HSPLcom/android/credentialmanager/createflow/CreateOptionInfo;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/app/PendingIntent;Landroid/content/Intent;Ljava/lang/String;Landroid/graphics/drawable/Drawable;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/Long;)V
-HSPLcom/android/credentialmanager/createflow/CreateOptionInfo;->getLastUsedTimeMillis()Ljava/lang/Long;
-HSPLcom/android/credentialmanager/createflow/CreateOptionInfo;->getProfileIcon()Landroid/graphics/drawable/Drawable;
-HSPLcom/android/credentialmanager/createflow/CreateOptionInfo;->getUserProviderDisplayName()Ljava/lang/String;
-HSPLcom/android/credentialmanager/createflow/CreateScreenState;->$values()[Lcom/android/credentialmanager/createflow/CreateScreenState;
-HSPLcom/android/credentialmanager/createflow/CreateScreenState;-><clinit>()V
-HSPLcom/android/credentialmanager/createflow/CreateScreenState;-><init>(Ljava/lang/String;I)V
-HSPLcom/android/credentialmanager/createflow/CreateScreenState;->values()[Lcom/android/credentialmanager/createflow/CreateScreenState;
-HSPLcom/android/credentialmanager/createflow/DisabledProviderInfo;-><clinit>()V
-HSPLcom/android/credentialmanager/createflow/DisabledProviderInfo;-><init>(Landroid/graphics/drawable/Drawable;Ljava/lang/String;Ljava/lang/String;)V
-HSPLcom/android/credentialmanager/createflow/EnabledProviderInfo;-><clinit>()V
-HSPLcom/android/credentialmanager/createflow/EnabledProviderInfo;-><init>(Landroid/graphics/drawable/Drawable;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Lcom/android/credentialmanager/createflow/RemoteInfo;)V
-HSPLcom/android/credentialmanager/createflow/EnabledProviderInfo;->getCreateOptions()Ljava/util/List;
-HSPLcom/android/credentialmanager/createflow/EnabledProviderInfo;->getRemoteEntry()Lcom/android/credentialmanager/createflow/RemoteInfo;
-HSPLcom/android/credentialmanager/createflow/EntryInfo;-><clinit>()V
-HSPLcom/android/credentialmanager/createflow/EntryInfo;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/app/PendingIntent;Landroid/content/Intent;)V
-HSPLcom/android/credentialmanager/createflow/ProviderInfo;-><clinit>()V
-HSPLcom/android/credentialmanager/createflow/ProviderInfo;-><init>(Landroid/graphics/drawable/Drawable;Ljava/lang/String;Ljava/lang/String;)V
-HSPLcom/android/credentialmanager/createflow/ProviderInfo;->getDisplayName()Ljava/lang/String;
-HSPLcom/android/credentialmanager/createflow/ProviderInfo;->getIcon()Landroid/graphics/drawable/Drawable;
-HSPLcom/android/credentialmanager/createflow/ProviderInfo;->getId()Ljava/lang/String;
-HSPLcom/android/credentialmanager/createflow/RequestDisplayInfo;-><clinit>()V
-HSPLcom/android/credentialmanager/createflow/RequestDisplayInfo;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/graphics/drawable/Drawable;)V
-HSPLcom/android/credentialmanager/createflow/RequestDisplayInfo;->getAppName()Ljava/lang/String;
-HSPLcom/android/credentialmanager/createflow/RequestDisplayInfo;->getSubtitle()Ljava/lang/String;
-HSPLcom/android/credentialmanager/createflow/RequestDisplayInfo;->getTitle()Ljava/lang/String;
-HSPLcom/android/credentialmanager/createflow/RequestDisplayInfo;->getType()Ljava/lang/String;
-HSPLcom/android/credentialmanager/createflow/RequestDisplayInfo;->getTypeIcon()Landroid/graphics/drawable/Drawable;
-HSPLcom/android/credentialmanager/jetpack/developer/CreateCredentialRequest$Companion;-><init>()V
-HSPLcom/android/credentialmanager/jetpack/developer/CreateCredentialRequest$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLcom/android/credentialmanager/jetpack/developer/CreateCredentialRequest$Companion;->createFrom(Ljava/lang/String;Landroid/os/Bundle;Landroid/os/Bundle;Z)Lcom/android/credentialmanager/jetpack/developer/CreateCredentialRequest;
-HSPLcom/android/credentialmanager/jetpack/developer/CreateCredentialRequest;-><clinit>()V
-HSPLcom/android/credentialmanager/jetpack/developer/CreateCredentialRequest;-><init>(Ljava/lang/String;Landroid/os/Bundle;Landroid/os/Bundle;Z)V
-HSPLcom/android/credentialmanager/jetpack/developer/CreateCredentialRequest;->getType()Ljava/lang/String;
-HSPLcom/android/credentialmanager/jetpack/developer/CreatePublicKeyCredentialRequest$Companion;-><init>()V
-HSPLcom/android/credentialmanager/jetpack/developer/CreatePublicKeyCredentialRequest$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLcom/android/credentialmanager/jetpack/developer/CreatePublicKeyCredentialRequest$Companion;->createFrom$frameworks__base__packages__CredentialManager__android_common__CredentialManager(Landroid/os/Bundle;)Lcom/android/credentialmanager/jetpack/developer/CreatePublicKeyCredentialRequest;
-HSPLcom/android/credentialmanager/jetpack/developer/CreatePublicKeyCredentialRequest$Companion;->toCredentialDataBundle$frameworks__base__packages__CredentialManager__android_common__CredentialManager(Ljava/lang/String;Z)Landroid/os/Bundle;
-HSPLcom/android/credentialmanager/jetpack/developer/CreatePublicKeyCredentialRequest;-><clinit>()V
-HSPLcom/android/credentialmanager/jetpack/developer/CreatePublicKeyCredentialRequest;-><init>(Ljava/lang/String;Z)V
-HSPLcom/android/credentialmanager/jetpack/developer/CreatePublicKeyCredentialRequest;->getRequestJson()Ljava/lang/String;
-HSPLcom/android/credentialmanager/jetpack/provider/CreateEntry$Companion;-><init>()V
-HSPLcom/android/credentialmanager/jetpack/provider/CreateEntry$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLcom/android/credentialmanager/jetpack/provider/CreateEntry$Companion;->fromSlice(Landroid/app/slice/Slice;)Lcom/android/credentialmanager/jetpack/provider/CreateEntry;
-HSPLcom/android/credentialmanager/jetpack/provider/CreateEntry;-><clinit>()V
-HSPLcom/android/credentialmanager/jetpack/provider/CreateEntry;-><init>(Ljava/lang/CharSequence;Landroid/app/PendingIntent;Landroid/graphics/drawable/Icon;JLjava/util/List;)V
-HSPLcom/android/credentialmanager/jetpack/provider/CreateEntry;->getAccountName()Ljava/lang/CharSequence;
-HSPLcom/android/credentialmanager/jetpack/provider/CreateEntry;->getCredentialCountInformationList()Ljava/util/List;
-HSPLcom/android/credentialmanager/jetpack/provider/CreateEntry;->getIcon()Landroid/graphics/drawable/Icon;
-HSPLcom/android/credentialmanager/jetpack/provider/CreateEntry;->getLastUsedTimeMillis()J
-HSPLcom/android/credentialmanager/jetpack/provider/CreateEntry;->getPendingIntent()Landroid/app/PendingIntent;
-HSPLcom/android/credentialmanager/jetpack/provider/CredentialCountInformation$Companion;-><init>()V
-HSPLcom/android/credentialmanager/jetpack/provider/CredentialCountInformation$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLcom/android/credentialmanager/jetpack/provider/CredentialCountInformation$Companion;->getCountForType(Ljava/util/List;Ljava/lang/String;)Ljava/lang/Integer;
-HSPLcom/android/credentialmanager/jetpack/provider/CredentialCountInformation$Companion;->getPasskeyCount(Ljava/util/List;)Ljava/lang/Integer;
-HSPLcom/android/credentialmanager/jetpack/provider/CredentialCountInformation$Companion;->getPasswordCount(Ljava/util/List;)Ljava/lang/Integer;
-HSPLcom/android/credentialmanager/jetpack/provider/CredentialCountInformation$Companion;->getTotalCount(Ljava/util/List;)Ljava/lang/Integer;
-HSPLcom/android/credentialmanager/jetpack/provider/CredentialCountInformation;-><clinit>()V
+HSPLcom/android/credentialmanager/common/ui/BottomSheetKt$ModalBottomSheet$1$1;-><init>(Lcom/android/credentialmanager/common/material/ModalBottomSheetState;Lkotlin/coroutines/Continuation;)V
+HSPLcom/android/credentialmanager/common/ui/BottomSheetKt$ModalBottomSheet$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLcom/android/credentialmanager/common/ui/BottomSheetKt$ModalBottomSheet$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/credentialmanager/common/ui/BottomSheetKt$ModalBottomSheet$1;-><init>(Lcom/android/credentialmanager/common/material/ModalBottomSheetState;ZLkotlin/jvm/functions/Function0;Lkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)V
+HSPLcom/android/credentialmanager/common/ui/BottomSheetKt$ModalBottomSheet$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLcom/android/credentialmanager/common/ui/BottomSheetKt$ModalBottomSheet$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/credentialmanager/common/ui/BottomSheetKt$ModalBottomSheet$2;-><init>(Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function0;ZLkotlin/jvm/functions/Function0;ZI)V
+HSPLcom/android/credentialmanager/common/ui/BottomSheetKt$ModalBottomSheet$2;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLcom/android/credentialmanager/common/ui/BottomSheetKt$ModalBottomSheet$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/credentialmanager/common/ui/BottomSheetKt;->ModalBottomSheet(Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function0;ZLkotlin/jvm/functions/Function0;ZLandroidx/compose/runtime/Composer;I)V
+HSPLcom/android/credentialmanager/common/ui/CardsKt$CredentialContainerCard$1;-><init>(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function3;II)V
+HSPLcom/android/credentialmanager/common/ui/CardsKt$SheetContainerCard$1;-><init>(Lkotlin/jvm/functions/Function2;ILandroidx/compose/foundation/layout/Arrangement$Vertical;Lkotlin/jvm/functions/Function1;)V
+HSPLcom/android/credentialmanager/common/ui/CardsKt$SheetContainerCard$1;->invoke(Landroidx/compose/foundation/layout/ColumnScope;Landroidx/compose/runtime/Composer;I)V
+HSPLcom/android/credentialmanager/common/ui/CardsKt$SheetContainerCard$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/credentialmanager/common/ui/CardsKt$SheetContainerCard$2;-><init>(Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/layout/Arrangement$Vertical;Lkotlin/jvm/functions/Function1;II)V
+HSPLcom/android/credentialmanager/common/ui/CardsKt;->CredentialContainerCard(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V
+HSPLcom/android/credentialmanager/common/ui/CardsKt;->SheetContainerCard(Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/layout/Arrangement$Vertical;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V
+HSPLcom/android/credentialmanager/common/ui/ComposableSingletons$BottomSheetKt$lambda-1$1;-><clinit>()V
+HSPLcom/android/credentialmanager/common/ui/ComposableSingletons$BottomSheetKt$lambda-1$1;-><init>()V
+HSPLcom/android/credentialmanager/common/ui/ComposableSingletons$BottomSheetKt$lambda-1$1;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLcom/android/credentialmanager/common/ui/ComposableSingletons$BottomSheetKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/credentialmanager/common/ui/ComposableSingletons$BottomSheetKt;-><clinit>()V
+HSPLcom/android/credentialmanager/common/ui/ComposableSingletons$BottomSheetKt;-><init>()V
+HSPLcom/android/credentialmanager/common/ui/ComposableSingletons$BottomSheetKt;->getLambda-1$frameworks__base__packages__CredentialManager__android_common__CredentialManager()Lkotlin/jvm/functions/Function2;
+HSPLcom/android/credentialmanager/common/ui/ComposableSingletons$EntryKt$lambda-1$1;-><clinit>()V
+HSPLcom/android/credentialmanager/common/ui/ComposableSingletons$EntryKt$lambda-1$1;-><init>()V
+HSPLcom/android/credentialmanager/common/ui/ComposableSingletons$EntryKt$lambda-1$1;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLcom/android/credentialmanager/common/ui/ComposableSingletons$EntryKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/credentialmanager/common/ui/ComposableSingletons$EntryKt;-><clinit>()V
+HSPLcom/android/credentialmanager/common/ui/ComposableSingletons$EntryKt;-><init>()V
+HSPLcom/android/credentialmanager/common/ui/ComposableSingletons$EntryKt;->getLambda-1$frameworks__base__packages__CredentialManager__android_common__CredentialManager()Lkotlin/jvm/functions/Function2;
+HSPLcom/android/credentialmanager/common/ui/ComposableSingletons$SnackBarKt$lambda-1$1;-><clinit>()V
+HSPLcom/android/credentialmanager/common/ui/ComposableSingletons$SnackBarKt$lambda-1$1;-><init>()V
+HSPLcom/android/credentialmanager/common/ui/ComposableSingletons$SnackBarKt$lambda-1$1;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLcom/android/credentialmanager/common/ui/ComposableSingletons$SnackBarKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/credentialmanager/common/ui/ComposableSingletons$SnackBarKt;-><clinit>()V
+HSPLcom/android/credentialmanager/common/ui/ComposableSingletons$SnackBarKt;-><init>()V
+HSPLcom/android/credentialmanager/common/ui/ComposableSingletons$SnackBarKt;->getLambda-1$frameworks__base__packages__CredentialManager__android_common__CredentialManager()Lkotlin/jvm/functions/Function2;
+HSPLcom/android/credentialmanager/common/ui/EntryKt$ActionEntry$1;-><init>(Ljava/lang/String;ILjava/lang/String;)V
+HSPLcom/android/credentialmanager/common/ui/EntryKt$ActionEntry$1;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLcom/android/credentialmanager/common/ui/EntryKt$ActionEntry$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/credentialmanager/common/ui/EntryKt$ActionEntry$2;-><init>(Landroidx/compose/ui/graphics/ImageBitmap;)V
+HSPLcom/android/credentialmanager/common/ui/EntryKt$ActionEntry$2;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLcom/android/credentialmanager/common/ui/EntryKt$ActionEntry$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/credentialmanager/common/ui/EntryKt$ActionEntry$3;-><init>(Lkotlin/jvm/functions/Function0;Ljava/lang/String;Ljava/lang/String;Landroidx/compose/ui/graphics/ImageBitmap;II)V
+HSPLcom/android/credentialmanager/common/ui/EntryKt$Entry$1;-><clinit>()V
+HSPLcom/android/credentialmanager/common/ui/EntryKt$Entry$1;-><init>()V
+HSPLcom/android/credentialmanager/common/ui/EntryKt$Entry$1;->invoke(Landroidx/compose/ui/text/TextLayoutResult;)V
+HSPLcom/android/credentialmanager/common/ui/EntryKt$Entry$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/credentialmanager/common/ui/EntryKt$Entry$4;-><init>(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/vector/ImageVector;Landroidx/compose/ui/Modifier;I)V
+HSPLcom/android/credentialmanager/common/ui/EntryKt$Entry$4;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLcom/android/credentialmanager/common/ui/EntryKt$Entry$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/credentialmanager/common/ui/EntryKt$Entry$6;-><init>(ZLjava/lang/String;ZLkotlin/jvm/functions/Function1;IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/credentialmanager/common/ui/EntryKt$Entry$6;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLcom/android/credentialmanager/common/ui/EntryKt$Entry$6;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/credentialmanager/common/ui/EntryKt$Entry$7;-><init>(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function0;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroidx/compose/ui/graphics/ImageBitmap;ZLandroidx/compose/ui/graphics/vector/ImageVector;Landroidx/compose/ui/graphics/painter/Painter;Ljava/lang/String;ZZLkotlin/jvm/functions/Function1;III)V
+HSPLcom/android/credentialmanager/common/ui/EntryKt$MoreOptionTopAppBar$1;-><init>(Ljava/lang/String;I)V
+HSPLcom/android/credentialmanager/common/ui/EntryKt$MoreOptionTopAppBar$1;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLcom/android/credentialmanager/common/ui/EntryKt$MoreOptionTopAppBar$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/credentialmanager/common/ui/EntryKt$MoreOptionTopAppBar$2;-><init>(Lkotlin/jvm/functions/Function0;I)V
+HSPLcom/android/credentialmanager/common/ui/EntryKt$MoreOptionTopAppBar$2;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLcom/android/credentialmanager/common/ui/EntryKt$MoreOptionTopAppBar$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/credentialmanager/common/ui/EntryKt$MoreOptionTopAppBar$3;-><init>(Ljava/lang/String;Lkotlin/jvm/functions/Function0;FI)V
+HSPLcom/android/credentialmanager/common/ui/EntryKt$autoMirrored$1$WhenMappings;-><clinit>()V
+HSPLcom/android/credentialmanager/common/ui/EntryKt$autoMirrored$1;-><clinit>()V
+HSPLcom/android/credentialmanager/common/ui/EntryKt$autoMirrored$1;-><init>()V
+HSPLcom/android/credentialmanager/common/ui/EntryKt$autoMirrored$1;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier;
+HSPLcom/android/credentialmanager/common/ui/EntryKt$autoMirrored$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/credentialmanager/common/ui/EntryKt;->ActionEntry(Lkotlin/jvm/functions/Function0;Ljava/lang/String;Ljava/lang/String;Landroidx/compose/ui/graphics/ImageBitmap;Landroidx/compose/runtime/Composer;II)V
+HSPLcom/android/credentialmanager/common/ui/EntryKt;->Entry(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function0;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroidx/compose/ui/graphics/ImageBitmap;ZLandroidx/compose/ui/graphics/vector/ImageVector;Landroidx/compose/ui/graphics/painter/Painter;Ljava/lang/String;ZZLkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;III)V
+HSPLcom/android/credentialmanager/common/ui/EntryKt;->MoreOptionTopAppBar-TDGSqEk(Ljava/lang/String;Lkotlin/jvm/functions/Function0;FLandroidx/compose/runtime/Composer;I)V
+HSPLcom/android/credentialmanager/common/ui/EntryKt;->access$autoMirrored(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
+HSPLcom/android/credentialmanager/common/ui/EntryKt;->autoMirrored(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
+HSPLcom/android/credentialmanager/common/ui/SectionHeaderKt;->CredentialListSectionHeader(Ljava/lang/String;ZLandroidx/compose/runtime/Composer;I)V
+HSPLcom/android/credentialmanager/common/ui/SectionHeaderKt;->InternalSectionHeader-3IgeMak(Ljava/lang/String;JZLandroidx/compose/runtime/Composer;II)V
+HSPLcom/android/credentialmanager/common/ui/SnackBarKt$Snackbar$1$2$1;-><init>(Ljava/lang/String;ILkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;)V
+HSPLcom/android/credentialmanager/common/ui/SnackBarKt$Snackbar$1$2$1;->invoke(Landroidx/compose/foundation/layout/ColumnScope;Landroidx/compose/runtime/Composer;I)V
+HSPLcom/android/credentialmanager/common/ui/SnackBarKt$Snackbar$1$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/credentialmanager/common/ui/SnackBarKt$Snackbar$1;-><init>(Lkotlin/jvm/functions/Function0;ILjava/lang/String;Lkotlin/jvm/functions/Function2;)V
+HSPLcom/android/credentialmanager/common/ui/SnackBarKt$Snackbar$1;->invoke(Landroidx/compose/foundation/layout/BoxWithConstraintsScope;Landroidx/compose/runtime/Composer;I)V
+HSPLcom/android/credentialmanager/common/ui/SnackBarKt$Snackbar$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/credentialmanager/common/ui/SnackBarKt$Snackbar$2;-><init>(ZLandroidx/compose/ui/platform/AccessibilityManager;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)V
+HSPLcom/android/credentialmanager/common/ui/SnackBarKt$Snackbar$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLcom/android/credentialmanager/common/ui/SnackBarKt$Snackbar$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/credentialmanager/common/ui/SnackBarKt;->Snackbar(Ljava/lang/String;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;ZLandroidx/compose/runtime/Composer;II)V
+HSPLcom/android/credentialmanager/common/ui/SystemUiControllerUtilsKt$setBottomSheetSystemBarsColor$1;-><init>(Lcom/android/compose/SystemUiController;I)V
+HSPLcom/android/credentialmanager/common/ui/SystemUiControllerUtilsKt;->setBottomSheetSystemBarsColor(Lcom/android/compose/SystemUiController;Landroidx/compose/runtime/Composer;I)V
+HSPLcom/android/credentialmanager/common/ui/SystemUiControllerUtilsKt;->setTransparentSystemBarsColor(Lcom/android/compose/SystemUiController;Landroidx/compose/runtime/Composer;I)V
+HSPLcom/android/credentialmanager/common/ui/TextsKt$BodySmallText$1;-><clinit>()V
+HSPLcom/android/credentialmanager/common/ui/TextsKt$BodySmallText$1;-><init>()V
+HSPLcom/android/credentialmanager/common/ui/TextsKt$BodySmallText$1;->invoke(Landroidx/compose/ui/text/TextLayoutResult;)V
+HSPLcom/android/credentialmanager/common/ui/TextsKt$BodySmallText$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/credentialmanager/common/ui/TextsKt$SmallTitleText$1;-><clinit>()V
+HSPLcom/android/credentialmanager/common/ui/TextsKt$SmallTitleText$1;-><init>()V
+HSPLcom/android/credentialmanager/common/ui/TextsKt$SmallTitleText$1;->invoke(Landroidx/compose/ui/text/TextLayoutResult;)V
+HSPLcom/android/credentialmanager/common/ui/TextsKt$SmallTitleText$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/credentialmanager/common/ui/TextsKt$SnackbarActionText$1;-><init>(Ljava/lang/String;Landroidx/compose/ui/Modifier;II)V
+HSPLcom/android/credentialmanager/common/ui/TextsKt$SnackbarContentText$1;-><init>(Ljava/lang/String;Landroidx/compose/ui/Modifier;II)V
+HSPLcom/android/credentialmanager/common/ui/TextsKt;->BodySmallText(Ljava/lang/String;Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V
+HSPLcom/android/credentialmanager/common/ui/TextsKt;->LargeTitleText(Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V
+HSPLcom/android/credentialmanager/common/ui/TextsKt;->SectionHeaderText-FNF3uiM(Ljava/lang/String;Landroidx/compose/ui/Modifier;JLandroidx/compose/runtime/Composer;II)V
+HSPLcom/android/credentialmanager/common/ui/TextsKt;->SmallTitleText(Ljava/lang/String;Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V
+HSPLcom/android/credentialmanager/common/ui/TextsKt;->SnackbarActionText(Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V
+HSPLcom/android/credentialmanager/common/ui/TextsKt;->SnackbarContentText(Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V
+HSPLcom/android/credentialmanager/getflow/ActionEntryInfo;-><clinit>()V
+HSPLcom/android/credentialmanager/getflow/ActionEntryInfo;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/app/PendingIntent;Landroid/content/Intent;Ljava/lang/String;Landroid/graphics/drawable/Drawable;Ljava/lang/String;)V
+HSPLcom/android/credentialmanager/getflow/ActionEntryInfo;->getIcon()Landroid/graphics/drawable/Drawable;
+HSPLcom/android/credentialmanager/getflow/ActionEntryInfo;->getSubTitle()Ljava/lang/String;
+HSPLcom/android/credentialmanager/getflow/ActionEntryInfo;->getTitle()Ljava/lang/String;
+HSPLcom/android/credentialmanager/getflow/ComposableSingletons$GetCredentialComponentsKt$lambda-1$1;-><clinit>()V
+HSPLcom/android/credentialmanager/getflow/ComposableSingletons$GetCredentialComponentsKt$lambda-1$1;-><init>()V
+HSPLcom/android/credentialmanager/getflow/ComposableSingletons$GetCredentialComponentsKt$lambda-2$1;-><clinit>()V
+HSPLcom/android/credentialmanager/getflow/ComposableSingletons$GetCredentialComponentsKt$lambda-2$1;-><init>()V
+HSPLcom/android/credentialmanager/getflow/ComposableSingletons$GetCredentialComponentsKt$lambda-3$1;-><clinit>()V
+HSPLcom/android/credentialmanager/getflow/ComposableSingletons$GetCredentialComponentsKt$lambda-3$1;-><init>()V
+HSPLcom/android/credentialmanager/getflow/ComposableSingletons$GetCredentialComponentsKt$lambda-3$1;->invoke(Landroidx/compose/foundation/layout/RowScope;Landroidx/compose/runtime/Composer;I)V
+HSPLcom/android/credentialmanager/getflow/ComposableSingletons$GetCredentialComponentsKt$lambda-3$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/credentialmanager/getflow/ComposableSingletons$GetCredentialComponentsKt;-><clinit>()V
+HSPLcom/android/credentialmanager/getflow/ComposableSingletons$GetCredentialComponentsKt;-><init>()V
+HSPLcom/android/credentialmanager/getflow/ComposableSingletons$GetCredentialComponentsKt;->getLambda-3$frameworks__base__packages__CredentialManager__android_common__CredentialManager()Lkotlin/jvm/functions/Function3;
+HSPLcom/android/credentialmanager/getflow/CredentialEntryInfoComparatorByTypeThenTimestamp;-><init>()V
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$ActionChips$2;-><init>(Ljava/util/List;Lkotlin/jvm/functions/Function1;I)V
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$ActionChips$2;->invoke(Landroidx/compose/foundation/layout/ColumnScope;Landroidx/compose/runtime/Composer;I)V
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$ActionChips$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$ActionChips$3;-><init>(Ljava/util/List;Lkotlin/jvm/functions/Function1;ZI)V
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$ActionEntryRow$1;-><init>(Lkotlin/jvm/functions/Function1;Lcom/android/credentialmanager/getflow/ActionEntryInfo;)V
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$1;-><init>(Lkotlin/jvm/functions/Function0;I)V
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$1;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$2$3;-><init>(Lcom/android/credentialmanager/getflow/RemoteEntryInfo;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/internal/Ref$BooleanRef;I)V
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$2$3;->invoke(Landroidx/compose/foundation/lazy/LazyItemScope;Landroidx/compose/runtime/Composer;I)V
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$2$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$2$4;-><init>(Ljava/util/List;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/internal/Ref$BooleanRef;I)V
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$2$4;->invoke(Landroidx/compose/foundation/lazy/LazyItemScope;Landroidx/compose/runtime/Composer;I)V
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$2$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$2$invoke$$inlined$items$default$1;-><clinit>()V
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$2$invoke$$inlined$items$default$1;-><init>()V
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$2$invoke$$inlined$items$default$3;-><init>(Lkotlin/jvm/functions/Function1;Ljava/util/List;)V
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$2$invoke$$inlined$items$default$4;-><init>(Ljava/util/List;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/internal/Ref$BooleanRef;I)V
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$2;-><init>(Ljava/util/List;Ljava/util/List;Lcom/android/credentialmanager/getflow/ProviderDisplayInfo;Lkotlin/jvm/functions/Function1;ILjava/util/List;)V
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$2;->invoke(Landroidx/compose/foundation/lazy/LazyListScope;)V
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$10;-><init>(Lcom/android/credentialmanager/CredentialSelectorViewModel;Lcom/android/credentialmanager/getflow/GetCredentialUiState;Landroidx/activity/compose/ManagedActivityResultLauncher;I)V
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$1;-><init>(Ljava/lang/Object;)V
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$1;->invoke(Z)V
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$2;-><init>(Ljava/lang/Object;)V
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$2;->invoke()Ljava/lang/Object;
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$2;->invoke()V
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$3;-><init>(Lcom/android/credentialmanager/CredentialSelectorViewModel;)V
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$3;->invoke(Lcom/android/internal/logging/UiEventLogger$UiEventEnum;Landroidx/compose/runtime/Composer;I)V
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$7;-><init>(Ljava/lang/Object;)V
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$8;-><init>(Ljava/lang/Object;)V
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$8;->invoke()Ljava/lang/Object;
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$8;->invoke()V
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$9$5;-><init>(Ljava/lang/Object;)V
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$9$6;-><init>(Ljava/lang/Object;)V
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$9$6;->invoke()Ljava/lang/Object;
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$9$6;->invoke()V
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$9$8;-><init>(Ljava/lang/Object;)V
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$9$9;-><init>(Lcom/android/credentialmanager/CredentialSelectorViewModel;)V
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$9$9;->invoke(Lcom/android/internal/logging/UiEventLogger$UiEventEnum;Landroidx/compose/runtime/Composer;I)V
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$9$9;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$9$WhenMappings;-><clinit>()V
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$9;-><init>(Lcom/android/credentialmanager/CredentialSelectorViewModel;Lcom/android/credentialmanager/getflow/GetCredentialUiState;Landroidx/activity/compose/ManagedActivityResultLauncher;)V
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$9;->invoke(Landroidx/compose/foundation/layout/ColumnScope;Landroidx/compose/runtime/Composer;I)V
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$9;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$RemoteCredentialSnackBarScreen$1$1$1;-><init>(Lkotlin/jvm/functions/Function1;)V
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$RemoteCredentialSnackBarScreen$1$1$1;->invoke()Ljava/lang/Object;
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$RemoteCredentialSnackBarScreen$1$1$1;->invoke()V
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$RemoteCredentialSnackBarScreen$1;-><init>(Lkotlin/jvm/functions/Function1;I)V
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$RemoteCredentialSnackBarScreen$1;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$RemoteCredentialSnackBarScreen$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$RemoteCredentialSnackBarScreen$2;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function3;I)V
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$RemoteEntryCard$1$1$1$1;-><init>(Lkotlin/jvm/functions/Function1;Lcom/android/credentialmanager/getflow/RemoteEntryInfo;)V
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$RemoteEntryCard$1;-><init>(Lkotlin/jvm/functions/Function1;Lcom/android/credentialmanager/getflow/RemoteEntryInfo;I)V
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$RemoteEntryCard$1;->invoke(Landroidx/compose/foundation/layout/ColumnScope;Landroidx/compose/runtime/Composer;I)V
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$RemoteEntryCard$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$RemoteEntryCard$2;-><init>(Lcom/android/credentialmanager/getflow/RemoteEntryInfo;Lkotlin/jvm/functions/Function1;ZI)V
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt;->ActionChips(Ljava/util/List;Lkotlin/jvm/functions/Function1;ZLandroidx/compose/runtime/Composer;I)V
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt;->ActionEntryRow(Lcom/android/credentialmanager/getflow/ActionEntryInfo;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)V
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt;->AllSignInOptionCard(Ljava/util/List;Lcom/android/credentialmanager/getflow/ProviderDisplayInfo;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;I)V
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt;->GetCredentialScreen(Lcom/android/credentialmanager/CredentialSelectorViewModel;Lcom/android/credentialmanager/getflow/GetCredentialUiState;Landroidx/activity/compose/ManagedActivityResultLauncher;Landroidx/compose/runtime/Composer;I)V
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt;->RemoteCredentialSnackBarScreen(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;I)V
+HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt;->RemoteEntryCard(Lcom/android/credentialmanager/getflow/RemoteEntryInfo;Lkotlin/jvm/functions/Function1;ZLandroidx/compose/runtime/Composer;I)V
+HSPLcom/android/credentialmanager/getflow/GetCredentialUiState;-><clinit>()V
+HSPLcom/android/credentialmanager/getflow/GetCredentialUiState;-><init>(Ljava/util/List;Lcom/android/credentialmanager/getflow/RequestDisplayInfo;Lcom/android/credentialmanager/getflow/ProviderDisplayInfo;Lcom/android/credentialmanager/getflow/GetScreenState;Lcom/android/credentialmanager/common/BaseEntry;Z)V
+HSPLcom/android/credentialmanager/getflow/GetCredentialUiState;-><init>(Ljava/util/List;Lcom/android/credentialmanager/getflow/RequestDisplayInfo;Lcom/android/credentialmanager/getflow/ProviderDisplayInfo;Lcom/android/credentialmanager/getflow/GetScreenState;Lcom/android/credentialmanager/common/BaseEntry;ZILkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLcom/android/credentialmanager/getflow/GetCredentialUiState;->copy$default(Lcom/android/credentialmanager/getflow/GetCredentialUiState;Ljava/util/List;Lcom/android/credentialmanager/getflow/RequestDisplayInfo;Lcom/android/credentialmanager/getflow/ProviderDisplayInfo;Lcom/android/credentialmanager/getflow/GetScreenState;Lcom/android/credentialmanager/common/BaseEntry;ZILjava/lang/Object;)Lcom/android/credentialmanager/getflow/GetCredentialUiState;
+HSPLcom/android/credentialmanager/getflow/GetCredentialUiState;->copy(Ljava/util/List;Lcom/android/credentialmanager/getflow/RequestDisplayInfo;Lcom/android/credentialmanager/getflow/ProviderDisplayInfo;Lcom/android/credentialmanager/getflow/GetScreenState;Lcom/android/credentialmanager/common/BaseEntry;Z)Lcom/android/credentialmanager/getflow/GetCredentialUiState;
+HSPLcom/android/credentialmanager/getflow/GetCredentialUiState;->equals(Ljava/lang/Object;)Z
+HSPLcom/android/credentialmanager/getflow/GetCredentialUiState;->getCurrentScreenState()Lcom/android/credentialmanager/getflow/GetScreenState;
+HSPLcom/android/credentialmanager/getflow/GetCredentialUiState;->getProviderDisplayInfo()Lcom/android/credentialmanager/getflow/ProviderDisplayInfo;
+HSPLcom/android/credentialmanager/getflow/GetCredentialUiState;->getProviderInfoList()Ljava/util/List;
+HSPLcom/android/credentialmanager/getflow/GetCredentialUiState;->getRequestDisplayInfo()Lcom/android/credentialmanager/getflow/RequestDisplayInfo;
+HSPLcom/android/credentialmanager/getflow/GetCredentialUiState;->isNoAccount()Z
+HSPLcom/android/credentialmanager/getflow/GetModelKt$toProviderDisplayInfo$$inlined$compareByDescending$1;-><init>()V
+HSPLcom/android/credentialmanager/getflow/GetModelKt;->access$toActiveEntry(Lcom/android/credentialmanager/getflow/ProviderDisplayInfo;)Lcom/android/credentialmanager/common/BaseEntry;
+HSPLcom/android/credentialmanager/getflow/GetModelKt;->access$toGetScreenState(Lcom/android/credentialmanager/getflow/ProviderDisplayInfo;)Lcom/android/credentialmanager/getflow/GetScreenState;
+HSPLcom/android/credentialmanager/getflow/GetModelKt;->access$toProviderDisplayInfo(Ljava/util/List;)Lcom/android/credentialmanager/getflow/ProviderDisplayInfo;
+HSPLcom/android/credentialmanager/getflow/GetModelKt;->findAutoSelectEntry(Lcom/android/credentialmanager/getflow/ProviderDisplayInfo;)Lcom/android/credentialmanager/getflow/CredentialEntryInfo;
+HSPLcom/android/credentialmanager/getflow/GetModelKt;->hasContentToDisplay(Lcom/android/credentialmanager/getflow/GetCredentialUiState;)Z
+HSPLcom/android/credentialmanager/getflow/GetModelKt;->toActiveEntry(Lcom/android/credentialmanager/getflow/ProviderDisplayInfo;)Lcom/android/credentialmanager/common/BaseEntry;
+HSPLcom/android/credentialmanager/getflow/GetModelKt;->toGetScreenState(Lcom/android/credentialmanager/getflow/ProviderDisplayInfo;)Lcom/android/credentialmanager/getflow/GetScreenState;
+HSPLcom/android/credentialmanager/getflow/GetModelKt;->toProviderDisplayInfo(Ljava/util/List;)Lcom/android/credentialmanager/getflow/ProviderDisplayInfo;
+HSPLcom/android/credentialmanager/getflow/GetScreenState;->$values()[Lcom/android/credentialmanager/getflow/GetScreenState;
+HSPLcom/android/credentialmanager/getflow/GetScreenState;-><clinit>()V
+HSPLcom/android/credentialmanager/getflow/GetScreenState;-><init>(Ljava/lang/String;I)V
+HSPLcom/android/credentialmanager/getflow/ProviderDisplayInfo;-><clinit>()V
+HSPLcom/android/credentialmanager/getflow/ProviderDisplayInfo;-><init>(Ljava/util/List;Ljava/util/List;Lcom/android/credentialmanager/getflow/RemoteEntryInfo;)V
+HSPLcom/android/credentialmanager/getflow/ProviderDisplayInfo;->equals(Ljava/lang/Object;)Z
+HSPLcom/android/credentialmanager/getflow/ProviderDisplayInfo;->getAuthenticationEntryList()Ljava/util/List;
+HSPLcom/android/credentialmanager/getflow/ProviderDisplayInfo;->getRemoteEntry()Lcom/android/credentialmanager/getflow/RemoteEntryInfo;
+HSPLcom/android/credentialmanager/getflow/ProviderDisplayInfo;->getSortedUserNameToCredentialEntryList()Ljava/util/List;
+HSPLcom/android/credentialmanager/getflow/ProviderInfo;-><clinit>()V
+HSPLcom/android/credentialmanager/getflow/ProviderInfo;-><init>(Ljava/lang/String;Landroid/graphics/drawable/Drawable;Ljava/lang/String;Ljava/util/List;Ljava/util/List;Lcom/android/credentialmanager/getflow/RemoteEntryInfo;Ljava/util/List;)V
+HSPLcom/android/credentialmanager/getflow/ProviderInfo;->getActionEntryList()Ljava/util/List;
+HSPLcom/android/credentialmanager/getflow/ProviderInfo;->getAuthenticationEntryList()Ljava/util/List;
+HSPLcom/android/credentialmanager/getflow/ProviderInfo;->getCredentialEntryList()Ljava/util/List;
+HSPLcom/android/credentialmanager/getflow/ProviderInfo;->getRemoteEntry()Lcom/android/credentialmanager/getflow/RemoteEntryInfo;
+HSPLcom/android/credentialmanager/getflow/RemoteEntryInfo;-><clinit>()V
+HSPLcom/android/credentialmanager/getflow/RemoteEntryInfo;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/app/PendingIntent;Landroid/content/Intent;)V
+HSPLcom/android/credentialmanager/getflow/RequestDisplayInfo;-><clinit>()V
+HSPLcom/android/credentialmanager/getflow/RequestDisplayInfo;-><init>(Ljava/lang/String;ZZLcom/android/credentialmanager/getflow/TopBrandingContent;)V
+HSPLcom/android/credentialmanager/getflow/RequestDisplayInfo;->equals(Ljava/lang/Object;)Z
+HSPLcom/android/credentialmanager/getflow/RequestDisplayInfo;->getPreferImmediatelyAvailableCredentials()Z
+HSPLcom/android/credentialmanager/logging/GetCredentialEvent;->$values()[Lcom/android/credentialmanager/logging/GetCredentialEvent;
+HSPLcom/android/credentialmanager/logging/GetCredentialEvent;-><clinit>()V
+HSPLcom/android/credentialmanager/logging/GetCredentialEvent;-><init>(Ljava/lang/String;II)V
+HSPLcom/android/credentialmanager/logging/GetCredentialEvent;->getId()I
+HSPLcom/android/credentialmanager/logging/LifecycleEvent;->$values()[Lcom/android/credentialmanager/logging/LifecycleEvent;
+HSPLcom/android/credentialmanager/logging/LifecycleEvent;-><clinit>()V
+HSPLcom/android/credentialmanager/logging/LifecycleEvent;-><init>(Ljava/lang/String;II)V
+HSPLcom/android/credentialmanager/logging/LifecycleEvent;->getId()I
+HSPLcom/android/credentialmanager/logging/UIMetrics$log$1;-><init>(Lcom/android/credentialmanager/logging/UIMetrics;Lcom/android/internal/logging/UiEventLogger$UiEventEnum;Lcom/android/internal/logging/InstanceId;Lkotlin/coroutines/Continuation;)V
+HSPLcom/android/credentialmanager/logging/UIMetrics$log$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLcom/android/credentialmanager/logging/UIMetrics$log$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/credentialmanager/logging/UIMetrics$log$3;-><init>(Lcom/android/credentialmanager/logging/UIMetrics;Lcom/android/internal/logging/UiEventLogger$UiEventEnum;Ljava/lang/String;Lcom/android/internal/logging/InstanceId;Lkotlin/coroutines/Continuation;)V
+HSPLcom/android/credentialmanager/logging/UIMetrics$log$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLcom/android/credentialmanager/logging/UIMetrics$log$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/credentialmanager/logging/UIMetrics;-><clinit>()V
+HSPLcom/android/credentialmanager/logging/UIMetrics;-><init>()V
+HSPLcom/android/credentialmanager/logging/UIMetrics;->access$getMUiEventLogger$p(Lcom/android/credentialmanager/logging/UIMetrics;)Lcom/android/internal/logging/UiEventLogger;
+HSPLcom/android/credentialmanager/logging/UIMetrics;->log(Lcom/android/internal/logging/UiEventLogger$UiEventEnum;Landroidx/compose/runtime/Composer;I)V
+HSPLcom/android/credentialmanager/logging/UIMetrics;->log(Lcom/android/internal/logging/UiEventLogger$UiEventEnum;Ljava/lang/String;Landroidx/compose/runtime/Composer;I)V
+HSPLcom/android/credentialmanager/logging/UIMetrics;->logNormal(Lcom/android/internal/logging/UiEventLogger$UiEventEnum;Ljava/lang/String;)V
+HSPLcom/android/credentialmanager/ui/theme/AndroidColorScheme$Companion;-><init>()V
+HSPLcom/android/credentialmanager/ui/theme/AndroidColorScheme$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLcom/android/credentialmanager/ui/theme/AndroidColorScheme$Companion;->getColor-WaAFU9c(Landroid/content/Context;I)J
HSPLcom/android/credentialmanager/ui/theme/AndroidColorScheme;-><clinit>()V
HSPLcom/android/credentialmanager/ui/theme/AndroidColorScheme;-><init>(Landroid/content/Context;)V
-HSPLcom/android/credentialmanager/ui/theme/AndroidColorScheme;->getColor-WaAFU9c(Landroid/content/Context;I)J
-HSPLcom/android/credentialmanager/ui/theme/AndroidColorScheme;->getColorAccentPrimaryVariant-0d7_KjU()J
+HSPLcom/android/credentialmanager/ui/theme/AndroidColorScheme;->getColorOnSurface-0d7_KjU()J
+HSPLcom/android/credentialmanager/ui/theme/AndroidColorScheme;->getColorOnSurfaceVariant-0d7_KjU()J
+HSPLcom/android/credentialmanager/ui/theme/AndroidColorScheme;->getColorSurfaceBright-0d7_KjU()J
+HSPLcom/android/credentialmanager/ui/theme/AndroidColorScheme;->getColorSurfaceContainerHigh-0d7_KjU()J
HSPLcom/android/credentialmanager/ui/theme/AndroidColorSchemeKt$LocalAndroidColorScheme$1;-><clinit>()V
HSPLcom/android/credentialmanager/ui/theme/AndroidColorSchemeKt$LocalAndroidColorScheme$1;-><init>()V
HSPLcom/android/credentialmanager/ui/theme/AndroidColorSchemeKt;-><clinit>()V
HSPLcom/android/credentialmanager/ui/theme/AndroidColorSchemeKt;->getLocalAndroidColorScheme()Landroidx/compose/runtime/ProvidableCompositionLocal;
-HSPLcom/android/credentialmanager/ui/theme/ColorKt;-><clinit>()V
-HSPLcom/android/credentialmanager/ui/theme/ColorKt;->getTextColorPrimary()J
-HSPLcom/android/credentialmanager/ui/theme/ColorKt;->getTextColorSecondary()J
HSPLcom/android/credentialmanager/ui/theme/EntryShape;-><clinit>()V
HSPLcom/android/credentialmanager/ui/theme/EntryShape;-><init>()V
HSPLcom/android/credentialmanager/ui/theme/EntryShape;->getFullSmallRoundedCorner()Landroidx/compose/foundation/shape/RoundedCornerShape;
HSPLcom/android/credentialmanager/ui/theme/EntryShape;->getTopRoundedCorner()Landroidx/compose/foundation/shape/RoundedCornerShape;
+HSPLcom/android/credentialmanager/ui/theme/PlatformThemeKt$PlatformTheme$1$1;-><init>(Lkotlin/jvm/functions/Function2;I)V
+HSPLcom/android/credentialmanager/ui/theme/PlatformThemeKt$PlatformTheme$1$1;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLcom/android/credentialmanager/ui/theme/PlatformThemeKt$PlatformTheme$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/credentialmanager/ui/theme/PlatformThemeKt$PlatformTheme$1;-><init>(Lcom/android/credentialmanager/ui/theme/AndroidColorScheme;Lkotlin/jvm/functions/Function2;I)V
+HSPLcom/android/credentialmanager/ui/theme/PlatformThemeKt$PlatformTheme$1;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLcom/android/credentialmanager/ui/theme/PlatformThemeKt$PlatformTheme$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/credentialmanager/ui/theme/PlatformThemeKt$PlatformTheme$2;-><init>(ZLkotlin/jvm/functions/Function2;II)V
+HSPLcom/android/credentialmanager/ui/theme/PlatformThemeKt$PlatformTheme$2;->invoke(Landroidx/compose/runtime/Composer;I)V
+HSPLcom/android/credentialmanager/ui/theme/PlatformThemeKt$PlatformTheme$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/credentialmanager/ui/theme/PlatformThemeKt;->PlatformTheme(ZLkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
HSPLcom/android/credentialmanager/ui/theme/ShapeKt;-><clinit>()V
HSPLcom/android/credentialmanager/ui/theme/ShapeKt;->getShapes()Landroidx/compose/material3/Shapes;
-HSPLcom/android/credentialmanager/ui/theme/ThemeKt$CredentialSelectorTheme$1$1;-><init>(Lkotlin/jvm/functions/Function2;I)V
-HSPLcom/android/credentialmanager/ui/theme/ThemeKt$CredentialSelectorTheme$1$1;->invoke(Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/ui/theme/ThemeKt$CredentialSelectorTheme$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/ui/theme/ThemeKt$CredentialSelectorTheme$1;-><init>(Lcom/android/credentialmanager/ui/theme/AndroidColorScheme;Lkotlin/jvm/functions/Function2;I)V
-HSPLcom/android/credentialmanager/ui/theme/ThemeKt$CredentialSelectorTheme$1;->invoke(Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/ui/theme/ThemeKt$CredentialSelectorTheme$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/ui/theme/ThemeKt$CredentialSelectorTheme$2;-><init>(ZLkotlin/jvm/functions/Function2;II)V
-HSPLcom/android/credentialmanager/ui/theme/ThemeKt$CredentialSelectorTheme$2;->invoke(Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/ui/theme/ThemeKt$CredentialSelectorTheme$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/ui/theme/ThemeKt;->CredentialSelectorTheme(ZLkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
-HSPLcom/android/credentialmanager/ui/theme/TypeKt;-><clinit>()V
-HSPLcom/android/credentialmanager/ui/theme/TypeKt;->getTypography()Landroidx/compose/material3/Typography;
+HSPLcom/android/credentialmanager/ui/theme/typography/PlatformTypographyKt;->platformTypography(Lcom/android/credentialmanager/ui/theme/typography/TypographyTokens;)Landroidx/compose/material3/Typography;
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;-><init>(Lcom/android/credentialmanager/ui/theme/typography/TypefaceTokens;)V
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getBodyLargeFont()Landroidx/compose/ui/text/font/FontFamily;
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getBodyLargeLineHeight-XSAIIZE()J
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getBodyLargeSize-XSAIIZE()J
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getBodyLargeTracking-XSAIIZE()J
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getBodyLargeWeight()Landroidx/compose/ui/text/font/FontWeight;
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getBodyMediumFont()Landroidx/compose/ui/text/font/FontFamily;
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getBodyMediumLineHeight-XSAIIZE()J
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getBodyMediumSize-XSAIIZE()J
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getBodyMediumTracking-XSAIIZE()J
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getBodyMediumWeight()Landroidx/compose/ui/text/font/FontWeight;
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getBodySmallFont()Landroidx/compose/ui/text/font/FontFamily;
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getBodySmallLineHeight-XSAIIZE()J
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getBodySmallSize-XSAIIZE()J
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getBodySmallTracking-XSAIIZE()J
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getBodySmallWeight()Landroidx/compose/ui/text/font/FontWeight;
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getDisplayLargeFont()Landroidx/compose/ui/text/font/FontFamily;
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getDisplayLargeLineHeight-XSAIIZE()J
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getDisplayLargeSize-XSAIIZE()J
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getDisplayLargeTracking-XSAIIZE()J
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getDisplayLargeWeight()Landroidx/compose/ui/text/font/FontWeight;
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getDisplayMediumFont()Landroidx/compose/ui/text/font/FontFamily;
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getDisplayMediumLineHeight-XSAIIZE()J
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getDisplayMediumSize-XSAIIZE()J
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getDisplayMediumTracking-XSAIIZE()J
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getDisplayMediumWeight()Landroidx/compose/ui/text/font/FontWeight;
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getDisplaySmallFont()Landroidx/compose/ui/text/font/FontFamily;
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getDisplaySmallLineHeight-XSAIIZE()J
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getDisplaySmallSize-XSAIIZE()J
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getDisplaySmallTracking-XSAIIZE()J
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getDisplaySmallWeight()Landroidx/compose/ui/text/font/FontWeight;
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getHeadlineLargeFont()Landroidx/compose/ui/text/font/FontFamily;
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getHeadlineLargeLineHeight-XSAIIZE()J
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getHeadlineLargeSize-XSAIIZE()J
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getHeadlineLargeTracking-XSAIIZE()J
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getHeadlineLargeWeight()Landroidx/compose/ui/text/font/FontWeight;
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getHeadlineMediumFont()Landroidx/compose/ui/text/font/FontFamily;
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getHeadlineMediumLineHeight-XSAIIZE()J
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getHeadlineMediumSize-XSAIIZE()J
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getHeadlineMediumTracking-XSAIIZE()J
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getHeadlineMediumWeight()Landroidx/compose/ui/text/font/FontWeight;
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getHeadlineSmallFont()Landroidx/compose/ui/text/font/FontFamily;
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getHeadlineSmallLineHeight-XSAIIZE()J
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getHeadlineSmallSize-XSAIIZE()J
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getHeadlineSmallTracking-XSAIIZE()J
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getHeadlineSmallWeight()Landroidx/compose/ui/text/font/FontWeight;
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getLabelLargeFont()Landroidx/compose/ui/text/font/FontFamily;
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getLabelLargeLineHeight-XSAIIZE()J
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getLabelLargeSize-XSAIIZE()J
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getLabelLargeTracking-XSAIIZE()J
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getLabelLargeWeight()Landroidx/compose/ui/text/font/FontWeight;
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getLabelMediumFont()Landroidx/compose/ui/text/font/FontFamily;
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getLabelMediumLineHeight-XSAIIZE()J
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getLabelMediumSize-XSAIIZE()J
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getLabelMediumTracking-XSAIIZE()J
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getLabelMediumWeight()Landroidx/compose/ui/text/font/FontWeight;
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getLabelSmallFont()Landroidx/compose/ui/text/font/FontFamily;
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getLabelSmallLineHeight-XSAIIZE()J
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getLabelSmallSize-XSAIIZE()J
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getLabelSmallTracking-XSAIIZE()J
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getLabelSmallWeight()Landroidx/compose/ui/text/font/FontWeight;
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getTitleLargeFont()Landroidx/compose/ui/text/font/FontFamily;
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getTitleLargeLineHeight-XSAIIZE()J
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getTitleLargeSize-XSAIIZE()J
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getTitleLargeTracking-XSAIIZE()J
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getTitleLargeWeight()Landroidx/compose/ui/text/font/FontWeight;
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getTitleMediumFont()Landroidx/compose/ui/text/font/FontFamily;
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getTitleMediumLineHeight-XSAIIZE()J
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getTitleMediumSize-XSAIIZE()J
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getTitleMediumTracking-XSAIIZE()J
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getTitleMediumWeight()Landroidx/compose/ui/text/font/FontWeight;
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getTitleSmallFont()Landroidx/compose/ui/text/font/FontFamily;
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getTitleSmallLineHeight-XSAIIZE()J
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getTitleSmallSize-XSAIIZE()J
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getTitleSmallTracking-XSAIIZE()J
+HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getTitleSmallWeight()Landroidx/compose/ui/text/font/FontWeight;
+HSPLcom/android/credentialmanager/ui/theme/typography/TypefaceNames$Companion;-><init>()V
+HSPLcom/android/credentialmanager/ui/theme/typography/TypefaceNames$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLcom/android/credentialmanager/ui/theme/typography/TypefaceNames$Companion;->get(Landroid/content/Context;)Lcom/android/credentialmanager/ui/theme/typography/TypefaceNames;
+HSPLcom/android/credentialmanager/ui/theme/typography/TypefaceNames$Companion;->getTypefaceName(Landroid/content/Context;Lcom/android/credentialmanager/ui/theme/typography/TypefaceNames$Config;)Ljava/lang/String;
+HSPLcom/android/credentialmanager/ui/theme/typography/TypefaceNames$Config;->$values()[Lcom/android/credentialmanager/ui/theme/typography/TypefaceNames$Config;
+HSPLcom/android/credentialmanager/ui/theme/typography/TypefaceNames$Config;-><clinit>()V
+HSPLcom/android/credentialmanager/ui/theme/typography/TypefaceNames$Config;-><init>(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/credentialmanager/ui/theme/typography/TypefaceNames$Config;->getConfigName()Ljava/lang/String;
+HSPLcom/android/credentialmanager/ui/theme/typography/TypefaceNames;-><clinit>()V
+HSPLcom/android/credentialmanager/ui/theme/typography/TypefaceNames;-><init>(Ljava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/credentialmanager/ui/theme/typography/TypefaceNames;-><init>(Ljava/lang/String;Ljava/lang/String;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLcom/android/credentialmanager/ui/theme/typography/TypefaceNames;->equals(Ljava/lang/Object;)Z
+HSPLcom/android/credentialmanager/ui/theme/typography/TypefaceNames;->getBrand()Ljava/lang/String;
+HSPLcom/android/credentialmanager/ui/theme/typography/TypefaceNames;->getPlain()Ljava/lang/String;
+HSPLcom/android/credentialmanager/ui/theme/typography/TypefaceTokens$Companion;-><init>()V
+HSPLcom/android/credentialmanager/ui/theme/typography/TypefaceTokens$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLcom/android/credentialmanager/ui/theme/typography/TypefaceTokens$Companion;->getWeightMedium()Landroidx/compose/ui/text/font/FontWeight;
+HSPLcom/android/credentialmanager/ui/theme/typography/TypefaceTokens$Companion;->getWeightRegular()Landroidx/compose/ui/text/font/FontWeight;
+HSPLcom/android/credentialmanager/ui/theme/typography/TypefaceTokens;-><clinit>()V
+HSPLcom/android/credentialmanager/ui/theme/typography/TypefaceTokens;-><init>(Lcom/android/credentialmanager/ui/theme/typography/TypefaceNames;)V
+HSPLcom/android/credentialmanager/ui/theme/typography/TypefaceTokens;->access$getWeightMedium$cp()Landroidx/compose/ui/text/font/FontWeight;
+HSPLcom/android/credentialmanager/ui/theme/typography/TypefaceTokens;->access$getWeightRegular$cp()Landroidx/compose/ui/text/font/FontWeight;
+HSPLcom/android/credentialmanager/ui/theme/typography/TypefaceTokens;->getBrand()Landroidx/compose/ui/text/font/FontFamily;
+HSPLcom/android/credentialmanager/ui/theme/typography/TypefaceTokens;->getPlain()Landroidx/compose/ui/text/font/FontFamily;
+HSPLcom/android/credentialmanager/ui/theme/typography/TypographyTokens;-><init>(Lcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;)V
+HSPLcom/android/credentialmanager/ui/theme/typography/TypographyTokens;->getBodyLarge()Landroidx/compose/ui/text/TextStyle;
+HSPLcom/android/credentialmanager/ui/theme/typography/TypographyTokens;->getBodyMedium()Landroidx/compose/ui/text/TextStyle;
+HSPLcom/android/credentialmanager/ui/theme/typography/TypographyTokens;->getBodySmall()Landroidx/compose/ui/text/TextStyle;
+HSPLcom/android/credentialmanager/ui/theme/typography/TypographyTokens;->getDisplayLarge()Landroidx/compose/ui/text/TextStyle;
+HSPLcom/android/credentialmanager/ui/theme/typography/TypographyTokens;->getDisplayMedium()Landroidx/compose/ui/text/TextStyle;
+HSPLcom/android/credentialmanager/ui/theme/typography/TypographyTokens;->getDisplaySmall()Landroidx/compose/ui/text/TextStyle;
+HSPLcom/android/credentialmanager/ui/theme/typography/TypographyTokens;->getHeadlineLarge()Landroidx/compose/ui/text/TextStyle;
+HSPLcom/android/credentialmanager/ui/theme/typography/TypographyTokens;->getHeadlineMedium()Landroidx/compose/ui/text/TextStyle;
+HSPLcom/android/credentialmanager/ui/theme/typography/TypographyTokens;->getHeadlineSmall()Landroidx/compose/ui/text/TextStyle;
+HSPLcom/android/credentialmanager/ui/theme/typography/TypographyTokens;->getLabelLarge()Landroidx/compose/ui/text/TextStyle;
+HSPLcom/android/credentialmanager/ui/theme/typography/TypographyTokens;->getLabelMedium()Landroidx/compose/ui/text/TextStyle;
+HSPLcom/android/credentialmanager/ui/theme/typography/TypographyTokens;->getLabelSmall()Landroidx/compose/ui/text/TextStyle;
+HSPLcom/android/credentialmanager/ui/theme/typography/TypographyTokens;->getTitleLarge()Landroidx/compose/ui/text/TextStyle;
+HSPLcom/android/credentialmanager/ui/theme/typography/TypographyTokens;->getTitleMedium()Landroidx/compose/ui/text/TextStyle;
+HSPLcom/android/credentialmanager/ui/theme/typography/TypographyTokens;->getTitleSmall()Landroidx/compose/ui/text/TextStyle;
HSPLkotlin/LazyKt;->lazy(Lkotlin/LazyThreadSafetyMode;Lkotlin/jvm/functions/Function0;)Lkotlin/Lazy;
HSPLkotlin/LazyKt;->lazy(Lkotlin/jvm/functions/Function0;)Lkotlin/Lazy;
HSPLkotlin/LazyKt__LazyJVMKt$WhenMappings;-><clinit>()V
@@ -7029,12 +9344,14 @@
HSPLkotlin/Result;->constructor-impl(Ljava/lang/Object;)Ljava/lang/Object;
HSPLkotlin/Result;->exceptionOrNull-impl(Ljava/lang/Object;)Ljava/lang/Throwable;
HSPLkotlin/Result;->isFailure-impl(Ljava/lang/Object;)Z
-HSPLkotlin/Result;->isSuccess-impl(Ljava/lang/Object;)Z
HSPLkotlin/ResultKt;->createFailure(Ljava/lang/Throwable;)Ljava/lang/Object;
HSPLkotlin/ResultKt;->throwOnFailure(Ljava/lang/Object;)V
HSPLkotlin/SynchronizedLazyImpl;-><init>(Lkotlin/jvm/functions/Function0;Ljava/lang/Object;)V
HSPLkotlin/SynchronizedLazyImpl;-><init>(Lkotlin/jvm/functions/Function0;Ljava/lang/Object;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLkotlin/SynchronizedLazyImpl;->getValue()Ljava/lang/Object;
+HSPLkotlin/Triple;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLkotlin/Triple;->component1()Ljava/lang/Object;
+HSPLkotlin/Triple;->component2()Ljava/lang/Object;
HSPLkotlin/TuplesKt;->to(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
HSPLkotlin/ULong$Companion;-><init>()V
HSPLkotlin/ULong$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
@@ -7052,6 +9369,7 @@
HSPLkotlin/collections/AbstractCollection;->size()I
HSPLkotlin/collections/AbstractList$Companion;-><init>()V
HSPLkotlin/collections/AbstractList$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+HSPLkotlin/collections/AbstractList$Companion;->checkElementIndex$kotlin_stdlib(II)V
HSPLkotlin/collections/AbstractList;-><clinit>()V
HSPLkotlin/collections/AbstractList;-><init>()V
HSPLkotlin/collections/AbstractMap$Companion;-><init>()V
@@ -7063,6 +9381,7 @@
HSPLkotlin/collections/AbstractMap;->equals(Ljava/lang/Object;)Z
HSPLkotlin/collections/AbstractMap;->size()I
HSPLkotlin/collections/AbstractMutableList;-><init>()V
+HSPLkotlin/collections/AbstractMutableList;->remove(I)Ljava/lang/Object;
HSPLkotlin/collections/AbstractMutableList;->size()I
HSPLkotlin/collections/AbstractMutableMap;-><init>()V
HSPLkotlin/collections/AbstractMutableMap;->size()I
@@ -7072,22 +9391,26 @@
HSPLkotlin/collections/AbstractSet;-><clinit>()V
HSPLkotlin/collections/AbstractSet;-><init>()V
HSPLkotlin/collections/AbstractSet;->equals(Ljava/lang/Object;)Z
-HSPLkotlin/collections/ArrayAsCollection;-><init>([Ljava/lang/Object;Z)V
-HSPLkotlin/collections/ArrayAsCollection;->toArray()[Ljava/lang/Object;
HSPLkotlin/collections/ArrayDeque$Companion;-><init>()V
HSPLkotlin/collections/ArrayDeque$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLkotlin/collections/ArrayDeque$Companion;->newCapacity$kotlin_stdlib(II)I
HSPLkotlin/collections/ArrayDeque;-><clinit>()V
HSPLkotlin/collections/ArrayDeque;-><init>()V
+HSPLkotlin/collections/ArrayDeque;->add(Ljava/lang/Object;)Z
HSPLkotlin/collections/ArrayDeque;->addLast(Ljava/lang/Object;)V
HSPLkotlin/collections/ArrayDeque;->copyElements(I)V
HSPLkotlin/collections/ArrayDeque;->ensureCapacity(I)V
+HSPLkotlin/collections/ArrayDeque;->get(I)Ljava/lang/Object;
HSPLkotlin/collections/ArrayDeque;->getSize()I
HSPLkotlin/collections/ArrayDeque;->incremented(I)I
+HSPLkotlin/collections/ArrayDeque;->indexOf(Ljava/lang/Object;)I
HSPLkotlin/collections/ArrayDeque;->isEmpty()Z
HSPLkotlin/collections/ArrayDeque;->positiveMod(I)I
+HSPLkotlin/collections/ArrayDeque;->remove(Ljava/lang/Object;)Z
+HSPLkotlin/collections/ArrayDeque;->removeAt(I)Ljava/lang/Object;
HSPLkotlin/collections/ArrayDeque;->removeFirst()Ljava/lang/Object;
HSPLkotlin/collections/ArrayDeque;->removeFirstOrNull()Ljava/lang/Object;
+HSPLkotlin/collections/ArrayDeque;->removeLast()Ljava/lang/Object;
HSPLkotlin/collections/ArraysKt;->asList([Ljava/lang/Object;)Ljava/util/List;
HSPLkotlin/collections/ArraysKt;->copyInto$default([F[FIIIILjava/lang/Object;)[F
HSPLkotlin/collections/ArraysKt;->copyInto$default([I[IIIIILjava/lang/Object;)[I
@@ -7096,11 +9419,12 @@
HSPLkotlin/collections/ArraysKt;->copyInto([I[IIII)[I
HSPLkotlin/collections/ArraysKt;->copyInto([Ljava/lang/Object;[Ljava/lang/Object;III)[Ljava/lang/Object;
HSPLkotlin/collections/ArraysKt;->copyOfRange([Ljava/lang/Object;II)[Ljava/lang/Object;
+HSPLkotlin/collections/ArraysKt;->fill$default([IIIIILjava/lang/Object;)V
HSPLkotlin/collections/ArraysKt;->fill$default([Ljava/lang/Object;Ljava/lang/Object;IIILjava/lang/Object;)V
+HSPLkotlin/collections/ArraysKt;->fill([IIII)V
HSPLkotlin/collections/ArraysKt;->fill([Ljava/lang/Object;Ljava/lang/Object;II)V
HSPLkotlin/collections/ArraysKt;->getLastIndex([Ljava/lang/Object;)I
HSPLkotlin/collections/ArraysKt;->sortWith([Ljava/lang/Object;Ljava/util/Comparator;II)V
-HSPLkotlin/collections/ArraysKt;->toList([Ljava/lang/Object;)Ljava/util/List;
HSPLkotlin/collections/ArraysKt__ArraysJVMKt;->copyOfRangeToIndexCheck(II)V
HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->asList([Ljava/lang/Object;)Ljava/util/List;
HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto$default([F[FIIIILjava/lang/Object;)[F
@@ -7110,13 +9434,12 @@
HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto([I[IIII)[I
HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto([Ljava/lang/Object;[Ljava/lang/Object;III)[Ljava/lang/Object;
HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyOfRange([Ljava/lang/Object;II)[Ljava/lang/Object;
+HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->fill$default([IIIIILjava/lang/Object;)V
HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->fill$default([Ljava/lang/Object;Ljava/lang/Object;IIILjava/lang/Object;)V
+HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->fill([IIII)V
HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->fill([Ljava/lang/Object;Ljava/lang/Object;II)V
-HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->sortWith([Ljava/lang/Object;Ljava/util/Comparator;)V
HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->sortWith([Ljava/lang/Object;Ljava/util/Comparator;II)V
HSPLkotlin/collections/ArraysKt___ArraysKt;->getLastIndex([Ljava/lang/Object;)I
-HSPLkotlin/collections/ArraysKt___ArraysKt;->toList([Ljava/lang/Object;)Ljava/util/List;
-HSPLkotlin/collections/ArraysKt___ArraysKt;->toMutableList([Ljava/lang/Object;)Ljava/util/List;
HSPLkotlin/collections/ArraysUtilJVM;->asList([Ljava/lang/Object;)Ljava/util/List;
HSPLkotlin/collections/CollectionsKt;->addAll(Ljava/util/Collection;Ljava/lang/Iterable;)Z
HSPLkotlin/collections/CollectionsKt;->collectionSizeOrDefault(Ljava/lang/Iterable;I)I
@@ -7125,6 +9448,7 @@
HSPLkotlin/collections/CollectionsKt;->first(Ljava/util/List;)Ljava/lang/Object;
HSPLkotlin/collections/CollectionsKt;->firstOrNull(Ljava/lang/Iterable;)Ljava/lang/Object;
HSPLkotlin/collections/CollectionsKt;->getLastIndex(Ljava/util/List;)I
+HSPLkotlin/collections/CollectionsKt;->getOrNull(Ljava/util/List;I)Ljava/lang/Object;
HSPLkotlin/collections/CollectionsKt;->last(Ljava/util/List;)Ljava/lang/Object;
HSPLkotlin/collections/CollectionsKt;->lastOrNull(Ljava/util/List;)Ljava/lang/Object;
HSPLkotlin/collections/CollectionsKt;->listOf(Ljava/lang/Object;)Ljava/util/List;
@@ -7132,30 +9456,31 @@
HSPLkotlin/collections/CollectionsKt;->listOfNotNull(Ljava/lang/Object;)Ljava/util/List;
HSPLkotlin/collections/CollectionsKt;->maxOrNull(Ljava/lang/Iterable;)Ljava/lang/Float;
HSPLkotlin/collections/CollectionsKt;->minOrNull(Ljava/lang/Iterable;)Ljava/lang/Float;
-HSPLkotlin/collections/CollectionsKt;->plus(Ljava/util/Collection;Ljava/lang/Iterable;)Ljava/util/List;
+HSPLkotlin/collections/CollectionsKt;->optimizeReadOnlyList(Ljava/util/List;)Ljava/util/List;
+HSPLkotlin/collections/CollectionsKt;->removeFirstOrNull(Ljava/util/List;)Ljava/lang/Object;
HSPLkotlin/collections/CollectionsKt;->singleOrNull(Ljava/util/List;)Ljava/lang/Object;
HSPLkotlin/collections/CollectionsKt;->sortWith(Ljava/util/List;Ljava/util/Comparator;)V
HSPLkotlin/collections/CollectionsKt;->sortedWith(Ljava/lang/Iterable;Ljava/util/Comparator;)Ljava/util/List;
HSPLkotlin/collections/CollectionsKt;->toList(Ljava/lang/Iterable;)Ljava/util/List;
HSPLkotlin/collections/CollectionsKt;->toMutableList(Ljava/util/Collection;)Ljava/util/List;
-HSPLkotlin/collections/CollectionsKt__CollectionsJVMKt;->copyToArrayOfAny([Ljava/lang/Object;Z)[Ljava/lang/Object;
HSPLkotlin/collections/CollectionsKt__CollectionsJVMKt;->listOf(Ljava/lang/Object;)Ljava/util/List;
-HSPLkotlin/collections/CollectionsKt__CollectionsKt;->asCollection([Ljava/lang/Object;)Ljava/util/Collection;
HSPLkotlin/collections/CollectionsKt__CollectionsKt;->emptyList()Ljava/util/List;
HSPLkotlin/collections/CollectionsKt__CollectionsKt;->getLastIndex(Ljava/util/List;)I
HSPLkotlin/collections/CollectionsKt__CollectionsKt;->listOf([Ljava/lang/Object;)Ljava/util/List;
HSPLkotlin/collections/CollectionsKt__CollectionsKt;->listOfNotNull(Ljava/lang/Object;)Ljava/util/List;
+HSPLkotlin/collections/CollectionsKt__CollectionsKt;->optimizeReadOnlyList(Ljava/util/List;)Ljava/util/List;
HSPLkotlin/collections/CollectionsKt__IterablesKt;->collectionSizeOrDefault(Ljava/lang/Iterable;I)I
HSPLkotlin/collections/CollectionsKt__MutableCollectionsJVMKt;->sortWith(Ljava/util/List;Ljava/util/Comparator;)V
HSPLkotlin/collections/CollectionsKt__MutableCollectionsKt;->addAll(Ljava/util/Collection;Ljava/lang/Iterable;)Z
+HSPLkotlin/collections/CollectionsKt__MutableCollectionsKt;->removeFirstOrNull(Ljava/util/List;)Ljava/lang/Object;
HSPLkotlin/collections/CollectionsKt___CollectionsKt;->distinct(Ljava/lang/Iterable;)Ljava/util/List;
HSPLkotlin/collections/CollectionsKt___CollectionsKt;->first(Ljava/util/List;)Ljava/lang/Object;
HSPLkotlin/collections/CollectionsKt___CollectionsKt;->firstOrNull(Ljava/lang/Iterable;)Ljava/lang/Object;
+HSPLkotlin/collections/CollectionsKt___CollectionsKt;->getOrNull(Ljava/util/List;I)Ljava/lang/Object;
HSPLkotlin/collections/CollectionsKt___CollectionsKt;->last(Ljava/util/List;)Ljava/lang/Object;
HSPLkotlin/collections/CollectionsKt___CollectionsKt;->lastOrNull(Ljava/util/List;)Ljava/lang/Object;
HSPLkotlin/collections/CollectionsKt___CollectionsKt;->maxOrNull(Ljava/lang/Iterable;)Ljava/lang/Float;
HSPLkotlin/collections/CollectionsKt___CollectionsKt;->minOrNull(Ljava/lang/Iterable;)Ljava/lang/Float;
-HSPLkotlin/collections/CollectionsKt___CollectionsKt;->plus(Ljava/util/Collection;Ljava/lang/Iterable;)Ljava/util/List;
HSPLkotlin/collections/CollectionsKt___CollectionsKt;->singleOrNull(Ljava/util/List;)Ljava/lang/Object;
HSPLkotlin/collections/CollectionsKt___CollectionsKt;->sortedWith(Ljava/lang/Iterable;Ljava/util/Comparator;)Ljava/util/List;
HSPLkotlin/collections/CollectionsKt___CollectionsKt;->toList(Ljava/lang/Iterable;)Ljava/util/List;
@@ -7170,21 +9495,21 @@
HSPLkotlin/collections/EmptyList;->equals(Ljava/lang/Object;)Z
HSPLkotlin/collections/EmptyList;->getSize()I
HSPLkotlin/collections/EmptyList;->isEmpty()Z
-HSPLkotlin/collections/EmptyList;->iterator()Ljava/util/Iterator;
-HSPLkotlin/collections/EmptyList;->listIterator()Ljava/util/ListIterator;
HSPLkotlin/collections/EmptyList;->size()I
-HSPLkotlin/collections/EmptyList;->toArray()[Ljava/lang/Object;
HSPLkotlin/collections/EmptyMap;-><clinit>()V
HSPLkotlin/collections/EmptyMap;-><init>()V
+HSPLkotlin/collections/EmptyMap;->containsKey(Ljava/lang/Object;)Z
HSPLkotlin/collections/EmptyMap;->entrySet()Ljava/util/Set;
HSPLkotlin/collections/EmptyMap;->equals(Ljava/lang/Object;)Z
HSPLkotlin/collections/EmptyMap;->get(Ljava/lang/Object;)Ljava/lang/Object;
HSPLkotlin/collections/EmptyMap;->get(Ljava/lang/Object;)Ljava/lang/Void;
HSPLkotlin/collections/EmptyMap;->getEntries()Ljava/util/Set;
HSPLkotlin/collections/EmptyMap;->getKeys()Ljava/util/Set;
+HSPLkotlin/collections/EmptyMap;->getSize()I
HSPLkotlin/collections/EmptyMap;->getValues()Ljava/util/Collection;
HSPLkotlin/collections/EmptyMap;->isEmpty()Z
HSPLkotlin/collections/EmptyMap;->keySet()Ljava/util/Set;
+HSPLkotlin/collections/EmptyMap;->size()I
HSPLkotlin/collections/EmptyMap;->values()Ljava/util/Collection;
HSPLkotlin/collections/EmptySet;-><clinit>()V
HSPLkotlin/collections/EmptySet;-><init>()V
@@ -7194,6 +9519,7 @@
HSPLkotlin/collections/MapsKt;->mapCapacity(I)I
HSPLkotlin/collections/MapsKt;->mapOf([Lkotlin/Pair;)Ljava/util/Map;
HSPLkotlin/collections/MapsKt;->toMap(Ljava/lang/Iterable;)Ljava/util/Map;
+HSPLkotlin/collections/MapsKt;->toMutableMap(Ljava/util/Map;)Ljava/util/Map;
HSPLkotlin/collections/MapsKt__MapsJVMKt;->mapCapacity(I)I
HSPLkotlin/collections/MapsKt__MapsKt;->emptyMap()Ljava/util/Map;
HSPLkotlin/collections/MapsKt__MapsKt;->mapOf([Lkotlin/Pair;)Ljava/util/Map;
@@ -7202,6 +9528,7 @@
HSPLkotlin/collections/MapsKt__MapsKt;->toMap(Ljava/lang/Iterable;)Ljava/util/Map;
HSPLkotlin/collections/MapsKt__MapsKt;->toMap(Ljava/lang/Iterable;Ljava/util/Map;)Ljava/util/Map;
HSPLkotlin/collections/MapsKt__MapsKt;->toMap([Lkotlin/Pair;Ljava/util/Map;)Ljava/util/Map;
+HSPLkotlin/collections/MapsKt__MapsKt;->toMutableMap(Ljava/util/Map;)Ljava/util/Map;
HSPLkotlin/comparisons/ComparisonsKt;->compareValues(Ljava/lang/Comparable;Ljava/lang/Comparable;)I
HSPLkotlin/comparisons/ComparisonsKt__ComparisonsKt;->compareValues(Ljava/lang/Comparable;Ljava/lang/Comparable;)I
HSPLkotlin/coroutines/AbstractCoroutineContextElement;-><init>(Lkotlin/coroutines/CoroutineContext$Key;)V
@@ -7213,7 +9540,7 @@
HSPLkotlin/coroutines/AbstractCoroutineContextKey;-><init>(Lkotlin/coroutines/CoroutineContext$Key;Lkotlin/jvm/functions/Function1;)V
HSPLkotlin/coroutines/CombinedContext;-><init>(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext$Element;)V
HSPLkotlin/coroutines/CombinedContext;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
-HSPLkotlin/coroutines/CombinedContext;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;+]Lkotlin/coroutines/CoroutineContext;megamorphic_types]Lkotlin/coroutines/CoroutineContext$Element;megamorphic_types
+HSPLkotlin/coroutines/CombinedContext;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;
HSPLkotlin/coroutines/CombinedContext;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;
HSPLkotlin/coroutines/CombinedContext;->plus(Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext;
HSPLkotlin/coroutines/ContinuationInterceptor$DefaultImpls;->get(Lkotlin/coroutines/ContinuationInterceptor;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;
@@ -7255,6 +9582,7 @@
HSPLkotlin/coroutines/jvm/internal/BaseContinuationImpl;->releaseIntercepted()V
HSPLkotlin/coroutines/jvm/internal/BaseContinuationImpl;->resumeWith(Ljava/lang/Object;)V
HSPLkotlin/coroutines/jvm/internal/Boxing;->boxBoolean(Z)Ljava/lang/Boolean;
+HSPLkotlin/coroutines/jvm/internal/Boxing;->boxFloat(F)Ljava/lang/Float;
HSPLkotlin/coroutines/jvm/internal/CompletedContinuation;-><clinit>()V
HSPLkotlin/coroutines/jvm/internal/CompletedContinuation;-><init>()V
HSPLkotlin/coroutines/jvm/internal/ContinuationImpl;-><init>(Lkotlin/coroutines/Continuation;)V
@@ -7290,19 +9618,19 @@
HSPLkotlin/jvm/internal/ClassReference;-><init>(Ljava/lang/Class;)V
HSPLkotlin/jvm/internal/ClassReference;->equals(Ljava/lang/Object;)Z
HSPLkotlin/jvm/internal/ClassReference;->getJClass()Ljava/lang/Class;
-HSPLkotlin/jvm/internal/CollectionToArray;-><clinit>()V
-HSPLkotlin/jvm/internal/CollectionToArray;->toArray(Ljava/util/Collection;)[Ljava/lang/Object;
HSPLkotlin/jvm/internal/FloatCompanionObject;-><clinit>()V
HSPLkotlin/jvm/internal/FloatCompanionObject;-><init>()V
HSPLkotlin/jvm/internal/FunctionReference;-><init>(ILjava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V
HSPLkotlin/jvm/internal/FunctionReference;->equals(Ljava/lang/Object;)Z
+HSPLkotlin/jvm/internal/FunctionReference;->getArity()I
HSPLkotlin/jvm/internal/FunctionReferenceImpl;-><init>(ILjava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V
HSPLkotlin/jvm/internal/FunctionReferenceImpl;-><init>(ILjava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V
HSPLkotlin/jvm/internal/InlineMarker;->mark(I)V
HSPLkotlin/jvm/internal/IntCompanionObject;-><clinit>()V
HSPLkotlin/jvm/internal/IntCompanionObject;-><init>()V
+HSPLkotlin/jvm/internal/Intrinsics;->areEqual(Ljava/lang/Float;F)Z
HSPLkotlin/jvm/internal/Intrinsics;->areEqual(Ljava/lang/Float;Ljava/lang/Float;)Z
-HSPLkotlin/jvm/internal/Intrinsics;->areEqual(Ljava/lang/Object;Ljava/lang/Object;)Z+]Ljava/lang/Object;megamorphic_types
+HSPLkotlin/jvm/internal/Intrinsics;->areEqual(Ljava/lang/Object;Ljava/lang/Object;)Z
HSPLkotlin/jvm/internal/Intrinsics;->checkNotNull(Ljava/lang/Object;)V
HSPLkotlin/jvm/internal/Intrinsics;->checkNotNull(Ljava/lang/Object;Ljava/lang/String;)V
HSPLkotlin/jvm/internal/Intrinsics;->checkNotNullExpressionValue(Ljava/lang/Object;Ljava/lang/String;)V
@@ -7315,7 +9643,9 @@
HSPLkotlin/jvm/internal/MutablePropertyReference;-><init>(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V
HSPLkotlin/jvm/internal/PropertyReference;-><init>(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V
HSPLkotlin/jvm/internal/Ref$BooleanRef;-><init>()V
+HSPLkotlin/jvm/internal/Ref$FloatRef;-><init>()V
HSPLkotlin/jvm/internal/Ref$IntRef;-><init>()V
+HSPLkotlin/jvm/internal/Ref$LongRef;-><init>()V
HSPLkotlin/jvm/internal/Ref$ObjectRef;-><init>()V
HSPLkotlin/jvm/internal/Reflection;-><clinit>()V
HSPLkotlin/jvm/internal/Reflection;->getOrCreateKotlinClass(Ljava/lang/Class;)Lkotlin/reflect/KClass;
@@ -7328,11 +9658,15 @@
HSPLkotlin/jvm/internal/SpreadBuilder;->addSpread(Ljava/lang/Object;)V
HSPLkotlin/jvm/internal/SpreadBuilder;->size()I
HSPLkotlin/jvm/internal/SpreadBuilder;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;
+HSPLkotlin/jvm/internal/TypeIntrinsics;->asMutableCollection(Ljava/lang/Object;)Ljava/util/Collection;
HSPLkotlin/jvm/internal/TypeIntrinsics;->beforeCheckcastToFunctionOfArity(Ljava/lang/Object;I)Ljava/lang/Object;
+HSPLkotlin/jvm/internal/TypeIntrinsics;->castToCollection(Ljava/lang/Object;)Ljava/util/Collection;
HSPLkotlin/jvm/internal/TypeIntrinsics;->getFunctionArity(Ljava/lang/Object;)I
HSPLkotlin/jvm/internal/TypeIntrinsics;->isFunctionOfArity(Ljava/lang/Object;I)Z
HSPLkotlin/jvm/internal/TypeIntrinsics;->isMutableSet(Ljava/lang/Object;)Z
+HSPLkotlin/math/MathKt;->getSign(I)I
HSPLkotlin/math/MathKt;->roundToInt(F)I
+HSPLkotlin/math/MathKt__MathJVMKt;->getSign(I)I
HSPLkotlin/math/MathKt__MathJVMKt;->roundToInt(F)I
HSPLkotlin/ranges/IntProgression$Companion;-><init>()V
HSPLkotlin/ranges/IntProgression$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
@@ -7350,18 +9684,28 @@
HSPLkotlin/ranges/IntRange;-><clinit>()V
HSPLkotlin/ranges/IntRange;-><init>(II)V
HSPLkotlin/ranges/IntRange;->contains(I)Z
+HSPLkotlin/ranges/IntRange;->equals(Ljava/lang/Object;)Z
+HSPLkotlin/ranges/IntRange;->isEmpty()Z
HSPLkotlin/ranges/RangesKt;->coerceAtLeast(II)I
HSPLkotlin/ranges/RangesKt;->coerceAtLeast(Ljava/lang/Comparable;Ljava/lang/Comparable;)Ljava/lang/Comparable;
+HSPLkotlin/ranges/RangesKt;->coerceAtMost(FF)F
HSPLkotlin/ranges/RangesKt;->coerceAtMost(II)I
+HSPLkotlin/ranges/RangesKt;->coerceIn(DDD)D
HSPLkotlin/ranges/RangesKt;->coerceIn(FFF)F
HSPLkotlin/ranges/RangesKt;->coerceIn(III)I
HSPLkotlin/ranges/RangesKt;->coerceIn(JJJ)J
+HSPLkotlin/ranges/RangesKt;->until(II)Lkotlin/ranges/IntRange;
HSPLkotlin/ranges/RangesKt___RangesKt;->coerceAtLeast(II)I
HSPLkotlin/ranges/RangesKt___RangesKt;->coerceAtLeast(Ljava/lang/Comparable;Ljava/lang/Comparable;)Ljava/lang/Comparable;
+HSPLkotlin/ranges/RangesKt___RangesKt;->coerceAtMost(FF)F
HSPLkotlin/ranges/RangesKt___RangesKt;->coerceAtMost(II)I
+HSPLkotlin/ranges/RangesKt___RangesKt;->coerceIn(DDD)D
HSPLkotlin/ranges/RangesKt___RangesKt;->coerceIn(FFF)F
HSPLkotlin/ranges/RangesKt___RangesKt;->coerceIn(III)I
HSPLkotlin/ranges/RangesKt___RangesKt;->coerceIn(JJJ)J
+HSPLkotlin/ranges/RangesKt___RangesKt;->until(II)Lkotlin/ranges/IntRange;
+HSPLkotlin/sequences/ConstrainedOnceSequence;-><init>(Lkotlin/sequences/Sequence;)V
+HSPLkotlin/sequences/ConstrainedOnceSequence;->iterator()Ljava/util/Iterator;
HSPLkotlin/sequences/FilteringSequence$iterator$1;-><init>(Lkotlin/sequences/FilteringSequence;)V
HSPLkotlin/sequences/FilteringSequence$iterator$1;->calcNext()V
HSPLkotlin/sequences/FilteringSequence$iterator$1;->hasNext()Z
@@ -7379,11 +9723,17 @@
HSPLkotlin/sequences/GeneratorSequence;->access$getGetInitialValue$p(Lkotlin/sequences/GeneratorSequence;)Lkotlin/jvm/functions/Function0;
HSPLkotlin/sequences/GeneratorSequence;->access$getGetNextValue$p(Lkotlin/sequences/GeneratorSequence;)Lkotlin/jvm/functions/Function1;
HSPLkotlin/sequences/GeneratorSequence;->iterator()Ljava/util/Iterator;
+HSPLkotlin/sequences/SequencesKt;->asSequence(Ljava/util/Iterator;)Lkotlin/sequences/Sequence;
HSPLkotlin/sequences/SequencesKt;->firstOrNull(Lkotlin/sequences/Sequence;)Ljava/lang/Object;
HSPLkotlin/sequences/SequencesKt;->generateSequence(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence;
HSPLkotlin/sequences/SequencesKt;->mapNotNull(Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence;
+HSPLkotlin/sequences/SequencesKt;->toList(Lkotlin/sequences/Sequence;)Ljava/util/List;
+HSPLkotlin/sequences/SequencesKt__SequencesKt$asSequence$$inlined$Sequence$1;-><init>(Ljava/util/Iterator;)V
+HSPLkotlin/sequences/SequencesKt__SequencesKt$asSequence$$inlined$Sequence$1;->iterator()Ljava/util/Iterator;
HSPLkotlin/sequences/SequencesKt__SequencesKt$generateSequence$2;-><init>(Ljava/lang/Object;)V
HSPLkotlin/sequences/SequencesKt__SequencesKt$generateSequence$2;->invoke()Ljava/lang/Object;
+HSPLkotlin/sequences/SequencesKt__SequencesKt;->asSequence(Ljava/util/Iterator;)Lkotlin/sequences/Sequence;
+HSPLkotlin/sequences/SequencesKt__SequencesKt;->constrainOnce(Lkotlin/sequences/Sequence;)Lkotlin/sequences/Sequence;
HSPLkotlin/sequences/SequencesKt__SequencesKt;->generateSequence(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence;
HSPLkotlin/sequences/SequencesKt___SequencesKt$filterNotNull$1;-><clinit>()V
HSPLkotlin/sequences/SequencesKt___SequencesKt$filterNotNull$1;-><init>()V
@@ -7393,6 +9743,9 @@
HSPLkotlin/sequences/SequencesKt___SequencesKt;->filterNotNull(Lkotlin/sequences/Sequence;)Lkotlin/sequences/Sequence;
HSPLkotlin/sequences/SequencesKt___SequencesKt;->firstOrNull(Lkotlin/sequences/Sequence;)Ljava/lang/Object;
HSPLkotlin/sequences/SequencesKt___SequencesKt;->mapNotNull(Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence;
+HSPLkotlin/sequences/SequencesKt___SequencesKt;->toCollection(Lkotlin/sequences/Sequence;Ljava/util/Collection;)Ljava/util/Collection;
+HSPLkotlin/sequences/SequencesKt___SequencesKt;->toList(Lkotlin/sequences/Sequence;)Ljava/util/List;
+HSPLkotlin/sequences/SequencesKt___SequencesKt;->toMutableList(Lkotlin/sequences/Sequence;)Ljava/util/List;
HSPLkotlin/sequences/TransformingSequence$iterator$1;-><init>(Lkotlin/sequences/TransformingSequence;)V
HSPLkotlin/sequences/TransformingSequence$iterator$1;->hasNext()Z
HSPLkotlin/sequences/TransformingSequence$iterator$1;->next()Ljava/lang/Object;
@@ -7478,6 +9831,7 @@
HSPLkotlinx/coroutines/CancellableContinuationImpl;-><init>(Lkotlin/coroutines/Continuation;I)V
HSPLkotlinx/coroutines/CancellableContinuationImpl;->callCancelHandler(Lkotlinx/coroutines/CancelHandler;Ljava/lang/Throwable;)V
HSPLkotlinx/coroutines/CancellableContinuationImpl;->cancel(Ljava/lang/Throwable;)Z
+HSPLkotlinx/coroutines/CancellableContinuationImpl;->cancelCompletedResult$external__kotlinx_coroutines__android_common__kotlinx_coroutines(Ljava/lang/Object;Ljava/lang/Throwable;)V
HSPLkotlinx/coroutines/CancellableContinuationImpl;->cancelLater(Ljava/lang/Throwable;)Z
HSPLkotlinx/coroutines/CancellableContinuationImpl;->completeResume(Ljava/lang/Object;)V
HSPLkotlinx/coroutines/CancellableContinuationImpl;->detachChild$external__kotlinx_coroutines__android_common__kotlinx_coroutines()V
@@ -7509,7 +9863,9 @@
HSPLkotlinx/coroutines/CancellableContinuationImpl;->tryResumeImpl(Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/internal/Symbol;
HSPLkotlinx/coroutines/CancellableContinuationImpl;->trySuspend()Z
HSPLkotlinx/coroutines/CancellableContinuationImplKt;-><clinit>()V
+HSPLkotlinx/coroutines/CancellableContinuationKt;->disposeOnCancellation(Lkotlinx/coroutines/CancellableContinuation;Lkotlinx/coroutines/DisposableHandle;)V
HSPLkotlinx/coroutines/CancellableContinuationKt;->getOrCreateCancellableContinuation(Lkotlin/coroutines/Continuation;)Lkotlinx/coroutines/CancellableContinuationImpl;
+HSPLkotlinx/coroutines/CancellableContinuationKt;->removeOnCancellation(Lkotlinx/coroutines/CancellableContinuation;Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)V
HSPLkotlinx/coroutines/CancelledContinuation;-><init>(Lkotlin/coroutines/Continuation;Ljava/lang/Throwable;Z)V
HSPLkotlinx/coroutines/CancelledContinuation;->makeResumed()Z
HSPLkotlinx/coroutines/ChildContinuation;-><init>(Lkotlinx/coroutines/CancellableContinuationImpl;)V
@@ -7553,6 +9909,8 @@
HSPLkotlinx/coroutines/CoroutineExceptionHandler;-><clinit>()V
HSPLkotlinx/coroutines/CoroutineScopeKt;->CoroutineScope(Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/CoroutineScope;
HSPLkotlinx/coroutines/CoroutineScopeKt;->MainScope()Lkotlinx/coroutines/CoroutineScope;
+HSPLkotlinx/coroutines/CoroutineScopeKt;->cancel$default(Lkotlinx/coroutines/CoroutineScope;Ljava/util/concurrent/CancellationException;ILjava/lang/Object;)V
+HSPLkotlinx/coroutines/CoroutineScopeKt;->cancel(Lkotlinx/coroutines/CoroutineScope;Ljava/util/concurrent/CancellationException;)V
HSPLkotlinx/coroutines/CoroutineScopeKt;->coroutineScope(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
HSPLkotlinx/coroutines/CoroutineScopeKt;->isActive(Lkotlinx/coroutines/CoroutineScope;)Z
HSPLkotlinx/coroutines/CoroutineStart$WhenMappings;-><clinit>()V
@@ -7562,16 +9920,13 @@
HSPLkotlinx/coroutines/CoroutineStart;->invoke(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V
HSPLkotlinx/coroutines/CoroutineStart;->isLazy()Z
HSPLkotlinx/coroutines/CoroutineStart;->values()[Lkotlinx/coroutines/CoroutineStart;
-HSPLkotlinx/coroutines/DebugKt;-><clinit>()V
-HSPLkotlinx/coroutines/DebugKt;->getASSERTIONS_ENABLED()Z
-HSPLkotlinx/coroutines/DebugKt;->getDEBUG()Z
-HSPLkotlinx/coroutines/DebugKt;->getRECOVER_STACK_TRACES()Z
HSPLkotlinx/coroutines/DebugStringsKt;->getClassSimpleName(Ljava/lang/Object;)Ljava/lang/String;
HSPLkotlinx/coroutines/DefaultExecutor;-><clinit>()V
HSPLkotlinx/coroutines/DefaultExecutor;-><init>()V
HSPLkotlinx/coroutines/DefaultExecutorKt;-><clinit>()V
HSPLkotlinx/coroutines/DefaultExecutorKt;->getDefaultDelay()Lkotlinx/coroutines/Delay;
HSPLkotlinx/coroutines/DefaultExecutorKt;->initializeDefaultDelay()Lkotlinx/coroutines/Delay;
+HSPLkotlinx/coroutines/DelayKt;->delay(JLkotlin/coroutines/Continuation;)Ljava/lang/Object;
HSPLkotlinx/coroutines/DispatchedTask;-><init>(I)V
HSPLkotlinx/coroutines/DispatchedTask;->getExceptionalResult$external__kotlinx_coroutines__android_common__kotlinx_coroutines(Ljava/lang/Object;)Ljava/lang/Throwable;
HSPLkotlinx/coroutines/DispatchedTask;->getSuccessfulResult$external__kotlinx_coroutines__android_common__kotlinx_coroutines(Ljava/lang/Object;)Ljava/lang/Object;
@@ -7586,6 +9941,7 @@
HSPLkotlinx/coroutines/Dispatchers;-><init>()V
HSPLkotlinx/coroutines/Dispatchers;->getDefault()Lkotlinx/coroutines/CoroutineDispatcher;
HSPLkotlinx/coroutines/Dispatchers;->getMain()Lkotlinx/coroutines/MainCoroutineDispatcher;
+HSPLkotlinx/coroutines/DisposeOnCancel;-><init>(Lkotlinx/coroutines/DisposableHandle;)V
HSPLkotlinx/coroutines/Empty;-><init>(Z)V
HSPLkotlinx/coroutines/Empty;->getList()Lkotlinx/coroutines/NodeList;
HSPLkotlinx/coroutines/Empty;->isActive()Z
@@ -7599,6 +9955,7 @@
HSPLkotlinx/coroutines/EventLoopImplBase;-><init>()V
HSPLkotlinx/coroutines/EventLoopImplPlatform;-><init>()V
HSPLkotlinx/coroutines/EventLoopKt;->createEventLoop()Lkotlinx/coroutines/EventLoop;
+HSPLkotlinx/coroutines/ExceptionsKt;->CancellationException(Ljava/lang/String;Ljava/lang/Throwable;)Ljava/util/concurrent/CancellationException;
HSPLkotlinx/coroutines/ExecutorCoroutineDispatcher$Key$1;-><clinit>()V
HSPLkotlinx/coroutines/ExecutorCoroutineDispatcher$Key$1;-><init>()V
HSPLkotlinx/coroutines/ExecutorCoroutineDispatcher$Key;-><init>()V
@@ -7611,6 +9968,7 @@
HSPLkotlinx/coroutines/InvokeOnCancel;-><init>(Lkotlin/jvm/functions/Function1;)V
HSPLkotlinx/coroutines/InvokeOnCancel;->invoke(Ljava/lang/Throwable;)V
HSPLkotlinx/coroutines/InvokeOnCompletion;-><init>(Lkotlin/jvm/functions/Function1;)V
+HSPLkotlinx/coroutines/InvokeOnCompletion;->invoke(Ljava/lang/Throwable;)V
HSPLkotlinx/coroutines/Job$DefaultImpls;->cancel$default(Lkotlinx/coroutines/Job;Ljava/util/concurrent/CancellationException;ILjava/lang/Object;)V
HSPLkotlinx/coroutines/Job$DefaultImpls;->fold(Lkotlinx/coroutines/Job;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
HSPLkotlinx/coroutines/Job$DefaultImpls;->get(Lkotlinx/coroutines/Job;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;
@@ -7626,6 +9984,7 @@
HSPLkotlinx/coroutines/JobCancellingNode;-><init>()V
HSPLkotlinx/coroutines/JobImpl;-><init>(Lkotlinx/coroutines/Job;)V
HSPLkotlinx/coroutines/JobImpl;->getHandlesException$external__kotlinx_coroutines__android_common__kotlinx_coroutines()Z
+HSPLkotlinx/coroutines/JobImpl;->getOnCancelComplete$external__kotlinx_coroutines__android_common__kotlinx_coroutines()Z
HSPLkotlinx/coroutines/JobImpl;->handlesException()Z
HSPLkotlinx/coroutines/JobKt;->Job$default(Lkotlinx/coroutines/Job;ILjava/lang/Object;)Lkotlinx/coroutines/CompletableJob;
HSPLkotlinx/coroutines/JobKt;->Job(Lkotlinx/coroutines/Job;)Lkotlinx/coroutines/CompletableJob;
@@ -7645,6 +10004,8 @@
HSPLkotlinx/coroutines/JobNode;->getList()Lkotlinx/coroutines/NodeList;
HSPLkotlinx/coroutines/JobNode;->isActive()Z
HSPLkotlinx/coroutines/JobNode;->setJob(Lkotlinx/coroutines/JobSupport;)V
+HSPLkotlinx/coroutines/JobSupport$ChildCompletion;-><init>(Lkotlinx/coroutines/JobSupport;Lkotlinx/coroutines/JobSupport$Finishing;Lkotlinx/coroutines/ChildHandleNode;Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/JobSupport$ChildCompletion;->invoke(Ljava/lang/Throwable;)V
HSPLkotlinx/coroutines/JobSupport$Finishing;-><init>(Lkotlinx/coroutines/NodeList;ZLjava/lang/Throwable;)V
HSPLkotlinx/coroutines/JobSupport$Finishing;->addExceptionLocked(Ljava/lang/Throwable;)V
HSPLkotlinx/coroutines/JobSupport$Finishing;->allocateList()Ljava/util/ArrayList;
@@ -7654,14 +10015,17 @@
HSPLkotlinx/coroutines/JobSupport$Finishing;->isActive()Z
HSPLkotlinx/coroutines/JobSupport$Finishing;->isCancelling()Z
HSPLkotlinx/coroutines/JobSupport$Finishing;->isCompleting()Z
+HSPLkotlinx/coroutines/JobSupport$Finishing;->isSealed()Z
HSPLkotlinx/coroutines/JobSupport$Finishing;->sealLocked(Ljava/lang/Throwable;)Ljava/util/List;
HSPLkotlinx/coroutines/JobSupport$Finishing;->setCompleting(Z)V
HSPLkotlinx/coroutines/JobSupport$Finishing;->setExceptionsHolder(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/JobSupport$Finishing;->setRootCause(Ljava/lang/Throwable;)V
HSPLkotlinx/coroutines/JobSupport$addLastAtomic$$inlined$addLastIf$1;-><init>(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;Lkotlinx/coroutines/JobSupport;Ljava/lang/Object;)V
HSPLkotlinx/coroutines/JobSupport$addLastAtomic$$inlined$addLastIf$1;->prepare(Ljava/lang/Object;)Ljava/lang/Object;
HSPLkotlinx/coroutines/JobSupport$addLastAtomic$$inlined$addLastIf$1;->prepare(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)Ljava/lang/Object;
HSPLkotlinx/coroutines/JobSupport;-><init>(Z)V
HSPLkotlinx/coroutines/JobSupport;->access$cancellationExceptionMessage(Lkotlinx/coroutines/JobSupport;)Ljava/lang/String;
+HSPLkotlinx/coroutines/JobSupport;->access$continueCompleting(Lkotlinx/coroutines/JobSupport;Lkotlinx/coroutines/JobSupport$Finishing;Lkotlinx/coroutines/ChildHandleNode;Ljava/lang/Object;)V
HSPLkotlinx/coroutines/JobSupport;->addLastAtomic(Ljava/lang/Object;Lkotlinx/coroutines/NodeList;Lkotlinx/coroutines/JobNode;)Z
HSPLkotlinx/coroutines/JobSupport;->addSuppressedExceptions(Ljava/lang/Throwable;Ljava/util/List;)V
HSPLkotlinx/coroutines/JobSupport;->afterCompletion(Ljava/lang/Object;)V
@@ -7669,9 +10033,12 @@
HSPLkotlinx/coroutines/JobSupport;->cancel(Ljava/util/concurrent/CancellationException;)V
HSPLkotlinx/coroutines/JobSupport;->cancelImpl$external__kotlinx_coroutines__android_common__kotlinx_coroutines(Ljava/lang/Object;)Z
HSPLkotlinx/coroutines/JobSupport;->cancelInternal(Ljava/lang/Throwable;)V
+HSPLkotlinx/coroutines/JobSupport;->cancelMakeCompleting(Ljava/lang/Object;)Ljava/lang/Object;
HSPLkotlinx/coroutines/JobSupport;->cancelParent(Ljava/lang/Throwable;)Z
+HSPLkotlinx/coroutines/JobSupport;->cancellationExceptionMessage()Ljava/lang/String;
HSPLkotlinx/coroutines/JobSupport;->childCancelled(Ljava/lang/Throwable;)Z
HSPLkotlinx/coroutines/JobSupport;->completeStateFinalization(Lkotlinx/coroutines/Incomplete;Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/JobSupport;->continueCompleting(Lkotlinx/coroutines/JobSupport$Finishing;Lkotlinx/coroutines/ChildHandleNode;Ljava/lang/Object;)V
HSPLkotlinx/coroutines/JobSupport;->createCauseException(Ljava/lang/Object;)Ljava/lang/Throwable;
HSPLkotlinx/coroutines/JobSupport;->finalizeFinishingState(Lkotlinx/coroutines/JobSupport$Finishing;Ljava/lang/Object;)Ljava/lang/Object;
HSPLkotlinx/coroutines/JobSupport;->firstChild(Lkotlinx/coroutines/Incomplete;)Lkotlinx/coroutines/ChildHandleNode;
@@ -7691,6 +10058,9 @@
HSPLkotlinx/coroutines/JobSupport;->isActive()Z
HSPLkotlinx/coroutines/JobSupport;->isCompleted()Z
HSPLkotlinx/coroutines/JobSupport;->isScopedCoroutine()Z
+HSPLkotlinx/coroutines/JobSupport;->join(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/JobSupport;->joinInternal()Z
+HSPLkotlinx/coroutines/JobSupport;->joinSuspend(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
HSPLkotlinx/coroutines/JobSupport;->makeCancelling(Ljava/lang/Object;)Ljava/lang/Object;
HSPLkotlinx/coroutines/JobSupport;->makeCompletingOnce$external__kotlinx_coroutines__android_common__kotlinx_coroutines(Ljava/lang/Object;)Ljava/lang/Object;
HSPLkotlinx/coroutines/JobSupport;->makeNode(Lkotlin/jvm/functions/Function1;Z)Lkotlinx/coroutines/JobNode;
@@ -7699,6 +10069,7 @@
HSPLkotlinx/coroutines/JobSupport;->notifyCancelling(Lkotlinx/coroutines/NodeList;Ljava/lang/Throwable;)V
HSPLkotlinx/coroutines/JobSupport;->notifyCompletion(Lkotlinx/coroutines/NodeList;Ljava/lang/Throwable;)V
HSPLkotlinx/coroutines/JobSupport;->onCancelling(Ljava/lang/Throwable;)V
+HSPLkotlinx/coroutines/JobSupport;->onCompletionInternal(Ljava/lang/Object;)V
HSPLkotlinx/coroutines/JobSupport;->parentCancelled(Lkotlinx/coroutines/ParentJob;)V
HSPLkotlinx/coroutines/JobSupport;->plus(Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext;
HSPLkotlinx/coroutines/JobSupport;->promoteSingleToNodeList(Lkotlinx/coroutines/JobNode;)V
@@ -7711,11 +10082,13 @@
HSPLkotlinx/coroutines/JobSupport;->tryMakeCancelling(Lkotlinx/coroutines/Incomplete;Ljava/lang/Throwable;)Z
HSPLkotlinx/coroutines/JobSupport;->tryMakeCompleting(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
HSPLkotlinx/coroutines/JobSupport;->tryMakeCompletingSlowPath(Lkotlinx/coroutines/Incomplete;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/JobSupport;->tryWaitForChild(Lkotlinx/coroutines/JobSupport$Finishing;Lkotlinx/coroutines/ChildHandleNode;Ljava/lang/Object;)Z
HSPLkotlinx/coroutines/JobSupportKt;-><clinit>()V
HSPLkotlinx/coroutines/JobSupportKt;->access$getCOMPLETING_ALREADY$p()Lkotlinx/coroutines/internal/Symbol;
HSPLkotlinx/coroutines/JobSupportKt;->access$getCOMPLETING_RETRY$p()Lkotlinx/coroutines/internal/Symbol;
HSPLkotlinx/coroutines/JobSupportKt;->access$getEMPTY_ACTIVE$p()Lkotlinx/coroutines/Empty;
HSPLkotlinx/coroutines/JobSupportKt;->access$getSEALED$p()Lkotlinx/coroutines/internal/Symbol;
+HSPLkotlinx/coroutines/JobSupportKt;->access$getTOO_LATE_TO_CANCEL$p()Lkotlinx/coroutines/internal/Symbol;
HSPLkotlinx/coroutines/JobSupportKt;->boxIncomplete(Ljava/lang/Object;)Ljava/lang/Object;
HSPLkotlinx/coroutines/JobSupportKt;->unboxState(Ljava/lang/Object;)Ljava/lang/Object;
HSPLkotlinx/coroutines/MainCoroutineDispatcher;-><init>()V
@@ -7725,6 +10098,9 @@
HSPLkotlinx/coroutines/NonDisposableHandle;-><clinit>()V
HSPLkotlinx/coroutines/NonDisposableHandle;-><init>()V
HSPLkotlinx/coroutines/NonDisposableHandle;->dispose()V
+HSPLkotlinx/coroutines/RemoveOnCancel;-><init>(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)V
+HSPLkotlinx/coroutines/ResumeOnCompletion;-><init>(Lkotlin/coroutines/Continuation;)V
+HSPLkotlinx/coroutines/ResumeOnCompletion;->invoke(Ljava/lang/Throwable;)V
HSPLkotlinx/coroutines/StandaloneCoroutine;-><init>(Lkotlin/coroutines/CoroutineContext;Z)V
HSPLkotlinx/coroutines/SupervisorJobImpl;-><init>(Lkotlinx/coroutines/Job;)V
HSPLkotlinx/coroutines/SupervisorKt;->SupervisorJob$default(Lkotlinx/coroutines/Job;ILjava/lang/Object;)Lkotlinx/coroutines/CompletableJob;
@@ -7735,6 +10111,7 @@
HSPLkotlinx/coroutines/Unconfined;-><clinit>()V
HSPLkotlinx/coroutines/Unconfined;-><init>()V
HSPLkotlinx/coroutines/UndispatchedCoroutine;-><init>(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/Continuation;)V
+HSPLkotlinx/coroutines/UndispatchedCoroutine;->afterResume(Ljava/lang/Object;)V
HSPLkotlinx/coroutines/UndispatchedMarker;-><clinit>()V
HSPLkotlinx/coroutines/UndispatchedMarker;-><init>()V
HSPLkotlinx/coroutines/UndispatchedMarker;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
@@ -7769,6 +10146,7 @@
HSPLkotlinx/coroutines/channels/AbstractChannel$ReceiveHasNext;->resumeOnCancellationFun(Ljava/lang/Object;)Lkotlin/jvm/functions/Function1;
HSPLkotlinx/coroutines/channels/AbstractChannel$ReceiveHasNext;->tryResumeReceive(Ljava/lang/Object;Lkotlinx/coroutines/internal/LockFreeLinkedListNode$PrepareOp;)Lkotlinx/coroutines/internal/Symbol;
HSPLkotlinx/coroutines/channels/AbstractChannel$RemoveReceiveOnCancel;-><init>(Lkotlinx/coroutines/channels/AbstractChannel;Lkotlinx/coroutines/channels/Receive;)V
+HSPLkotlinx/coroutines/channels/AbstractChannel$RemoveReceiveOnCancel;->invoke(Ljava/lang/Throwable;)V
HSPLkotlinx/coroutines/channels/AbstractChannel$enqueueReceiveInternal$$inlined$addLastIfPrevAndIf$1;-><init>(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;Lkotlinx/coroutines/channels/AbstractChannel;)V
HSPLkotlinx/coroutines/channels/AbstractChannel$enqueueReceiveInternal$$inlined$addLastIfPrevAndIf$1;->prepare(Ljava/lang/Object;)Ljava/lang/Object;
HSPLkotlinx/coroutines/channels/AbstractChannel$enqueueReceiveInternal$$inlined$addLastIfPrevAndIf$1;->prepare(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)Ljava/lang/Object;
@@ -7790,10 +10168,16 @@
HSPLkotlinx/coroutines/channels/AbstractChannel;->takeFirstReceiveOrPeekClosed()Lkotlinx/coroutines/channels/ReceiveOrClosed;
HSPLkotlinx/coroutines/channels/AbstractChannel;->tryReceive-PtdJZtk()Ljava/lang/Object;
HSPLkotlinx/coroutines/channels/AbstractChannelKt;-><clinit>()V
+HSPLkotlinx/coroutines/channels/AbstractSendChannel$SendBuffered;-><init>(Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/channels/AbstractSendChannel$SendBuffered;->completeResumeSend()V
+HSPLkotlinx/coroutines/channels/AbstractSendChannel$SendBuffered;->getPollResult()Ljava/lang/Object;
+HSPLkotlinx/coroutines/channels/AbstractSendChannel$SendBuffered;->tryResumeSend(Lkotlinx/coroutines/internal/LockFreeLinkedListNode$PrepareOp;)Lkotlinx/coroutines/internal/Symbol;
HSPLkotlinx/coroutines/channels/AbstractSendChannel;-><init>(Lkotlin/jvm/functions/Function1;)V
HSPLkotlinx/coroutines/channels/AbstractSendChannel;->getClosedForSend()Lkotlinx/coroutines/channels/Closed;
HSPLkotlinx/coroutines/channels/AbstractSendChannel;->getQueue()Lkotlinx/coroutines/internal/LockFreeLinkedListHead;
+HSPLkotlinx/coroutines/channels/AbstractSendChannel;->offerInternal(Ljava/lang/Object;)Ljava/lang/Object;
HSPLkotlinx/coroutines/channels/AbstractSendChannel;->send(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/channels/AbstractSendChannel;->sendBuffered(Ljava/lang/Object;)Lkotlinx/coroutines/channels/ReceiveOrClosed;
HSPLkotlinx/coroutines/channels/AbstractSendChannel;->takeFirstReceiveOrPeekClosed()Lkotlinx/coroutines/channels/ReceiveOrClosed;
HSPLkotlinx/coroutines/channels/AbstractSendChannel;->takeFirstSendOrPeekClosed()Lkotlinx/coroutines/channels/Send;
HSPLkotlinx/coroutines/channels/AbstractSendChannel;->trySend-JP2dKIU(Ljava/lang/Object;)Ljava/lang/Object;
@@ -7839,6 +10223,7 @@
HSPLkotlinx/coroutines/channels/ConflatedChannel;->updateValueLocked(Ljava/lang/Object;)Lkotlinx/coroutines/internal/UndeliveredElementException;
HSPLkotlinx/coroutines/channels/LinkedListChannel;-><init>(Lkotlin/jvm/functions/Function1;)V
HSPLkotlinx/coroutines/channels/LinkedListChannel;->isBufferAlwaysEmpty()Z
+HSPLkotlinx/coroutines/channels/LinkedListChannel;->offerInternal(Ljava/lang/Object;)Ljava/lang/Object;
HSPLkotlinx/coroutines/channels/ProduceKt;->produce$default(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/channels/ReceiveChannel;
HSPLkotlinx/coroutines/channels/ProduceKt;->produce(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/channels/ReceiveChannel;
HSPLkotlinx/coroutines/channels/ProducerCoroutine;-><init>(Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/channels/Channel;)V
@@ -7848,10 +10233,13 @@
HSPLkotlinx/coroutines/channels/Receive;->resumeOnCancellationFun(Ljava/lang/Object;)Lkotlin/jvm/functions/Function1;
HSPLkotlinx/coroutines/channels/RendezvousChannel;-><init>(Lkotlin/jvm/functions/Function1;)V
HSPLkotlinx/coroutines/channels/RendezvousChannel;->isBufferAlwaysEmpty()Z
+HSPLkotlinx/coroutines/channels/Send;-><init>()V
HSPLkotlinx/coroutines/flow/AbstractFlow$collect$1;-><init>(Lkotlinx/coroutines/flow/AbstractFlow;Lkotlin/coroutines/Continuation;)V
+HSPLkotlinx/coroutines/flow/AbstractFlow$collect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
HSPLkotlinx/coroutines/flow/AbstractFlow;-><init>()V
HSPLkotlinx/coroutines/flow/AbstractFlow;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
HSPLkotlinx/coroutines/flow/DistinctFlowImpl$collect$2$emit$1;-><init>(Lkotlinx/coroutines/flow/DistinctFlowImpl$collect$2;Lkotlin/coroutines/Continuation;)V
+HSPLkotlinx/coroutines/flow/DistinctFlowImpl$collect$2$emit$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
HSPLkotlinx/coroutines/flow/DistinctFlowImpl$collect$2;-><init>(Lkotlinx/coroutines/flow/DistinctFlowImpl;Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlinx/coroutines/flow/FlowCollector;)V
HSPLkotlinx/coroutines/flow/DistinctFlowImpl$collect$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
HSPLkotlinx/coroutines/flow/DistinctFlowImpl;-><init>(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;)V
@@ -7882,6 +10270,8 @@
HSPLkotlinx/coroutines/flow/FlowKt__ContextKt;->buffer(Lkotlinx/coroutines/flow/Flow;ILkotlinx/coroutines/channels/BufferOverflow;)Lkotlinx/coroutines/flow/Flow;
HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultAreEquivalent$1;-><clinit>()V
HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultAreEquivalent$1;-><init>()V
+HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultAreEquivalent$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Boolean;
+HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultAreEquivalent$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultKeySelector$1;-><clinit>()V
HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultKeySelector$1;-><init>()V
HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultKeySelector$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
@@ -7892,10 +10282,22 @@
HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$$inlined$unsafeFlow$1;-><init>(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;)V
HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$$inlined$unsafeFlow$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1$emit$1;-><init>(Lkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1;Lkotlin/coroutines/Continuation;)V
+HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1$emit$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1;-><init>(Lkotlin/jvm/internal/Ref$BooleanRef;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/jvm/functions/Function2;)V
HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$emitAbort$1;-><init>(Lkotlin/coroutines/Continuation;)V
+HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$emitAbort$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$take$$inlined$unsafeFlow$1$1;-><init>(Lkotlinx/coroutines/flow/FlowKt__LimitKt$take$$inlined$unsafeFlow$1;Lkotlin/coroutines/Continuation;)V
+HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$take$$inlined$unsafeFlow$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$take$$inlined$unsafeFlow$1;-><init>(Lkotlinx/coroutines/flow/Flow;I)V
+HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$take$$inlined$unsafeFlow$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$take$2$1$emit$1;-><init>(Lkotlinx/coroutines/flow/FlowKt__LimitKt$take$2$1;Lkotlin/coroutines/Continuation;)V
+HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$take$2$1$emit$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$take$2$1;-><init>(Lkotlin/jvm/internal/Ref$IntRef;ILkotlinx/coroutines/flow/FlowCollector;)V
+HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$take$2$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/FlowKt__LimitKt;->access$emitAbort$FlowKt__LimitKt(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
HSPLkotlinx/coroutines/flow/FlowKt__LimitKt;->dropWhile(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow;
+HSPLkotlinx/coroutines/flow/FlowKt__LimitKt;->emitAbort$FlowKt__LimitKt(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
HSPLkotlinx/coroutines/flow/FlowKt__LimitKt;->take(Lkotlinx/coroutines/flow/Flow;I)Lkotlinx/coroutines/flow/Flow;
HSPLkotlinx/coroutines/flow/FlowKt__MergeKt$mapLatest$1;-><init>(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V
HSPLkotlinx/coroutines/flow/FlowKt__MergeKt$mapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
@@ -7908,6 +10310,7 @@
HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2;-><init>(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/internal/Ref$ObjectRef;)V
HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$3;-><init>(Lkotlin/coroutines/Continuation;)V
+HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt;->first(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2$WhenMappings;-><clinit>()V
HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;-><init>(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/MutableSharedFlow;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V
@@ -7929,6 +10332,7 @@
HSPLkotlinx/coroutines/flow/SafeFlow;-><init>(Lkotlin/jvm/functions/Function2;)V
HSPLkotlinx/coroutines/flow/SafeFlow;->collectSafely(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
HSPLkotlinx/coroutines/flow/SharedFlowImpl$collect$1;-><init>(Lkotlinx/coroutines/flow/SharedFlowImpl;Lkotlin/coroutines/Continuation;)V
+HSPLkotlinx/coroutines/flow/SharedFlowImpl$collect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
HSPLkotlinx/coroutines/flow/SharedFlowImpl;-><init>(IILkotlinx/coroutines/channels/BufferOverflow;)V
HSPLkotlinx/coroutines/flow/SharedFlowImpl;->access$tryPeekLocked(Lkotlinx/coroutines/flow/SharedFlowImpl;Lkotlinx/coroutines/flow/SharedFlowSlot;)J
HSPLkotlinx/coroutines/flow/SharedFlowImpl;->awaitValue(Lkotlinx/coroutines/flow/SharedFlowSlot;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
@@ -7940,12 +10344,15 @@
HSPLkotlinx/coroutines/flow/SharedFlowImpl;->createSlotArray(I)[Lkotlinx/coroutines/flow/SharedFlowSlot;
HSPLkotlinx/coroutines/flow/SharedFlowImpl;->createSlotArray(I)[Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;
HSPLkotlinx/coroutines/flow/SharedFlowImpl;->dropOldestLocked()V
+HSPLkotlinx/coroutines/flow/SharedFlowImpl;->emit$suspendImpl(Lkotlinx/coroutines/flow/SharedFlowImpl;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/SharedFlowImpl;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
HSPLkotlinx/coroutines/flow/SharedFlowImpl;->enqueueLocked(Ljava/lang/Object;)V
HSPLkotlinx/coroutines/flow/SharedFlowImpl;->findSlotsToResumeLocked([Lkotlin/coroutines/Continuation;)[Lkotlin/coroutines/Continuation;
HSPLkotlinx/coroutines/flow/SharedFlowImpl;->getBufferEndIndex()J
HSPLkotlinx/coroutines/flow/SharedFlowImpl;->getHead()J
HSPLkotlinx/coroutines/flow/SharedFlowImpl;->getLastReplayedLocked()Ljava/lang/Object;
HSPLkotlinx/coroutines/flow/SharedFlowImpl;->getPeekedValueLockedAt(J)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/SharedFlowImpl;->getQueueEndIndex()J
HSPLkotlinx/coroutines/flow/SharedFlowImpl;->getReplaySize()I
HSPLkotlinx/coroutines/flow/SharedFlowImpl;->getTotalSize()I
HSPLkotlinx/coroutines/flow/SharedFlowImpl;->growBuffer([Ljava/lang/Object;II)[Ljava/lang/Object;
@@ -7967,6 +10374,8 @@
HSPLkotlinx/coroutines/flow/SharedFlowSlot;-><init>()V
HSPLkotlinx/coroutines/flow/SharedFlowSlot;->allocateLocked(Ljava/lang/Object;)Z
HSPLkotlinx/coroutines/flow/SharedFlowSlot;->allocateLocked(Lkotlinx/coroutines/flow/SharedFlowImpl;)Z
+HSPLkotlinx/coroutines/flow/SharedFlowSlot;->freeLocked(Ljava/lang/Object;)[Lkotlin/coroutines/Continuation;
+HSPLkotlinx/coroutines/flow/SharedFlowSlot;->freeLocked(Lkotlinx/coroutines/flow/SharedFlowImpl;)[Lkotlin/coroutines/Continuation;
HSPLkotlinx/coroutines/flow/SharingCommand;->$values()[Lkotlinx/coroutines/flow/SharingCommand;
HSPLkotlinx/coroutines/flow/SharingCommand;-><clinit>()V
HSPLkotlinx/coroutines/flow/SharingCommand;-><init>(Ljava/lang/String;I)V
@@ -7991,6 +10400,8 @@
HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;->invoke(Lkotlinx/coroutines/flow/SharingCommand;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
HSPLkotlinx/coroutines/flow/StartedWhileSubscribed;-><init>(JJ)V
+HSPLkotlinx/coroutines/flow/StartedWhileSubscribed;->access$getReplayExpiration$p(Lkotlinx/coroutines/flow/StartedWhileSubscribed;)J
+HSPLkotlinx/coroutines/flow/StartedWhileSubscribed;->access$getStopTimeout$p(Lkotlinx/coroutines/flow/StartedWhileSubscribed;)J
HSPLkotlinx/coroutines/flow/StartedWhileSubscribed;->command(Lkotlinx/coroutines/flow/StateFlow;)Lkotlinx/coroutines/flow/Flow;
HSPLkotlinx/coroutines/flow/StartedWhileSubscribed;->equals(Ljava/lang/Object;)Z
HSPLkotlinx/coroutines/flow/StateFlowImpl$collect$1;-><init>(Lkotlinx/coroutines/flow/StateFlowImpl;Lkotlin/coroutines/Continuation;)V
@@ -8014,12 +10425,17 @@
HSPLkotlinx/coroutines/flow/StateFlowSlot;->allocateLocked(Ljava/lang/Object;)Z
HSPLkotlinx/coroutines/flow/StateFlowSlot;->allocateLocked(Lkotlinx/coroutines/flow/StateFlowImpl;)Z
HSPLkotlinx/coroutines/flow/StateFlowSlot;->awaitPending(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/StateFlowSlot;->freeLocked(Ljava/lang/Object;)[Lkotlin/coroutines/Continuation;
+HSPLkotlinx/coroutines/flow/StateFlowSlot;->freeLocked(Lkotlinx/coroutines/flow/StateFlowImpl;)[Lkotlin/coroutines/Continuation;
HSPLkotlinx/coroutines/flow/StateFlowSlot;->makePending()V
HSPLkotlinx/coroutines/flow/StateFlowSlot;->takePending()Z
+HSPLkotlinx/coroutines/flow/internal/AbortFlowException;-><init>(Lkotlinx/coroutines/flow/FlowCollector;)V
+HSPLkotlinx/coroutines/flow/internal/AbortFlowException;->fillInStackTrace()Ljava/lang/Throwable;
HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;-><init>()V
HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->access$getNCollectors(Lkotlinx/coroutines/flow/internal/AbstractSharedFlow;)I
HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->access$getSlots(Lkotlinx/coroutines/flow/internal/AbstractSharedFlow;)[Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;
HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->allocateSlot()Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;
+HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->freeSlot(Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;)V
HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->getNCollectors()I
HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->getSlots()[Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;
HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->getSubscriptionCount()Lkotlinx/coroutines/flow/StateFlow;
@@ -8051,6 +10467,7 @@
HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$emit$1;-><init>(Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1;Lkotlin/coroutines/Continuation;)V
+HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$emit$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1;-><init>(Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;Lkotlinx/coroutines/flow/FlowCollector;)V
HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;-><init>(Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)V
@@ -8063,17 +10480,39 @@
HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;->access$getTransform$p(Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;)Lkotlin/jvm/functions/Function3;
HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;->create(Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)Lkotlinx/coroutines/flow/internal/ChannelFlow;
HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;->flowCollect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/internal/ChildCancelledException;-><init>()V
+HSPLkotlinx/coroutines/flow/internal/ChildCancelledException;->fillInStackTrace()Ljava/lang/Throwable;
+HSPLkotlinx/coroutines/flow/internal/DownstreamExceptionContext;-><init>(Ljava/lang/Throwable;Lkotlin/coroutines/CoroutineContext;)V
+HSPLkotlinx/coroutines/flow/internal/FlowExceptions_commonKt;->checkOwnership(Lkotlinx/coroutines/flow/internal/AbortFlowException;Lkotlinx/coroutines/flow/FlowCollector;)V
HSPLkotlinx/coroutines/flow/internal/FusibleFlow$DefaultImpls;->fuse$default(Lkotlinx/coroutines/flow/internal/FusibleFlow;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;ILjava/lang/Object;)Lkotlinx/coroutines/flow/Flow;
HSPLkotlinx/coroutines/flow/internal/NoOpContinuation;-><clinit>()V
HSPLkotlinx/coroutines/flow/internal/NoOpContinuation;-><init>()V
HSPLkotlinx/coroutines/flow/internal/NopCollector;-><clinit>()V
HSPLkotlinx/coroutines/flow/internal/NopCollector;-><init>()V
+HSPLkotlinx/coroutines/flow/internal/NopCollector;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
HSPLkotlinx/coroutines/flow/internal/NullSurrogateKt;-><clinit>()V
HSPLkotlinx/coroutines/flow/internal/SafeCollector$collectContextSize$1;-><clinit>()V
HSPLkotlinx/coroutines/flow/internal/SafeCollector$collectContextSize$1;-><init>()V
HSPLkotlinx/coroutines/flow/internal/SafeCollector$collectContextSize$1;->invoke(ILkotlin/coroutines/CoroutineContext$Element;)Ljava/lang/Integer;
HSPLkotlinx/coroutines/flow/internal/SafeCollector$collectContextSize$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
HSPLkotlinx/coroutines/flow/internal/SafeCollector;-><init>(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/CoroutineContext;)V
+HSPLkotlinx/coroutines/flow/internal/SafeCollector;->checkContext(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext;Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/flow/internal/SafeCollector;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/internal/SafeCollector;->emit(Lkotlin/coroutines/Continuation;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/internal/SafeCollector;->getContext()Lkotlin/coroutines/CoroutineContext;
+HSPLkotlinx/coroutines/flow/internal/SafeCollector;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/internal/SafeCollector;->releaseIntercepted()V
+HSPLkotlinx/coroutines/flow/internal/SafeCollectorKt$emitFun$1;-><clinit>()V
+HSPLkotlinx/coroutines/flow/internal/SafeCollectorKt$emitFun$1;-><init>()V
+HSPLkotlinx/coroutines/flow/internal/SafeCollectorKt$emitFun$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/internal/SafeCollectorKt$emitFun$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/internal/SafeCollectorKt;-><clinit>()V
+HSPLkotlinx/coroutines/flow/internal/SafeCollectorKt;->access$getEmitFun$p()Lkotlin/jvm/functions/Function3;
+HSPLkotlinx/coroutines/flow/internal/SafeCollector_commonKt$checkContext$result$1;-><init>(Lkotlinx/coroutines/flow/internal/SafeCollector;)V
+HSPLkotlinx/coroutines/flow/internal/SafeCollector_commonKt$checkContext$result$1;->invoke(ILkotlin/coroutines/CoroutineContext$Element;)Ljava/lang/Integer;
+HSPLkotlinx/coroutines/flow/internal/SafeCollector_commonKt$checkContext$result$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/flow/internal/SafeCollector_commonKt;->checkContext(Lkotlinx/coroutines/flow/internal/SafeCollector;Lkotlin/coroutines/CoroutineContext;)V
+HSPLkotlinx/coroutines/flow/internal/SafeCollector_commonKt;->transitiveCoroutineParent(Lkotlinx/coroutines/Job;Lkotlinx/coroutines/Job;)Lkotlinx/coroutines/Job;
HSPLkotlinx/coroutines/flow/internal/SendingCollector;-><init>(Lkotlinx/coroutines/channels/SendChannel;)V
HSPLkotlinx/coroutines/flow/internal/SendingCollector;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
HSPLkotlinx/coroutines/flow/internal/SubscriptionCountStateFlow;-><init>(I)V
@@ -8086,12 +10525,12 @@
HSPLkotlinx/coroutines/internal/ContextScope;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext;
HSPLkotlinx/coroutines/internal/DispatchedContinuation;-><init>(Lkotlinx/coroutines/CoroutineDispatcher;Lkotlin/coroutines/Continuation;)V
HSPLkotlinx/coroutines/internal/DispatchedContinuation;->awaitReusability()V
-HSPLkotlinx/coroutines/internal/DispatchedContinuation;->cancelCompletedResult$external__kotlinx_coroutines__android_common__kotlinx_coroutines(Ljava/lang/Object;Ljava/lang/Throwable;)V
HSPLkotlinx/coroutines/internal/DispatchedContinuation;->claimReusableCancellableContinuation()Lkotlinx/coroutines/CancellableContinuationImpl;
HSPLkotlinx/coroutines/internal/DispatchedContinuation;->getContext()Lkotlin/coroutines/CoroutineContext;
HSPLkotlinx/coroutines/internal/DispatchedContinuation;->getDelegate$external__kotlinx_coroutines__android_common__kotlinx_coroutines()Lkotlin/coroutines/Continuation;
HSPLkotlinx/coroutines/internal/DispatchedContinuation;->getReusableCancellableContinuation()Lkotlinx/coroutines/CancellableContinuationImpl;
HSPLkotlinx/coroutines/internal/DispatchedContinuation;->isReusable()Z
+HSPLkotlinx/coroutines/internal/DispatchedContinuation;->postponeCancellation(Ljava/lang/Throwable;)Z
HSPLkotlinx/coroutines/internal/DispatchedContinuation;->release()V
HSPLkotlinx/coroutines/internal/DispatchedContinuation;->resumeWith(Ljava/lang/Object;)V
HSPLkotlinx/coroutines/internal/DispatchedContinuation;->takeState$external__kotlinx_coroutines__android_common__kotlinx_coroutines()Ljava/lang/Object;
@@ -8099,11 +10538,6 @@
HSPLkotlinx/coroutines/internal/DispatchedContinuationKt;-><clinit>()V
HSPLkotlinx/coroutines/internal/DispatchedContinuationKt;->access$getUNDEFINED$p()Lkotlinx/coroutines/internal/Symbol;
HSPLkotlinx/coroutines/internal/DispatchedContinuationKt;->resumeCancellableWith(Lkotlin/coroutines/Continuation;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)V
-HSPLkotlinx/coroutines/internal/FastServiceLoader;-><clinit>()V
-HSPLkotlinx/coroutines/internal/FastServiceLoader;-><init>()V
-HSPLkotlinx/coroutines/internal/FastServiceLoader;->loadMainDispatcherFactory$external__kotlinx_coroutines__android_common__kotlinx_coroutines()Ljava/util/List;
-HSPLkotlinx/coroutines/internal/FastServiceLoaderKt;-><clinit>()V
-HSPLkotlinx/coroutines/internal/FastServiceLoaderKt;->getANDROID_DETECTED()Z
HSPLkotlinx/coroutines/internal/LimitedDispatcher;-><init>(Lkotlinx/coroutines/CoroutineDispatcher;I)V
HSPLkotlinx/coroutines/internal/LimitedDispatcherKt;->checkParallelism(I)V
HSPLkotlinx/coroutines/internal/LockFreeLinkedListHead;-><init>()V
@@ -8116,15 +10550,18 @@
HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;-><init>()V
HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->access$finishAdd(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)V
HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->access$get_next$p(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)Lkotlinx/atomicfu/AtomicRef;
+HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->addLast(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)V
HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->addNext(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)Z
HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->addOneIfEmpty(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)Z
HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->correctPrev(Lkotlinx/coroutines/internal/OpDescriptor;)Lkotlinx/coroutines/internal/LockFreeLinkedListNode;
+HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->findPrevNonRemoved(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)Lkotlinx/coroutines/internal/LockFreeLinkedListNode;
HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->finishAdd(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)V
HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->getNext()Ljava/lang/Object;
HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->getNextNode()Lkotlinx/coroutines/internal/LockFreeLinkedListNode;
HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->getPrevNode()Lkotlinx/coroutines/internal/LockFreeLinkedListNode;
HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->isRemoved()Z
HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->remove()Z
+HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->removeFirstOrNull()Lkotlinx/coroutines/internal/LockFreeLinkedListNode;
HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->removeOrNext()Lkotlinx/coroutines/internal/LockFreeLinkedListNode;
HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->removed()Lkotlinx/coroutines/internal/Removed;
HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->tryCondAddNext(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;Lkotlinx/coroutines/internal/LockFreeLinkedListNode;Lkotlinx/coroutines/internal/LockFreeLinkedListNode$CondAddOp;)I
@@ -8199,8 +10636,18 @@
HSPLkotlinx/coroutines/scheduling/UnlimitedIoScheduler;-><init>()V
HSPLkotlinx/coroutines/sync/Empty;-><init>(Ljava/lang/Object;)V
HSPLkotlinx/coroutines/sync/Mutex$DefaultImpls;->lock$default(Lkotlinx/coroutines/sync/Mutex;Ljava/lang/Object;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/sync/Mutex$DefaultImpls;->unlock$default(Lkotlinx/coroutines/sync/Mutex;Ljava/lang/Object;ILjava/lang/Object;)V
+HSPLkotlinx/coroutines/sync/MutexImpl$LockCont$tryResumeLockWaiter$1;-><init>(Lkotlinx/coroutines/sync/MutexImpl;Lkotlinx/coroutines/sync/MutexImpl$LockCont;)V
+HSPLkotlinx/coroutines/sync/MutexImpl$LockCont;-><init>(Lkotlinx/coroutines/sync/MutexImpl;Ljava/lang/Object;Lkotlinx/coroutines/CancellableContinuation;)V
+HSPLkotlinx/coroutines/sync/MutexImpl$LockCont;->completeResumeLockWaiter()V
+HSPLkotlinx/coroutines/sync/MutexImpl$LockCont;->tryResumeLockWaiter()Z
+HSPLkotlinx/coroutines/sync/MutexImpl$LockWaiter;-><init>(Lkotlinx/coroutines/sync/MutexImpl;Ljava/lang/Object;)V
+HSPLkotlinx/coroutines/sync/MutexImpl$LockWaiter;->take()Z
+HSPLkotlinx/coroutines/sync/MutexImpl$LockedQueue;-><init>(Ljava/lang/Object;)V
HSPLkotlinx/coroutines/sync/MutexImpl;-><init>(Z)V
+HSPLkotlinx/coroutines/sync/MutexImpl;->access$get_state$p(Lkotlinx/coroutines/sync/MutexImpl;)Lkotlinx/atomicfu/AtomicRef;
HSPLkotlinx/coroutines/sync/MutexImpl;->lock(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLkotlinx/coroutines/sync/MutexImpl;->lockSuspend(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
HSPLkotlinx/coroutines/sync/MutexImpl;->tryLock(Ljava/lang/Object;)Z
HSPLkotlinx/coroutines/sync/MutexImpl;->unlock(Ljava/lang/Object;)V
HSPLkotlinx/coroutines/sync/MutexKt;-><clinit>()V
@@ -8208,6 +10655,7 @@
HSPLkotlinx/coroutines/sync/MutexKt;->Mutex(Z)Lkotlinx/coroutines/sync/Mutex;
HSPLkotlinx/coroutines/sync/MutexKt;->access$getEMPTY_LOCKED$p()Lkotlinx/coroutines/sync/Empty;
HSPLkotlinx/coroutines/sync/MutexKt;->access$getEMPTY_UNLOCKED$p()Lkotlinx/coroutines/sync/Empty;
+HSPLkotlinx/coroutines/sync/MutexKt;->access$getLOCKED$p()Lkotlinx/coroutines/internal/Symbol;
HSPLkotlinx/coroutines/sync/MutexKt;->access$getUNLOCKED$p()Lkotlinx/coroutines/internal/Symbol;
Landroidx/activity/Cancellable;
Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda0;
@@ -8215,7 +10663,6 @@
Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda2;
Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda3;
Landroidx/activity/ComponentActivity$1;
-Landroidx/activity/ComponentActivity$2$2;
Landroidx/activity/ComponentActivity$2;
Landroidx/activity/ComponentActivity$3;
Landroidx/activity/ComponentActivity$4;
@@ -8224,18 +10671,17 @@
Landroidx/activity/ComponentActivity$Api33Impl;
Landroidx/activity/ComponentActivity$NonConfigurationInstances;
Landroidx/activity/ComponentActivity$ReportFullyDrawnExecutor;
-Landroidx/activity/ComponentActivity$ReportFullyDrawnExecutorApi16Impl$$ExternalSyntheticLambda0;
Landroidx/activity/ComponentActivity$ReportFullyDrawnExecutorApi16Impl;
Landroidx/activity/ComponentActivity;
Landroidx/activity/FullyDrawnReporter$$ExternalSyntheticLambda0;
Landroidx/activity/FullyDrawnReporter;
Landroidx/activity/FullyDrawnReporterOwner;
Landroidx/activity/OnBackPressedCallback;
-Landroidx/activity/OnBackPressedDispatcher$$ExternalSyntheticLambda1;
-Landroidx/activity/OnBackPressedDispatcher$$ExternalSyntheticLambda2;
-Landroidx/activity/OnBackPressedDispatcher$$ExternalSyntheticThrowCCEIfNotNull0;
+Landroidx/activity/OnBackPressedDispatcher$1;
+Landroidx/activity/OnBackPressedDispatcher$2;
Landroidx/activity/OnBackPressedDispatcher$Api33Impl$$ExternalSyntheticLambda0;
Landroidx/activity/OnBackPressedDispatcher$Api33Impl;
+Landroidx/activity/OnBackPressedDispatcher$LifecycleOnBackPressedCancellable;
Landroidx/activity/OnBackPressedDispatcher$OnBackPressedCancellable;
Landroidx/activity/OnBackPressedDispatcher;
Landroidx/activity/OnBackPressedDispatcherOwner;
@@ -8257,21 +10703,16 @@
Landroidx/activity/result/ActivityResult;
Landroidx/activity/result/ActivityResultCallback;
Landroidx/activity/result/ActivityResultLauncher;
+Landroidx/activity/result/ActivityResultRegistry$$ExternalSyntheticThrowCCEIfNotNull0;
Landroidx/activity/result/ActivityResultRegistry$3;
Landroidx/activity/result/ActivityResultRegistry$CallbackAndContract;
Landroidx/activity/result/ActivityResultRegistry;
Landroidx/activity/result/ActivityResultRegistryOwner;
-Landroidx/activity/result/IntentSenderRequest$Builder;
-Landroidx/activity/result/IntentSenderRequest;
-Landroidx/activity/result/contract/ActivityResultContract$SynchronousResult;
Landroidx/activity/result/contract/ActivityResultContract;
-Landroidx/activity/result/contract/ActivityResultContracts$StartIntentSenderForResult$Companion;
-Landroidx/activity/result/contract/ActivityResultContracts$StartIntentSenderForResult;
Landroidx/arch/core/executor/ArchTaskExecutor$$ExternalSyntheticLambda0;
Landroidx/arch/core/executor/ArchTaskExecutor$$ExternalSyntheticLambda1;
Landroidx/arch/core/executor/ArchTaskExecutor;
Landroidx/arch/core/executor/DefaultTaskExecutor$1;
-Landroidx/arch/core/executor/DefaultTaskExecutor$Api28Impl;
Landroidx/arch/core/executor/DefaultTaskExecutor;
Landroidx/arch/core/executor/TaskExecutor;
Landroidx/arch/core/internal/FastSafeIterableMap;
@@ -8283,19 +10724,24 @@
Landroidx/arch/core/internal/SafeIterableMap$SupportRemove;
Landroidx/arch/core/internal/SafeIterableMap;
Landroidx/collection/ArraySet$Companion;
-Landroidx/collection/ArraySet$ElementIterator;
Landroidx/collection/ArraySet;
-Landroidx/collection/IndexBasedArrayIterator;
Landroidx/collection/LruCache;
Landroidx/collection/SimpleArrayMap;
Landroidx/collection/SparseArrayCompat;
-Landroidx/collection/SparseArrayCompatKt;
Landroidx/collection/internal/ContainerHelpersKt;
Landroidx/collection/internal/Lock;
Landroidx/collection/internal/LruHashMap;
+Landroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$1;
+Landroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$2;
+Landroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1;
+Landroidx/compose/animation/ColorVectorConverterKt;
+Landroidx/compose/animation/FlingCalculator;
+Landroidx/compose/animation/FlingCalculatorKt;
+Landroidx/compose/animation/SingleValueAnimationKt;
+Landroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;
+Landroidx/compose/animation/SplineBasedFloatDecayAnimationSpec_androidKt;
Landroidx/compose/animation/core/Animatable$runAnimation$2$1;
Landroidx/compose/animation/core/Animatable$runAnimation$2;
-Landroidx/compose/animation/core/Animatable$snapTo$2;
Landroidx/compose/animation/core/Animatable;
Landroidx/compose/animation/core/AnimatableKt;
Landroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$2;
@@ -8312,34 +10758,40 @@
Landroidx/compose/animation/core/AnimationState;
Landroidx/compose/animation/core/AnimationStateKt;
Landroidx/compose/animation/core/AnimationVector1D;
-Landroidx/compose/animation/core/AnimationVector2D;
Landroidx/compose/animation/core/AnimationVector4D;
Landroidx/compose/animation/core/AnimationVector;
Landroidx/compose/animation/core/AnimationVectorsKt;
Landroidx/compose/animation/core/Animations;
+Landroidx/compose/animation/core/ComplexDouble;
+Landroidx/compose/animation/core/ComplexDoubleKt;
Landroidx/compose/animation/core/CubicBezierEasing;
-Landroidx/compose/animation/core/DecayAnimation;
Landroidx/compose/animation/core/DecayAnimationSpec;
+Landroidx/compose/animation/core/DecayAnimationSpecImpl;
+Landroidx/compose/animation/core/DecayAnimationSpecKt;
Landroidx/compose/animation/core/Easing;
Landroidx/compose/animation/core/EasingKt$LinearEasing$1;
Landroidx/compose/animation/core/EasingKt;
Landroidx/compose/animation/core/FiniteAnimationSpec;
Landroidx/compose/animation/core/FloatAnimationSpec;
+Landroidx/compose/animation/core/FloatDecayAnimationSpec;
+Landroidx/compose/animation/core/FloatSpringSpec;
Landroidx/compose/animation/core/FloatTweenSpec;
-Landroidx/compose/animation/core/InfiniteAnimationPolicyKt;
+Landroidx/compose/animation/core/Motion;
Landroidx/compose/animation/core/MutatePriority;
Landroidx/compose/animation/core/MutatorMutex$Mutator;
Landroidx/compose/animation/core/MutatorMutex$mutate$2;
Landroidx/compose/animation/core/MutatorMutex;
+Landroidx/compose/animation/core/SpringEstimationKt$estimateCriticallyDamped$fn$1;
+Landroidx/compose/animation/core/SpringEstimationKt$estimateCriticallyDamped$fnPrime$1;
+Landroidx/compose/animation/core/SpringEstimationKt;
+Landroidx/compose/animation/core/SpringSimulation;
+Landroidx/compose/animation/core/SpringSimulationKt;
Landroidx/compose/animation/core/SpringSpec;
-Landroidx/compose/animation/core/SuspendAnimationKt$animate$3;
Landroidx/compose/animation/core/SuspendAnimationKt$animate$4;
-Landroidx/compose/animation/core/SuspendAnimationKt$animate$5;
Landroidx/compose/animation/core/SuspendAnimationKt$animate$6$1;
Landroidx/compose/animation/core/SuspendAnimationKt$animate$6;
Landroidx/compose/animation/core/SuspendAnimationKt$animate$7;
Landroidx/compose/animation/core/SuspendAnimationKt$animate$9;
-Landroidx/compose/animation/core/SuspendAnimationKt$animateDecay$4;
Landroidx/compose/animation/core/SuspendAnimationKt$callWithFrameNanos$2;
Landroidx/compose/animation/core/SuspendAnimationKt;
Landroidx/compose/animation/core/TargetBasedAnimation;
@@ -8366,6 +10818,8 @@
Landroidx/compose/animation/core/VectorConvertersKt$SizeToVector$2;
Landroidx/compose/animation/core/VectorConvertersKt;
Landroidx/compose/animation/core/VectorizedAnimationSpec;
+Landroidx/compose/animation/core/VectorizedAnimationSpecKt$createSpringAnimations$2;
+Landroidx/compose/animation/core/VectorizedAnimationSpecKt;
Landroidx/compose/animation/core/VectorizedDurationBasedAnimationSpec;
Landroidx/compose/animation/core/VectorizedFiniteAnimationSpec;
Landroidx/compose/animation/core/VectorizedFloatAnimationSpec$1;
@@ -8373,75 +10827,76 @@
Landroidx/compose/animation/core/VectorizedSpringSpec;
Landroidx/compose/animation/core/VectorizedTweenSpec;
Landroidx/compose/animation/core/VisibilityThresholdsKt;
+Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1$1;
+Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;
+Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$onNewSize$1;
+Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;
+Landroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1$1;
+Landroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1;
+Landroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2$1;
+Landroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2;
+Landroidx/compose/foundation/AndroidOverscrollKt;
+Landroidx/compose/foundation/Api31Impl;
Landroidx/compose/foundation/Background;
-Landroidx/compose/foundation/BackgroundKt$background-bw27NRU$$inlined$debugInspectorInfo$1;
Landroidx/compose/foundation/BackgroundKt;
-Landroidx/compose/foundation/BorderKt;
Landroidx/compose/foundation/BorderStroke;
-Landroidx/compose/foundation/CanvasKt$Canvas$1;
Landroidx/compose/foundation/CanvasKt;
+Landroidx/compose/foundation/CheckScrollableContainerConstraintsKt;
Landroidx/compose/foundation/ClickableKt$PressedInteractionSourceDisposableEffect$1$invoke$$inlined$onDispose$1;
Landroidx/compose/foundation/ClickableKt$PressedInteractionSourceDisposableEffect$1;
-Landroidx/compose/foundation/ClickableKt$PressedInteractionSourceDisposableEffect$2;
-Landroidx/compose/foundation/ClickableKt$clickable$4$1$1$1;
Landroidx/compose/foundation/ClickableKt$clickable$4$1$1;
Landroidx/compose/foundation/ClickableKt$clickable$4$delayPressInteraction$1$1;
Landroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1$1;
Landroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1$2;
Landroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1;
Landroidx/compose/foundation/ClickableKt$clickable$4;
-Landroidx/compose/foundation/ClickableKt$clickable-O2vRcR0$$inlined$debugInspectorInfo$1;
Landroidx/compose/foundation/ClickableKt$genericClickableWithoutGesture$clickSemantics$1$1;
-Landroidx/compose/foundation/ClickableKt$genericClickableWithoutGesture$clickSemantics$1$2;
Landroidx/compose/foundation/ClickableKt$genericClickableWithoutGesture$clickSemantics$1;
-Landroidx/compose/foundation/ClickableKt$genericClickableWithoutGesture$detectPressAndClickFromKey$1$1;
-Landroidx/compose/foundation/ClickableKt$genericClickableWithoutGesture$detectPressAndClickFromKey$1$2$1;
Landroidx/compose/foundation/ClickableKt$genericClickableWithoutGesture$detectPressAndClickFromKey$1;
+Landroidx/compose/foundation/ClickableKt$handlePressInteraction$2$delayJob$1;
Landroidx/compose/foundation/ClickableKt$handlePressInteraction$2;
Landroidx/compose/foundation/ClickableKt;
+Landroidx/compose/foundation/Clickable_androidKt$isComposeRootInScrollableContainer$1;
Landroidx/compose/foundation/Clickable_androidKt;
+Landroidx/compose/foundation/ClipScrollableContainerKt$HorizontalScrollableClipModifier$1;
+Landroidx/compose/foundation/ClipScrollableContainerKt$VerticalScrollableClipModifier$1;
+Landroidx/compose/foundation/ClipScrollableContainerKt;
Landroidx/compose/foundation/DarkThemeKt;
Landroidx/compose/foundation/DarkTheme_androidKt;
-Landroidx/compose/foundation/DefaultDebugIndication;
+Landroidx/compose/foundation/DrawOverscrollModifier;
+Landroidx/compose/foundation/EdgeEffectCompat;
Landroidx/compose/foundation/FocusableKt$focusGroup$1;
-Landroidx/compose/foundation/FocusableKt$focusable$$inlined$debugInspectorInfo$1;
Landroidx/compose/foundation/FocusableKt$focusable$2$1$1$invoke$$inlined$onDispose$1;
Landroidx/compose/foundation/FocusableKt$focusable$2$1$1;
-Landroidx/compose/foundation/FocusableKt$focusable$2$2$1;
Landroidx/compose/foundation/FocusableKt$focusable$2$2$invoke$$inlined$onDispose$1;
Landroidx/compose/foundation/FocusableKt$focusable$2$2;
+Landroidx/compose/foundation/FocusableKt$focusable$2$3$1$invoke$$inlined$onDispose$1;
Landroidx/compose/foundation/FocusableKt$focusable$2$3$1;
-Landroidx/compose/foundation/FocusableKt$focusable$2$3;
+Landroidx/compose/foundation/FocusableKt$focusable$2$4$1$1;
Landroidx/compose/foundation/FocusableKt$focusable$2$4$1;
-Landroidx/compose/foundation/FocusableKt$focusable$2$5$1;
Landroidx/compose/foundation/FocusableKt$focusable$2$5$2;
-Landroidx/compose/foundation/FocusableKt$focusable$2$5$3;
Landroidx/compose/foundation/FocusableKt$focusable$2$5;
Landroidx/compose/foundation/FocusableKt$focusable$2;
-Landroidx/compose/foundation/FocusableKt$focusableInNonTouchMode$$inlined$debugInspectorInfo$1;
Landroidx/compose/foundation/FocusableKt$focusableInNonTouchMode$2$1;
Landroidx/compose/foundation/FocusableKt$focusableInNonTouchMode$2;
-Landroidx/compose/foundation/FocusableKt$onPinnableParentAvailable$$inlined$debugInspectorInfo$1;
-Landroidx/compose/foundation/FocusableKt$special$$inlined$debugInspectorInfo$1;
Landroidx/compose/foundation/FocusableKt;
-Landroidx/compose/foundation/FocusedBoundsModifier;
-Landroidx/compose/foundation/HoverableKt$hoverable$$inlined$debugInspectorInfo$1;
+Landroidx/compose/foundation/FocusedBoundsKt$ModifierLocalFocusedBoundsObserver$1;
+Landroidx/compose/foundation/FocusedBoundsKt$onFocusedBoundsChanged$2;
+Landroidx/compose/foundation/FocusedBoundsKt;
+Landroidx/compose/foundation/FocusedBoundsObserverModifier;
Landroidx/compose/foundation/HoverableKt$hoverable$2$1$1$invoke$$inlined$onDispose$1;
Landroidx/compose/foundation/HoverableKt$hoverable$2$1$1;
Landroidx/compose/foundation/HoverableKt$hoverable$2$2$1;
-Landroidx/compose/foundation/HoverableKt$hoverable$2$3$1$1;
-Landroidx/compose/foundation/HoverableKt$hoverable$2$3$1$2;
Landroidx/compose/foundation/HoverableKt$hoverable$2$3$1;
Landroidx/compose/foundation/HoverableKt$hoverable$2$3;
-Landroidx/compose/foundation/HoverableKt$hoverable$2$invoke$emitEnter$1;
-Landroidx/compose/foundation/HoverableKt$hoverable$2$invoke$emitExit$1;
Landroidx/compose/foundation/HoverableKt$hoverable$2;
Landroidx/compose/foundation/HoverableKt;
+Landroidx/compose/foundation/ImageKt$Image$2$measure$1;
+Landroidx/compose/foundation/ImageKt$Image$2;
Landroidx/compose/foundation/ImageKt;
Landroidx/compose/foundation/Indication;
Landroidx/compose/foundation/IndicationInstance;
Landroidx/compose/foundation/IndicationKt$LocalIndication$1;
-Landroidx/compose/foundation/IndicationKt$indication$$inlined$debugInspectorInfo$1;
Landroidx/compose/foundation/IndicationKt$indication$2;
Landroidx/compose/foundation/IndicationKt;
Landroidx/compose/foundation/IndicationModifier;
@@ -8449,92 +10904,102 @@
Landroidx/compose/foundation/MutatorMutex$Mutator;
Landroidx/compose/foundation/MutatorMutex$mutateWith$2;
Landroidx/compose/foundation/MutatorMutex;
-Landroidx/compose/foundation/NoIndication;
-Landroidx/compose/foundation/PinnableParentConsumer;
+Landroidx/compose/foundation/OverscrollConfiguration;
+Landroidx/compose/foundation/OverscrollConfigurationKt$LocalOverscrollConfiguration$1;
+Landroidx/compose/foundation/OverscrollConfigurationKt;
+Landroidx/compose/foundation/OverscrollEffect;
+Landroidx/compose/foundation/OverscrollKt;
+Landroidx/compose/foundation/gestures/AndroidConfig;
+Landroidx/compose/foundation/gestures/AndroidScrollable_androidKt;
+Landroidx/compose/foundation/gestures/BringIntoViewRequestPriorityQueue;
+Landroidx/compose/foundation/gestures/ContentInViewModifier$Request;
+Landroidx/compose/foundation/gestures/ContentInViewModifier$WhenMappings;
+Landroidx/compose/foundation/gestures/ContentInViewModifier$modifier$1;
+Landroidx/compose/foundation/gestures/ContentInViewModifier;
Landroidx/compose/foundation/gestures/DefaultDraggableState$drag$2;
Landroidx/compose/foundation/gestures/DefaultDraggableState$dragScope$1;
Landroidx/compose/foundation/gestures/DefaultDraggableState;
-Landroidx/compose/foundation/gestures/DragEvent$DragCancelled;
-Landroidx/compose/foundation/gestures/DragEvent$DragDelta;
-Landroidx/compose/foundation/gestures/DragEvent$DragStarted;
-Landroidx/compose/foundation/gestures/DragEvent$DragStopped;
-Landroidx/compose/foundation/gestures/DragEvent;
+Landroidx/compose/foundation/gestures/DefaultFlingBehavior;
+Landroidx/compose/foundation/gestures/DefaultScrollableState$scrollScope$1;
+Landroidx/compose/foundation/gestures/DefaultScrollableState;
+Landroidx/compose/foundation/gestures/DragGestureDetectorKt$HorizontalPointerDirectionConfig$1;
+Landroidx/compose/foundation/gestures/DragGestureDetectorKt$VerticalPointerDirectionConfig$1;
Landroidx/compose/foundation/gestures/DragGestureDetectorKt;
-Landroidx/compose/foundation/gestures/DragLogic$processDragCancel$1;
-Landroidx/compose/foundation/gestures/DragLogic$processDragStart$1;
-Landroidx/compose/foundation/gestures/DragLogic$processDragStop$1;
Landroidx/compose/foundation/gestures/DragLogic;
Landroidx/compose/foundation/gestures/DragScope;
Landroidx/compose/foundation/gestures/DraggableKt$awaitDownAndSlop$1;
Landroidx/compose/foundation/gestures/DraggableKt$awaitDownAndSlop$postPointerSlop$1;
-Landroidx/compose/foundation/gestures/DraggableKt$awaitDrag$dragTick$1;
-Landroidx/compose/foundation/gestures/DraggableKt$draggable$$inlined$debugInspectorInfo$1;
Landroidx/compose/foundation/gestures/DraggableKt$draggable$1;
-Landroidx/compose/foundation/gestures/DraggableKt$draggable$2;
Landroidx/compose/foundation/gestures/DraggableKt$draggable$3;
Landroidx/compose/foundation/gestures/DraggableKt$draggable$4;
Landroidx/compose/foundation/gestures/DraggableKt$draggable$5;
Landroidx/compose/foundation/gestures/DraggableKt$draggable$6;
-Landroidx/compose/foundation/gestures/DraggableKt$draggable$7;
Landroidx/compose/foundation/gestures/DraggableKt$draggable$9$1$1$invoke$$inlined$onDispose$1;
Landroidx/compose/foundation/gestures/DraggableKt$draggable$9$1$1;
-Landroidx/compose/foundation/gestures/DraggableKt$draggable$9$2$2;
Landroidx/compose/foundation/gestures/DraggableKt$draggable$9$2;
Landroidx/compose/foundation/gestures/DraggableKt$draggable$9$3$1$1;
Landroidx/compose/foundation/gestures/DraggableKt$draggable$9$3$1;
Landroidx/compose/foundation/gestures/DraggableKt$draggable$9$3;
Landroidx/compose/foundation/gestures/DraggableKt$draggable$9;
-Landroidx/compose/foundation/gestures/DraggableKt$rememberDraggableState$1$1;
Landroidx/compose/foundation/gestures/DraggableKt;
Landroidx/compose/foundation/gestures/DraggableState;
+Landroidx/compose/foundation/gestures/FlingBehavior;
Landroidx/compose/foundation/gestures/ForEachGestureKt$awaitAllPointersUp$3;
Landroidx/compose/foundation/gestures/ForEachGestureKt$awaitEachGesture$2;
Landroidx/compose/foundation/gestures/ForEachGestureKt;
+Landroidx/compose/foundation/gestures/ModifierLocalScrollableContainerProvider;
Landroidx/compose/foundation/gestures/Orientation;
Landroidx/compose/foundation/gestures/PointerDirectionConfig;
Landroidx/compose/foundation/gestures/PressGestureScope;
Landroidx/compose/foundation/gestures/PressGestureScopeImpl$reset$1;
Landroidx/compose/foundation/gestures/PressGestureScopeImpl$tryAwaitRelease$1;
Landroidx/compose/foundation/gestures/PressGestureScopeImpl;
+Landroidx/compose/foundation/gestures/ScrollConfig;
+Landroidx/compose/foundation/gestures/ScrollDraggableState;
+Landroidx/compose/foundation/gestures/ScrollScope;
+Landroidx/compose/foundation/gestures/ScrollableDefaults;
+Landroidx/compose/foundation/gestures/ScrollableKt$DefaultScrollMotionDurationScale$1;
+Landroidx/compose/foundation/gestures/ScrollableKt$ModifierLocalScrollableContainer$1;
+Landroidx/compose/foundation/gestures/ScrollableKt$NoOpScrollScope$1;
+Landroidx/compose/foundation/gestures/ScrollableKt$awaitScrollEvent$1;
+Landroidx/compose/foundation/gestures/ScrollableKt$mouseWheelScroll$1$1;
+Landroidx/compose/foundation/gestures/ScrollableKt$mouseWheelScroll$1;
+Landroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$1;
+Landroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$2$1;
+Landroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$3$1;
+Landroidx/compose/foundation/gestures/ScrollableKt$scrollable$2;
+Landroidx/compose/foundation/gestures/ScrollableKt$scrollableNestedScrollConnection$1;
+Landroidx/compose/foundation/gestures/ScrollableKt;
+Landroidx/compose/foundation/gestures/ScrollableState;
+Landroidx/compose/foundation/gestures/ScrollableStateKt;
+Landroidx/compose/foundation/gestures/ScrollingLogic;
Landroidx/compose/foundation/gestures/TapGestureDetectorKt$NoPressGesture$1;
Landroidx/compose/foundation/gestures/TapGestureDetectorKt$awaitFirstDown$2;
-Landroidx/compose/foundation/gestures/TapGestureDetectorKt$awaitSecondDown$2;
-Landroidx/compose/foundation/gestures/TapGestureDetectorKt$consumeUntilUp$1;
Landroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$1;
Landroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$2;
-Landroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$3;
Landroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$4;
Landroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1;
Landroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2;
-Landroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapGestures$2$1$10;
Landroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapGestures$2$1$1;
-Landroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapGestures$2$1$2;
Landroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapGestures$2$1$3;
-Landroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapGestures$2$1$4;
Landroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapGestures$2$1$5;
-Landroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapGestures$2$1$6;
-Landroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapGestures$2$1$7;
-Landroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapGestures$2$1$8;
-Landroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapGestures$2$1$9;
Landroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapGestures$2$1;
Landroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapGestures$2;
Landroidx/compose/foundation/gestures/TapGestureDetectorKt$waitForUpOrCancellation$2;
Landroidx/compose/foundation/gestures/TapGestureDetectorKt;
-Landroidx/compose/foundation/interaction/DragInteraction$Cancel;
+Landroidx/compose/foundation/gestures/UpdatableAnimationState$Companion;
+Landroidx/compose/foundation/gestures/UpdatableAnimationState;
Landroidx/compose/foundation/interaction/DragInteraction$Start;
-Landroidx/compose/foundation/interaction/DragInteraction$Stop;
Landroidx/compose/foundation/interaction/FocusInteraction$Focus;
-Landroidx/compose/foundation/interaction/FocusInteraction$Unfocus;
Landroidx/compose/foundation/interaction/HoverInteraction$Enter;
-Landroidx/compose/foundation/interaction/HoverInteraction$Exit;
Landroidx/compose/foundation/interaction/Interaction;
Landroidx/compose/foundation/interaction/InteractionSource;
Landroidx/compose/foundation/interaction/InteractionSourceKt;
Landroidx/compose/foundation/interaction/MutableInteractionSource;
Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;
-Landroidx/compose/foundation/interaction/PressInteraction$Cancel;
Landroidx/compose/foundation/interaction/PressInteraction$Press;
Landroidx/compose/foundation/interaction/PressInteraction$Release;
+Landroidx/compose/foundation/layout/AndroidWindowInsets;
Landroidx/compose/foundation/layout/Arrangement$Bottom$1;
Landroidx/compose/foundation/layout/Arrangement$Center$1;
Landroidx/compose/foundation/layout/Arrangement$End$1;
@@ -8550,18 +11015,16 @@
Landroidx/compose/foundation/layout/Arrangement$spacedBy$1;
Landroidx/compose/foundation/layout/Arrangement;
Landroidx/compose/foundation/layout/BoxChildData;
-Landroidx/compose/foundation/layout/BoxKt$Box$3;
Landroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1$measure$1;
Landroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1;
-Landroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$1;
Landroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$2;
Landroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$5;
Landroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1;
Landroidx/compose/foundation/layout/BoxKt;
+Landroidx/compose/foundation/layout/BoxScope;
Landroidx/compose/foundation/layout/BoxScopeInstance;
Landroidx/compose/foundation/layout/BoxWithConstraintsKt$BoxWithConstraints$1$1$measurables$1;
Landroidx/compose/foundation/layout/BoxWithConstraintsKt$BoxWithConstraints$1$1;
-Landroidx/compose/foundation/layout/BoxWithConstraintsKt$BoxWithConstraints$2;
Landroidx/compose/foundation/layout/BoxWithConstraintsKt;
Landroidx/compose/foundation/layout/BoxWithConstraintsScope;
Landroidx/compose/foundation/layout/BoxWithConstraintsScopeImpl;
@@ -8569,7 +11032,6 @@
Landroidx/compose/foundation/layout/ColumnKt$columnMeasurePolicy$1$1;
Landroidx/compose/foundation/layout/ColumnKt;
Landroidx/compose/foundation/layout/ColumnScope;
-Landroidx/compose/foundation/layout/ColumnScopeInstance$align$$inlined$debugInspectorInfo$1;
Landroidx/compose/foundation/layout/ColumnScopeInstance;
Landroidx/compose/foundation/layout/CrossAxisAlignment$CenterCrossAxisAlignment;
Landroidx/compose/foundation/layout/CrossAxisAlignment$Companion;
@@ -8579,19 +11041,21 @@
Landroidx/compose/foundation/layout/CrossAxisAlignment$VerticalCrossAxisAlignment;
Landroidx/compose/foundation/layout/CrossAxisAlignment;
Landroidx/compose/foundation/layout/Direction;
+Landroidx/compose/foundation/layout/ExcludeInsets;
Landroidx/compose/foundation/layout/FillModifier$measure$1;
Landroidx/compose/foundation/layout/FillModifier;
-Landroidx/compose/foundation/layout/HorizontalAlignModifier;
+Landroidx/compose/foundation/layout/FixedIntInsets;
+Landroidx/compose/foundation/layout/InsetsListener;
+Landroidx/compose/foundation/layout/InsetsPaddingModifier$measure$1;
+Landroidx/compose/foundation/layout/InsetsPaddingModifier;
+Landroidx/compose/foundation/layout/InsetsValues;
Landroidx/compose/foundation/layout/LayoutOrientation;
-Landroidx/compose/foundation/layout/OffsetKt$offset$$inlined$debugInspectorInfo$1;
+Landroidx/compose/foundation/layout/LayoutWeightImpl;
+Landroidx/compose/foundation/layout/LimitInsets;
Landroidx/compose/foundation/layout/OffsetKt;
Landroidx/compose/foundation/layout/OffsetPxModifier$measure$1;
Landroidx/compose/foundation/layout/OffsetPxModifier;
Landroidx/compose/foundation/layout/OrientationIndependentConstraints;
-Landroidx/compose/foundation/layout/PaddingKt$padding$$inlined$debugInspectorInfo$1;
-Landroidx/compose/foundation/layout/PaddingKt$padding-3ABfNKs$$inlined$debugInspectorInfo$1;
-Landroidx/compose/foundation/layout/PaddingKt$padding-VpY3zN4$$inlined$debugInspectorInfo$1;
-Landroidx/compose/foundation/layout/PaddingKt$padding-qDBjuR0$$inlined$debugInspectorInfo$1;
Landroidx/compose/foundation/layout/PaddingKt;
Landroidx/compose/foundation/layout/PaddingModifier$measure$1;
Landroidx/compose/foundation/layout/PaddingModifier;
@@ -8599,15 +11063,16 @@
Landroidx/compose/foundation/layout/PaddingValuesImpl;
Landroidx/compose/foundation/layout/PaddingValuesModifier$measure$2;
Landroidx/compose/foundation/layout/PaddingValuesModifier;
-Landroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1$measure$4;
+Landroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1$measure$1;
Landroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1;
Landroidx/compose/foundation/layout/RowColumnImplKt;
+Landroidx/compose/foundation/layout/RowColumnMeasureHelperResult;
+Landroidx/compose/foundation/layout/RowColumnMeasurementHelper;
Landroidx/compose/foundation/layout/RowColumnParentData;
Landroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;
Landroidx/compose/foundation/layout/RowKt$rowMeasurePolicy$1$1;
Landroidx/compose/foundation/layout/RowKt;
Landroidx/compose/foundation/layout/RowScope;
-Landroidx/compose/foundation/layout/RowScopeInstance$align$$inlined$debugInspectorInfo$1;
Landroidx/compose/foundation/layout/RowScopeInstance;
Landroidx/compose/foundation/layout/SizeKt$createFillHeightModifier$1;
Landroidx/compose/foundation/layout/SizeKt$createFillSizeModifier$1;
@@ -8618,14 +11083,6 @@
Landroidx/compose/foundation/layout/SizeKt$createWrapContentSizeModifier$2;
Landroidx/compose/foundation/layout/SizeKt$createWrapContentWidthModifier$1;
Landroidx/compose/foundation/layout/SizeKt$createWrapContentWidthModifier$2;
-Landroidx/compose/foundation/layout/SizeKt$defaultMinSize-VpY3zN4$$inlined$debugInspectorInfo$1;
-Landroidx/compose/foundation/layout/SizeKt$height-3ABfNKs$$inlined$debugInspectorInfo$1;
-Landroidx/compose/foundation/layout/SizeKt$heightIn-VpY3zN4$$inlined$debugInspectorInfo$1;
-Landroidx/compose/foundation/layout/SizeKt$size-3ABfNKs$$inlined$debugInspectorInfo$1;
-Landroidx/compose/foundation/layout/SizeKt$size-VpY3zN4$$inlined$debugInspectorInfo$1;
-Landroidx/compose/foundation/layout/SizeKt$sizeIn-qDBjuR0$$inlined$debugInspectorInfo$1;
-Landroidx/compose/foundation/layout/SizeKt$width-3ABfNKs$$inlined$debugInspectorInfo$1;
-Landroidx/compose/foundation/layout/SizeKt$widthIn-VpY3zN4$$inlined$debugInspectorInfo$1;
Landroidx/compose/foundation/layout/SizeKt;
Landroidx/compose/foundation/layout/SizeMode;
Landroidx/compose/foundation/layout/SizeModifier$measure$1;
@@ -8633,29 +11090,159 @@
Landroidx/compose/foundation/layout/SpacerKt;
Landroidx/compose/foundation/layout/SpacerMeasurePolicy$measure$1$1;
Landroidx/compose/foundation/layout/SpacerMeasurePolicy;
+Landroidx/compose/foundation/layout/UnionInsets;
Landroidx/compose/foundation/layout/UnspecifiedConstraintsModifier$measure$1;
Landroidx/compose/foundation/layout/UnspecifiedConstraintsModifier;
-Landroidx/compose/foundation/layout/VerticalAlignModifier;
+Landroidx/compose/foundation/layout/ValueInsets;
+Landroidx/compose/foundation/layout/WindowInsets$Companion;
+Landroidx/compose/foundation/layout/WindowInsets;
+Landroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1$invoke$$inlined$onDispose$1;
+Landroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1;
+Landroidx/compose/foundation/layout/WindowInsetsHolder$Companion;
+Landroidx/compose/foundation/layout/WindowInsetsHolder;
+Landroidx/compose/foundation/layout/WindowInsetsKt;
+Landroidx/compose/foundation/layout/WindowInsetsPaddingKt$ModifierLocalConsumedWindowInsets$1;
+Landroidx/compose/foundation/layout/WindowInsetsPaddingKt;
+Landroidx/compose/foundation/layout/WindowInsetsSides$Companion;
+Landroidx/compose/foundation/layout/WindowInsetsSides;
+Landroidx/compose/foundation/layout/WindowInsets_androidKt;
Landroidx/compose/foundation/layout/WrapContentModifier$measure$1;
Landroidx/compose/foundation/layout/WrapContentModifier;
-Landroidx/compose/foundation/lazy/layout/PinnableParent;
-Landroidx/compose/foundation/lazy/layout/PinnableParentKt$ModifierLocalPinnableParent$1;
-Landroidx/compose/foundation/lazy/layout/PinnableParentKt;
+Landroidx/compose/foundation/lazy/AwaitFirstLayoutModifier;
+Landroidx/compose/foundation/lazy/DataIndex;
+Landroidx/compose/foundation/lazy/EmptyLazyListLayoutInfo;
+Landroidx/compose/foundation/lazy/LazyBeyondBoundsModifierKt;
+Landroidx/compose/foundation/lazy/LazyDslKt;
+Landroidx/compose/foundation/lazy/LazyItemScope;
+Landroidx/compose/foundation/lazy/LazyItemScopeImpl;
+Landroidx/compose/foundation/lazy/LazyListAnimateScrollScope;
+Landroidx/compose/foundation/lazy/LazyListBeyondBoundsInfo$Interval;
+Landroidx/compose/foundation/lazy/LazyListBeyondBoundsInfo;
+Landroidx/compose/foundation/lazy/LazyListBeyondBoundsModifierLocal$Companion$emptyBeyondBoundsScope$1;
+Landroidx/compose/foundation/lazy/LazyListBeyondBoundsModifierLocal$Companion;
+Landroidx/compose/foundation/lazy/LazyListBeyondBoundsModifierLocal;
+Landroidx/compose/foundation/lazy/LazyListIntervalContent;
+Landroidx/compose/foundation/lazy/LazyListItemInfo;
+Landroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;
+Landroidx/compose/foundation/lazy/LazyListItemProvider;
+Landroidx/compose/foundation/lazy/LazyListItemProviderImpl$1$1;
+Landroidx/compose/foundation/lazy/LazyListItemProviderImpl$1;
+Landroidx/compose/foundation/lazy/LazyListItemProviderImpl;
+Landroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;
+Landroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$itemProviderState$1;
+Landroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$1$1;
+Landroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$2;
+Landroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$3;
+Landroidx/compose/foundation/lazy/LazyListItemProviderKt;
+Landroidx/compose/foundation/lazy/LazyListKt$ScrollPositionUpdater$1;
+Landroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$2;
+Landroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;
+Landroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1;
+Landroidx/compose/foundation/lazy/LazyListKt;
+Landroidx/compose/foundation/lazy/LazyListLayoutInfo;
+Landroidx/compose/foundation/lazy/LazyListMeasureKt$measureLazyList$5;
+Landroidx/compose/foundation/lazy/LazyListMeasureKt;
+Landroidx/compose/foundation/lazy/LazyListMeasureResult;
+Landroidx/compose/foundation/lazy/LazyListPlaceableWrapper;
+Landroidx/compose/foundation/lazy/LazyListPositionedItem;
+Landroidx/compose/foundation/lazy/LazyListScope;
+Landroidx/compose/foundation/lazy/LazyListScopeImpl$item$2;
+Landroidx/compose/foundation/lazy/LazyListScopeImpl$item$3;
+Landroidx/compose/foundation/lazy/LazyListScopeImpl;
+Landroidx/compose/foundation/lazy/LazyListScrollPosition;
+Landroidx/compose/foundation/lazy/LazyListState$Companion$Saver$1;
+Landroidx/compose/foundation/lazy/LazyListState$Companion$Saver$2;
+Landroidx/compose/foundation/lazy/LazyListState$Companion;
+Landroidx/compose/foundation/lazy/LazyListState$remeasurementModifier$1;
+Landroidx/compose/foundation/lazy/LazyListState$scrollableState$1;
+Landroidx/compose/foundation/lazy/LazyListState;
+Landroidx/compose/foundation/lazy/LazyListStateKt$rememberLazyListState$1$1;
+Landroidx/compose/foundation/lazy/LazyListStateKt;
+Landroidx/compose/foundation/lazy/LazyMeasuredItem;
+Landroidx/compose/foundation/lazy/LazyMeasuredItemProvider;
+Landroidx/compose/foundation/lazy/LazySemanticsKt$rememberLazyListSemanticState$1$1$scrollAxisRange$1;
+Landroidx/compose/foundation/lazy/LazySemanticsKt$rememberLazyListSemanticState$1$1$scrollAxisRange$2;
+Landroidx/compose/foundation/lazy/LazySemanticsKt$rememberLazyListSemanticState$1$1;
+Landroidx/compose/foundation/lazy/LazySemanticsKt;
+Landroidx/compose/foundation/lazy/MeasuredItemFactory;
+Landroidx/compose/foundation/lazy/layout/DefaultDelegatingLazyLayoutItemProvider$Item$1;
+Landroidx/compose/foundation/lazy/layout/DefaultDelegatingLazyLayoutItemProvider;
+Landroidx/compose/foundation/lazy/layout/DefaultLazyKey$Companion$CREATOR$1;
+Landroidx/compose/foundation/lazy/layout/DefaultLazyKey$Companion;
+Landroidx/compose/foundation/lazy/layout/DefaultLazyKey;
+Landroidx/compose/foundation/lazy/layout/DefaultLazyLayoutItemsProvider$generateKeyToIndexMap$1$1;
+Landroidx/compose/foundation/lazy/layout/DefaultLazyLayoutItemsProvider;
+Landroidx/compose/foundation/lazy/layout/IntervalList$Interval;
+Landroidx/compose/foundation/lazy/layout/IntervalList;
+Landroidx/compose/foundation/lazy/layout/IntervalListKt;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutIntervalContent;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$1;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$2$invoke$$inlined$onDispose$1;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$2;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProviderKt;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutItemReusePolicy;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$1$2$1;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$1$itemContentFactory$1$1;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$1;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutKt;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScope;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt$LazyLayoutPinnableItem$1$1$invoke$$inlined$onDispose$1;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt$LazyLayoutPinnableItem$1$1;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList$PinnedItem;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState$PrefetchHandle;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState$Prefetcher;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$Companion;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$PrefetchRequest;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher_androidKt;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticState;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$1;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$indexForKeyMapping$1;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$scrollByAction$1;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$scrollToIndexAction$1;
+Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt;
+Landroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt$rememberLazyNearestItemsRangeState$1$1$1;
+Landroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt$rememberLazyNearestItemsRangeState$1$1$2;
+Landroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt$rememberLazyNearestItemsRangeState$1$1;
+Landroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt;
+Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$1;
+Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$1;
+Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$2;
+Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion;
+Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$1$invoke$$inlined$onDispose$1;
+Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$1;
+Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$2;
+Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;
+Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$1;
+Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$holder$1;
+Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt;
+Landroidx/compose/foundation/lazy/layout/Lazy_androidKt;
+Landroidx/compose/foundation/lazy/layout/MutableIntervalList;
Landroidx/compose/foundation/relocation/AndroidBringIntoViewParent;
Landroidx/compose/foundation/relocation/BringIntoViewChildModifier;
Landroidx/compose/foundation/relocation/BringIntoViewKt$ModifierLocalBringIntoViewParent$1;
Landroidx/compose/foundation/relocation/BringIntoViewKt;
Landroidx/compose/foundation/relocation/BringIntoViewParent;
Landroidx/compose/foundation/relocation/BringIntoViewRequester;
-Landroidx/compose/foundation/relocation/BringIntoViewRequesterImpl$bringIntoView$1;
Landroidx/compose/foundation/relocation/BringIntoViewRequesterImpl;
-Landroidx/compose/foundation/relocation/BringIntoViewRequesterKt$bringIntoViewRequester$$inlined$debugInspectorInfo$1;
Landroidx/compose/foundation/relocation/BringIntoViewRequesterKt$bringIntoViewRequester$2$1$invoke$$inlined$onDispose$1;
Landroidx/compose/foundation/relocation/BringIntoViewRequesterKt$bringIntoViewRequester$2$1;
Landroidx/compose/foundation/relocation/BringIntoViewRequesterKt$bringIntoViewRequester$2;
Landroidx/compose/foundation/relocation/BringIntoViewRequesterKt;
-Landroidx/compose/foundation/relocation/BringIntoViewRequesterModifier$bringIntoView$2;
Landroidx/compose/foundation/relocation/BringIntoViewRequesterModifier;
+Landroidx/compose/foundation/relocation/BringIntoViewResponder;
+Landroidx/compose/foundation/relocation/BringIntoViewResponderKt$bringIntoViewResponder$2;
+Landroidx/compose/foundation/relocation/BringIntoViewResponderKt;
+Landroidx/compose/foundation/relocation/BringIntoViewResponderModifier;
Landroidx/compose/foundation/relocation/BringIntoViewResponder_androidKt;
Landroidx/compose/foundation/shape/CornerBasedShape;
Landroidx/compose/foundation/shape/CornerSize;
@@ -8665,12 +11252,9 @@
Landroidx/compose/foundation/shape/PercentCornerSize;
Landroidx/compose/foundation/shape/RoundedCornerShape;
Landroidx/compose/foundation/shape/RoundedCornerShapeKt;
-Landroidx/compose/foundation/text/BasicTextKt$BasicText$1;
-Landroidx/compose/foundation/text/BasicTextKt$BasicText$2;
Landroidx/compose/foundation/text/BasicTextKt$BasicText-4YKlhWE$$inlined$Layout$1;
Landroidx/compose/foundation/text/BasicTextKt;
Landroidx/compose/foundation/text/CoreTextKt;
-Landroidx/compose/foundation/text/HeightInLinesModifierKt$heightInLines$$inlined$debugInspectorInfo$1;
Landroidx/compose/foundation/text/HeightInLinesModifierKt$heightInLines$2;
Landroidx/compose/foundation/text/HeightInLinesModifierKt;
Landroidx/compose/foundation/text/TextController$coreModifiers$1;
@@ -8679,36 +11263,26 @@
Landroidx/compose/foundation/text/TextController$drawTextAndSelectionBehind$1;
Landroidx/compose/foundation/text/TextController$measurePolicy$1$measure$2;
Landroidx/compose/foundation/text/TextController$measurePolicy$1;
-Landroidx/compose/foundation/text/TextController$update$1;
-Landroidx/compose/foundation/text/TextController$update$2;
-Landroidx/compose/foundation/text/TextController$update$3;
-Landroidx/compose/foundation/text/TextController$update$mouseSelectionObserver$1;
Landroidx/compose/foundation/text/TextController;
Landroidx/compose/foundation/text/TextDelegate$Companion;
Landroidx/compose/foundation/text/TextDelegate;
Landroidx/compose/foundation/text/TextDelegateKt;
-Landroidx/compose/foundation/text/TextDragObserver;
-Landroidx/compose/foundation/text/TextFieldDelegateKt;
Landroidx/compose/foundation/text/TextLayoutHelperKt;
-Landroidx/compose/foundation/text/TextPointerIcon_androidKt;
Landroidx/compose/foundation/text/TextState$onTextLayout$1;
Landroidx/compose/foundation/text/TextState;
-Landroidx/compose/foundation/text/TouchMode_androidKt;
-Landroidx/compose/foundation/text/selection/MouseSelectionObserver;
-Landroidx/compose/foundation/text/selection/Selectable;
-Landroidx/compose/foundation/text/selection/SelectionRegistrar;
Landroidx/compose/foundation/text/selection/SelectionRegistrarKt$LocalSelectionRegistrar$1;
Landroidx/compose/foundation/text/selection/SelectionRegistrarKt;
Landroidx/compose/foundation/text/selection/TextSelectionColors;
Landroidx/compose/foundation/text/selection/TextSelectionColorsKt$LocalTextSelectionColors$1;
Landroidx/compose/foundation/text/selection/TextSelectionColorsKt;
Landroidx/compose/material/icons/Icons$Filled;
-Landroidx/compose/material/icons/filled/AddKt;
+Landroidx/compose/material/icons/Icons$Outlined;
Landroidx/compose/material/icons/filled/ArrowBackKt;
+Landroidx/compose/material/icons/filled/CloseKt;
+Landroidx/compose/material/icons/outlined/LockKt;
+Landroidx/compose/material/icons/outlined/QrCodeScannerKt;
Landroidx/compose/material/ripple/AndroidRippleIndicationInstance$onInvalidateRipple$1;
Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;
-Landroidx/compose/material/ripple/CommonRippleIndicationInstance;
-Landroidx/compose/material/ripple/DebugRippleTheme;
Landroidx/compose/material/ripple/PlatformRipple;
Landroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1$1;
Landroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1;
@@ -8725,28 +11299,32 @@
Landroidx/compose/material/ripple/RippleTheme;
Landroidx/compose/material/ripple/RippleThemeKt$LocalRippleTheme$1;
Landroidx/compose/material/ripple/RippleThemeKt;
-Landroidx/compose/material/ripple/StateLayer$handleInteraction$1;
-Landroidx/compose/material/ripple/StateLayer$handleInteraction$2;
Landroidx/compose/material/ripple/StateLayer;
+Landroidx/compose/material/ripple/UnprojectedRipple$Companion;
+Landroidx/compose/material/ripple/UnprojectedRipple$MRadiusHelper;
Landroidx/compose/material/ripple/UnprojectedRipple;
+Landroidx/compose/material3/AppBarKt$SingleRowTopAppBar$1$1;
+Landroidx/compose/material3/AppBarKt$SingleRowTopAppBar$2;
+Landroidx/compose/material3/AppBarKt$SingleRowTopAppBar$3;
+Landroidx/compose/material3/AppBarKt$SingleRowTopAppBar$actionsRow$1;
+Landroidx/compose/material3/AppBarKt$TopAppBarLayout$1$3$1;
+Landroidx/compose/material3/AppBarKt$TopAppBarLayout$2$measure$1;
+Landroidx/compose/material3/AppBarKt$TopAppBarLayout$2;
+Landroidx/compose/material3/AppBarKt;
Landroidx/compose/material3/ButtonColors;
Landroidx/compose/material3/ButtonDefaults;
Landroidx/compose/material3/ButtonElevation$animateElevation$1$1$1;
Landroidx/compose/material3/ButtonElevation$animateElevation$1$1;
-Landroidx/compose/material3/ButtonElevation$animateElevation$2;
Landroidx/compose/material3/ButtonElevation$animateElevation$3;
Landroidx/compose/material3/ButtonElevation;
Landroidx/compose/material3/ButtonKt$Button$2$1$1;
Landroidx/compose/material3/ButtonKt$Button$2$1;
Landroidx/compose/material3/ButtonKt$Button$2;
Landroidx/compose/material3/ButtonKt$Button$3;
-Landroidx/compose/material3/ButtonKt$FilledTonalButton$2;
Landroidx/compose/material3/ButtonKt$TextButton$2;
Landroidx/compose/material3/ButtonKt;
Landroidx/compose/material3/CardColors;
Landroidx/compose/material3/CardDefaults;
-Landroidx/compose/material3/CardElevation$animateElevation$1$1;
-Landroidx/compose/material3/CardElevation$animateElevation$2;
Landroidx/compose/material3/CardElevation;
Landroidx/compose/material3/CardKt$Card$1;
Landroidx/compose/material3/CardKt$Card$2;
@@ -8755,13 +11333,11 @@
Landroidx/compose/material3/ChipColors;
Landroidx/compose/material3/ChipElevation$animateElevation$1$1$1;
Landroidx/compose/material3/ChipElevation$animateElevation$1$1;
-Landroidx/compose/material3/ChipElevation$animateElevation$2;
Landroidx/compose/material3/ChipElevation$animateElevation$3;
Landroidx/compose/material3/ChipElevation;
Landroidx/compose/material3/ChipKt$Chip$1;
Landroidx/compose/material3/ChipKt$Chip$2;
Landroidx/compose/material3/ChipKt$ChipContent$1;
-Landroidx/compose/material3/ChipKt$ChipContent$2;
Landroidx/compose/material3/ChipKt$SuggestionChip$2;
Landroidx/compose/material3/ChipKt;
Landroidx/compose/material3/ColorResourceHelper;
@@ -8769,26 +11345,42 @@
Landroidx/compose/material3/ColorSchemeKt$LocalColorScheme$1;
Landroidx/compose/material3/ColorSchemeKt$WhenMappings;
Landroidx/compose/material3/ColorSchemeKt;
+Landroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-1$1;
+Landroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-10$1;
+Landroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-11$1;
+Landroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-12$1;
+Landroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-2$1;
+Landroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-3$1;
+Landroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-4$1;
+Landroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-5$1;
+Landroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-6$1;
+Landroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-7$1;
+Landroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-8$1;
+Landroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-9$1;
+Landroidx/compose/material3/ComposableSingletons$AppBarKt;
Landroidx/compose/material3/ContentColorKt$LocalContentColor$1;
Landroidx/compose/material3/ContentColorKt;
-Landroidx/compose/material3/DividerDefaults;
-Landroidx/compose/material3/DividerKt$Divider$1;
Landroidx/compose/material3/DividerKt;
Landroidx/compose/material3/DynamicTonalPaletteKt;
Landroidx/compose/material3/ElevationDefaults;
Landroidx/compose/material3/ElevationKt;
-Landroidx/compose/material3/IconKt$Icon$1;
-Landroidx/compose/material3/IconKt$Icon$2;
+Landroidx/compose/material3/IconButtonColors;
+Landroidx/compose/material3/IconButtonDefaults;
+Landroidx/compose/material3/IconButtonKt$IconButton$3;
+Landroidx/compose/material3/IconButtonKt;
Landroidx/compose/material3/IconKt$Icon$3;
Landroidx/compose/material3/IconKt$Icon$semantics$1$1;
Landroidx/compose/material3/IconKt;
+Landroidx/compose/material3/InteractiveComponentSizeKt$LocalMinimumInteractiveComponentEnforcement$1;
+Landroidx/compose/material3/InteractiveComponentSizeKt$minimumInteractiveComponentSize$2;
+Landroidx/compose/material3/InteractiveComponentSizeKt;
Landroidx/compose/material3/MaterialRippleTheme;
Landroidx/compose/material3/MaterialTheme;
Landroidx/compose/material3/MaterialThemeKt$MaterialTheme$1;
Landroidx/compose/material3/MaterialThemeKt$MaterialTheme$2;
Landroidx/compose/material3/MaterialThemeKt;
-Landroidx/compose/material3/MinimumTouchTargetModifier$measure$1;
-Landroidx/compose/material3/MinimumTouchTargetModifier;
+Landroidx/compose/material3/MinimumInteractiveComponentSizeModifier$measure$1;
+Landroidx/compose/material3/MinimumInteractiveComponentSizeModifier;
Landroidx/compose/material3/ShapeDefaults;
Landroidx/compose/material3/Shapes;
Landroidx/compose/material3/ShapesKt$LocalShapes$1;
@@ -8801,22 +11393,20 @@
Landroidx/compose/material3/SurfaceKt$Surface$1;
Landroidx/compose/material3/SurfaceKt$Surface$3;
Landroidx/compose/material3/SurfaceKt;
+Landroidx/compose/material3/SystemBarsDefaultInsets_androidKt;
Landroidx/compose/material3/TextKt$LocalTextStyle$1;
Landroidx/compose/material3/TextKt$ProvideTextStyle$1;
Landroidx/compose/material3/TextKt$Text$1;
Landroidx/compose/material3/TextKt$Text$2;
Landroidx/compose/material3/TextKt;
Landroidx/compose/material3/TonalPalette;
-Landroidx/compose/material3/TouchTargetKt$LocalMinimumTouchTargetEnforcement$1;
-Landroidx/compose/material3/TouchTargetKt$minimumTouchTargetSize$$inlined$debugInspectorInfo$1;
-Landroidx/compose/material3/TouchTargetKt$minimumTouchTargetSize$2;
-Landroidx/compose/material3/TouchTargetKt;
+Landroidx/compose/material3/TopAppBarColors;
+Landroidx/compose/material3/TopAppBarDefaults;
Landroidx/compose/material3/Typography;
Landroidx/compose/material3/TypographyKt$LocalTypography$1;
Landroidx/compose/material3/TypographyKt$WhenMappings;
Landroidx/compose/material3/TypographyKt;
Landroidx/compose/material3/tokens/ColorDarkTokens;
-Landroidx/compose/material3/tokens/ColorLightTokens;
Landroidx/compose/material3/tokens/ColorSchemeKeyTokens;
Landroidx/compose/material3/tokens/ElevationTokens;
Landroidx/compose/material3/tokens/FilledButtonTokens;
@@ -8828,10 +11418,8 @@
Landroidx/compose/material3/tokens/ShapeTokens;
Landroidx/compose/material3/tokens/SuggestionChipTokens;
Landroidx/compose/material3/tokens/TextButtonTokens;
-Landroidx/compose/material3/tokens/TypeScaleTokens;
-Landroidx/compose/material3/tokens/TypefaceTokens;
+Landroidx/compose/material3/tokens/TopAppBarSmallTokens;
Landroidx/compose/material3/tokens/TypographyKeyTokens;
-Landroidx/compose/material3/tokens/TypographyTokens;
Landroidx/compose/runtime/AbstractApplier;
Landroidx/compose/runtime/ActualAndroid_androidKt$DefaultMonotonicFrameClock$2;
Landroidx/compose/runtime/ActualAndroid_androidKt;
@@ -8845,7 +11433,6 @@
Landroidx/compose/runtime/ComposableSingletons$CompositionKt$lambda-2$1;
Landroidx/compose/runtime/ComposableSingletons$CompositionKt;
Landroidx/compose/runtime/ComposablesKt;
-Landroidx/compose/runtime/ComposeRuntimeError;
Landroidx/compose/runtime/Composer$Companion$Empty$1;
Landroidx/compose/runtime/Composer$Companion;
Landroidx/compose/runtime/Composer;
@@ -8854,24 +11441,13 @@
Landroidx/compose/runtime/ComposerImpl$apply$operation$1;
Landroidx/compose/runtime/ComposerImpl$createNode$2;
Landroidx/compose/runtime/ComposerImpl$createNode$3;
-Landroidx/compose/runtime/ComposerImpl$deactivateToEndGroup$2;
Landroidx/compose/runtime/ComposerImpl$doCompose$2$3;
Landroidx/compose/runtime/ComposerImpl$doCompose$2$4;
Landroidx/compose/runtime/ComposerImpl$doCompose$2$5;
Landroidx/compose/runtime/ComposerImpl$doCompose$lambda$37$$inlined$sortBy$1;
Landroidx/compose/runtime/ComposerImpl$endRestartGroup$1$1;
-Landroidx/compose/runtime/ComposerImpl$insertMovableContentGuarded$1$1$1;
-Landroidx/compose/runtime/ComposerImpl$insertMovableContentGuarded$1$1$2$1;
-Landroidx/compose/runtime/ComposerImpl$insertMovableContentGuarded$1$1$2$2;
-Landroidx/compose/runtime/ComposerImpl$insertMovableContentGuarded$1$1$3;
-Landroidx/compose/runtime/ComposerImpl$insertMovableContentGuarded$1$1$4;
-Landroidx/compose/runtime/ComposerImpl$insertMovableContentGuarded$1$1$5$1$1$1;
-Landroidx/compose/runtime/ComposerImpl$insertMovableContentGuarded$1$1$5$1$2;
-Landroidx/compose/runtime/ComposerImpl$insertMovableContentGuarded$1$2;
-Landroidx/compose/runtime/ComposerImpl$invokeMovableContentLambda$1;
Landroidx/compose/runtime/ComposerImpl$realizeDowns$1;
Landroidx/compose/runtime/ComposerImpl$realizeMovement$1;
-Landroidx/compose/runtime/ComposerImpl$realizeMovement$2;
Landroidx/compose/runtime/ComposerImpl$realizeOperationLocation$2;
Landroidx/compose/runtime/ComposerImpl$realizeUps$1;
Landroidx/compose/runtime/ComposerImpl$recordInsert$1;
@@ -8897,11 +11473,12 @@
Landroidx/compose/runtime/CompositionImpl;
Landroidx/compose/runtime/CompositionKt;
Landroidx/compose/runtime/CompositionLocal;
-Landroidx/compose/runtime/CompositionLocalKt$CompositionLocalProvider$1;
Landroidx/compose/runtime/CompositionLocalKt;
Landroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;
Landroidx/compose/runtime/ControlledComposition;
-Landroidx/compose/runtime/DefaultChoreographerFrameClock;
+Landroidx/compose/runtime/DerivedSnapshotState$ResultRecord$Companion;
+Landroidx/compose/runtime/DerivedSnapshotState$ResultRecord;
+Landroidx/compose/runtime/DerivedSnapshotState$currentRecord$result$1$result$1;
Landroidx/compose/runtime/DerivedSnapshotState;
Landroidx/compose/runtime/DerivedState;
Landroidx/compose/runtime/DisposableEffectImpl;
@@ -8910,13 +11487,12 @@
Landroidx/compose/runtime/DynamicProvidableCompositionLocal;
Landroidx/compose/runtime/EffectsKt;
Landroidx/compose/runtime/GroupInfo;
-Landroidx/compose/runtime/GroupIterator;
+Landroidx/compose/runtime/GroupKind$Companion;
+Landroidx/compose/runtime/GroupKind;
Landroidx/compose/runtime/IntStack;
Landroidx/compose/runtime/Invalidation;
Landroidx/compose/runtime/InvalidationResult;
-Landroidx/compose/runtime/JoinedKey;
Landroidx/compose/runtime/KeyInfo;
-Landroidx/compose/runtime/Latch$await$2$2;
Landroidx/compose/runtime/Latch;
Landroidx/compose/runtime/LaunchedEffectImpl;
Landroidx/compose/runtime/LazyValueHolder;
@@ -8924,9 +11500,6 @@
Landroidx/compose/runtime/MonotonicFrameClock$Key;
Landroidx/compose/runtime/MonotonicFrameClock;
Landroidx/compose/runtime/MonotonicFrameClockKt;
-Landroidx/compose/runtime/MovableContent;
-Landroidx/compose/runtime/MovableContentState;
-Landroidx/compose/runtime/MovableContentStateReference;
Landroidx/compose/runtime/MutableState;
Landroidx/compose/runtime/NeverEqualPolicy;
Landroidx/compose/runtime/OpaqueKey;
@@ -8961,12 +11534,10 @@
Landroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;
Landroidx/compose/runtime/Recomposer$writeObserverOf$1;
Landroidx/compose/runtime/Recomposer;
-Landroidx/compose/runtime/RecomposerKt;
Landroidx/compose/runtime/ReferentialEqualityPolicy;
Landroidx/compose/runtime/RememberManager;
Landroidx/compose/runtime/RememberObserver;
Landroidx/compose/runtime/ScopeUpdateScope;
-Landroidx/compose/runtime/SdkStubsFallbackFrameClock;
Landroidx/compose/runtime/SkippableUpdater;
Landroidx/compose/runtime/SlotReader;
Landroidx/compose/runtime/SlotTable;
@@ -8998,43 +11569,30 @@
Landroidx/compose/runtime/collection/IdentityArraySet$iterator$1;
Landroidx/compose/runtime/collection/IdentityArraySet;
Landroidx/compose/runtime/collection/IdentityScopeMap;
+Landroidx/compose/runtime/collection/IntMap;
Landroidx/compose/runtime/collection/MutableVector$MutableVectorList;
-Landroidx/compose/runtime/collection/MutableVector$SubList;
Landroidx/compose/runtime/collection/MutableVector$VectorListIterator;
Landroidx/compose/runtime/collection/MutableVector;
Landroidx/compose/runtime/collection/MutableVectorKt;
Landroidx/compose/runtime/external/kotlinx/collections/immutable/ExtensionsKt;
Landroidx/compose/runtime/external/kotlinx/collections/immutable/ImmutableCollection;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/ImmutableList$SubList;
Landroidx/compose/runtime/external/kotlinx/collections/immutable/ImmutableList;
Landroidx/compose/runtime/external/kotlinx/collections/immutable/ImmutableSet;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList$Builder;
Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList;
Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap$Builder;
Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;
Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentSet;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/AbstractListIterator;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/AbstractPersistentList$removeAll$1;
Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/AbstractPersistentList;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/BufferIterator;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/PersistentVector;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/PersistentVectorBuilder;
Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector$Companion;
Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;
Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/UtilsKt;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/AbstractMapBuilderEntries;
Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/MapEntry;
Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap$Companion;
Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;
Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;
Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilderEntries;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilderKeys;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilderValues;
Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapEntries;
Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapEntriesIterator;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapKeys;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapValues;
Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode$Companion;
Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode$ModificationResult;
Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;
@@ -9044,25 +11602,35 @@
Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;
Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet$Companion;
Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSetIterator;
Landroidx/compose/runtime/external/kotlinx/collections/immutable/internal/CommonFunctionsKt;
Landroidx/compose/runtime/external/kotlinx/collections/immutable/internal/DeltaCounter;
Landroidx/compose/runtime/external/kotlinx/collections/immutable/internal/EndOfChain;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/internal/ListImplementation;
Landroidx/compose/runtime/external/kotlinx/collections/immutable/internal/MutabilityOwnership;
Landroidx/compose/runtime/internal/ComposableLambda;
Landroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$1;
Landroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$2;
-Landroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$3;
Landroidx/compose/runtime/internal/ComposableLambdaImpl;
Landroidx/compose/runtime/internal/ComposableLambdaKt;
Landroidx/compose/runtime/internal/ThreadMap;
Landroidx/compose/runtime/internal/ThreadMapKt;
+Landroidx/compose/runtime/saveable/ListSaverKt$listSaver$1;
+Landroidx/compose/runtime/saveable/ListSaverKt;
Landroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$invoke$$inlined$onDispose$1;
Landroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$valueProvider$1$1$1;
Landroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$valueProvider$1;
Landroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1;
Landroidx/compose/runtime/saveable/RememberSaveableKt;
+Landroidx/compose/runtime/saveable/SaveableStateHolder;
+Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion$Saver$1;
+Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion$Saver$2;
+Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion;
+Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder$registry$1;
+Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;
+Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1$invoke$$inlined$onDispose$1;
+Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1;
+Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;
+Landroidx/compose/runtime/saveable/SaveableStateHolderKt$rememberSaveableStateHolder$1;
+Landroidx/compose/runtime/saveable/SaveableStateHolderKt;
Landroidx/compose/runtime/saveable/SaveableStateRegistry$Entry;
Landroidx/compose/runtime/saveable/SaveableStateRegistry;
Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3;
@@ -9082,8 +11650,8 @@
Landroidx/compose/runtime/snapshots/ListUtilsKt;
Landroidx/compose/runtime/snapshots/MutableSnapshot;
Landroidx/compose/runtime/snapshots/NestedMutableSnapshot;
-Landroidx/compose/runtime/snapshots/NestedReadonlySnapshot;
Landroidx/compose/runtime/snapshots/ObserverHandle;
+Landroidx/compose/runtime/snapshots/ReadonlySnapshot;
Landroidx/compose/runtime/snapshots/Snapshot$Companion$registerApplyObserver$2;
Landroidx/compose/runtime/snapshots/Snapshot$Companion$registerGlobalWriteObserver$2;
Landroidx/compose/runtime/snapshots/Snapshot$Companion;
@@ -9096,7 +11664,7 @@
Landroidx/compose/runtime/snapshots/SnapshotIdSet$iterator$1;
Landroidx/compose/runtime/snapshots/SnapshotIdSet;
Landroidx/compose/runtime/snapshots/SnapshotIdSetKt;
-Landroidx/compose/runtime/snapshots/SnapshotKt$advanceGlobalSnapshot$2;
+Landroidx/compose/runtime/snapshots/SnapshotKt$advanceGlobalSnapshot$3;
Landroidx/compose/runtime/snapshots/SnapshotKt$emptyLambda$1;
Landroidx/compose/runtime/snapshots/SnapshotKt$mergedReadObserver$1;
Landroidx/compose/runtime/snapshots/SnapshotKt$mergedWriteObserver$1;
@@ -9104,26 +11672,18 @@
Landroidx/compose/runtime/snapshots/SnapshotKt;
Landroidx/compose/runtime/snapshots/SnapshotMutableState;
Landroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;
-Landroidx/compose/runtime/snapshots/SnapshotStateList$addAll$1;
-Landroidx/compose/runtime/snapshots/SnapshotStateList$retainAll$1;
Landroidx/compose/runtime/snapshots/SnapshotStateList;
-Landroidx/compose/runtime/snapshots/SnapshotStateListKt;
-Landroidx/compose/runtime/snapshots/SnapshotStateMap;
-Landroidx/compose/runtime/snapshots/SnapshotStateMapKt;
Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap$derivedStateEnterObserver$1;
Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap$derivedStateExitObserver$1;
Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;
-Landroidx/compose/runtime/snapshots/SnapshotStateObserver$applyObserver$1$2;
Landroidx/compose/runtime/snapshots/SnapshotStateObserver$applyObserver$1;
Landroidx/compose/runtime/snapshots/SnapshotStateObserver$observeReads$1$1;
Landroidx/compose/runtime/snapshots/SnapshotStateObserver$readObserver$1;
+Landroidx/compose/runtime/snapshots/SnapshotStateObserver$sendNotifications$1;
Landroidx/compose/runtime/snapshots/SnapshotStateObserver;
-Landroidx/compose/runtime/snapshots/StateListIterator;
Landroidx/compose/runtime/snapshots/StateObject;
Landroidx/compose/runtime/snapshots/StateRecord;
-Landroidx/compose/runtime/snapshots/SubList;
Landroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;
-Landroidx/compose/runtime/snapshots/TransparentObserverSnapshot;
Landroidx/compose/runtime/tooling/CompositionData;
Landroidx/compose/runtime/tooling/InspectionTablesKt$LocalInspectionTables$1;
Landroidx/compose/runtime/tooling/InspectionTablesKt;
@@ -9135,13 +11695,8 @@
Landroidx/compose/ui/BiasAlignment$Horizontal;
Landroidx/compose/ui/BiasAlignment$Vertical;
Landroidx/compose/ui/BiasAlignment;
-Landroidx/compose/ui/CombinedModifier$toString$1;
Landroidx/compose/ui/CombinedModifier;
Landroidx/compose/ui/ComposedModifier;
-Landroidx/compose/ui/ComposedModifierKt$WrapFocusEventModifier$1$1$1;
-Landroidx/compose/ui/ComposedModifierKt$WrapFocusEventModifier$1$modifier$1$1;
-Landroidx/compose/ui/ComposedModifierKt$WrapFocusEventModifier$1;
-Landroidx/compose/ui/ComposedModifierKt$WrapFocusRequesterModifier$1;
Landroidx/compose/ui/ComposedModifierKt$materialize$1;
Landroidx/compose/ui/ComposedModifierKt$materialize$result$1;
Landroidx/compose/ui/ComposedModifierKt;
@@ -9153,10 +11708,7 @@
Landroidx/compose/ui/MotionDurationScale$Key;
Landroidx/compose/ui/MotionDurationScale;
Landroidx/compose/ui/R$id;
-Landroidx/compose/ui/R$string;
-Landroidx/compose/ui/TempListUtilsKt;
Landroidx/compose/ui/autofill/AndroidAutofill;
-Landroidx/compose/ui/autofill/AndroidAutofill_androidKt;
Landroidx/compose/ui/autofill/Autofill;
Landroidx/compose/ui/autofill/AutofillCallback;
Landroidx/compose/ui/autofill/AutofillTree;
@@ -9165,84 +11717,46 @@
Landroidx/compose/ui/draw/DrawBackgroundModifier;
Landroidx/compose/ui/draw/DrawCacheModifier;
Landroidx/compose/ui/draw/DrawModifier;
-Landroidx/compose/ui/draw/DrawModifierKt$drawBehind$$inlined$debugInspectorInfo$1;
-Landroidx/compose/ui/draw/DrawModifierKt$drawWithCache$$inlined$debugInspectorInfo$1;
-Landroidx/compose/ui/draw/DrawModifierKt$drawWithCache$2;
+Landroidx/compose/ui/draw/DrawModifierKt$drawBehind$$inlined$modifierElementOf$1;
Landroidx/compose/ui/draw/DrawModifierKt;
Landroidx/compose/ui/draw/PainterModifier$measure$1;
Landroidx/compose/ui/draw/PainterModifier;
-Landroidx/compose/ui/draw/PainterModifierKt$paint$$inlined$debugInspectorInfo$1;
Landroidx/compose/ui/draw/PainterModifierKt;
Landroidx/compose/ui/draw/ShadowKt$shadow$2$1;
-Landroidx/compose/ui/draw/ShadowKt$shadow-s4CzXII$$inlined$debugInspectorInfo$1;
Landroidx/compose/ui/draw/ShadowKt;
-Landroidx/compose/ui/focus/FocusChangedModifierKt$onFocusChanged$$inlined$debugInspectorInfo$1;
-Landroidx/compose/ui/focus/FocusChangedModifierKt$onFocusChanged$2$1$1;
-Landroidx/compose/ui/focus/FocusChangedModifierKt$onFocusChanged$2;
+Landroidx/compose/ui/focus/FocusChangedModifierKt$onFocusChanged$$inlined$modifierElementOf$2;
Landroidx/compose/ui/focus/FocusChangedModifierKt;
-Landroidx/compose/ui/focus/FocusDirection$Companion;
-Landroidx/compose/ui/focus/FocusDirection;
-Landroidx/compose/ui/focus/FocusEventModifier;
-Landroidx/compose/ui/focus/FocusEventModifierKt$ModifierLocalFocusEvent$1;
-Landroidx/compose/ui/focus/FocusEventModifierKt$onFocusEvent$$inlined$debugInspectorInfo$1;
-Landroidx/compose/ui/focus/FocusEventModifierKt$onFocusEvent$2$1$1;
-Landroidx/compose/ui/focus/FocusEventModifierKt$onFocusEvent$2;
-Landroidx/compose/ui/focus/FocusEventModifierKt;
-Landroidx/compose/ui/focus/FocusEventModifierLocal$WhenMappings;
-Landroidx/compose/ui/focus/FocusEventModifierLocal;
+Landroidx/compose/ui/focus/FocusChangedModifierNode;
+Landroidx/compose/ui/focus/FocusEventModifierNode;
+Landroidx/compose/ui/focus/FocusEventModifierNodeKt$WhenMappings;
+Landroidx/compose/ui/focus/FocusEventModifierNodeKt;
+Landroidx/compose/ui/focus/FocusInvalidationManager$invalidateNodes$1;
+Landroidx/compose/ui/focus/FocusInvalidationManager;
Landroidx/compose/ui/focus/FocusManager;
-Landroidx/compose/ui/focus/FocusManagerImpl$WhenMappings;
-Landroidx/compose/ui/focus/FocusManagerImpl$moveFocus$foundNextItem$1;
-Landroidx/compose/ui/focus/FocusManagerImpl;
-Landroidx/compose/ui/focus/FocusManagerKt$WhenMappings;
-Landroidx/compose/ui/focus/FocusManagerKt;
-Landroidx/compose/ui/focus/FocusModifier$Companion$RefreshFocusProperties$1;
-Landroidx/compose/ui/focus/FocusModifier$Companion;
-Landroidx/compose/ui/focus/FocusModifier$WhenMappings;
-Landroidx/compose/ui/focus/FocusModifier;
-Landroidx/compose/ui/focus/FocusModifierKt$ModifierLocalParentFocusModifier$1;
-Landroidx/compose/ui/focus/FocusModifierKt$ResetFocusModifierLocals$1;
-Landroidx/compose/ui/focus/FocusModifierKt$ResetFocusModifierLocals$2;
-Landroidx/compose/ui/focus/FocusModifierKt$ResetFocusModifierLocals$3;
-Landroidx/compose/ui/focus/FocusModifierKt$focusTarget$$inlined$debugInspectorInfo$1;
-Landroidx/compose/ui/focus/FocusModifierKt$focusTarget$2$1$1;
-Landroidx/compose/ui/focus/FocusModifierKt$focusTarget$2;
Landroidx/compose/ui/focus/FocusModifierKt;
-Landroidx/compose/ui/focus/FocusOrderModifierKt;
+Landroidx/compose/ui/focus/FocusOwner;
+Landroidx/compose/ui/focus/FocusOwnerImpl$special$$inlined$modifierElementOf$2;
+Landroidx/compose/ui/focus/FocusOwnerImpl;
Landroidx/compose/ui/focus/FocusProperties;
-Landroidx/compose/ui/focus/FocusPropertiesImpl$enter$1;
-Landroidx/compose/ui/focus/FocusPropertiesImpl$exit$1;
-Landroidx/compose/ui/focus/FocusPropertiesImpl;
-Landroidx/compose/ui/focus/FocusPropertiesKt$ModifierLocalFocusProperties$1;
-Landroidx/compose/ui/focus/FocusPropertiesKt$clear$1;
-Landroidx/compose/ui/focus/FocusPropertiesKt$clear$2;
-Landroidx/compose/ui/focus/FocusPropertiesKt$focusProperties$$inlined$debugInspectorInfo$1;
-Landroidx/compose/ui/focus/FocusPropertiesKt$refreshFocusProperties$1;
+Landroidx/compose/ui/focus/FocusPropertiesKt$focusProperties$$inlined$modifierElementOf$2;
Landroidx/compose/ui/focus/FocusPropertiesKt;
-Landroidx/compose/ui/focus/FocusPropertiesModifier;
+Landroidx/compose/ui/focus/FocusPropertiesModifierNode;
+Landroidx/compose/ui/focus/FocusPropertiesModifierNodeImpl;
Landroidx/compose/ui/focus/FocusRequester$Companion;
-Landroidx/compose/ui/focus/FocusRequester$requestFocus$2;
Landroidx/compose/ui/focus/FocusRequester;
-Landroidx/compose/ui/focus/FocusRequesterModifier;
-Landroidx/compose/ui/focus/FocusRequesterModifierKt$ModifierLocalFocusRequester$1;
-Landroidx/compose/ui/focus/FocusRequesterModifierKt$focusRequester$$inlined$debugInspectorInfo$1;
-Landroidx/compose/ui/focus/FocusRequesterModifierKt$focusRequester$2;
+Landroidx/compose/ui/focus/FocusRequesterModifierKt$focusRequester$$inlined$modifierElementOf$2;
Landroidx/compose/ui/focus/FocusRequesterModifierKt;
-Landroidx/compose/ui/focus/FocusRequesterModifierLocal;
+Landroidx/compose/ui/focus/FocusRequesterModifierNode;
+Landroidx/compose/ui/focus/FocusRequesterModifierNodeImpl;
Landroidx/compose/ui/focus/FocusState;
Landroidx/compose/ui/focus/FocusStateImpl$WhenMappings;
Landroidx/compose/ui/focus/FocusStateImpl;
-Landroidx/compose/ui/focus/FocusTransactionsKt$WhenMappings;
-Landroidx/compose/ui/focus/FocusTransactionsKt$requestFocus$1;
-Landroidx/compose/ui/focus/FocusTransactionsKt;
-Landroidx/compose/ui/focus/FocusTraversalKt;
-Landroidx/compose/ui/focus/TwoDimensionalFocusSearchKt;
+Landroidx/compose/ui/focus/FocusTargetModifierNode$Companion;
+Landroidx/compose/ui/focus/FocusTargetModifierNode$special$$inlined$modifierElementOf$2;
+Landroidx/compose/ui/focus/FocusTargetModifierNode;
Landroidx/compose/ui/geometry/CornerRadius$Companion;
Landroidx/compose/ui/geometry/CornerRadius;
Landroidx/compose/ui/geometry/CornerRadiusKt;
-Landroidx/compose/ui/geometry/GeometryUtilsKt;
-Landroidx/compose/ui/geometry/MutableRect;
-Landroidx/compose/ui/geometry/MutableRectKt;
Landroidx/compose/ui/geometry/Offset$Companion;
Landroidx/compose/ui/geometry/Offset;
Landroidx/compose/ui/geometry/OffsetKt;
@@ -9263,7 +11777,6 @@
Landroidx/compose/ui/graphics/AndroidImageBitmap_androidKt;
Landroidx/compose/ui/graphics/AndroidMatrixConversions_androidKt;
Landroidx/compose/ui/graphics/AndroidPaint;
-Landroidx/compose/ui/graphics/AndroidPaint_androidKt$WhenMappings;
Landroidx/compose/ui/graphics/AndroidPaint_androidKt;
Landroidx/compose/ui/graphics/AndroidPath;
Landroidx/compose/ui/graphics/AndroidPath_androidKt;
@@ -9273,13 +11786,13 @@
Landroidx/compose/ui/graphics/BlendModeColorFilterHelper;
Landroidx/compose/ui/graphics/BlockGraphicsLayerModifier$measure$1;
Landroidx/compose/ui/graphics/BlockGraphicsLayerModifier;
+Landroidx/compose/ui/graphics/Brush$Companion;
Landroidx/compose/ui/graphics/Brush;
Landroidx/compose/ui/graphics/Canvas;
Landroidx/compose/ui/graphics/CanvasHolder;
+Landroidx/compose/ui/graphics/CanvasKt;
Landroidx/compose/ui/graphics/CanvasUtils;
Landroidx/compose/ui/graphics/CanvasZHelper;
-Landroidx/compose/ui/graphics/ClipOp$Companion;
-Landroidx/compose/ui/graphics/ClipOp;
Landroidx/compose/ui/graphics/Color$Companion;
Landroidx/compose/ui/graphics/Color;
Landroidx/compose/ui/graphics/ColorFilter$Companion;
@@ -9291,14 +11804,15 @@
Landroidx/compose/ui/graphics/FilterQuality;
Landroidx/compose/ui/graphics/Float16$Companion;
Landroidx/compose/ui/graphics/Float16;
-Landroidx/compose/ui/graphics/GraphicsLayerModifierKt$graphicsLayer$$inlined$debugInspectorInfo$1;
-Landroidx/compose/ui/graphics/GraphicsLayerModifierKt$graphicsLayer-Ap8cVGQ$$inlined$debugInspectorInfo$1;
+Landroidx/compose/ui/graphics/GraphicsLayerModifierKt$graphicsLayer$$inlined$modifierElementOf$1;
Landroidx/compose/ui/graphics/GraphicsLayerModifierKt;
+Landroidx/compose/ui/graphics/GraphicsLayerModifierNodeElement;
Landroidx/compose/ui/graphics/GraphicsLayerScope;
Landroidx/compose/ui/graphics/GraphicsLayerScopeKt;
Landroidx/compose/ui/graphics/ImageBitmap;
Landroidx/compose/ui/graphics/ImageBitmapConfig$Companion;
Landroidx/compose/ui/graphics/ImageBitmapConfig;
+Landroidx/compose/ui/graphics/ImageBitmapKt;
Landroidx/compose/ui/graphics/Matrix$Companion;
Landroidx/compose/ui/graphics/Matrix;
Landroidx/compose/ui/graphics/MatrixKt;
@@ -9309,16 +11823,12 @@
Landroidx/compose/ui/graphics/Paint;
Landroidx/compose/ui/graphics/PaintingStyle$Companion;
Landroidx/compose/ui/graphics/PaintingStyle;
+Landroidx/compose/ui/graphics/Path$Companion;
Landroidx/compose/ui/graphics/Path;
-Landroidx/compose/ui/graphics/PathEffect;
Landroidx/compose/ui/graphics/PathFillType$Companion;
Landroidx/compose/ui/graphics/PathFillType;
-Landroidx/compose/ui/graphics/PathOperation$Companion;
-Landroidx/compose/ui/graphics/PathOperation;
-Landroidx/compose/ui/graphics/RectHelper_androidKt;
Landroidx/compose/ui/graphics/RectangleShapeKt$RectangleShape$1;
Landroidx/compose/ui/graphics/RectangleShapeKt;
-Landroidx/compose/ui/graphics/RenderEffect;
Landroidx/compose/ui/graphics/ReusableGraphicsLayerScope;
Landroidx/compose/ui/graphics/ShaderBrush;
Landroidx/compose/ui/graphics/Shadow$Companion;
@@ -9346,12 +11856,13 @@
Landroidx/compose/ui/graphics/colorspace/ColorSpace$Companion;
Landroidx/compose/ui/graphics/colorspace/ColorSpace;
Landroidx/compose/ui/graphics/colorspace/ColorSpaceKt;
-Landroidx/compose/ui/graphics/colorspace/ColorSpaces$ExtendedSrgb$1;
-Landroidx/compose/ui/graphics/colorspace/ColorSpaces$ExtendedSrgb$2;
+Landroidx/compose/ui/graphics/colorspace/ColorSpaces$$ExternalSyntheticLambda0;
+Landroidx/compose/ui/graphics/colorspace/ColorSpaces$$ExternalSyntheticLambda1;
Landroidx/compose/ui/graphics/colorspace/ColorSpaces;
+Landroidx/compose/ui/graphics/colorspace/Connector$Companion$identity$1;
Landroidx/compose/ui/graphics/colorspace/Connector$Companion;
-Landroidx/compose/ui/graphics/colorspace/Connector$RgbConnector;
Landroidx/compose/ui/graphics/colorspace/Connector;
+Landroidx/compose/ui/graphics/colorspace/DoubleFunction;
Landroidx/compose/ui/graphics/colorspace/Illuminant;
Landroidx/compose/ui/graphics/colorspace/Lab$Companion;
Landroidx/compose/ui/graphics/colorspace/Lab;
@@ -9359,13 +11870,13 @@
Landroidx/compose/ui/graphics/colorspace/Oklab;
Landroidx/compose/ui/graphics/colorspace/RenderIntent$Companion;
Landroidx/compose/ui/graphics/colorspace/RenderIntent;
-Landroidx/compose/ui/graphics/colorspace/Rgb$1;
-Landroidx/compose/ui/graphics/colorspace/Rgb$2;
-Landroidx/compose/ui/graphics/colorspace/Rgb$3;
-Landroidx/compose/ui/graphics/colorspace/Rgb$4;
-Landroidx/compose/ui/graphics/colorspace/Rgb$5;
-Landroidx/compose/ui/graphics/colorspace/Rgb$6;
-Landroidx/compose/ui/graphics/colorspace/Rgb$Companion$DoubleIdentity$1;
+Landroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda0;
+Landroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda1;
+Landroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda2;
+Landroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda3;
+Landroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda5;
+Landroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda7;
+Landroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda8;
Landroidx/compose/ui/graphics/colorspace/Rgb$Companion;
Landroidx/compose/ui/graphics/colorspace/Rgb$eotf$1;
Landroidx/compose/ui/graphics/colorspace/Rgb$oetf$1;
@@ -9386,59 +11897,109 @@
Landroidx/compose/ui/graphics/drawscope/DrawTransform;
Landroidx/compose/ui/graphics/drawscope/EmptyCanvas;
Landroidx/compose/ui/graphics/drawscope/Fill;
-Landroidx/compose/ui/graphics/drawscope/Stroke;
Landroidx/compose/ui/graphics/painter/BitmapPainter;
+Landroidx/compose/ui/graphics/painter/BitmapPainterKt;
Landroidx/compose/ui/graphics/painter/Painter$drawLambda$1;
Landroidx/compose/ui/graphics/painter/Painter;
+Landroidx/compose/ui/graphics/vector/DrawCache;
+Landroidx/compose/ui/graphics/vector/GroupComponent;
+Landroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;
+Landroidx/compose/ui/graphics/vector/ImageVector$Builder;
+Landroidx/compose/ui/graphics/vector/ImageVector$Companion;
Landroidx/compose/ui/graphics/vector/ImageVector;
+Landroidx/compose/ui/graphics/vector/ImageVectorKt;
+Landroidx/compose/ui/graphics/vector/PathBuilder;
+Landroidx/compose/ui/graphics/vector/PathComponent$pathMeasure$2;
+Landroidx/compose/ui/graphics/vector/PathComponent;
+Landroidx/compose/ui/graphics/vector/PathNode$Close;
+Landroidx/compose/ui/graphics/vector/PathNode$CurveTo;
+Landroidx/compose/ui/graphics/vector/PathNode$HorizontalTo;
+Landroidx/compose/ui/graphics/vector/PathNode$LineTo;
+Landroidx/compose/ui/graphics/vector/PathNode$MoveTo;
+Landroidx/compose/ui/graphics/vector/PathNode$ReflectiveCurveTo;
+Landroidx/compose/ui/graphics/vector/PathNode$RelativeCurveTo;
+Landroidx/compose/ui/graphics/vector/PathNode$RelativeHorizontalTo;
+Landroidx/compose/ui/graphics/vector/PathNode$RelativeLineTo;
+Landroidx/compose/ui/graphics/vector/PathNode$RelativeMoveTo;
+Landroidx/compose/ui/graphics/vector/PathNode$RelativeReflectiveCurveTo;
+Landroidx/compose/ui/graphics/vector/PathNode$RelativeVerticalTo;
+Landroidx/compose/ui/graphics/vector/PathNode$VerticalTo;
+Landroidx/compose/ui/graphics/vector/PathNode;
+Landroidx/compose/ui/graphics/vector/PathParser$PathPoint;
+Landroidx/compose/ui/graphics/vector/PathParser;
+Landroidx/compose/ui/graphics/vector/VNode;
+Landroidx/compose/ui/graphics/vector/VectorApplier;
+Landroidx/compose/ui/graphics/vector/VectorComponent$drawVectorBlock$1;
+Landroidx/compose/ui/graphics/vector/VectorComponent$invalidateCallback$1;
+Landroidx/compose/ui/graphics/vector/VectorComponent$root$1$1;
+Landroidx/compose/ui/graphics/vector/VectorComponent;
+Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$1;
+Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$10;
+Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$11;
+Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$12;
+Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$13;
+Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$14;
+Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$1;
+Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$2;
+Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$3;
+Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$4;
+Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$5;
+Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$6;
+Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$7;
+Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$8;
+Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$9;
+Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path-9cdaXJ4$$inlined$ComposeNode$1;
+Landroidx/compose/ui/graphics/vector/VectorComposeKt;
+Landroidx/compose/ui/graphics/vector/VectorConfig;
+Landroidx/compose/ui/graphics/vector/VectorGroup$iterator$1;
+Landroidx/compose/ui/graphics/vector/VectorGroup;
+Landroidx/compose/ui/graphics/vector/VectorKt;
+Landroidx/compose/ui/graphics/vector/VectorNode;
+Landroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2$invoke$$inlined$onDispose$1;
+Landroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2;
+Landroidx/compose/ui/graphics/vector/VectorPainter$composeVector$1;
+Landroidx/compose/ui/graphics/vector/VectorPainter$vector$1$1;
Landroidx/compose/ui/graphics/vector/VectorPainter;
+Landroidx/compose/ui/graphics/vector/VectorPainterKt$RenderVectorGroup$config$1;
+Landroidx/compose/ui/graphics/vector/VectorPainterKt$rememberVectorPainter$3;
Landroidx/compose/ui/graphics/vector/VectorPainterKt;
+Landroidx/compose/ui/graphics/vector/VectorPath;
+Landroidx/compose/ui/graphics/vector/VectorProperty$Fill;
+Landroidx/compose/ui/graphics/vector/VectorProperty$FillAlpha;
+Landroidx/compose/ui/graphics/vector/VectorProperty$PathData;
+Landroidx/compose/ui/graphics/vector/VectorProperty$Stroke;
+Landroidx/compose/ui/graphics/vector/VectorProperty$StrokeAlpha;
+Landroidx/compose/ui/graphics/vector/VectorProperty$StrokeLineWidth;
+Landroidx/compose/ui/graphics/vector/VectorProperty$TrimPathEnd;
+Landroidx/compose/ui/graphics/vector/VectorProperty$TrimPathOffset;
+Landroidx/compose/ui/graphics/vector/VectorProperty$TrimPathStart;
+Landroidx/compose/ui/graphics/vector/VectorProperty;
Landroidx/compose/ui/hapticfeedback/HapticFeedback;
Landroidx/compose/ui/hapticfeedback/PlatformHapticFeedback;
Landroidx/compose/ui/input/InputMode$Companion;
Landroidx/compose/ui/input/InputMode;
Landroidx/compose/ui/input/InputModeManager;
Landroidx/compose/ui/input/InputModeManagerImpl;
-Landroidx/compose/ui/input/ScrollContainerInfo;
-Landroidx/compose/ui/input/ScrollContainerInfoKt$ModifierLocalScrollContainerInfo$1;
-Landroidx/compose/ui/input/ScrollContainerInfoKt$consumeScrollContainerInfo$1;
-Landroidx/compose/ui/input/ScrollContainerInfoKt$provideScrollContainerInfo$$inlined$debugInspectorInfo$1;
-Landroidx/compose/ui/input/ScrollContainerInfoKt$provideScrollContainerInfo$2;
-Landroidx/compose/ui/input/ScrollContainerInfoKt;
-Landroidx/compose/ui/input/focus/FocusAwareInputModifier;
-Landroidx/compose/ui/input/focus/FocusDirectedInputEvent;
-Landroidx/compose/ui/input/key/Key$Companion;
-Landroidx/compose/ui/input/key/Key;
-Landroidx/compose/ui/input/key/KeyEvent;
-Landroidx/compose/ui/input/key/KeyEventType$Companion;
-Landroidx/compose/ui/input/key/KeyEventType;
-Landroidx/compose/ui/input/key/KeyEvent_androidKt;
-Landroidx/compose/ui/input/key/KeyInputModifier;
-Landroidx/compose/ui/input/key/KeyInputModifierKt$ModifierLocalKeyInput$1;
-Landroidx/compose/ui/input/key/KeyInputModifierKt$onKeyEvent$$inlined$debugInspectorInfo$1;
+Landroidx/compose/ui/input/key/KeyInputInputModifierNodeImpl;
+Landroidx/compose/ui/input/key/KeyInputModifierKt$onKeyEvent$$inlined$modifierElementOf$2;
Landroidx/compose/ui/input/key/KeyInputModifierKt;
+Landroidx/compose/ui/input/key/KeyInputModifierNode;
Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection;
Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher$calculateNestedScrollScope$1;
-Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher$dispatchPostFling$1;
-Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher$dispatchPreFling$1;
Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;
-Landroidx/compose/ui/input/nestedscroll/NestedScrollModifierKt$nestedScroll$$inlined$debugInspectorInfo$1;
Landroidx/compose/ui/input/nestedscroll/NestedScrollModifierKt$nestedScroll$2;
Landroidx/compose/ui/input/nestedscroll/NestedScrollModifierKt;
Landroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal$1;
-Landroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal$onPostFling$1;
-Landroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal$onPreFling$1;
Landroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal;
Landroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocalKt$ModifierLocalNestedScroll$1;
Landroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocalKt;
-Landroidx/compose/ui/input/nestedscroll/NestedScrollSource$Companion;
-Landroidx/compose/ui/input/nestedscroll/NestedScrollSource;
+Landroidx/compose/ui/input/pointer/AndroidPointerIconType;
Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;
+Landroidx/compose/ui/input/pointer/ConsumedData;
Landroidx/compose/ui/input/pointer/HistoricalChange;
Landroidx/compose/ui/input/pointer/HitPathTracker;
Landroidx/compose/ui/input/pointer/InternalPointerEvent;
Landroidx/compose/ui/input/pointer/MotionEventAdapter;
-Landroidx/compose/ui/input/pointer/MotionEventHelper;
Landroidx/compose/ui/input/pointer/Node;
Landroidx/compose/ui/input/pointer/NodeParent;
Landroidx/compose/ui/input/pointer/PointerButtons;
@@ -9450,7 +12011,6 @@
Landroidx/compose/ui/input/pointer/PointerEventType;
Landroidx/compose/ui/input/pointer/PointerEvent_androidKt;
Landroidx/compose/ui/input/pointer/PointerIcon;
-Landroidx/compose/ui/input/pointer/PointerIconKt;
Landroidx/compose/ui/input/pointer/PointerIconService;
Landroidx/compose/ui/input/pointer/PointerId;
Landroidx/compose/ui/input/pointer/PointerInputChange;
@@ -9470,14 +12030,10 @@
Landroidx/compose/ui/input/pointer/ProcessResult;
Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine$withTimeout$1;
Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine$withTimeout$job$1;
-Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine$withTimeoutOrNull$1;
Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;
Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$WhenMappings;
Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$awaitPointerEventScope$2$2;
Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;
-Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$$inlined$debugInspectorInfo$1;
-Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$$inlined$debugInspectorInfo$2;
-Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$$inlined$debugInspectorInfo$3;
Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$2$2$1;
Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$2;
Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$4$2$1;
@@ -9485,22 +12041,22 @@
Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$6$2$1;
Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$6;
Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt;
-Landroidx/compose/ui/input/pointer/util/PointAtTime;
-Landroidx/compose/ui/input/pointer/util/PolynomialFit;
-Landroidx/compose/ui/input/pointer/util/VelocityEstimate$Companion;
-Landroidx/compose/ui/input/pointer/util/VelocityEstimate;
+Landroidx/compose/ui/input/pointer/util/DataPointAtTime;
+Landroidx/compose/ui/input/pointer/util/VelocityTracker1D$Strategy;
+Landroidx/compose/ui/input/pointer/util/VelocityTracker1D$WhenMappings;
+Landroidx/compose/ui/input/pointer/util/VelocityTracker1D;
Landroidx/compose/ui/input/pointer/util/VelocityTracker;
Landroidx/compose/ui/input/pointer/util/VelocityTrackerKt;
-Landroidx/compose/ui/input/rotary/RotaryInputModifierKt$ModifierLocalRotaryScrollParent$1;
-Landroidx/compose/ui/input/rotary/RotaryInputModifierKt$focusAwareCallback$1;
-Landroidx/compose/ui/input/rotary/RotaryInputModifierKt$onRotaryScrollEvent$$inlined$debugInspectorInfo$1;
+Landroidx/compose/ui/input/rotary/RotaryInputModifierKt$onRotaryScrollEvent$$inlined$modifierElementOf$2;
Landroidx/compose/ui/input/rotary/RotaryInputModifierKt;
-Landroidx/compose/ui/input/rotary/RotaryScrollEvent;
+Landroidx/compose/ui/input/rotary/RotaryInputModifierNode;
+Landroidx/compose/ui/input/rotary/RotaryInputModifierNodeImpl;
Landroidx/compose/ui/layout/AlignmentLine$Companion;
Landroidx/compose/ui/layout/AlignmentLine;
Landroidx/compose/ui/layout/AlignmentLineKt$FirstBaseline$1;
Landroidx/compose/ui/layout/AlignmentLineKt$LastBaseline$1;
Landroidx/compose/ui/layout/AlignmentLineKt;
+Landroidx/compose/ui/layout/BeyondBoundsLayout$BeyondBoundsScope;
Landroidx/compose/ui/layout/BeyondBoundsLayout;
Landroidx/compose/ui/layout/BeyondBoundsLayoutKt$ModifierLocalBeyondBoundsLayout$1;
Landroidx/compose/ui/layout/BeyondBoundsLayoutKt;
@@ -9520,21 +12076,24 @@
Landroidx/compose/ui/layout/IntrinsicMeasurable;
Landroidx/compose/ui/layout/IntrinsicMeasureScope;
Landroidx/compose/ui/layout/LayoutCoordinates;
-Landroidx/compose/ui/layout/LayoutCoordinatesKt;
+Landroidx/compose/ui/layout/LayoutId;
+Landroidx/compose/ui/layout/LayoutIdKt;
+Landroidx/compose/ui/layout/LayoutIdParentData;
Landroidx/compose/ui/layout/LayoutInfo;
Landroidx/compose/ui/layout/LayoutKt$materializerOf$1;
Landroidx/compose/ui/layout/LayoutKt;
Landroidx/compose/ui/layout/LayoutModifier;
+Landroidx/compose/ui/layout/LayoutModifierImpl;
+Landroidx/compose/ui/layout/LayoutModifierKt$layout$$inlined$modifierElementOf$2;
+Landroidx/compose/ui/layout/LayoutModifierKt;
Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;
Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;
Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure$1;
Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1;
-Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$precompose$1;
-Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$subcompose$2$1$1;
+Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$subcompose$3$1$1;
Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;
Landroidx/compose/ui/layout/LookaheadLayoutCoordinates;
Landroidx/compose/ui/layout/LookaheadLayoutCoordinatesImpl;
-Landroidx/compose/ui/layout/LookaheadScope;
Landroidx/compose/ui/layout/Measurable;
Landroidx/compose/ui/layout/MeasurePolicy;
Landroidx/compose/ui/layout/MeasureResult;
@@ -9544,11 +12103,16 @@
Landroidx/compose/ui/layout/NoOpSubcomposeSlotReusePolicy;
Landroidx/compose/ui/layout/OnGloballyPositionedModifier;
Landroidx/compose/ui/layout/OnGloballyPositionedModifierImpl;
-Landroidx/compose/ui/layout/OnGloballyPositionedModifierKt$onGloballyPositioned$$inlined$debugInspectorInfo$1;
Landroidx/compose/ui/layout/OnGloballyPositionedModifierKt;
Landroidx/compose/ui/layout/OnPlacedModifier;
Landroidx/compose/ui/layout/OnRemeasuredModifier;
+Landroidx/compose/ui/layout/OnRemeasuredModifierKt;
+Landroidx/compose/ui/layout/OnSizeChangedModifier;
Landroidx/compose/ui/layout/ParentDataModifier;
+Landroidx/compose/ui/layout/PinnableContainer$PinnedHandle;
+Landroidx/compose/ui/layout/PinnableContainer;
+Landroidx/compose/ui/layout/PinnableContainerKt$LocalPinnableContainer$1;
+Landroidx/compose/ui/layout/PinnableContainerKt;
Landroidx/compose/ui/layout/Placeable$PlacementScope$Companion;
Landroidx/compose/ui/layout/Placeable$PlacementScope;
Landroidx/compose/ui/layout/Placeable;
@@ -9556,21 +12120,17 @@
Landroidx/compose/ui/layout/PlaceableKt;
Landroidx/compose/ui/layout/Remeasurement;
Landroidx/compose/ui/layout/RemeasurementModifier;
-Landroidx/compose/ui/layout/RootMeasurePolicy$measure$1;
Landroidx/compose/ui/layout/RootMeasurePolicy$measure$2;
-Landroidx/compose/ui/layout/RootMeasurePolicy$measure$4;
Landroidx/compose/ui/layout/RootMeasurePolicy;
Landroidx/compose/ui/layout/ScaleFactor$Companion;
Landroidx/compose/ui/layout/ScaleFactor;
Landroidx/compose/ui/layout/ScaleFactorKt;
Landroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$$inlined$ComposeNode$1;
-Landroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$2;
Landroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$4;
Landroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$5$1$invoke$$inlined$onDispose$1;
Landroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$5$1;
Landroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$6;
Landroidx/compose/ui/layout/SubcomposeLayoutKt;
-Landroidx/compose/ui/layout/SubcomposeLayoutState$PrecomposedSlotHandle;
Landroidx/compose/ui/layout/SubcomposeLayoutState$setCompositionContext$1;
Landroidx/compose/ui/layout/SubcomposeLayoutState$setMeasurePolicy$1;
Landroidx/compose/ui/layout/SubcomposeLayoutState$setRoot$1;
@@ -9582,9 +12142,6 @@
Landroidx/compose/ui/modifier/EmptyMap;
Landroidx/compose/ui/modifier/ModifierLocal;
Landroidx/compose/ui/modifier/ModifierLocalConsumer;
-Landroidx/compose/ui/modifier/ModifierLocalConsumerImpl;
-Landroidx/compose/ui/modifier/ModifierLocalConsumerKt$modifierLocalConsumer$$inlined$debugInspectorInfo$1;
-Landroidx/compose/ui/modifier/ModifierLocalConsumerKt;
Landroidx/compose/ui/modifier/ModifierLocalKt;
Landroidx/compose/ui/modifier/ModifierLocalManager$invalidate$1;
Landroidx/compose/ui/modifier/ModifierLocalManager;
@@ -9597,17 +12154,13 @@
Landroidx/compose/ui/node/AlignmentLines$recalculate$1;
Landroidx/compose/ui/node/AlignmentLines;
Landroidx/compose/ui/node/AlignmentLinesOwner;
-Landroidx/compose/ui/node/BackwardsCompatNode$initializeModifier$1;
-Landroidx/compose/ui/node/BackwardsCompatNode$initializeModifier$4;
-Landroidx/compose/ui/node/BackwardsCompatNode$updateDrawCache$1;
-Landroidx/compose/ui/node/BackwardsCompatNode$updateFocusOrderModifierLocalConsumer$1;
Landroidx/compose/ui/node/BackwardsCompatNode$updateModifierLocalConsumer$1;
Landroidx/compose/ui/node/BackwardsCompatNode;
Landroidx/compose/ui/node/BackwardsCompatNodeKt$DetachedModifierLocalReadScope$1;
Landroidx/compose/ui/node/BackwardsCompatNodeKt$onDrawCacheReadsChanged$1;
-Landroidx/compose/ui/node/BackwardsCompatNodeKt$updateFocusOrderModifierLocalConsumer$1;
Landroidx/compose/ui/node/BackwardsCompatNodeKt$updateModifierLocalConsumer$1;
Landroidx/compose/ui/node/BackwardsCompatNodeKt;
+Landroidx/compose/ui/node/CanFocusChecker;
Landroidx/compose/ui/node/CenteredArray;
Landroidx/compose/ui/node/ComposeUiNode$Companion$SetDensity$1;
Landroidx/compose/ui/node/ComposeUiNode$Companion$SetLayoutDirection$1;
@@ -9627,12 +12180,9 @@
Landroidx/compose/ui/node/DrawModifierNode;
Landroidx/compose/ui/node/DrawModifierNodeKt;
Landroidx/compose/ui/node/GlobalPositionAwareModifierNode;
-Landroidx/compose/ui/node/HitTestResult$HitTestResultIterator;
-Landroidx/compose/ui/node/HitTestResult$SubList;
Landroidx/compose/ui/node/HitTestResult;
Landroidx/compose/ui/node/HitTestResultKt;
Landroidx/compose/ui/node/InnerNodeCoordinator$Companion;
-Landroidx/compose/ui/node/InnerNodeCoordinator$LookaheadDelegateImpl;
Landroidx/compose/ui/node/InnerNodeCoordinator$tail$1;
Landroidx/compose/ui/node/InnerNodeCoordinator;
Landroidx/compose/ui/node/IntStack;
@@ -9643,8 +12193,6 @@
Landroidx/compose/ui/node/LayoutAwareModifierNode;
Landroidx/compose/ui/node/LayoutModifierNode;
Landroidx/compose/ui/node/LayoutModifierNodeCoordinator$Companion;
-Landroidx/compose/ui/node/LayoutModifierNodeCoordinator$LookaheadDelegateForIntermediateLayoutModifier;
-Landroidx/compose/ui/node/LayoutModifierNodeCoordinator$LookaheadDelegateForLayoutModifierNode;
Landroidx/compose/ui/node/LayoutModifierNodeCoordinator;
Landroidx/compose/ui/node/LayoutModifierNodeCoordinatorKt;
Landroidx/compose/ui/node/LayoutModifierNodeKt;
@@ -9663,7 +12211,6 @@
Landroidx/compose/ui/node/LayoutNodeDrawScope;
Landroidx/compose/ui/node/LayoutNodeDrawScopeKt;
Landroidx/compose/ui/node/LayoutNodeKt;
-Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$LookaheadPassDelegate;
Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$WhenMappings;
Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$childMeasurables$1;
Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$layoutChildren$1$1$1;
@@ -9672,7 +12219,6 @@
Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$placeOuterCoordinator$1;
Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$remeasure$1;
Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;
-Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$performLookaheadMeasure$1;
Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$performMeasure$2;
Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;
Landroidx/compose/ui/node/LayoutNodeLayoutDelegateKt;
@@ -9682,13 +12228,12 @@
Landroidx/compose/ui/node/MeasureAndLayoutDelegate$PostponedRequest;
Landroidx/compose/ui/node/MeasureAndLayoutDelegate$WhenMappings;
Landroidx/compose/ui/node/MeasureAndLayoutDelegate;
+Landroidx/compose/ui/node/ModifierNodeElement;
Landroidx/compose/ui/node/MutableVectorWithMutationTracking;
Landroidx/compose/ui/node/MyersDiffKt;
Landroidx/compose/ui/node/NodeChain$Differ;
-Landroidx/compose/ui/node/NodeChain$Logger;
Landroidx/compose/ui/node/NodeChain;
Landroidx/compose/ui/node/NodeChainKt$SentinelHead$1;
-Landroidx/compose/ui/node/NodeChainKt$fillVector$1;
Landroidx/compose/ui/node/NodeChainKt;
Landroidx/compose/ui/node/NodeCoordinator$Companion$PointerInputSource$1;
Landroidx/compose/ui/node/NodeCoordinator$Companion$SemanticsSource$1;
@@ -9697,15 +12242,14 @@
Landroidx/compose/ui/node/NodeCoordinator$Companion;
Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;
Landroidx/compose/ui/node/NodeCoordinator$hit$1;
-Landroidx/compose/ui/node/NodeCoordinator$hitNear$1;
Landroidx/compose/ui/node/NodeCoordinator$invalidateParentLayer$1;
Landroidx/compose/ui/node/NodeCoordinator$invoke$1;
-Landroidx/compose/ui/node/NodeCoordinator$speculativeHit$1;
Landroidx/compose/ui/node/NodeCoordinator$updateLayerParameters$1;
Landroidx/compose/ui/node/NodeCoordinator;
Landroidx/compose/ui/node/NodeCoordinatorKt;
Landroidx/compose/ui/node/NodeKind;
Landroidx/compose/ui/node/NodeKindKt;
+Landroidx/compose/ui/node/ObserverNode;
Landroidx/compose/ui/node/OnPositionedDispatcher$Companion$DepthComparator;
Landroidx/compose/ui/node/OnPositionedDispatcher$Companion;
Landroidx/compose/ui/node/OnPositionedDispatcher;
@@ -9723,7 +12267,6 @@
Landroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingMeasure$1;
Landroidx/compose/ui/node/OwnerSnapshotObserver;
Landroidx/compose/ui/node/ParentDataModifierNode;
-Landroidx/compose/ui/node/ParentDataModifierNodeKt;
Landroidx/compose/ui/node/PointerInputModifierNode;
Landroidx/compose/ui/node/PointerInputModifierNodeKt;
Landroidx/compose/ui/node/RootForTest;
@@ -9734,20 +12277,7 @@
Landroidx/compose/ui/node/UiApplier;
Landroidx/compose/ui/platform/AbstractComposeView$ensureCompositionCreated$1;
Landroidx/compose/ui/platform/AbstractComposeView;
-Landroidx/compose/ui/platform/AccessibilityIterators$AbstractTextSegmentIterator;
-Landroidx/compose/ui/platform/AccessibilityIterators$CharacterTextSegmentIterator$Companion;
-Landroidx/compose/ui/platform/AccessibilityIterators$CharacterTextSegmentIterator;
-Landroidx/compose/ui/platform/AccessibilityIterators$LineTextSegmentIterator$Companion;
-Landroidx/compose/ui/platform/AccessibilityIterators$LineTextSegmentIterator;
-Landroidx/compose/ui/platform/AccessibilityIterators$PageTextSegmentIterator$Companion;
-Landroidx/compose/ui/platform/AccessibilityIterators$PageTextSegmentIterator;
-Landroidx/compose/ui/platform/AccessibilityIterators$ParagraphTextSegmentIterator$Companion;
-Landroidx/compose/ui/platform/AccessibilityIterators$ParagraphTextSegmentIterator;
-Landroidx/compose/ui/platform/AccessibilityIterators$TextSegmentIterator;
-Landroidx/compose/ui/platform/AccessibilityIterators$WordTextSegmentIterator$Companion;
-Landroidx/compose/ui/platform/AccessibilityIterators$WordTextSegmentIterator;
Landroidx/compose/ui/platform/AccessibilityManager;
-Landroidx/compose/ui/platform/AccessibilityNodeInfoVerificationHelperMethods;
Landroidx/compose/ui/platform/AndroidAccessibilityManager$Companion;
Landroidx/compose/ui/platform/AndroidAccessibilityManager;
Landroidx/compose/ui/platform/AndroidClipboardManager;
@@ -9759,36 +12289,25 @@
Landroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;
Landroidx/compose/ui/platform/AndroidComposeView$_inputModeManager$1;
Landroidx/compose/ui/platform/AndroidComposeView$configurationChangeObserver$1;
+Landroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;
Landroidx/compose/ui/platform/AndroidComposeView$keyInputModifier$1;
Landroidx/compose/ui/platform/AndroidComposeView$pointerIconService$1;
Landroidx/compose/ui/platform/AndroidComposeView$resendMotionEventOnLayout$1;
Landroidx/compose/ui/platform/AndroidComposeView$resendMotionEventRunnable$1;
Landroidx/compose/ui/platform/AndroidComposeView$rotaryInputModifier$1;
-Landroidx/compose/ui/platform/AndroidComposeView$scrollContainerInfo$1$value$1;
-Landroidx/compose/ui/platform/AndroidComposeView$scrollContainerInfo$1;
Landroidx/compose/ui/platform/AndroidComposeView$semanticsModifier$1;
-Landroidx/compose/ui/platform/AndroidComposeView$snapshotObserver$1$$ExternalSyntheticLambda0;
Landroidx/compose/ui/platform/AndroidComposeView$snapshotObserver$1;
Landroidx/compose/ui/platform/AndroidComposeView;
Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda0;
Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda1;
Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda2;
Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1;
-Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$Api24Impl;
-Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$Api29Impl;
Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$Companion;
Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$MyNodeProvider;
-Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$PendingTextTraversedEvent;
Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$SemanticsNodeCopy;
-Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$WhenMappings;
Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$boundsUpdatesEventLoop$1;
-Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$populateAccessibilityNodeInfoProperties$isUnmergedLeafNode$1;
-Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$sendScrollEventIfNeeded$1;
Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$sendScrollEventIfNeededLambda$1;
-Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$sendSubtreeChangeAccessibilityEvents$1;
-Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$sendSubtreeChangeAccessibilityEvents$semanticsWrapper$1;
Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;
-Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;
Landroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ;
Landroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsN;
Landroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsO;
@@ -9812,7 +12331,6 @@
Landroidx/compose/ui/platform/AndroidFontResourceLoader;
Landroidx/compose/ui/platform/AndroidTextToolbar$textActionModeCallback$1;
Landroidx/compose/ui/platform/AndroidTextToolbar;
-Landroidx/compose/ui/platform/AndroidUiDispatcher$Companion$Main$2$dispatcher$1;
Landroidx/compose/ui/platform/AndroidUiDispatcher$Companion$Main$2;
Landroidx/compose/ui/platform/AndroidUiDispatcher$Companion$currentThread$1;
Landroidx/compose/ui/platform/AndroidUiDispatcher$Companion;
@@ -9820,12 +12338,10 @@
Landroidx/compose/ui/platform/AndroidUiDispatcher;
Landroidx/compose/ui/platform/AndroidUiDispatcher_androidKt;
Landroidx/compose/ui/platform/AndroidUiFrameClock$withFrameNanos$2$1;
-Landroidx/compose/ui/platform/AndroidUiFrameClock$withFrameNanos$2$2;
Landroidx/compose/ui/platform/AndroidUiFrameClock$withFrameNanos$2$callback$1;
Landroidx/compose/ui/platform/AndroidUiFrameClock;
Landroidx/compose/ui/platform/AndroidUriHandler;
Landroidx/compose/ui/platform/AndroidViewConfiguration;
-Landroidx/compose/ui/platform/AndroidViewsHandler;
Landroidx/compose/ui/platform/CalculateMatrixToWindow;
Landroidx/compose/ui/platform/CalculateMatrixToWindowApi29;
Landroidx/compose/ui/platform/ClipboardManager;
@@ -9858,7 +12374,6 @@
Landroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$registered$1;
Landroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$saveableStateRegistry$1;
Landroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt;
-Landroidx/compose/ui/platform/DrawChildContainer;
Landroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$1;
Landroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$2;
Landroidx/compose/ui/platform/GlobalSnapshotManager;
@@ -9866,10 +12381,8 @@
Landroidx/compose/ui/platform/InspectableModifier;
Landroidx/compose/ui/platform/InspectableValueKt$NoInspectorInfo$1;
Landroidx/compose/ui/platform/InspectableValueKt;
-Landroidx/compose/ui/platform/InspectorInfo;
Landroidx/compose/ui/platform/InspectorValueInfo;
Landroidx/compose/ui/platform/InvertMatrixKt;
-Landroidx/compose/ui/platform/JvmActuals_jvmKt;
Landroidx/compose/ui/platform/LayerMatrixCache;
Landroidx/compose/ui/platform/MotionDurationScaleImpl;
Landroidx/compose/ui/platform/OutlineResolver;
@@ -9878,8 +12391,6 @@
Landroidx/compose/ui/platform/RenderNodeLayer$Companion$getMatrix$1;
Landroidx/compose/ui/platform/RenderNodeLayer$Companion;
Landroidx/compose/ui/platform/RenderNodeLayer;
-Landroidx/compose/ui/platform/ScrollObservationScope;
-Landroidx/compose/ui/platform/SemanticsNodeWithAdjustedBounds;
Landroidx/compose/ui/platform/ShapeContainingUtilKt;
Landroidx/compose/ui/platform/TextToolbar;
Landroidx/compose/ui/platform/TextToolbarStatus;
@@ -9895,9 +12406,6 @@
Landroidx/compose/ui/platform/ViewLayer$Companion$getMatrix$1;
Landroidx/compose/ui/platform/ViewLayer$Companion;
Landroidx/compose/ui/platform/ViewLayer;
-Landroidx/compose/ui/platform/ViewLayerContainer;
-Landroidx/compose/ui/platform/ViewLayerVerificationHelper28;
-Landroidx/compose/ui/platform/ViewLayerVerificationHelper31;
Landroidx/compose/ui/platform/ViewRootForTest$Companion;
Landroidx/compose/ui/platform/ViewRootForTest;
Landroidx/compose/ui/platform/WeakCache;
@@ -9928,20 +12436,12 @@
Landroidx/compose/ui/platform/WrapperRenderNodeLayerHelperMethods;
Landroidx/compose/ui/platform/WrapperVerificationHelperMethods;
Landroidx/compose/ui/platform/Wrapper_androidKt;
-Landroidx/compose/ui/platform/accessibility/CollectionInfoKt;
Landroidx/compose/ui/platform/actionmodecallback/TextActionModeCallback;
-Landroidx/compose/ui/res/ImageVectorCache$ImageVectorEntry;
-Landroidx/compose/ui/res/ImageVectorCache$Key;
Landroidx/compose/ui/res/ImageVectorCache;
-Landroidx/compose/ui/res/PainterResources_androidKt;
Landroidx/compose/ui/res/Resources_androidKt;
Landroidx/compose/ui/res/StringResources_androidKt;
Landroidx/compose/ui/semantics/AccessibilityAction;
Landroidx/compose/ui/semantics/CollectionInfo;
-Landroidx/compose/ui/semantics/LiveRegionMode$Companion;
-Landroidx/compose/ui/semantics/LiveRegionMode;
-Landroidx/compose/ui/semantics/ProgressBarRangeInfo$Companion;
-Landroidx/compose/ui/semantics/ProgressBarRangeInfo;
Landroidx/compose/ui/semantics/Role$Companion;
Landroidx/compose/ui/semantics/Role;
Landroidx/compose/ui/semantics/ScrollAxisRange;
@@ -9952,14 +12452,7 @@
Landroidx/compose/ui/semantics/SemanticsModifier;
Landroidx/compose/ui/semantics/SemanticsModifierCore$Companion;
Landroidx/compose/ui/semantics/SemanticsModifierCore;
-Landroidx/compose/ui/semantics/SemanticsModifierKt$clearAndSetSemantics$$inlined$debugInspectorInfo$1;
-Landroidx/compose/ui/semantics/SemanticsModifierKt$semantics$$inlined$debugInspectorInfo$1;
Landroidx/compose/ui/semantics/SemanticsModifierKt;
-Landroidx/compose/ui/semantics/SemanticsNode$emitFakeNodes$fakeNode$1;
-Landroidx/compose/ui/semantics/SemanticsNode$emitFakeNodes$fakeNode$2;
-Landroidx/compose/ui/semantics/SemanticsNode$fakeSemanticsNode$fakeNode$1;
-Landroidx/compose/ui/semantics/SemanticsNode$parent$1;
-Landroidx/compose/ui/semantics/SemanticsNode$parent$2;
Landroidx/compose/ui/semantics/SemanticsNode;
Landroidx/compose/ui/semantics/SemanticsNodeKt;
Landroidx/compose/ui/semantics/SemanticsOwner;
@@ -9972,28 +12465,24 @@
Landroidx/compose/ui/semantics/SemanticsProperties$TestTag$1;
Landroidx/compose/ui/semantics/SemanticsProperties$Text$1;
Landroidx/compose/ui/semantics/SemanticsProperties;
-Landroidx/compose/ui/semantics/SemanticsPropertiesAndroid;
Landroidx/compose/ui/semantics/SemanticsPropertiesKt$ActionPropertyKey$1;
Landroidx/compose/ui/semantics/SemanticsPropertiesKt;
Landroidx/compose/ui/semantics/SemanticsPropertyKey$1;
Landroidx/compose/ui/semantics/SemanticsPropertyKey;
Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;
-Landroidx/compose/ui/semantics/SemanticsSortKt;
-Landroidx/compose/ui/state/ToggleableState;
-Landroidx/compose/ui/text/AndroidParagraph$WhenMappings;
Landroidx/compose/ui/text/AndroidParagraph$wordBoundary$2;
Landroidx/compose/ui/text/AndroidParagraph;
Landroidx/compose/ui/text/AndroidParagraph_androidKt;
Landroidx/compose/ui/text/AnnotatedString$Range;
-Landroidx/compose/ui/text/AnnotatedString$special$$inlined$sortedBy$1;
Landroidx/compose/ui/text/AnnotatedString;
Landroidx/compose/ui/text/AnnotatedStringKt;
+Landroidx/compose/ui/text/EmojiSupportMatch$Companion;
+Landroidx/compose/ui/text/EmojiSupportMatch;
Landroidx/compose/ui/text/MultiParagraph;
Landroidx/compose/ui/text/MultiParagraphIntrinsics$maxIntrinsicWidth$2;
Landroidx/compose/ui/text/MultiParagraphIntrinsics$minIntrinsicWidth$2;
Landroidx/compose/ui/text/MultiParagraphIntrinsics;
Landroidx/compose/ui/text/MultiParagraphIntrinsicsKt;
-Landroidx/compose/ui/text/MultiParagraphKt;
Landroidx/compose/ui/text/Paragraph;
Landroidx/compose/ui/text/ParagraphInfo;
Landroidx/compose/ui/text/ParagraphIntrinsicInfo;
@@ -10002,15 +12491,10 @@
Landroidx/compose/ui/text/ParagraphKt;
Landroidx/compose/ui/text/ParagraphStyle;
Landroidx/compose/ui/text/ParagraphStyleKt;
-Landroidx/compose/ui/text/Placeholder;
-Landroidx/compose/ui/text/PlatformParagraphStyle;
-Landroidx/compose/ui/text/PlatformSpanStyle;
Landroidx/compose/ui/text/PlatformTextStyle;
-Landroidx/compose/ui/text/SaversKt;
Landroidx/compose/ui/text/SpanStyle;
Landroidx/compose/ui/text/SpanStyleKt$resolveSpanStyleDefaults$1;
Landroidx/compose/ui/text/SpanStyleKt;
-Landroidx/compose/ui/text/TempListUtilsKt;
Landroidx/compose/ui/text/TextLayoutInput;
Landroidx/compose/ui/text/TextLayoutResult;
Landroidx/compose/ui/text/TextPainter;
@@ -10021,22 +12505,13 @@
Landroidx/compose/ui/text/TextStyle;
Landroidx/compose/ui/text/TextStyleKt$WhenMappings;
Landroidx/compose/ui/text/TextStyleKt;
-Landroidx/compose/ui/text/TtsAnnotation;
-Landroidx/compose/ui/text/UrlAnnotation;
-Landroidx/compose/ui/text/android/BoringLayoutConstructor33;
Landroidx/compose/ui/text/android/BoringLayoutFactory33;
Landroidx/compose/ui/text/android/BoringLayoutFactory;
-Landroidx/compose/ui/text/android/BoringLayoutFactoryDefault;
-Landroidx/compose/ui/text/android/CharSequenceCharacterIterator;
-Landroidx/compose/ui/text/android/LayoutCompat;
-Landroidx/compose/ui/text/android/LayoutHelper;
Landroidx/compose/ui/text/android/LayoutIntrinsics$boringMetrics$2;
Landroidx/compose/ui/text/android/LayoutIntrinsics$maxIntrinsicWidth$2;
Landroidx/compose/ui/text/android/LayoutIntrinsics$minIntrinsicWidth$2;
Landroidx/compose/ui/text/android/LayoutIntrinsics;
-Landroidx/compose/ui/text/android/LayoutIntrinsicsKt$$ExternalSyntheticLambda0;
Landroidx/compose/ui/text/android/LayoutIntrinsicsKt;
-Landroidx/compose/ui/text/android/PaintExtensionsKt;
Landroidx/compose/ui/text/android/SpannedExtensionsKt;
Landroidx/compose/ui/text/android/StaticLayoutFactory23;
Landroidx/compose/ui/text/android/StaticLayoutFactory26;
@@ -10051,11 +12526,7 @@
Landroidx/compose/ui/text/android/TextLayout$layoutHelper$2;
Landroidx/compose/ui/text/android/TextLayout;
Landroidx/compose/ui/text/android/TextLayoutKt;
-Landroidx/compose/ui/text/android/selection/WordBoundary;
Landroidx/compose/ui/text/android/style/BaselineShiftSpan;
-Landroidx/compose/ui/text/android/style/FontFeatureSpan;
-Landroidx/compose/ui/text/android/style/IndentationFixSpan;
-Landroidx/compose/ui/text/android/style/IndentationFixSpanKt$WhenMappings;
Landroidx/compose/ui/text/android/style/IndentationFixSpanKt;
Landroidx/compose/ui/text/android/style/LetterSpacingSpanEm;
Landroidx/compose/ui/text/android/style/LetterSpacingSpanPx;
@@ -10063,39 +12534,52 @@
Landroidx/compose/ui/text/android/style/LineHeightStyleSpan;
Landroidx/compose/ui/text/android/style/LineHeightStyleSpanKt;
Landroidx/compose/ui/text/android/style/PlaceholderSpan;
-Landroidx/compose/ui/text/android/style/ShadowSpan;
-Landroidx/compose/ui/text/android/style/SkewXSpan;
-Landroidx/compose/ui/text/android/style/TextDecorationSpan;
-Landroidx/compose/ui/text/android/style/TypefaceSpan;
Landroidx/compose/ui/text/caches/ContainerHelpersKt;
Landroidx/compose/ui/text/caches/LruCache;
Landroidx/compose/ui/text/caches/SimpleArrayMap;
+Landroidx/compose/ui/text/font/AndroidFont$TypefaceLoader;
+Landroidx/compose/ui/text/font/AndroidFont;
Landroidx/compose/ui/text/font/AndroidFontLoader;
Landroidx/compose/ui/text/font/AndroidFontResolveInterceptor;
Landroidx/compose/ui/text/font/AndroidFontResolveInterceptor_androidKt;
Landroidx/compose/ui/text/font/AsyncTypefaceCache$AsyncTypefaceResult;
+Landroidx/compose/ui/text/font/AsyncTypefaceCache$Key;
Landroidx/compose/ui/text/font/AsyncTypefaceCache;
Landroidx/compose/ui/text/font/DefaultFontFamily;
+Landroidx/compose/ui/text/font/DeviceFontFamilyName;
+Landroidx/compose/ui/text/font/DeviceFontFamilyNameFont;
+Landroidx/compose/ui/text/font/DeviceFontFamilyNameFontKt;
+Landroidx/compose/ui/text/font/FileBasedFontFamily;
Landroidx/compose/ui/text/font/Font$ResourceLoader;
+Landroidx/compose/ui/text/font/Font;
Landroidx/compose/ui/text/font/FontFamily$Companion;
Landroidx/compose/ui/text/font/FontFamily$Resolver;
Landroidx/compose/ui/text/font/FontFamily;
+Landroidx/compose/ui/text/font/FontFamilyKt;
Landroidx/compose/ui/text/font/FontFamilyResolverImpl$createDefaultTypeface$1;
Landroidx/compose/ui/text/font/FontFamilyResolverImpl$resolve$result$1;
Landroidx/compose/ui/text/font/FontFamilyResolverImpl;
Landroidx/compose/ui/text/font/FontFamilyResolverKt;
Landroidx/compose/ui/text/font/FontFamilyResolver_androidKt;
+Landroidx/compose/ui/text/font/FontListFontFamily;
Landroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter$Companion;
Landroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter$special$$inlined$CoroutineExceptionHandler$1;
Landroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;
+Landroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapterKt;
+Landroidx/compose/ui/text/font/FontLoadingStrategy$Companion;
+Landroidx/compose/ui/text/font/FontLoadingStrategy;
Landroidx/compose/ui/text/font/FontMatcher;
Landroidx/compose/ui/text/font/FontStyle$Companion;
Landroidx/compose/ui/text/font/FontStyle;
Landroidx/compose/ui/text/font/FontSynthesis$Companion;
Landroidx/compose/ui/text/font/FontSynthesis;
+Landroidx/compose/ui/text/font/FontSynthesis_androidKt;
+Landroidx/compose/ui/text/font/FontVariation$Setting;
+Landroidx/compose/ui/text/font/FontVariation$Settings;
Landroidx/compose/ui/text/font/FontWeight$Companion;
Landroidx/compose/ui/text/font/FontWeight;
Landroidx/compose/ui/text/font/GenericFontFamily;
+Landroidx/compose/ui/text/font/NamedFontLoader;
Landroidx/compose/ui/text/font/PlatformFontFamilyTypefaceAdapter;
Landroidx/compose/ui/text/font/PlatformFontLoader;
Landroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion$Default$1;
@@ -10105,6 +12589,8 @@
Landroidx/compose/ui/text/font/PlatformTypefacesApi28;
Landroidx/compose/ui/text/font/PlatformTypefacesKt;
Landroidx/compose/ui/text/font/SystemFontFamily;
+Landroidx/compose/ui/text/font/TypefaceCompatApi26;
+Landroidx/compose/ui/text/font/TypefaceHelperMethodsApi28;
Landroidx/compose/ui/text/font/TypefaceRequest;
Landroidx/compose/ui/text/font/TypefaceRequestCache$runCached$currentTypefaceResult$1;
Landroidx/compose/ui/text/font/TypefaceRequestCache;
@@ -10114,10 +12600,8 @@
Landroidx/compose/ui/text/input/ImeAction;
Landroidx/compose/ui/text/input/ImeOptions$Companion;
Landroidx/compose/ui/text/input/ImeOptions;
-Landroidx/compose/ui/text/input/ImmHelper21;
Landroidx/compose/ui/text/input/ImmHelper30;
Landroidx/compose/ui/text/input/ImmHelper;
-Landroidx/compose/ui/text/input/InputEventCallback2;
Landroidx/compose/ui/text/input/InputMethodManager;
Landroidx/compose/ui/text/input/InputMethodManagerImpl$imm$2;
Landroidx/compose/ui/text/input/InputMethodManagerImpl;
@@ -10126,21 +12610,16 @@
Landroidx/compose/ui/text/input/KeyboardType$Companion;
Landroidx/compose/ui/text/input/KeyboardType;
Landroidx/compose/ui/text/input/PlatformTextInputService;
-Landroidx/compose/ui/text/input/RecordingInputConnection;
Landroidx/compose/ui/text/input/TextFieldValue$Companion$Saver$1;
Landroidx/compose/ui/text/input/TextFieldValue$Companion$Saver$2;
Landroidx/compose/ui/text/input/TextFieldValue$Companion;
Landroidx/compose/ui/text/input/TextFieldValue;
Landroidx/compose/ui/text/input/TextInputService;
-Landroidx/compose/ui/text/input/TextInputServiceAndroid$TextInputCommand;
-Landroidx/compose/ui/text/input/TextInputServiceAndroid$WhenMappings;
Landroidx/compose/ui/text/input/TextInputServiceAndroid$baseInputConnection$2;
-Landroidx/compose/ui/text/input/TextInputServiceAndroid$createInputConnection$1;
Landroidx/compose/ui/text/input/TextInputServiceAndroid$onEditCommand$1;
Landroidx/compose/ui/text/input/TextInputServiceAndroid$onImeActionPerformed$1;
Landroidx/compose/ui/text/input/TextInputServiceAndroid$textInputCommandEventLoop$1;
Landroidx/compose/ui/text/input/TextInputServiceAndroid;
-Landroidx/compose/ui/text/input/TextInputServiceAndroid_androidKt;
Landroidx/compose/ui/text/intl/AndroidLocale;
Landroidx/compose/ui/text/intl/AndroidLocaleDelegateAPI24;
Landroidx/compose/ui/text/intl/AndroidPlatformLocale_androidKt;
@@ -10151,8 +12630,6 @@
Landroidx/compose/ui/text/intl/PlatformLocale;
Landroidx/compose/ui/text/intl/PlatformLocaleDelegate;
Landroidx/compose/ui/text/intl/PlatformLocaleKt;
-Landroidx/compose/ui/text/platform/AndroidAccessibilitySpannableString_androidKt;
-Landroidx/compose/ui/text/platform/AndroidMultiParagraphDrawKt;
Landroidx/compose/ui/text/platform/AndroidParagraphHelper_androidKt$NoopSpan$1;
Landroidx/compose/ui/text/platform/AndroidParagraphHelper_androidKt;
Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics$resolveTypeface$1;
@@ -10164,18 +12641,13 @@
Landroidx/compose/ui/text/platform/DefaultImpl;
Landroidx/compose/ui/text/platform/EmojiCompatStatus;
Landroidx/compose/ui/text/platform/EmojiCompatStatusDelegate;
-Landroidx/compose/ui/text/platform/EmojiCompatStatusKt;
Landroidx/compose/ui/text/platform/ImmutableBool;
Landroidx/compose/ui/text/platform/Synchronization_jvmKt;
Landroidx/compose/ui/text/platform/SynchronizedObject;
-Landroidx/compose/ui/text/platform/TypefaceDirtyTracker;
-Landroidx/compose/ui/text/platform/extensions/LocaleListHelperMethods;
Landroidx/compose/ui/text/platform/extensions/PlaceholderExtensions_androidKt;
-Landroidx/compose/ui/text/platform/extensions/SpanRange;
Landroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt$setFontAttributes$1;
Landroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;
Landroidx/compose/ui/text/platform/extensions/TextPaintExtensions_androidKt;
-Landroidx/compose/ui/text/platform/style/DrawStyleSpan;
Landroidx/compose/ui/text/platform/style/ShaderBrushSpan;
Landroidx/compose/ui/text/style/BaselineShift$Companion;
Landroidx/compose/ui/text/style/BaselineShift;
@@ -10191,26 +12663,26 @@
Landroidx/compose/ui/text/style/LineBreak$WordBreak$Companion;
Landroidx/compose/ui/text/style/LineBreak$WordBreak;
Landroidx/compose/ui/text/style/LineBreak;
-Landroidx/compose/ui/text/style/LineHeightStyle$Companion;
-Landroidx/compose/ui/text/style/LineHeightStyle$Trim;
+Landroidx/compose/ui/text/style/LineBreak_androidKt;
Landroidx/compose/ui/text/style/LineHeightStyle;
-Landroidx/compose/ui/text/style/ResolvedTextDirection;
Landroidx/compose/ui/text/style/TextAlign$Companion;
Landroidx/compose/ui/text/style/TextAlign;
Landroidx/compose/ui/text/style/TextDecoration$Companion;
Landroidx/compose/ui/text/style/TextDecoration;
Landroidx/compose/ui/text/style/TextDirection$Companion;
Landroidx/compose/ui/text/style/TextDirection;
-Landroidx/compose/ui/text/style/TextDrawStyleKt;
Landroidx/compose/ui/text/style/TextForegroundStyle$Companion;
Landroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;
-Landroidx/compose/ui/text/style/TextForegroundStyle$merge$1;
Landroidx/compose/ui/text/style/TextForegroundStyle$merge$2;
Landroidx/compose/ui/text/style/TextForegroundStyle;
Landroidx/compose/ui/text/style/TextGeometricTransform$Companion;
Landroidx/compose/ui/text/style/TextGeometricTransform;
Landroidx/compose/ui/text/style/TextIndent$Companion;
Landroidx/compose/ui/text/style/TextIndent;
+Landroidx/compose/ui/text/style/TextMotion$Companion;
+Landroidx/compose/ui/text/style/TextMotion$Linearity$Companion;
+Landroidx/compose/ui/text/style/TextMotion$Linearity;
+Landroidx/compose/ui/text/style/TextMotion;
Landroidx/compose/ui/text/style/TextOverflow$Companion;
Landroidx/compose/ui/text/style/TextOverflow;
Landroidx/compose/ui/unit/AndroidDensity_androidKt;
@@ -10239,84 +12711,62 @@
Landroidx/compose/ui/unit/TextUnitKt;
Landroidx/compose/ui/unit/TextUnitType$Companion;
Landroidx/compose/ui/unit/TextUnitType;
-Landroidx/compose/ui/unit/Velocity$Companion;
-Landroidx/compose/ui/unit/Velocity;
-Landroidx/compose/ui/unit/VelocityKt;
Landroidx/compose/ui/util/MathHelpersKt;
Landroidx/core/R$id;
-Landroidx/core/app/ActivityCompat;
-Landroidx/core/app/ActivityOptionsCompat;
Landroidx/core/app/ComponentActivity;
Landroidx/core/app/CoreComponentFactory;
-Landroidx/core/app/MultiWindowModeChangedInfo;
-Landroidx/core/app/PictureInPictureModeChangedInfo;
-Landroidx/core/content/ContextCompat;
-Landroidx/core/content/res/FontResourcesParserCompat$FamilyResourceEntry;
-Landroidx/core/content/res/FontResourcesParserCompat$FontFamilyFilesResourceEntry;
-Landroidx/core/content/res/FontResourcesParserCompat$FontFileResourceEntry;
-Landroidx/core/content/res/FontResourcesParserCompat$ProviderResourceEntry;
-Landroidx/core/content/res/FontResourcesParserCompat;
-Landroidx/core/content/res/ResourcesCompat$FontCallback;
-Landroidx/core/graphics/PaintCompat;
-Landroidx/core/graphics/TypefaceCompat$ResourcesCallbackAdapter;
+Landroidx/core/graphics/Insets;
Landroidx/core/graphics/TypefaceCompat;
Landroidx/core/graphics/TypefaceCompatApi29Impl;
Landroidx/core/graphics/TypefaceCompatBaseImpl;
Landroidx/core/graphics/TypefaceCompatUtil$Api19Impl;
Landroidx/core/graphics/TypefaceCompatUtil;
Landroidx/core/graphics/drawable/DrawableKt;
+Landroidx/core/os/BuildCompat$Extensions30Impl;
Landroidx/core/os/BuildCompat;
Landroidx/core/os/HandlerCompat$Api28Impl;
Landroidx/core/os/HandlerCompat;
Landroidx/core/os/TraceCompat$Api18Impl;
Landroidx/core/os/TraceCompat;
-Landroidx/core/provider/CallbackWithHandler;
Landroidx/core/provider/FontProvider$$ExternalSyntheticLambda0;
Landroidx/core/provider/FontProvider$Api16Impl;
Landroidx/core/provider/FontProvider;
Landroidx/core/provider/FontRequest;
-Landroidx/core/provider/FontRequestWorker;
Landroidx/core/provider/FontsContractCompat$FontFamilyResult;
Landroidx/core/provider/FontsContractCompat$FontInfo;
-Landroidx/core/provider/FontsContractCompat$FontRequestCallback;
Landroidx/core/provider/FontsContractCompat;
-Landroidx/core/text/TextUtilsCompat;
-Landroidx/core/util/Consumer;
Landroidx/core/util/Preconditions;
Landroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;
-Landroidx/core/view/AccessibilityDelegateCompat$Api16Impl;
Landroidx/core/view/AccessibilityDelegateCompat;
Landroidx/core/view/KeyEventDispatcher$Component;
-Landroidx/core/view/KeyEventDispatcher;
Landroidx/core/view/MenuHostHelper;
Landroidx/core/view/OnApplyWindowInsetsListener;
Landroidx/core/view/OnReceiveContentViewBehavior;
Landroidx/core/view/ViewCompat$$ExternalSyntheticLambda0;
-Landroidx/core/view/ViewCompat$1;
-Landroidx/core/view/ViewCompat$2;
-Landroidx/core/view/ViewCompat$3;
-Landroidx/core/view/ViewCompat$4;
Landroidx/core/view/ViewCompat$AccessibilityPaneVisibilityManager;
-Landroidx/core/view/ViewCompat$AccessibilityViewProperty;
-Landroidx/core/view/ViewCompat$Api16Impl;
-Landroidx/core/view/ViewCompat$Api17Impl;
-Landroidx/core/view/ViewCompat$Api19Impl;
-Landroidx/core/view/ViewCompat$Api20Impl;
+Landroidx/core/view/ViewCompat$Api21Impl$1;
Landroidx/core/view/ViewCompat$Api21Impl;
-Landroidx/core/view/ViewCompat$Api23Impl;
-Landroidx/core/view/ViewCompat$Api29Impl;
Landroidx/core/view/ViewCompat;
-Landroidx/core/view/ViewConfigurationCompat;
+Landroidx/core/view/ViewKt$ancestors$1;
Landroidx/core/view/ViewKt;
+Landroidx/core/view/WindowCompat;
Landroidx/core/view/WindowInsetsAnimationCompat$Callback;
+Landroidx/core/view/WindowInsetsAnimationCompat$Impl30$ProxyCallback;
+Landroidx/core/view/WindowInsetsAnimationCompat$Impl30;
+Landroidx/core/view/WindowInsetsAnimationCompat$Impl;
Landroidx/core/view/WindowInsetsAnimationCompat;
Landroidx/core/view/WindowInsetsCompat$Type;
Landroidx/core/view/WindowInsetsCompat;
+Landroidx/core/view/WindowInsetsControllerCompat$Impl30;
+Landroidx/core/view/WindowInsetsControllerCompat$Impl;
Landroidx/core/view/WindowInsetsControllerCompat;
-Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$AccessibilityActionCompat;
-Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$RangeInfoCompat;
-Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat;
Landroidx/core/view/accessibility/AccessibilityNodeProviderCompat;
+Landroidx/credentials/provider/Action$Companion;
+Landroidx/credentials/provider/Action;
+Landroidx/credentials/provider/AuthenticationAction$Companion;
+Landroidx/credentials/provider/AuthenticationAction;
+Landroidx/credentials/provider/RemoteEntry$Companion;
+Landroidx/credentials/provider/RemoteEntry;
Landroidx/customview/poolingcontainer/PoolingContainer;
Landroidx/customview/poolingcontainer/PoolingContainerListener;
Landroidx/customview/poolingcontainer/PoolingContainerListenerHolder;
@@ -10334,6 +12784,7 @@
Landroidx/emoji2/text/EmojiCompat$CompatInternal19;
Landroidx/emoji2/text/EmojiCompat$CompatInternal;
Landroidx/emoji2/text/EmojiCompat$Config;
+Landroidx/emoji2/text/EmojiCompat$DefaultSpanFactory;
Landroidx/emoji2/text/EmojiCompat$GlyphChecker;
Landroidx/emoji2/text/EmojiCompat$InitCallback;
Landroidx/emoji2/text/EmojiCompat$ListenerDispatcher;
@@ -10348,11 +12799,13 @@
Landroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader;
Landroidx/emoji2/text/EmojiCompatInitializer$LoadEmojiCompatRunnable;
Landroidx/emoji2/text/EmojiCompatInitializer;
-Landroidx/emoji2/text/EmojiMetadata;
-Landroidx/emoji2/text/EmojiProcessor$CodepointIndexFinder;
+Landroidx/emoji2/text/EmojiExclusions$EmojiExclusions_Api34;
+Landroidx/emoji2/text/EmojiExclusions$EmojiExclusions_Reflections;
+Landroidx/emoji2/text/EmojiExclusions;
+Landroidx/emoji2/text/EmojiProcessor$EmojiProcessAddSpanCallback;
+Landroidx/emoji2/text/EmojiProcessor$EmojiProcessCallback;
Landroidx/emoji2/text/EmojiProcessor$ProcessorSm;
Landroidx/emoji2/text/EmojiProcessor;
-Landroidx/emoji2/text/EmojiSpan;
Landroidx/emoji2/text/FontRequestEmojiCompatConfig$FontProviderHelper;
Landroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader$$ExternalSyntheticLambda0;
Landroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;
@@ -10364,26 +12817,19 @@
Landroidx/emoji2/text/MetadataRepo$Node;
Landroidx/emoji2/text/MetadataRepo;
Landroidx/emoji2/text/SpannableBuilder;
-Landroidx/emoji2/text/TypefaceEmojiSpan;
+Landroidx/emoji2/text/TypefaceEmojiRasterizer;
Landroidx/emoji2/text/UnprecomputeTextOnModificationSpannable;
Landroidx/emoji2/text/flatbuffer/MetadataItem;
Landroidx/emoji2/text/flatbuffer/MetadataList;
Landroidx/emoji2/text/flatbuffer/Table;
Landroidx/emoji2/text/flatbuffer/Utf8;
Landroidx/emoji2/text/flatbuffer/Utf8Safe;
-Landroidx/lifecycle/AndroidViewModel;
-Landroidx/lifecycle/ClassesInfoCache;
-Landroidx/lifecycle/CompositeGeneratedAdaptersObserver;
Landroidx/lifecycle/DefaultLifecycleObserver;
Landroidx/lifecycle/EmptyActivityLifecycleCallbacks;
Landroidx/lifecycle/FullLifecycleObserver;
Landroidx/lifecycle/FullLifecycleObserverAdapter$1;
Landroidx/lifecycle/FullLifecycleObserverAdapter;
-Landroidx/lifecycle/GeneratedAdapter;
Landroidx/lifecycle/HasDefaultViewModelProviderFactory;
-Landroidx/lifecycle/LegacySavedStateHandleController$1;
-Landroidx/lifecycle/LegacySavedStateHandleController$OnRecreation;
-Landroidx/lifecycle/LegacySavedStateHandleController;
Landroidx/lifecycle/Lifecycle$1;
Landroidx/lifecycle/Lifecycle$Event;
Landroidx/lifecycle/Lifecycle$State;
@@ -10396,12 +12842,6 @@
Landroidx/lifecycle/LifecycleRegistry$ObserverWithState;
Landroidx/lifecycle/LifecycleRegistry;
Landroidx/lifecycle/Lifecycling;
-Landroidx/lifecycle/LiveData$1;
-Landroidx/lifecycle/LiveData$LifecycleBoundObserver;
-Landroidx/lifecycle/LiveData$ObserverWrapper;
-Landroidx/lifecycle/LiveData;
-Landroidx/lifecycle/MutableLiveData;
-Landroidx/lifecycle/Observer;
Landroidx/lifecycle/ProcessLifecycleInitializer;
Landroidx/lifecycle/ProcessLifecycleOwner$1;
Landroidx/lifecycle/ProcessLifecycleOwner$2;
@@ -10409,14 +12849,10 @@
Landroidx/lifecycle/ProcessLifecycleOwner$3;
Landroidx/lifecycle/ProcessLifecycleOwner$Api29Impl;
Landroidx/lifecycle/ProcessLifecycleOwner;
-Landroidx/lifecycle/ReflectiveGenericLifecycleObserver;
Landroidx/lifecycle/ReportFragment$ActivityInitializationListener;
Landroidx/lifecycle/ReportFragment$LifecycleCallbacks;
Landroidx/lifecycle/ReportFragment;
-Landroidx/lifecycle/SavedStateHandle$Companion;
-Landroidx/lifecycle/SavedStateHandle;
Landroidx/lifecycle/SavedStateHandleAttacher;
-Landroidx/lifecycle/SavedStateHandleController;
Landroidx/lifecycle/SavedStateHandleSupport$DEFAULT_ARGS_KEY$1;
Landroidx/lifecycle/SavedStateHandleSupport$SAVED_STATE_REGISTRY_OWNER_KEY$1;
Landroidx/lifecycle/SavedStateHandleSupport$VIEW_MODEL_STORE_OWNER_KEY$1;
@@ -10425,9 +12861,6 @@
Landroidx/lifecycle/SavedStateHandlesProvider$viewModel$2;
Landroidx/lifecycle/SavedStateHandlesProvider;
Landroidx/lifecycle/SavedStateHandlesVM;
-Landroidx/lifecycle/SavedStateViewModelFactory;
-Landroidx/lifecycle/SavedStateViewModelFactoryKt;
-Landroidx/lifecycle/SingleGeneratedAdapterObserver;
Landroidx/lifecycle/ViewModel;
Landroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory$Companion$ApplicationKeyImpl;
Landroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory$Companion;
@@ -10456,10 +12889,8 @@
Landroidx/lifecycle/viewmodel/compose/LocalViewModelStoreOwner$LocalViewModelStoreOwner$1;
Landroidx/lifecycle/viewmodel/compose/LocalViewModelStoreOwner;
Landroidx/lifecycle/viewmodel/compose/ViewModelKt;
-Landroidx/profileinstaller/ProfileInstaller;
Landroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda0;
Landroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda1;
-Landroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda2;
Landroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl$$ExternalSyntheticLambda0;
Landroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl;
Landroidx/profileinstaller/ProfileInstallerInitializer$Handler28Impl;
@@ -10467,10 +12898,8 @@
Landroidx/profileinstaller/ProfileInstallerInitializer;
Landroidx/savedstate/R$id;
Landroidx/savedstate/Recreator$Companion;
-Landroidx/savedstate/Recreator$SavedStateProvider;
Landroidx/savedstate/Recreator;
Landroidx/savedstate/SavedStateRegistry$$ExternalSyntheticLambda0;
-Landroidx/savedstate/SavedStateRegistry$AutoRecreated;
Landroidx/savedstate/SavedStateRegistry$Companion;
Landroidx/savedstate/SavedStateRegistry$SavedStateProvider;
Landroidx/savedstate/SavedStateRegistry;
@@ -10484,43 +12913,45 @@
Landroidx/startup/InitializationProvider;
Landroidx/startup/Initializer;
Landroidx/startup/R$string;
-Landroidx/startup/StartupException;
Landroidx/tracing/Trace;
Landroidx/tracing/TraceApi18Impl;
Landroidx/tracing/TraceApi29Impl;
-Lcom/android/credentialmanager/CreateFlowUtils$Companion$toCreateCredentialUiState$$inlined$compareByDescending$1;
-Lcom/android/credentialmanager/CreateFlowUtils$Companion;
-Lcom/android/credentialmanager/CreateFlowUtils;
+Lcom/android/compose/AndroidSystemUiController;
+Lcom/android/compose/SystemUiController;
+Lcom/android/compose/SystemUiControllerKt$BlackScrimmed$1;
+Lcom/android/compose/SystemUiControllerKt;
+Lcom/android/credentialmanager/CancelUiRequestState;
Lcom/android/credentialmanager/CredentialManagerRepo$Companion;
Lcom/android/credentialmanager/CredentialManagerRepo;
+Lcom/android/credentialmanager/CredentialSelectorActivity$Companion;
+Lcom/android/credentialmanager/CredentialSelectorActivity$CredentialManagerBottomSheet$1;
Lcom/android/credentialmanager/CredentialSelectorActivity$CredentialManagerBottomSheet$3;
-Lcom/android/credentialmanager/CredentialSelectorActivity$CredentialManagerBottomSheet$launcher$1$1;
-Lcom/android/credentialmanager/CredentialSelectorActivity$WhenMappings;
-Lcom/android/credentialmanager/CredentialSelectorActivity$onCancel$1;
+Lcom/android/credentialmanager/CredentialSelectorActivity$CredentialManagerBottomSheet$launcher$1;
+Lcom/android/credentialmanager/CredentialSelectorActivity$CredentialManagerBottomSheet$viewModel$1;
Lcom/android/credentialmanager/CredentialSelectorActivity$onCreate$1$1;
Lcom/android/credentialmanager/CredentialSelectorActivity$onCreate$1;
+Lcom/android/credentialmanager/CredentialSelectorActivity$onCreate$backPressedCallback$1;
Lcom/android/credentialmanager/CredentialSelectorActivity;
+Lcom/android/credentialmanager/CredentialSelectorViewModel;
+Lcom/android/credentialmanager/DataConverterKt;
Lcom/android/credentialmanager/GetFlowUtils$Companion;
Lcom/android/credentialmanager/GetFlowUtils;
+Lcom/android/credentialmanager/UiState;
Lcom/android/credentialmanager/UserConfigRepo$Companion;
Lcom/android/credentialmanager/UserConfigRepo;
-Lcom/android/credentialmanager/common/DialogResult;
-Lcom/android/credentialmanager/common/DialogType$Companion;
-Lcom/android/credentialmanager/common/DialogType;
-Lcom/android/credentialmanager/common/ProviderActivityResult;
-Lcom/android/credentialmanager/common/ResultState;
-Lcom/android/credentialmanager/common/material/FixedThreshold;
+Lcom/android/credentialmanager/common/BaseEntry;
+Lcom/android/credentialmanager/common/CredentialType;
+Lcom/android/credentialmanager/common/DialogState;
+Lcom/android/credentialmanager/common/ProviderActivityState;
+Lcom/android/credentialmanager/common/StartBalIntentSenderForResultContract;
Lcom/android/credentialmanager/common/material/ModalBottomSheetDefaults;
Lcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$1$1$1;
Lcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$1$1;
-Lcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$2$1;
-Lcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$3$1;
-Lcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$4$1$1;
-Lcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$4$1;
-Lcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$4$2;
-Lcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$4$3;
-Lcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$4;
-Lcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$5;
+Lcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$2$1$1;
+Lcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$2$2$1;
+Lcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$2$3$1;
+Lcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$2$3;
+Lcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$2$4;
Lcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1;
Lcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$2;
Lcom/android/credentialmanager/common/material/ModalBottomSheetKt$Scrim$1$1;
@@ -10531,7 +12962,6 @@
Lcom/android/credentialmanager/common/material/ModalBottomSheetKt$Scrim$dismissModifier$2$1;
Lcom/android/credentialmanager/common/material/ModalBottomSheetKt$rememberModalBottomSheetState$1;
Lcom/android/credentialmanager/common/material/ModalBottomSheetKt$rememberModalBottomSheetState$2;
-Lcom/android/credentialmanager/common/material/ModalBottomSheetKt$rememberModalBottomSheetState$3;
Lcom/android/credentialmanager/common/material/ModalBottomSheetKt;
Lcom/android/credentialmanager/common/material/ModalBottomSheetState$Companion$Saver$1;
Lcom/android/credentialmanager/common/material/ModalBottomSheetState$Companion$Saver$2;
@@ -10540,151 +12970,163 @@
Lcom/android/credentialmanager/common/material/ModalBottomSheetValue;
Lcom/android/credentialmanager/common/material/ResistanceConfig;
Lcom/android/credentialmanager/common/material/SwipeableDefaults;
-Lcom/android/credentialmanager/common/material/SwipeableKt$PreUpPostDownNestedScrollConnection$1$onPostFling$1;
-Lcom/android/credentialmanager/common/material/SwipeableKt$PreUpPostDownNestedScrollConnection$1$onPreFling$1;
Lcom/android/credentialmanager/common/material/SwipeableKt$PreUpPostDownNestedScrollConnection$1;
Lcom/android/credentialmanager/common/material/SwipeableKt$swipeable$1;
Lcom/android/credentialmanager/common/material/SwipeableKt$swipeable$3$3$1;
Lcom/android/credentialmanager/common/material/SwipeableKt$swipeable$3$3;
-Lcom/android/credentialmanager/common/material/SwipeableKt$swipeable$3$4$1$1;
Lcom/android/credentialmanager/common/material/SwipeableKt$swipeable$3$4$1;
Lcom/android/credentialmanager/common/material/SwipeableKt$swipeable$3;
-Lcom/android/credentialmanager/common/material/SwipeableKt$swipeable-pPrIpRY$$inlined$debugInspectorInfo$1;
Lcom/android/credentialmanager/common/material/SwipeableKt;
Lcom/android/credentialmanager/common/material/SwipeableState$Companion;
+Lcom/android/credentialmanager/common/material/SwipeableState$animateInternalToOffset$2$1;
Lcom/android/credentialmanager/common/material/SwipeableState$animateInternalToOffset$2;
+Lcom/android/credentialmanager/common/material/SwipeableState$animateTo$2$emit$1;
Lcom/android/credentialmanager/common/material/SwipeableState$animateTo$2;
Lcom/android/credentialmanager/common/material/SwipeableState$draggableState$1;
Lcom/android/credentialmanager/common/material/SwipeableState$latestNonEmptyAnchorsFlow$1;
-Lcom/android/credentialmanager/common/material/SwipeableState$performFling$2;
Lcom/android/credentialmanager/common/material/SwipeableState$processNewAnchors$1;
Lcom/android/credentialmanager/common/material/SwipeableState$snapInternalToOffset$2;
+Lcom/android/credentialmanager/common/material/SwipeableState$special$$inlined$filter$1$2$1;
Lcom/android/credentialmanager/common/material/SwipeableState$special$$inlined$filter$1$2;
Lcom/android/credentialmanager/common/material/SwipeableState$special$$inlined$filter$1;
Lcom/android/credentialmanager/common/material/SwipeableState$thresholds$2;
Lcom/android/credentialmanager/common/material/SwipeableState;
-Lcom/android/credentialmanager/common/material/ThresholdConfig;
Lcom/android/credentialmanager/common/ui/ActionButtonKt$ActionButton$1;
Lcom/android/credentialmanager/common/ui/ActionButtonKt$ActionButton$2;
Lcom/android/credentialmanager/common/ui/ActionButtonKt;
-Lcom/android/credentialmanager/common/ui/CardsKt$ContainerCard$1;
+Lcom/android/credentialmanager/common/ui/BottomSheetKt$ModalBottomSheet$1$1;
+Lcom/android/credentialmanager/common/ui/BottomSheetKt$ModalBottomSheet$1;
+Lcom/android/credentialmanager/common/ui/BottomSheetKt$ModalBottomSheet$2;
+Lcom/android/credentialmanager/common/ui/BottomSheetKt;
+Lcom/android/credentialmanager/common/ui/CardsKt$CredentialContainerCard$1;
+Lcom/android/credentialmanager/common/ui/CardsKt$SheetContainerCard$1;
+Lcom/android/credentialmanager/common/ui/CardsKt$SheetContainerCard$2;
Lcom/android/credentialmanager/common/ui/CardsKt;
+Lcom/android/credentialmanager/common/ui/ComposableSingletons$BottomSheetKt$lambda-1$1;
+Lcom/android/credentialmanager/common/ui/ComposableSingletons$BottomSheetKt;
+Lcom/android/credentialmanager/common/ui/ComposableSingletons$EntryKt$lambda-1$1;
+Lcom/android/credentialmanager/common/ui/ComposableSingletons$EntryKt;
+Lcom/android/credentialmanager/common/ui/ComposableSingletons$SnackBarKt$lambda-1$1;
+Lcom/android/credentialmanager/common/ui/ComposableSingletons$SnackBarKt;
Lcom/android/credentialmanager/common/ui/ConfirmButtonKt$ConfirmButton$1;
Lcom/android/credentialmanager/common/ui/ConfirmButtonKt$ConfirmButton$2;
Lcom/android/credentialmanager/common/ui/ConfirmButtonKt;
+Lcom/android/credentialmanager/common/ui/EntryKt$ActionEntry$1;
+Lcom/android/credentialmanager/common/ui/EntryKt$ActionEntry$2;
+Lcom/android/credentialmanager/common/ui/EntryKt$ActionEntry$3;
Lcom/android/credentialmanager/common/ui/EntryKt$Entry$1;
-Lcom/android/credentialmanager/common/ui/EntryKt$TransparentBackgroundEntry$1;
+Lcom/android/credentialmanager/common/ui/EntryKt$Entry$3;
+Lcom/android/credentialmanager/common/ui/EntryKt$Entry$4;
+Lcom/android/credentialmanager/common/ui/EntryKt$Entry$6;
+Lcom/android/credentialmanager/common/ui/EntryKt$Entry$7;
+Lcom/android/credentialmanager/common/ui/EntryKt$MoreOptionTopAppBar$1;
+Lcom/android/credentialmanager/common/ui/EntryKt$MoreOptionTopAppBar$2;
+Lcom/android/credentialmanager/common/ui/EntryKt$MoreOptionTopAppBar$3;
+Lcom/android/credentialmanager/common/ui/EntryKt$autoMirrored$1$WhenMappings;
+Lcom/android/credentialmanager/common/ui/EntryKt$autoMirrored$1;
Lcom/android/credentialmanager/common/ui/EntryKt;
-Lcom/android/credentialmanager/common/ui/TextsKt$TextInternal$1;
-Lcom/android/credentialmanager/common/ui/TextsKt$TextOnSurface$1;
-Lcom/android/credentialmanager/common/ui/TextsKt$TextOnSurfaceVariant$1;
-Lcom/android/credentialmanager/common/ui/TextsKt$TextSecondary$1;
+Lcom/android/credentialmanager/common/ui/HeadlineIconKt;
+Lcom/android/credentialmanager/common/ui/SectionHeaderKt;
+Lcom/android/credentialmanager/common/ui/SnackBarKt$Snackbar$1$2$1;
+Lcom/android/credentialmanager/common/ui/SnackBarKt$Snackbar$1;
+Lcom/android/credentialmanager/common/ui/SnackBarKt$Snackbar$2;
+Lcom/android/credentialmanager/common/ui/SnackBarKt;
+Lcom/android/credentialmanager/common/ui/SystemUiControllerUtilsKt$setBottomSheetSystemBarsColor$1;
+Lcom/android/credentialmanager/common/ui/SystemUiControllerUtilsKt;
+Lcom/android/credentialmanager/common/ui/TextsKt$BodySmallText$1;
+Lcom/android/credentialmanager/common/ui/TextsKt$SmallTitleText$1;
+Lcom/android/credentialmanager/common/ui/TextsKt$SnackbarActionText$1;
+Lcom/android/credentialmanager/common/ui/TextsKt$SnackbarContentText$1;
Lcom/android/credentialmanager/common/ui/TextsKt;
-Lcom/android/credentialmanager/createflow/ActiveEntry;
-Lcom/android/credentialmanager/createflow/ComposableSingletons$CreateCredentialComponentsKt$lambda-1$1;
-Lcom/android/credentialmanager/createflow/ComposableSingletons$CreateCredentialComponentsKt$lambda-2$1;
-Lcom/android/credentialmanager/createflow/ComposableSingletons$CreateCredentialComponentsKt$lambda-3$1;
-Lcom/android/credentialmanager/createflow/ComposableSingletons$CreateCredentialComponentsKt$lambda-4$1;
-Lcom/android/credentialmanager/createflow/ComposableSingletons$CreateCredentialComponentsKt$lambda-5$1;
-Lcom/android/credentialmanager/createflow/ComposableSingletons$CreateCredentialComponentsKt;
-Lcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$ConfirmationCard$1;
-Lcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$ConfirmationCard$2;
-Lcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$1$10;
-Lcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$1$11;
-Lcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$1$12;
-Lcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$1$13;
-Lcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$1$14;
-Lcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$1$15;
-Lcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$1$16;
-Lcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$1$17;
-Lcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$1$18;
-Lcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$1$1;
-Lcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$1$2;
-Lcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$1$3;
-Lcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$1$4;
-Lcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$1$5;
-Lcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$1$6;
-Lcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$1$7;
-Lcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$1$8;
-Lcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$1$9;
-Lcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$1$WhenMappings;
-Lcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$1;
-Lcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$2;
-Lcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$3;
-Lcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreationSelectionCard$1$1$1;
-Lcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreationSelectionCard$1;
-Lcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreationSelectionCard$2;
-Lcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$ExternalOnlySelectionCard$1;
-Lcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$ExternalOnlySelectionCard$2;
-Lcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$MoreOptionsDisabledProvidersRow$1;
-Lcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$MoreOptionsDisabledProvidersRow$2;
-Lcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$MoreOptionsInfoRow$1;
-Lcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$MoreOptionsInfoRow$2;
-Lcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$MoreOptionsInfoRow$3;
-Lcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$MoreOptionsRowIntroCard$1;
-Lcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$MoreOptionsRowIntroCard$2;
-Lcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$MoreOptionsSelectionCard$1;
-Lcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$MoreOptionsSelectionCard$2;
-Lcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$PrimaryCreateOptionRow$1;
-Lcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$PrimaryCreateOptionRow$2;
-Lcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$PrimaryCreateOptionRow$3;
-Lcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$PrimaryCreateOptionRow$4;
-Lcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$ProviderSelectionCard$1;
-Lcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$ProviderSelectionCard$2;
-Lcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$RemoteEntryRow$1$1;
-Lcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$RemoteEntryRow$2;
-Lcom/android/credentialmanager/createflow/CreateCredentialComponentsKt;
Lcom/android/credentialmanager/createflow/CreateCredentialUiState;
-Lcom/android/credentialmanager/createflow/CreateCredentialViewModel$dialogResult$2;
-Lcom/android/credentialmanager/createflow/CreateCredentialViewModel;
-Lcom/android/credentialmanager/createflow/CreateOptionInfo;
-Lcom/android/credentialmanager/createflow/CreateScreenState;
-Lcom/android/credentialmanager/createflow/DisabledProviderInfo;
-Lcom/android/credentialmanager/createflow/EnabledProviderInfo;
-Lcom/android/credentialmanager/createflow/EntryInfo;
-Lcom/android/credentialmanager/createflow/ProviderInfo;
-Lcom/android/credentialmanager/createflow/RemoteInfo;
-Lcom/android/credentialmanager/createflow/RequestDisplayInfo;
-Lcom/android/credentialmanager/getflow/EntryInfo;
+Lcom/android/credentialmanager/getflow/ActionEntryInfo;
+Lcom/android/credentialmanager/getflow/AuthenticationEntryInfo;
+Lcom/android/credentialmanager/getflow/ComposableSingletons$GetCredentialComponentsKt$lambda-1$1;
+Lcom/android/credentialmanager/getflow/ComposableSingletons$GetCredentialComponentsKt$lambda-2$1;
+Lcom/android/credentialmanager/getflow/ComposableSingletons$GetCredentialComponentsKt$lambda-3$1;
+Lcom/android/credentialmanager/getflow/ComposableSingletons$GetCredentialComponentsKt;
+Lcom/android/credentialmanager/getflow/CredentialEntryInfoComparatorByTypeThenTimestamp;
+Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$ActionChips$2;
+Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$ActionChips$3;
+Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$ActionEntryRow$1;
+Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$1;
+Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$2$2;
+Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$2$3;
+Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$2$4;
+Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$2$invoke$$inlined$items$default$1;
+Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$2$invoke$$inlined$items$default$3;
+Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$2$invoke$$inlined$items$default$4;
+Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$2;
+Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AuthenticationEntryRow$2;
+Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AuthenticationEntryRow$3;
+Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$10;
+Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$1;
+Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$2;
+Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$3;
+Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$7;
+Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$8;
+Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$9$1;
+Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$9$2;
+Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$9$3;
+Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$9$4;
+Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$9$5;
+Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$9$6;
+Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$9$7;
+Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$9$8;
+Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$9$9;
+Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$9$WhenMappings;
+Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$9;
+Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$LockedCredentials$1;
+Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$LockedCredentials$2;
+Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$PrimarySelectionCard$1$2;
+Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$PrimarySelectionCard$1$3;
+Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$PrimarySelectionCard$1$4$1;
+Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$PrimarySelectionCard$1$4;
+Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$PrimarySelectionCard$1$5$1;
+Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$PrimarySelectionCard$1$5$3;
+Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$PrimarySelectionCard$1$5;
+Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$PrimarySelectionCard$1;
+Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$RemoteCredentialSnackBarScreen$1$1$1;
+Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$RemoteCredentialSnackBarScreen$1;
+Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$RemoteCredentialSnackBarScreen$2;
+Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$RemoteEntryCard$1$1$1$1;
+Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$RemoteEntryCard$1;
+Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$RemoteEntryCard$2;
Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt;
Lcom/android/credentialmanager/getflow/GetCredentialUiState;
-Lcom/android/credentialmanager/getflow/GetCredentialViewModel;
+Lcom/android/credentialmanager/getflow/GetModelKt$toProviderDisplayInfo$$inlined$compareByDescending$1;
+Lcom/android/credentialmanager/getflow/GetModelKt;
Lcom/android/credentialmanager/getflow/GetScreenState;
+Lcom/android/credentialmanager/getflow/PerUserNameCredentialEntryList;
Lcom/android/credentialmanager/getflow/ProviderDisplayInfo;
+Lcom/android/credentialmanager/getflow/ProviderInfo;
+Lcom/android/credentialmanager/getflow/RemoteEntryInfo;
Lcom/android/credentialmanager/getflow/RequestDisplayInfo;
-Lcom/android/credentialmanager/jetpack/developer/CreateCredentialRequest$Companion;
-Lcom/android/credentialmanager/jetpack/developer/CreateCredentialRequest;
-Lcom/android/credentialmanager/jetpack/developer/CreateCustomCredentialRequest;
-Lcom/android/credentialmanager/jetpack/developer/CreatePasswordRequest$Companion;
-Lcom/android/credentialmanager/jetpack/developer/CreatePasswordRequest;
-Lcom/android/credentialmanager/jetpack/developer/CreatePublicKeyCredentialRequest$Companion;
-Lcom/android/credentialmanager/jetpack/developer/CreatePublicKeyCredentialRequest;
-Lcom/android/credentialmanager/jetpack/developer/CreatePublicKeyCredentialRequestPrivileged$Companion;
-Lcom/android/credentialmanager/jetpack/developer/CreatePublicKeyCredentialRequestPrivileged;
-Lcom/android/credentialmanager/jetpack/developer/FrameworkClassParsingException;
-Lcom/android/credentialmanager/jetpack/provider/Action$Companion;
-Lcom/android/credentialmanager/jetpack/provider/Action;
-Lcom/android/credentialmanager/jetpack/provider/CreateEntry$Companion;
-Lcom/android/credentialmanager/jetpack/provider/CreateEntry;
-Lcom/android/credentialmanager/jetpack/provider/CredentialCountInformation$Companion;
-Lcom/android/credentialmanager/jetpack/provider/CredentialCountInformation;
-Lcom/android/credentialmanager/jetpack/provider/CredentialEntry$Companion;
-Lcom/android/credentialmanager/jetpack/provider/CredentialEntry;
+Lcom/android/credentialmanager/getflow/TopBrandingContent;
+Lcom/android/credentialmanager/logging/GetCredentialEvent;
+Lcom/android/credentialmanager/logging/LifecycleEvent;
+Lcom/android/credentialmanager/logging/UIMetrics$log$1;
+Lcom/android/credentialmanager/logging/UIMetrics$log$3;
+Lcom/android/credentialmanager/logging/UIMetrics;
+Lcom/android/credentialmanager/ui/theme/AndroidColorScheme$Companion;
Lcom/android/credentialmanager/ui/theme/AndroidColorScheme;
Lcom/android/credentialmanager/ui/theme/AndroidColorSchemeKt$LocalAndroidColorScheme$1;
Lcom/android/credentialmanager/ui/theme/AndroidColorSchemeKt;
-Lcom/android/credentialmanager/ui/theme/ColorKt;
Lcom/android/credentialmanager/ui/theme/EntryShape;
+Lcom/android/credentialmanager/ui/theme/PlatformThemeKt$PlatformTheme$1$1;
+Lcom/android/credentialmanager/ui/theme/PlatformThemeKt$PlatformTheme$1;
+Lcom/android/credentialmanager/ui/theme/PlatformThemeKt$PlatformTheme$2;
+Lcom/android/credentialmanager/ui/theme/PlatformThemeKt;
Lcom/android/credentialmanager/ui/theme/ShapeKt;
-Lcom/android/credentialmanager/ui/theme/ThemeKt$CredentialSelectorTheme$1$1;
-Lcom/android/credentialmanager/ui/theme/ThemeKt$CredentialSelectorTheme$1;
-Lcom/android/credentialmanager/ui/theme/ThemeKt$CredentialSelectorTheme$2;
-Lcom/android/credentialmanager/ui/theme/ThemeKt;
-Lcom/android/credentialmanager/ui/theme/TypeKt;
-Lkotlin/ExceptionsKt;
-Lkotlin/ExceptionsKt__ExceptionsKt;
+Lcom/android/credentialmanager/ui/theme/typography/PlatformTypographyKt;
+Lcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;
+Lcom/android/credentialmanager/ui/theme/typography/TypefaceNames$Companion;
+Lcom/android/credentialmanager/ui/theme/typography/TypefaceNames$Config;
+Lcom/android/credentialmanager/ui/theme/typography/TypefaceNames;
+Lcom/android/credentialmanager/ui/theme/typography/TypefaceTokens$Companion;
+Lcom/android/credentialmanager/ui/theme/typography/TypefaceTokens;
+Lcom/android/credentialmanager/ui/theme/typography/TypographyTokens;
Lkotlin/Function;
-Lkotlin/InitializedLazyImpl;
Lkotlin/KotlinNothingValueException;
Lkotlin/Lazy;
Lkotlin/LazyKt;
@@ -10692,38 +13134,29 @@
Lkotlin/LazyKt__LazyJVMKt;
Lkotlin/LazyKt__LazyKt;
Lkotlin/LazyThreadSafetyMode;
-Lkotlin/NoWhenBranchMatchedException;
Lkotlin/Pair;
Lkotlin/Result$Companion;
Lkotlin/Result$Failure;
Lkotlin/Result;
Lkotlin/ResultKt;
-Lkotlin/SafePublicationLazyImpl;
Lkotlin/SynchronizedLazyImpl;
+Lkotlin/Triple;
Lkotlin/TuplesKt;
Lkotlin/ULong$Companion;
Lkotlin/ULong;
Lkotlin/UNINITIALIZED_VALUE;
-Lkotlin/UninitializedPropertyAccessException;
Lkotlin/Unit;
Lkotlin/UnsafeLazyImpl;
Lkotlin/UnsignedKt;
-Lkotlin/collections/AbstractCollection$toString$1;
Lkotlin/collections/AbstractCollection;
Lkotlin/collections/AbstractList$Companion;
-Lkotlin/collections/AbstractList$IteratorImpl;
-Lkotlin/collections/AbstractList$ListIteratorImpl;
Lkotlin/collections/AbstractList;
Lkotlin/collections/AbstractMap$Companion;
-Lkotlin/collections/AbstractMap$toString$1;
Lkotlin/collections/AbstractMap;
-Lkotlin/collections/AbstractMutableCollection;
Lkotlin/collections/AbstractMutableList;
Lkotlin/collections/AbstractMutableMap;
-Lkotlin/collections/AbstractMutableSet;
Lkotlin/collections/AbstractSet$Companion;
Lkotlin/collections/AbstractSet;
-Lkotlin/collections/ArrayAsCollection;
Lkotlin/collections/ArrayDeque$Companion;
Lkotlin/collections/ArrayDeque;
Lkotlin/collections/ArraysKt;
@@ -10754,19 +13187,12 @@
Lkotlin/collections/MapsKt__MapsKt;
Lkotlin/collections/MapsKt___MapsJvmKt;
Lkotlin/collections/MapsKt___MapsKt;
-Lkotlin/collections/SetsKt__SetsJVMKt;
-Lkotlin/collections/SetsKt__SetsKt;
-Lkotlin/collections/builders/ListBuilder;
-Lkotlin/collections/builders/MapBuilder;
Lkotlin/comparisons/ComparisonsKt;
Lkotlin/comparisons/ComparisonsKt__ComparisonsKt;
Lkotlin/comparisons/ComparisonsKt___ComparisonsJvmKt;
Lkotlin/comparisons/ComparisonsKt___ComparisonsKt;
Lkotlin/coroutines/AbstractCoroutineContextElement;
Lkotlin/coroutines/AbstractCoroutineContextKey;
-Lkotlin/coroutines/CombinedContext$Serialized;
-Lkotlin/coroutines/CombinedContext$toString$1;
-Lkotlin/coroutines/CombinedContext$writeReplace$1;
Lkotlin/coroutines/CombinedContext;
Lkotlin/coroutines/Continuation;
Lkotlin/coroutines/ContinuationInterceptor$DefaultImpls;
@@ -10784,8 +13210,6 @@
Lkotlin/coroutines/SafeContinuation;
Lkotlin/coroutines/intrinsics/CoroutineSingletons;
Lkotlin/coroutines/intrinsics/IntrinsicsKt;
-Lkotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt$createCoroutineUnintercepted$$inlined$createCoroutineFromSuspendFunction$IntrinsicsKt__IntrinsicsJvmKt$3;
-Lkotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt$createCoroutineUnintercepted$$inlined$createCoroutineFromSuspendFunction$IntrinsicsKt__IntrinsicsJvmKt$4;
Lkotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt;
Lkotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsKt;
Lkotlin/coroutines/jvm/internal/BaseContinuationImpl;
@@ -10793,15 +13217,12 @@
Lkotlin/coroutines/jvm/internal/CompletedContinuation;
Lkotlin/coroutines/jvm/internal/ContinuationImpl;
Lkotlin/coroutines/jvm/internal/CoroutineStackFrame;
-Lkotlin/coroutines/jvm/internal/DebugMetadataKt;
Lkotlin/coroutines/jvm/internal/DebugProbesKt;
Lkotlin/coroutines/jvm/internal/RestrictedContinuationImpl;
Lkotlin/coroutines/jvm/internal/RestrictedSuspendLambda;
Lkotlin/coroutines/jvm/internal/SuspendLambda;
Lkotlin/internal/ProgressionUtilKt;
-Lkotlin/io/CloseableKt;
Lkotlin/jvm/JvmClassMappingKt;
-Lkotlin/jvm/KotlinReflectionNotSupportedError;
Lkotlin/jvm/functions/Function0;
Lkotlin/jvm/functions/Function10;
Lkotlin/jvm/functions/Function11;
@@ -10825,14 +13246,11 @@
Lkotlin/jvm/functions/Function7;
Lkotlin/jvm/functions/Function8;
Lkotlin/jvm/functions/Function9;
-Lkotlin/jvm/internal/ArrayIteratorKt;
Lkotlin/jvm/internal/CallableReference$NoReceiver;
Lkotlin/jvm/internal/CallableReference;
Lkotlin/jvm/internal/ClassBasedDeclarationContainer;
Lkotlin/jvm/internal/ClassReference$Companion;
Lkotlin/jvm/internal/ClassReference;
-Lkotlin/jvm/internal/CollectionToArray;
-Lkotlin/jvm/internal/DefaultConstructorMarker;
Lkotlin/jvm/internal/FloatCompanionObject;
Lkotlin/jvm/internal/FunctionBase;
Lkotlin/jvm/internal/FunctionReference;
@@ -10844,11 +13262,9 @@
Lkotlin/jvm/internal/MutablePropertyReference1;
Lkotlin/jvm/internal/MutablePropertyReference1Impl;
Lkotlin/jvm/internal/MutablePropertyReference;
-Lkotlin/jvm/internal/PackageReference;
-Lkotlin/jvm/internal/PropertyReference0;
-Lkotlin/jvm/internal/PropertyReference0Impl;
Lkotlin/jvm/internal/PropertyReference;
Lkotlin/jvm/internal/Ref$BooleanRef;
+Lkotlin/jvm/internal/Ref$FloatRef;
Lkotlin/jvm/internal/Ref$IntRef;
Lkotlin/jvm/internal/Ref$LongRef;
Lkotlin/jvm/internal/Ref$ObjectRef;
@@ -10859,14 +13275,11 @@
Lkotlin/jvm/internal/markers/KMappedMarker;
Lkotlin/jvm/internal/markers/KMutableCollection;
Lkotlin/jvm/internal/markers/KMutableIterable;
-Lkotlin/jvm/internal/markers/KMutableMap$Entry;
Lkotlin/jvm/internal/markers/KMutableMap;
Lkotlin/jvm/internal/markers/KMutableSet;
Lkotlin/math/MathKt;
Lkotlin/math/MathKt__MathHKt;
Lkotlin/math/MathKt__MathJVMKt;
-Lkotlin/ranges/ClosedFloatRange;
-Lkotlin/ranges/ClosedFloatingPointRange;
Lkotlin/ranges/ClosedRange;
Lkotlin/ranges/IntProgression$Companion;
Lkotlin/ranges/IntProgression;
@@ -10881,12 +13294,9 @@
Lkotlin/reflect/KDeclarationContainer;
Lkotlin/reflect/KFunction;
Lkotlin/reflect/KMutableProperty1;
-Lkotlin/reflect/KProperty0;
-Lkotlin/reflect/KProperty1$Getter;
Lkotlin/reflect/KProperty1;
Lkotlin/reflect/KProperty;
Lkotlin/sequences/ConstrainedOnceSequence;
-Lkotlin/sequences/EmptySequence;
Lkotlin/sequences/FilteringSequence$iterator$1;
Lkotlin/sequences/FilteringSequence;
Lkotlin/sequences/GeneratorSequence$iterator$1;
@@ -10909,11 +13319,8 @@
Lkotlin/text/CharsKt;
Lkotlin/text/CharsKt__CharJVMKt;
Lkotlin/text/CharsKt__CharKt;
-Lkotlin/text/DelimitedRangesSequence;
Lkotlin/text/StringsKt;
Lkotlin/text/StringsKt__AppendableKt;
-Lkotlin/text/StringsKt__IndentKt$getIndentFunction$1;
-Lkotlin/text/StringsKt__IndentKt$getIndentFunction$2;
Lkotlin/text/StringsKt__IndentKt;
Lkotlin/text/StringsKt__RegexExtensionsJVMKt;
Lkotlin/text/StringsKt__RegexExtensionsKt;
@@ -10922,8 +13329,6 @@
Lkotlin/text/StringsKt__StringNumberConversionsJVMKt;
Lkotlin/text/StringsKt__StringNumberConversionsKt;
Lkotlin/text/StringsKt__StringsJVMKt;
-Lkotlin/text/StringsKt__StringsKt$rangesDelimitedBy$2;
-Lkotlin/text/StringsKt__StringsKt$splitToSequence$1;
Lkotlin/text/StringsKt__StringsKt;
Lkotlin/text/StringsKt___StringsJvmKt;
Lkotlin/text/StringsKt___StringsKt;
@@ -10941,13 +13346,11 @@
Lkotlinx/atomicfu/TraceBase$None;
Lkotlinx/atomicfu/TraceBase;
Lkotlinx/coroutines/AbstractCoroutine;
-Lkotlinx/coroutines/AbstractTimeSource;
Lkotlinx/coroutines/AbstractTimeSourceKt;
Lkotlinx/coroutines/Active;
Lkotlinx/coroutines/BeforeResumeCancelHandler;
Lkotlinx/coroutines/BlockingEventLoop;
Lkotlinx/coroutines/BuildersKt;
-Lkotlinx/coroutines/BuildersKt__BuildersKt;
Lkotlinx/coroutines/BuildersKt__Builders_commonKt;
Lkotlinx/coroutines/CancelHandler;
Lkotlinx/coroutines/CancelHandlerBase;
@@ -10964,13 +13367,8 @@
Lkotlinx/coroutines/CompletableJob;
Lkotlinx/coroutines/CompletedContinuation;
Lkotlinx/coroutines/CompletedExceptionally;
-Lkotlinx/coroutines/CompletedWithCancellation;
Lkotlinx/coroutines/CompletionHandlerBase;
-Lkotlinx/coroutines/CompletionHandlerException;
Lkotlinx/coroutines/CompletionStateKt;
-Lkotlinx/coroutines/CopyableThrowable;
-Lkotlinx/coroutines/CoroutineContextKt$foldCopies$1;
-Lkotlinx/coroutines/CoroutineContextKt$foldCopies$folded$1;
Lkotlinx/coroutines/CoroutineContextKt$hasCopyableElements$1;
Lkotlinx/coroutines/CoroutineContextKt;
Lkotlinx/coroutines/CoroutineDispatcher$Key$1;
@@ -10978,23 +13376,15 @@
Lkotlinx/coroutines/CoroutineDispatcher;
Lkotlinx/coroutines/CoroutineExceptionHandler$Key;
Lkotlinx/coroutines/CoroutineExceptionHandler;
-Lkotlinx/coroutines/CoroutineExceptionHandlerKt;
-Lkotlinx/coroutines/CoroutineId$Key;
-Lkotlinx/coroutines/CoroutineId;
-Lkotlinx/coroutines/CoroutineName$Key;
-Lkotlinx/coroutines/CoroutineName;
Lkotlinx/coroutines/CoroutineScope;
Lkotlinx/coroutines/CoroutineScopeKt;
Lkotlinx/coroutines/CoroutineStart$WhenMappings;
Lkotlinx/coroutines/CoroutineStart;
-Lkotlinx/coroutines/CoroutinesInternalError;
-Lkotlinx/coroutines/DebugKt;
Lkotlinx/coroutines/DebugStringsKt;
Lkotlinx/coroutines/DefaultExecutor;
Lkotlinx/coroutines/DefaultExecutorKt;
Lkotlinx/coroutines/Delay;
Lkotlinx/coroutines/DelayKt;
-Lkotlinx/coroutines/DispatchedCoroutine;
Lkotlinx/coroutines/DispatchedTask;
Lkotlinx/coroutines/DispatchedTaskKt;
Lkotlinx/coroutines/Dispatchers;
@@ -11018,7 +13408,6 @@
Lkotlinx/coroutines/Incomplete;
Lkotlinx/coroutines/IncompleteStateBox;
Lkotlinx/coroutines/InvokeOnCancel;
-Lkotlinx/coroutines/InvokeOnCancelling;
Lkotlinx/coroutines/InvokeOnCompletion;
Lkotlinx/coroutines/Job$DefaultImpls;
Lkotlinx/coroutines/Job$Key;
@@ -11029,21 +13418,17 @@
Lkotlinx/coroutines/JobKt;
Lkotlinx/coroutines/JobKt__JobKt;
Lkotlinx/coroutines/JobNode;
-Lkotlinx/coroutines/JobSupport$AwaitContinuation;
Lkotlinx/coroutines/JobSupport$ChildCompletion;
Lkotlinx/coroutines/JobSupport$Finishing;
Lkotlinx/coroutines/JobSupport$addLastAtomic$$inlined$addLastIf$1;
-Lkotlinx/coroutines/JobSupport$children$1;
Lkotlinx/coroutines/JobSupport;
Lkotlinx/coroutines/JobSupportKt;
-Lkotlinx/coroutines/LazyStandaloneCoroutine;
Lkotlinx/coroutines/MainCoroutineDispatcher;
Lkotlinx/coroutines/NodeList;
Lkotlinx/coroutines/NonDisposableHandle;
Lkotlinx/coroutines/NotCompleted;
Lkotlinx/coroutines/ParentJob;
Lkotlinx/coroutines/RemoveOnCancel;
-Lkotlinx/coroutines/ResumeAwaitOnCompletion;
Lkotlinx/coroutines/ResumeOnCompletion;
Lkotlinx/coroutines/StandaloneCoroutine;
Lkotlinx/coroutines/SupervisorJobImpl;
@@ -11054,17 +13439,12 @@
Lkotlinx/coroutines/Unconfined;
Lkotlinx/coroutines/UndispatchedCoroutine;
Lkotlinx/coroutines/UndispatchedMarker;
-Lkotlinx/coroutines/YieldContext$Key;
-Lkotlinx/coroutines/YieldContext;
Lkotlinx/coroutines/android/AndroidDispatcherFactory;
-Lkotlinx/coroutines/android/HandlerContext$scheduleResumeAfterDelay$$inlined$Runnable$1;
-Lkotlinx/coroutines/android/HandlerContext$scheduleResumeAfterDelay$1;
Lkotlinx/coroutines/android/HandlerContext;
Lkotlinx/coroutines/android/HandlerDispatcher;
Lkotlinx/coroutines/android/HandlerDispatcherKt;
Lkotlinx/coroutines/channels/AbstractChannel$Itr;
Lkotlinx/coroutines/channels/AbstractChannel$ReceiveElement;
-Lkotlinx/coroutines/channels/AbstractChannel$ReceiveElementWithUndeliveredHandler;
Lkotlinx/coroutines/channels/AbstractChannel$ReceiveHasNext;
Lkotlinx/coroutines/channels/AbstractChannel$RemoveReceiveOnCancel;
Lkotlinx/coroutines/channels/AbstractChannel$enqueueReceiveInternal$$inlined$addLastIfPrevAndIf$1;
@@ -11072,9 +13452,7 @@
Lkotlinx/coroutines/channels/AbstractChannel;
Lkotlinx/coroutines/channels/AbstractChannelKt;
Lkotlinx/coroutines/channels/AbstractSendChannel$SendBuffered;
-Lkotlinx/coroutines/channels/AbstractSendChannel$enqueueSend$$inlined$addLastIfPrevAndIf$1;
Lkotlinx/coroutines/channels/AbstractSendChannel;
-Lkotlinx/coroutines/channels/ArrayChannel$WhenMappings;
Lkotlinx/coroutines/channels/ArrayChannel;
Lkotlinx/coroutines/channels/BufferOverflow;
Lkotlinx/coroutines/channels/Channel$Factory;
@@ -11086,7 +13464,6 @@
Lkotlinx/coroutines/channels/ChannelResult$Companion;
Lkotlinx/coroutines/channels/ChannelResult$Failed;
Lkotlinx/coroutines/channels/ChannelResult;
-Lkotlinx/coroutines/channels/ChannelsKt;
Lkotlinx/coroutines/channels/Closed;
Lkotlinx/coroutines/channels/ConflatedChannel;
Lkotlinx/coroutines/channels/LinkedListChannel;
@@ -11098,10 +13475,7 @@
Lkotlinx/coroutines/channels/ReceiveOrClosed;
Lkotlinx/coroutines/channels/RendezvousChannel;
Lkotlinx/coroutines/channels/Send;
-Lkotlinx/coroutines/channels/SendChannel$DefaultImpls;
Lkotlinx/coroutines/channels/SendChannel;
-Lkotlinx/coroutines/channels/SendElement;
-Lkotlinx/coroutines/channels/SendElementWithUndeliveredHandler;
Lkotlinx/coroutines/flow/AbstractFlow$collect$1;
Lkotlinx/coroutines/flow/AbstractFlow;
Lkotlinx/coroutines/flow/DistinctFlowImpl$collect$2$emit$1;
@@ -11110,7 +13484,6 @@
Lkotlinx/coroutines/flow/Flow;
Lkotlinx/coroutines/flow/FlowCollector;
Lkotlinx/coroutines/flow/FlowKt;
-Lkotlinx/coroutines/flow/FlowKt__BuildersKt$flowOf$$inlined$unsafeFlow$2;
Lkotlinx/coroutines/flow/FlowKt__BuildersKt;
Lkotlinx/coroutines/flow/FlowKt__ChannelsKt$emitAllImpl$1;
Lkotlinx/coroutines/flow/FlowKt__ChannelsKt;
@@ -11126,6 +13499,7 @@
Lkotlinx/coroutines/flow/FlowKt__LimitKt$emitAbort$1;
Lkotlinx/coroutines/flow/FlowKt__LimitKt$take$$inlined$unsafeFlow$1$1;
Lkotlinx/coroutines/flow/FlowKt__LimitKt$take$$inlined$unsafeFlow$1;
+Lkotlinx/coroutines/flow/FlowKt__LimitKt$take$2$1$emit$1;
Lkotlinx/coroutines/flow/FlowKt__LimitKt$take$2$1;
Lkotlinx/coroutines/flow/FlowKt__LimitKt;
Lkotlinx/coroutines/flow/FlowKt__MergeKt$mapLatest$1;
@@ -11134,7 +13508,6 @@
Lkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2;
Lkotlinx/coroutines/flow/FlowKt__ReduceKt$first$3;
Lkotlinx/coroutines/flow/FlowKt__ReduceKt;
-Lkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$1;
Lkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2$WhenMappings;
Lkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;
Lkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;
@@ -11145,7 +13518,6 @@
Lkotlinx/coroutines/flow/SafeFlow;
Lkotlinx/coroutines/flow/SharedFlow;
Lkotlinx/coroutines/flow/SharedFlowImpl$Emitter;
-Lkotlinx/coroutines/flow/SharedFlowImpl$WhenMappings;
Lkotlinx/coroutines/flow/SharedFlowImpl$collect$1;
Lkotlinx/coroutines/flow/SharedFlowImpl;
Lkotlinx/coroutines/flow/SharedFlowKt;
@@ -11155,7 +13527,6 @@
Lkotlinx/coroutines/flow/SharingStarted$Companion;
Lkotlinx/coroutines/flow/SharingStarted;
Lkotlinx/coroutines/flow/StartedEagerly;
-Lkotlinx/coroutines/flow/StartedLazily$command$1;
Lkotlinx/coroutines/flow/StartedLazily;
Lkotlinx/coroutines/flow/StartedWhileSubscribed$command$1;
Lkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;
@@ -11172,10 +13543,7 @@
Lkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;
Lkotlinx/coroutines/flow/internal/ChannelFlow$collectToFun$1;
Lkotlinx/coroutines/flow/internal/ChannelFlow;
-Lkotlinx/coroutines/flow/internal/ChannelFlowKt;
-Lkotlinx/coroutines/flow/internal/ChannelFlowOperator$collectWithContextUndispatched$2;
Lkotlinx/coroutines/flow/internal/ChannelFlowOperator;
-Lkotlinx/coroutines/flow/internal/ChannelFlowOperatorImpl;
Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;
Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$emit$1;
Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1;
@@ -11191,41 +13559,33 @@
Lkotlinx/coroutines/flow/internal/NullSurrogateKt;
Lkotlinx/coroutines/flow/internal/SafeCollector$collectContextSize$1;
Lkotlinx/coroutines/flow/internal/SafeCollector;
+Lkotlinx/coroutines/flow/internal/SafeCollectorKt$emitFun$1;
Lkotlinx/coroutines/flow/internal/SafeCollectorKt;
+Lkotlinx/coroutines/flow/internal/SafeCollector_commonKt$checkContext$result$1;
Lkotlinx/coroutines/flow/internal/SafeCollector_commonKt;
Lkotlinx/coroutines/flow/internal/SendingCollector;
Lkotlinx/coroutines/flow/internal/SubscriptionCountStateFlow;
-Lkotlinx/coroutines/internal/ArrayQueue;
Lkotlinx/coroutines/internal/AtomicKt;
Lkotlinx/coroutines/internal/AtomicOp;
Lkotlinx/coroutines/internal/ContextScope;
Lkotlinx/coroutines/internal/DispatchedContinuation;
Lkotlinx/coroutines/internal/DispatchedContinuationKt;
-Lkotlinx/coroutines/internal/FastServiceLoader;
-Lkotlinx/coroutines/internal/FastServiceLoaderKt;
-Lkotlinx/coroutines/internal/InlineList;
Lkotlinx/coroutines/internal/LimitedDispatcher;
Lkotlinx/coroutines/internal/LimitedDispatcherKt;
Lkotlinx/coroutines/internal/LockFreeLinkedListHead;
Lkotlinx/coroutines/internal/LockFreeLinkedListKt;
Lkotlinx/coroutines/internal/LockFreeLinkedListNode$CondAddOp;
-Lkotlinx/coroutines/internal/LockFreeLinkedListNode$PrepareOp;
-Lkotlinx/coroutines/internal/LockFreeLinkedListNode$toString$1;
Lkotlinx/coroutines/internal/LockFreeLinkedListNode;
Lkotlinx/coroutines/internal/LockFreeTaskQueue;
Lkotlinx/coroutines/internal/LockFreeTaskQueueCore$Companion;
-Lkotlinx/coroutines/internal/LockFreeTaskQueueCore$Placeholder;
Lkotlinx/coroutines/internal/LockFreeTaskQueueCore;
Lkotlinx/coroutines/internal/MainDispatcherFactory;
Lkotlinx/coroutines/internal/MainDispatcherLoader;
Lkotlinx/coroutines/internal/MainDispatchersKt;
-Lkotlinx/coroutines/internal/MissingMainCoroutineDispatcher;
-Lkotlinx/coroutines/internal/OnUndeliveredElementKt;
Lkotlinx/coroutines/internal/OpDescriptor;
Lkotlinx/coroutines/internal/Removed;
Lkotlinx/coroutines/internal/ResizableAtomicArray;
Lkotlinx/coroutines/internal/ScopeCoroutine;
-Lkotlinx/coroutines/internal/StackTraceRecoveryKt;
Lkotlinx/coroutines/internal/Symbol;
Lkotlinx/coroutines/internal/SystemPropsKt;
Lkotlinx/coroutines/internal/SystemPropsKt__SystemPropsKt;
@@ -11237,13 +13597,9 @@
Lkotlinx/coroutines/internal/ThreadSafeHeap;
Lkotlinx/coroutines/internal/ThreadSafeHeapNode;
Lkotlinx/coroutines/internal/ThreadState;
-Lkotlinx/coroutines/internal/UndeliveredElementException;
Lkotlinx/coroutines/intrinsics/CancellableKt;
Lkotlinx/coroutines/intrinsics/UndispatchedKt;
Lkotlinx/coroutines/scheduling/CoroutineScheduler$Companion;
-Lkotlinx/coroutines/scheduling/CoroutineScheduler$WhenMappings;
-Lkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;
-Lkotlinx/coroutines/scheduling/CoroutineScheduler$WorkerState;
Lkotlinx/coroutines/scheduling/CoroutineScheduler;
Lkotlinx/coroutines/scheduling/DefaultIoScheduler;
Lkotlinx/coroutines/scheduling/DefaultScheduler;
@@ -11254,581 +13610,19 @@
Lkotlinx/coroutines/scheduling/Task;
Lkotlinx/coroutines/scheduling/TaskContext;
Lkotlinx/coroutines/scheduling/TaskContextImpl;
-Lkotlinx/coroutines/scheduling/TaskImpl;
Lkotlinx/coroutines/scheduling/TasksKt;
Lkotlinx/coroutines/scheduling/UnlimitedIoScheduler;
-Lkotlinx/coroutines/scheduling/WorkQueue;
Lkotlinx/coroutines/sync/Empty;
Lkotlinx/coroutines/sync/Mutex$DefaultImpls;
Lkotlinx/coroutines/sync/Mutex;
+Lkotlinx/coroutines/sync/MutexImpl$LockCont$tryResumeLockWaiter$1;
Lkotlinx/coroutines/sync/MutexImpl$LockCont;
Lkotlinx/coroutines/sync/MutexImpl$LockWaiter;
Lkotlinx/coroutines/sync/MutexImpl$LockedQueue;
-Lkotlinx/coroutines/sync/MutexImpl$UnlockOp;
-Lkotlinx/coroutines/sync/MutexImpl$lockSuspend$2$1$1;
Lkotlinx/coroutines/sync/MutexImpl;
Lkotlinx/coroutines/sync/MutexKt;
-PLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda2;->saveState()Landroid/os/Bundle;
-PLandroidx/activity/ComponentActivity$1;->run()V
-PLandroidx/activity/ComponentActivity$2;->onLaunch(ILandroidx/activity/result/contract/ActivityResultContract;Ljava/lang/Object;Landroidx/core/app/ActivityOptionsCompat;)V
-PLandroidx/activity/ComponentActivity$Api19Impl;->cancelPendingInputEvents(Landroid/view/View;)V
-PLandroidx/activity/ComponentActivity$ReportFullyDrawnExecutorApi16Impl;->run()V
-PLandroidx/activity/ComponentActivity;->$r8$lambda$OnwlVMZzrLePIRy-6IUDTtLLUV0(Landroidx/activity/ComponentActivity;)Landroid/os/Bundle;
-PLandroidx/activity/ComponentActivity;->access$001(Landroidx/activity/ComponentActivity;)V
-PLandroidx/activity/ComponentActivity;->lambda$new$1()Landroid/os/Bundle;
-PLandroidx/activity/ComponentActivity;->onActivityResult(IILandroid/content/Intent;)V
-PLandroidx/activity/ComponentActivity;->onBackPressed()V
-PLandroidx/activity/ComponentActivity;->onNewIntent(Landroid/content/Intent;)V
-PLandroidx/activity/ComponentActivity;->onSaveInstanceState(Landroid/os/Bundle;)V
-PLandroidx/activity/ComponentActivity;->onTrimMemory(I)V
-PLandroidx/activity/ComponentActivity;->startIntentSenderForResult(Landroid/content/IntentSender;ILandroid/content/Intent;IIILandroid/os/Bundle;)V
-PLandroidx/activity/OnBackPressedDispatcher;->onBackPressed()V
-PLandroidx/activity/compose/ActivityResultLauncherHolder;->launch(Ljava/lang/Object;Landroidx/core/app/ActivityOptionsCompat;)V
-PLandroidx/activity/compose/ActivityResultRegistryKt$rememberLauncherForActivityResult$1$1;->onActivityResult(Ljava/lang/Object;)V
-PLandroidx/activity/compose/ManagedActivityResultLauncher;->launch(Ljava/lang/Object;Landroidx/core/app/ActivityOptionsCompat;)V
-PLandroidx/activity/contextaware/ContextAwareHelper;->clearAvailableContext()V
-PLandroidx/activity/result/ActivityResult$1;-><init>()V
-PLandroidx/activity/result/ActivityResult;-><clinit>()V
-PLandroidx/activity/result/ActivityResult;-><init>(ILandroid/content/Intent;)V
-PLandroidx/activity/result/ActivityResult;->getData()Landroid/content/Intent;
-PLandroidx/activity/result/ActivityResult;->getResultCode()I
-PLandroidx/activity/result/ActivityResultLauncher;->launch(Ljava/lang/Object;)V
-PLandroidx/activity/result/ActivityResultRegistry$3;->launch(Ljava/lang/Object;Landroidx/core/app/ActivityOptionsCompat;)V
-PLandroidx/activity/result/ActivityResultRegistry;->dispatchResult(IILandroid/content/Intent;)Z
-PLandroidx/activity/result/ActivityResultRegistry;->doDispatch(Ljava/lang/String;ILandroid/content/Intent;Landroidx/activity/result/ActivityResultRegistry$CallbackAndContract;)V
-PLandroidx/activity/result/ActivityResultRegistry;->onSaveInstanceState(Landroid/os/Bundle;)V
-PLandroidx/activity/result/IntentSenderRequest$1;-><init>()V
-PLandroidx/activity/result/IntentSenderRequest$Builder;-><init>(Landroid/app/PendingIntent;)V
-PLandroidx/activity/result/IntentSenderRequest$Builder;-><init>(Landroid/content/IntentSender;)V
-PLandroidx/activity/result/IntentSenderRequest$Builder;->build()Landroidx/activity/result/IntentSenderRequest;
-PLandroidx/activity/result/IntentSenderRequest$Builder;->setFillInIntent(Landroid/content/Intent;)Landroidx/activity/result/IntentSenderRequest$Builder;
-PLandroidx/activity/result/IntentSenderRequest;-><clinit>()V
-PLandroidx/activity/result/IntentSenderRequest;-><init>(Landroid/content/IntentSender;Landroid/content/Intent;II)V
-PLandroidx/activity/result/IntentSenderRequest;->getFillInIntent()Landroid/content/Intent;
-PLandroidx/activity/result/IntentSenderRequest;->getFlagsMask()I
-PLandroidx/activity/result/IntentSenderRequest;->getFlagsValues()I
-PLandroidx/activity/result/IntentSenderRequest;->getIntentSender()Landroid/content/IntentSender;
-PLandroidx/activity/result/contract/ActivityResultContract;->getSynchronousResult(Landroid/content/Context;Ljava/lang/Object;)Landroidx/activity/result/contract/ActivityResultContract$SynchronousResult;
-PLandroidx/activity/result/contract/ActivityResultContracts$StartIntentSenderForResult;->createIntent(Landroid/content/Context;Landroidx/activity/result/IntentSenderRequest;)Landroid/content/Intent;
-PLandroidx/activity/result/contract/ActivityResultContracts$StartIntentSenderForResult;->createIntent(Landroid/content/Context;Ljava/lang/Object;)Landroid/content/Intent;
-PLandroidx/activity/result/contract/ActivityResultContracts$StartIntentSenderForResult;->parseResult(ILandroid/content/Intent;)Landroidx/activity/result/ActivityResult;
-PLandroidx/activity/result/contract/ActivityResultContracts$StartIntentSenderForResult;->parseResult(ILandroid/content/Intent;)Ljava/lang/Object;
-PLandroidx/arch/core/internal/SafeIterableMap$DescendingIterator;-><init>(Landroidx/arch/core/internal/SafeIterableMap$Entry;Landroidx/arch/core/internal/SafeIterableMap$Entry;)V
-PLandroidx/arch/core/internal/SafeIterableMap$DescendingIterator;->forward(Landroidx/arch/core/internal/SafeIterableMap$Entry;)Landroidx/arch/core/internal/SafeIterableMap$Entry;
-PLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->next()Ljava/lang/Object;
-PLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->next()Ljava/util/Map$Entry;
-PLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->nextNode()Landroidx/arch/core/internal/SafeIterableMap$Entry;
-PLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->supportRemove(Landroidx/arch/core/internal/SafeIterableMap$Entry;)V
-PLandroidx/arch/core/internal/SafeIterableMap;->descendingIterator()Ljava/util/Iterator;
-PLandroidx/compose/animation/AndroidFlingSpline$FlingResult;-><clinit>()V
-PLandroidx/compose/animation/AndroidFlingSpline$FlingResult;-><init>(FF)V
-PLandroidx/compose/animation/AndroidFlingSpline$FlingResult;->getDistanceCoefficient()F
-PLandroidx/compose/animation/AndroidFlingSpline$FlingResult;->getVelocityCoefficient()F
-PLandroidx/compose/animation/AndroidFlingSpline;-><clinit>()V
-PLandroidx/compose/animation/AndroidFlingSpline;-><init>()V
-PLandroidx/compose/animation/AndroidFlingSpline;->deceleration(FF)D
-PLandroidx/compose/animation/AndroidFlingSpline;->flingPosition(F)Landroidx/compose/animation/AndroidFlingSpline$FlingResult;
-PLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$1;-><clinit>()V
-PLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$1;-><init>()V
-PLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$1;->invoke-8_81llA(J)Landroidx/compose/animation/core/AnimationVector4D;
-PLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$2;-><init>(Landroidx/compose/ui/graphics/colorspace/ColorSpace;)V
-PLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1;-><clinit>()V
-PLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1;-><init>()V
-PLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1;->invoke(Landroidx/compose/ui/graphics/colorspace/ColorSpace;)Landroidx/compose/animation/core/TwoWayConverter;
-PLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/animation/ColorVectorConverterKt;-><clinit>()V
-PLandroidx/compose/animation/ColorVectorConverterKt;->access$getM1$p()[F
-PLandroidx/compose/animation/ColorVectorConverterKt;->access$multiplyColumn(IFFF[F)F
-PLandroidx/compose/animation/ColorVectorConverterKt;->getVectorConverter(Landroidx/compose/ui/graphics/Color$Companion;)Lkotlin/jvm/functions/Function1;
-PLandroidx/compose/animation/ColorVectorConverterKt;->multiplyColumn(IFFF[F)F
-PLandroidx/compose/animation/FlingCalculator$FlingInfo;-><clinit>()V
-PLandroidx/compose/animation/FlingCalculator$FlingInfo;-><init>(FFJ)V
-PLandroidx/compose/animation/FlingCalculator$FlingInfo;->position(J)F
-PLandroidx/compose/animation/FlingCalculator$FlingInfo;->velocity(J)F
-PLandroidx/compose/animation/FlingCalculator;-><init>(FLandroidx/compose/ui/unit/Density;)V
-PLandroidx/compose/animation/FlingCalculator;->computeDeceleration(Landroidx/compose/ui/unit/Density;)F
-PLandroidx/compose/animation/FlingCalculator;->flingDistance(F)F
-PLandroidx/compose/animation/FlingCalculator;->flingDuration(F)J
-PLandroidx/compose/animation/FlingCalculator;->flingInfo(F)Landroidx/compose/animation/FlingCalculator$FlingInfo;
-PLandroidx/compose/animation/FlingCalculator;->getSplineDeceleration(F)D
-PLandroidx/compose/animation/FlingCalculatorKt;-><clinit>()V
-PLandroidx/compose/animation/FlingCalculatorKt;->access$computeDeceleration(FF)F
-PLandroidx/compose/animation/FlingCalculatorKt;->access$getDecelerationRate$p()F
-PLandroidx/compose/animation/FlingCalculatorKt;->computeDeceleration(FF)F
-PLandroidx/compose/animation/SingleValueAnimationKt;-><clinit>()V
-PLandroidx/compose/animation/SingleValueAnimationKt;->animateColorAsState-KTwxG1Y(JLandroidx/compose/animation/core/AnimationSpec;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State;
-PLandroidx/compose/animation/SingleValueAnimationKt;->animateColorAsState-euL9pac(JLandroidx/compose/animation/core/AnimationSpec;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State;
-PLandroidx/compose/animation/SplineBasedDecayKt;->access$computeSplineInfo([F[FI)V
-PLandroidx/compose/animation/SplineBasedDecayKt;->computeSplineInfo([F[FI)V
-PLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;-><clinit>()V
-PLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;-><init>(Landroidx/compose/ui/unit/Density;)V
-PLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;->flingDistance(F)F
-PLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;->getAbsVelocityThreshold()F
-PLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;->getDurationNanos(FF)J
-PLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;->getTargetValue(FF)F
-PLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;->getValueFromNanos(JFF)F
-PLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;->getVelocityFromNanos(JFF)F
-PLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec_androidKt;-><clinit>()V
-PLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec_androidKt;->getPlatformFlingScrollFriction()F
-PLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec_androidKt;->rememberSplineBasedDecay(Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/core/DecayAnimationSpec;
-PLandroidx/compose/animation/core/AnimateAsStateKt;->access$animateValueAsState$lambda$4(Landroidx/compose/runtime/State;)Lkotlin/jvm/functions/Function1;
-PLandroidx/compose/animation/core/AnimateAsStateKt;->access$animateValueAsState$lambda$6(Landroidx/compose/runtime/State;)Landroidx/compose/animation/core/AnimationSpec;
-PLandroidx/compose/animation/core/AnimateAsStateKt;->animateValueAsState$lambda$4(Landroidx/compose/runtime/State;)Lkotlin/jvm/functions/Function1;
-PLandroidx/compose/animation/core/AnimateAsStateKt;->animateValueAsState$lambda$6(Landroidx/compose/runtime/State;)Landroidx/compose/animation/core/AnimationSpec;
-PLandroidx/compose/animation/core/AnimationScope;->cancelAnimation()V
-PLandroidx/compose/animation/core/AnimationScope;->getVelocity()Ljava/lang/Object;
-PLandroidx/compose/animation/core/AnimationSpecKt;->access$convert(Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;)Landroidx/compose/animation/core/AnimationVector;
-PLandroidx/compose/animation/core/AnimationSpecKt;->convert(Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;)Landroidx/compose/animation/core/AnimationVector;
-PLandroidx/compose/animation/core/AnimationStateKt;->AnimationState$default(FFJJZILjava/lang/Object;)Landroidx/compose/animation/core/AnimationState;
-PLandroidx/compose/animation/core/AnimationStateKt;->AnimationState(FFJJZ)Landroidx/compose/animation/core/AnimationState;
-PLandroidx/compose/animation/core/AnimationVector4D;-><clinit>()V
-PLandroidx/compose/animation/core/AnimationVector4D;-><init>(FFFF)V
-PLandroidx/compose/animation/core/AnimationVector4D;->getSize$animation_core_release()I
-PLandroidx/compose/animation/core/AnimationVector4D;->newVector$animation_core_release()Landroidx/compose/animation/core/AnimationVector4D;
-PLandroidx/compose/animation/core/AnimationVector4D;->newVector$animation_core_release()Landroidx/compose/animation/core/AnimationVector;
-PLandroidx/compose/animation/core/AnimationVector4D;->set$animation_core_release(IF)V
-PLandroidx/compose/animation/core/AnimationVectorsKt;->AnimationVector(F)Landroidx/compose/animation/core/AnimationVector1D;
-PLandroidx/compose/animation/core/ComplexDouble;-><init>(DD)V
-PLandroidx/compose/animation/core/ComplexDouble;->access$get_imaginary$p(Landroidx/compose/animation/core/ComplexDouble;)D
-PLandroidx/compose/animation/core/ComplexDouble;->access$get_real$p(Landroidx/compose/animation/core/ComplexDouble;)D
-PLandroidx/compose/animation/core/ComplexDouble;->access$set_imaginary$p(Landroidx/compose/animation/core/ComplexDouble;D)V
-PLandroidx/compose/animation/core/ComplexDouble;->access$set_real$p(Landroidx/compose/animation/core/ComplexDouble;D)V
-PLandroidx/compose/animation/core/ComplexDouble;->getReal()D
-PLandroidx/compose/animation/core/ComplexDoubleKt;->complexQuadraticFormula(DDD)Lkotlin/Pair;
-PLandroidx/compose/animation/core/ComplexDoubleKt;->complexSqrt(D)Landroidx/compose/animation/core/ComplexDouble;
-PLandroidx/compose/animation/core/DecayAnimation;-><clinit>()V
-PLandroidx/compose/animation/core/DecayAnimation;-><init>(Landroidx/compose/animation/core/DecayAnimationSpec;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;)V
-PLandroidx/compose/animation/core/DecayAnimation;-><init>(Landroidx/compose/animation/core/VectorizedDecayAnimationSpec;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;)V
-PLandroidx/compose/animation/core/DecayAnimation;->getDurationNanos()J
-PLandroidx/compose/animation/core/DecayAnimation;->getTargetValue()Ljava/lang/Object;
-PLandroidx/compose/animation/core/DecayAnimation;->getTypeConverter()Landroidx/compose/animation/core/TwoWayConverter;
-PLandroidx/compose/animation/core/DecayAnimation;->getValueFromNanos(J)Ljava/lang/Object;
-PLandroidx/compose/animation/core/DecayAnimation;->getVelocityVectorFromNanos(J)Landroidx/compose/animation/core/AnimationVector;
-PLandroidx/compose/animation/core/DecayAnimation;->isInfinite()Z
-PLandroidx/compose/animation/core/DecayAnimationSpecImpl;-><init>(Landroidx/compose/animation/core/FloatDecayAnimationSpec;)V
-PLandroidx/compose/animation/core/DecayAnimationSpecImpl;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedDecayAnimationSpec;
-PLandroidx/compose/animation/core/DecayAnimationSpecKt;->generateDecayAnimationSpec(Landroidx/compose/animation/core/FloatDecayAnimationSpec;)Landroidx/compose/animation/core/DecayAnimationSpec;
-PLandroidx/compose/animation/core/EasingKt;->getFastOutLinearInEasing()Landroidx/compose/animation/core/Easing;
-PLandroidx/compose/animation/core/FloatSpringSpec;-><clinit>()V
-PLandroidx/compose/animation/core/FloatSpringSpec;-><init>(FFF)V
-PLandroidx/compose/animation/core/FloatSpringSpec;-><init>(FFFILkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/animation/core/FloatSpringSpec;->getDurationNanos(FFF)J
-PLandroidx/compose/animation/core/FloatSpringSpec;->getEndVelocity(FFF)F
-PLandroidx/compose/animation/core/Motion;->constructor-impl(J)J
-PLandroidx/compose/animation/core/Motion;->getValue-impl(J)F
-PLandroidx/compose/animation/core/Motion;->getVelocity-impl(J)F
-PLandroidx/compose/animation/core/SpringEstimationKt$estimateCriticallyDamped$fn$1;-><init>(DDDD)V
-PLandroidx/compose/animation/core/SpringEstimationKt$estimateCriticallyDamped$fn$1;->invoke(D)Ljava/lang/Double;
-PLandroidx/compose/animation/core/SpringEstimationKt$estimateCriticallyDamped$fn$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/animation/core/SpringEstimationKt$estimateCriticallyDamped$fnPrime$1;-><init>(DDD)V
-PLandroidx/compose/animation/core/SpringEstimationKt$estimateCriticallyDamped$fnPrime$1;->invoke(D)Ljava/lang/Double;
-PLandroidx/compose/animation/core/SpringEstimationKt$estimateCriticallyDamped$fnPrime$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/animation/core/SpringEstimationKt;->estimateAnimationDurationMillis(DDDDD)J
-PLandroidx/compose/animation/core/SpringEstimationKt;->estimateAnimationDurationMillis(FFFFF)J
-PLandroidx/compose/animation/core/SpringEstimationKt;->estimateCriticallyDamped$t2Iterate(DD)D
-PLandroidx/compose/animation/core/SpringEstimationKt;->estimateCriticallyDamped(Lkotlin/Pair;DDD)D
-PLandroidx/compose/animation/core/SpringEstimationKt;->estimateDurationInternal(Lkotlin/Pair;DDDD)J
-PLandroidx/compose/animation/core/SpringSimulation;-><init>(F)V
-PLandroidx/compose/animation/core/SpringSimulation;->getDampingRatio()F
-PLandroidx/compose/animation/core/SpringSimulation;->getStiffness()F
-PLandroidx/compose/animation/core/SpringSimulation;->init()V
-PLandroidx/compose/animation/core/SpringSimulation;->setDampingRatio(F)V
-PLandroidx/compose/animation/core/SpringSimulation;->setFinalPosition(F)V
-PLandroidx/compose/animation/core/SpringSimulation;->setStiffness(F)V
-PLandroidx/compose/animation/core/SpringSimulationKt;-><clinit>()V
-PLandroidx/compose/animation/core/SpringSimulationKt;->Motion(FF)J
-PLandroidx/compose/animation/core/SpringSimulationKt;->getUNSET()F
-PLandroidx/compose/animation/core/SpringSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedAnimationSpec;
-PLandroidx/compose/animation/core/SpringSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedSpringSpec;
-PLandroidx/compose/animation/core/SuspendAnimationKt$animate$6$1;->invoke()Ljava/lang/Object;
-PLandroidx/compose/animation/core/SuspendAnimationKt$animate$6$1;->invoke()V
-PLandroidx/compose/animation/core/SuspendAnimationKt;->animateDecay$default(Landroidx/compose/animation/core/AnimationState;Landroidx/compose/animation/core/DecayAnimationSpec;ZLkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/animation/core/SuspendAnimationKt;->animateDecay(Landroidx/compose/animation/core/AnimationState;Landroidx/compose/animation/core/DecayAnimationSpec;ZLkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLandroidx/compose/animation/core/VectorConvertersKt$FloatToVector$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/animation/core/VectorizedAnimationSpecKt$createSpringAnimations$2;-><init>(FF)V
-PLandroidx/compose/animation/core/VectorizedAnimationSpecKt$createSpringAnimations$2;->get(I)Landroidx/compose/animation/core/FloatAnimationSpec;
-PLandroidx/compose/animation/core/VectorizedAnimationSpecKt$createSpringAnimations$2;->get(I)Landroidx/compose/animation/core/FloatSpringSpec;
-PLandroidx/compose/animation/core/VectorizedAnimationSpecKt;->access$createSpringAnimations(Landroidx/compose/animation/core/AnimationVector;FF)Landroidx/compose/animation/core/Animations;
-PLandroidx/compose/animation/core/VectorizedAnimationSpecKt;->createSpringAnimations(Landroidx/compose/animation/core/AnimationVector;FF)Landroidx/compose/animation/core/Animations;
-PLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->getDurationNanos(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)J
-PLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->getEndVelocity(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
-PLandroidx/compose/animation/core/VectorizedFloatDecaySpec;-><init>(Landroidx/compose/animation/core/FloatDecayAnimationSpec;)V
-PLandroidx/compose/animation/core/VectorizedFloatDecaySpec;->getAbsVelocityThreshold()F
-PLandroidx/compose/animation/core/VectorizedFloatDecaySpec;->getDurationNanos(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)J
-PLandroidx/compose/animation/core/VectorizedFloatDecaySpec;->getTargetValue(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
-PLandroidx/compose/animation/core/VectorizedFloatDecaySpec;->getValueFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
-PLandroidx/compose/animation/core/VectorizedFloatDecaySpec;->getVelocityFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
-PLandroidx/compose/animation/core/VectorizedSpringSpec;-><clinit>()V
-PLandroidx/compose/animation/core/VectorizedSpringSpec;-><init>(FFLandroidx/compose/animation/core/AnimationVector;)V
-PLandroidx/compose/animation/core/VectorizedSpringSpec;-><init>(FFLandroidx/compose/animation/core/Animations;)V
-PLandroidx/compose/animation/core/VectorizedSpringSpec;->getDurationNanos(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)J
-PLandroidx/compose/animation/core/VectorizedSpringSpec;->getEndVelocity(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
-PLandroidx/compose/animation/core/VectorizedSpringSpec;->isInfinite()Z
-PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1$1;-><init>(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;Lkotlin/coroutines/Continuation;)V
-PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1$1;->invoke(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;-><init>(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;Lkotlin/coroutines/Continuation;)V
-PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;->invoke(Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$onNewSize$1;-><init>(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)V
-PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$onNewSize$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$onNewSize$1;->invoke-ozmzZPI(J)V
-PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;-><init>(Landroid/content/Context;Landroidx/compose/foundation/OverscrollConfiguration;)V
-PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$animateToRelease(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)V
-PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getBottomEffect$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect;
-PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getBottomEffectNegation$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect;
-PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getContainerSize$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)J
-PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getLeftEffect$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect;
-PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getLeftEffectNegation$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect;
-PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getPointerId$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroidx/compose/ui/input/pointer/PointerId;
-PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getRightEffect$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect;
-PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getRightEffectNegation$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect;
-PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getTopEffect$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect;
-PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getTopEffectNegation$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect;
-PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$invalidateOverscroll(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)V
-PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$setContainerSize$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;J)V
-PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$setPointerId$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;Landroidx/compose/ui/input/pointer/PointerId;)V
-PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$setPointerPosition$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;Landroidx/compose/ui/geometry/Offset;)V
-PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->animateToRelease()V
-PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->consumePostFling-sF-c-tU(JLkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->consumePostScroll-OMhpSzk(JJI)V
-PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->consumePreFling-QWom1Mo(JLkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->consumePreScroll-OzD1aCk(JI)J
-PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->drawOverscroll(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V
-PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->getEffectModifier()Landroidx/compose/ui/Modifier;
-PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->invalidateOverscroll()V
-PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->isInProgress()Z
-PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->releaseOppositeOverscroll-k-4lQ0M(J)Z
-PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->stopOverscrollAnimation()Z
-PLandroidx/compose/foundation/AndroidOverscrollKt$NoOpOverscrollEffect$1;-><init>()V
-PLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1$1;-><init>(Landroidx/compose/ui/layout/Placeable;I)V
-PLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
-PLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1;-><clinit>()V
-PLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1;-><init>()V
-PLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1;->invoke-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
-PLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2$1;-><init>(Landroidx/compose/ui/layout/Placeable;I)V
-PLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
-PLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2;-><clinit>()V
-PLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2;-><init>()V
-PLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2;->invoke-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
-PLandroidx/compose/foundation/AndroidOverscrollKt;-><clinit>()V
-PLandroidx/compose/foundation/AndroidOverscrollKt;->access$getStretchOverscrollNonClippingLayer$p()Landroidx/compose/ui/Modifier;
-PLandroidx/compose/foundation/AndroidOverscrollKt;->rememberOverscrollEffect(Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/OverscrollEffect;
-PLandroidx/compose/foundation/Api31Impl;-><clinit>()V
-PLandroidx/compose/foundation/Api31Impl;-><init>()V
-PLandroidx/compose/foundation/Api31Impl;->create(Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/widget/EdgeEffect;
-PLandroidx/compose/foundation/Api31Impl;->getDistance(Landroid/widget/EdgeEffect;)F
-PLandroidx/compose/foundation/CheckScrollableContainerConstraintsKt;->checkScrollableContainerConstraints-K40F9xA(JLandroidx/compose/foundation/gestures/Orientation;)V
-PLandroidx/compose/foundation/ClickableKt$PressedInteractionSourceDisposableEffect$1$invoke$$inlined$onDispose$1;->dispose()V
-PLandroidx/compose/foundation/ClickableKt$clickable$4$1$1$1;->invoke()Ljava/lang/Boolean;
-PLandroidx/compose/foundation/ClickableKt$clickable$4$1$1$1;->invoke()Ljava/lang/Object;
-PLandroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1$1;->invoke-d-4ec7I(Landroidx/compose/foundation/gestures/PressGestureScope;JLkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLandroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1$2;->invoke-k-4lQ0M(J)V
-PLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2$delayJob$1;-><init>(Landroidx/compose/runtime/State;JLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V
-PLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2$delayJob$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-PLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2$delayJob$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2;-><init>(Landroidx/compose/foundation/gestures/PressGestureScope;JLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V
-PLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-PLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/ClickableKt;->handlePressInteraction-EPk0efs(Landroidx/compose/foundation/gestures/PressGestureScope;JLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLandroidx/compose/foundation/Clickable_androidKt;-><clinit>()V
-PLandroidx/compose/foundation/Clickable_androidKt;->getTapIndicationDelay()J
-PLandroidx/compose/foundation/ClipScrollableContainerKt$HorizontalScrollableClipModifier$1;-><init>()V
-PLandroidx/compose/foundation/ClipScrollableContainerKt$VerticalScrollableClipModifier$1;-><init>()V
-PLandroidx/compose/foundation/ClipScrollableContainerKt$VerticalScrollableClipModifier$1;->createOutline-Pq9zytI(JLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)Landroidx/compose/ui/graphics/Outline;
-PLandroidx/compose/foundation/ClipScrollableContainerKt;-><clinit>()V
-PLandroidx/compose/foundation/ClipScrollableContainerKt;->clipScrollableContainer(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/gestures/Orientation;)Landroidx/compose/ui/Modifier;
-PLandroidx/compose/foundation/ClipScrollableContainerKt;->getMaxSupportedElevation()F
-PLandroidx/compose/foundation/DrawOverscrollModifier;-><init>(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;Lkotlin/jvm/functions/Function1;)V
-PLandroidx/compose/foundation/DrawOverscrollModifier;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
-PLandroidx/compose/foundation/DrawOverscrollModifier;->equals(Ljava/lang/Object;)Z
-PLandroidx/compose/foundation/EdgeEffectCompat;-><clinit>()V
-PLandroidx/compose/foundation/EdgeEffectCompat;-><init>()V
-PLandroidx/compose/foundation/EdgeEffectCompat;->create(Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/widget/EdgeEffect;
-PLandroidx/compose/foundation/EdgeEffectCompat;->getDistanceCompat(Landroid/widget/EdgeEffect;)F
-PLandroidx/compose/foundation/FocusableKt$focusGroup$1;-><clinit>()V
-PLandroidx/compose/foundation/FocusableKt$focusGroup$1;-><init>()V
-PLandroidx/compose/foundation/FocusableKt$focusGroup$1;->invoke(Landroidx/compose/ui/focus/FocusProperties;)V
-PLandroidx/compose/foundation/FocusableKt$focusGroup$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/FocusableKt$focusable$2$1$1$invoke$$inlined$onDispose$1;->dispose()V
-PLandroidx/compose/foundation/FocusableKt$focusable$2$2$invoke$$inlined$onDispose$1;->dispose()V
-PLandroidx/compose/foundation/FocusableKt;->focusGroup(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
-PLandroidx/compose/foundation/FocusedBoundsKt$ModifierLocalFocusedBoundsObserver$1;-><clinit>()V
-PLandroidx/compose/foundation/FocusedBoundsKt$ModifierLocalFocusedBoundsObserver$1;-><init>()V
-PLandroidx/compose/foundation/FocusedBoundsKt$ModifierLocalFocusedBoundsObserver$1;->invoke()Ljava/lang/Object;
-PLandroidx/compose/foundation/FocusedBoundsKt$ModifierLocalFocusedBoundsObserver$1;->invoke()Lkotlin/jvm/functions/Function1;
-PLandroidx/compose/foundation/FocusedBoundsKt$onFocusedBoundsChanged$2;-><init>(Lkotlin/jvm/functions/Function1;)V
-PLandroidx/compose/foundation/FocusedBoundsKt$onFocusedBoundsChanged$2;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier;
-PLandroidx/compose/foundation/FocusedBoundsKt$onFocusedBoundsChanged$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/FocusedBoundsKt;-><clinit>()V
-PLandroidx/compose/foundation/FocusedBoundsKt;->getModifierLocalFocusedBoundsObserver()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
-PLandroidx/compose/foundation/FocusedBoundsKt;->onFocusedBoundsChanged(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;
-PLandroidx/compose/foundation/FocusedBoundsObserverModifier;-><init>(Lkotlin/jvm/functions/Function1;)V
-PLandroidx/compose/foundation/FocusedBoundsObserverModifier;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
-PLandroidx/compose/foundation/FocusedBoundsObserverModifier;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V
-PLandroidx/compose/foundation/HoverableKt$hoverable$2$1$1$invoke$$inlined$onDispose$1;->dispose()V
-PLandroidx/compose/foundation/HoverableKt$hoverable$2;->access$invoke$tryEmitExit(Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V
-PLandroidx/compose/foundation/HoverableKt$hoverable$2;->invoke$lambda$1(Landroidx/compose/runtime/MutableState;)Landroidx/compose/foundation/interaction/HoverInteraction$Enter;
-PLandroidx/compose/foundation/HoverableKt$hoverable$2;->invoke$tryEmitExit(Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V
-PLandroidx/compose/foundation/ImageKt$Image$2$measure$1;-><clinit>()V
-PLandroidx/compose/foundation/ImageKt$Image$2$measure$1;-><init>()V
-PLandroidx/compose/foundation/ImageKt$Image$2$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
-PLandroidx/compose/foundation/ImageKt$Image$2$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/ImageKt$Image$2;-><clinit>()V
-PLandroidx/compose/foundation/ImageKt$Image$2;-><init>()V
-PLandroidx/compose/foundation/ImageKt$Image$2;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
-PLandroidx/compose/foundation/ImageKt$Image$semantics$1$1;-><init>(Ljava/lang/String;)V
-PLandroidx/compose/foundation/ImageKt$Image$semantics$1$1;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V
-PLandroidx/compose/foundation/ImageKt$Image$semantics$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/ImageKt;->Image-5h-nEew(Landroidx/compose/ui/graphics/ImageBitmap;Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/ColorFilter;ILandroidx/compose/runtime/Composer;II)V
-PLandroidx/compose/foundation/OverscrollConfiguration;-><init>(JLandroidx/compose/foundation/layout/PaddingValues;)V
-PLandroidx/compose/foundation/OverscrollConfiguration;-><init>(JLandroidx/compose/foundation/layout/PaddingValues;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/foundation/OverscrollConfiguration;-><init>(JLandroidx/compose/foundation/layout/PaddingValues;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/foundation/OverscrollConfiguration;->equals(Ljava/lang/Object;)Z
-PLandroidx/compose/foundation/OverscrollConfiguration;->getGlowColor-0d7_KjU()J
-PLandroidx/compose/foundation/OverscrollConfigurationKt$LocalOverscrollConfiguration$1;-><clinit>()V
-PLandroidx/compose/foundation/OverscrollConfigurationKt$LocalOverscrollConfiguration$1;-><init>()V
-PLandroidx/compose/foundation/OverscrollConfigurationKt$LocalOverscrollConfiguration$1;->invoke()Landroidx/compose/foundation/OverscrollConfiguration;
-PLandroidx/compose/foundation/OverscrollConfigurationKt$LocalOverscrollConfiguration$1;->invoke()Ljava/lang/Object;
-PLandroidx/compose/foundation/OverscrollConfigurationKt;-><clinit>()V
-PLandroidx/compose/foundation/OverscrollConfigurationKt;->getLocalOverscrollConfiguration()Landroidx/compose/runtime/ProvidableCompositionLocal;
-PLandroidx/compose/foundation/OverscrollKt;->overscroll(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/OverscrollEffect;)Landroidx/compose/ui/Modifier;
-PLandroidx/compose/foundation/gestures/AndroidConfig;-><clinit>()V
-PLandroidx/compose/foundation/gestures/AndroidConfig;-><init>()V
-PLandroidx/compose/foundation/gestures/AndroidScrollable_androidKt;->platformScrollConfig(Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/gestures/ScrollConfig;
-PLandroidx/compose/foundation/gestures/ContentInViewModifier$modifier$1;-><init>(Landroidx/compose/foundation/gestures/ContentInViewModifier;)V
-PLandroidx/compose/foundation/gestures/ContentInViewModifier;-><init>(Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/gestures/ScrollableState;Z)V
-PLandroidx/compose/foundation/gestures/ContentInViewModifier;->getModifier()Landroidx/compose/ui/Modifier;
-PLandroidx/compose/foundation/gestures/ContentInViewModifier;->onPlaced(Landroidx/compose/ui/layout/LayoutCoordinates;)V
-PLandroidx/compose/foundation/gestures/ContentInViewModifier;->onRemeasured-ozmzZPI(J)V
-PLandroidx/compose/foundation/gestures/DefaultFlingBehavior$performFling$2$1;-><init>(Lkotlin/jvm/internal/Ref$FloatRef;Landroidx/compose/foundation/gestures/ScrollScope;Lkotlin/jvm/internal/Ref$FloatRef;Landroidx/compose/foundation/gestures/DefaultFlingBehavior;)V
-PLandroidx/compose/foundation/gestures/DefaultFlingBehavior$performFling$2$1;->invoke(Landroidx/compose/animation/core/AnimationScope;)V
-PLandroidx/compose/foundation/gestures/DefaultFlingBehavior$performFling$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/DefaultFlingBehavior$performFling$2;-><init>(FLandroidx/compose/foundation/gestures/DefaultFlingBehavior;Landroidx/compose/foundation/gestures/ScrollScope;Lkotlin/coroutines/Continuation;)V
-PLandroidx/compose/foundation/gestures/DefaultFlingBehavior$performFling$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-PLandroidx/compose/foundation/gestures/DefaultFlingBehavior$performFling$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/DefaultFlingBehavior$performFling$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/DefaultFlingBehavior$performFling$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/DefaultFlingBehavior;-><init>(Landroidx/compose/animation/core/DecayAnimationSpec;Landroidx/compose/ui/MotionDurationScale;)V
-PLandroidx/compose/foundation/gestures/DefaultFlingBehavior;-><init>(Landroidx/compose/animation/core/DecayAnimationSpec;Landroidx/compose/ui/MotionDurationScale;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/foundation/gestures/DefaultFlingBehavior;->access$getFlingDecay$p(Landroidx/compose/foundation/gestures/DefaultFlingBehavior;)Landroidx/compose/animation/core/DecayAnimationSpec;
-PLandroidx/compose/foundation/gestures/DefaultFlingBehavior;->getLastAnimationCycleCount()I
-PLandroidx/compose/foundation/gestures/DefaultFlingBehavior;->performFling(Landroidx/compose/foundation/gestures/ScrollScope;FLkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/DefaultFlingBehavior;->setLastAnimationCycleCount(I)V
-PLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2$1;-><init>(Landroidx/compose/foundation/gestures/DefaultScrollableState;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V
-PLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-PLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2$1;->invoke(Landroidx/compose/foundation/gestures/ScrollScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2;-><init>(Landroidx/compose/foundation/gestures/DefaultScrollableState;Landroidx/compose/foundation/MutatePriority;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V
-PLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-PLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/DefaultScrollableState$scrollScope$1;-><init>(Landroidx/compose/foundation/gestures/DefaultScrollableState;)V
-PLandroidx/compose/foundation/gestures/DefaultScrollableState$scrollScope$1;->scrollBy(F)F
-PLandroidx/compose/foundation/gestures/DefaultScrollableState;-><init>(Lkotlin/jvm/functions/Function1;)V
-PLandroidx/compose/foundation/gestures/DefaultScrollableState;->access$getScrollMutex$p(Landroidx/compose/foundation/gestures/DefaultScrollableState;)Landroidx/compose/foundation/MutatorMutex;
-PLandroidx/compose/foundation/gestures/DefaultScrollableState;->access$getScrollScope$p(Landroidx/compose/foundation/gestures/DefaultScrollableState;)Landroidx/compose/foundation/gestures/ScrollScope;
-PLandroidx/compose/foundation/gestures/DefaultScrollableState;->access$isScrollingState$p(Landroidx/compose/foundation/gestures/DefaultScrollableState;)Landroidx/compose/runtime/MutableState;
-PLandroidx/compose/foundation/gestures/DefaultScrollableState;->getOnDelta()Lkotlin/jvm/functions/Function1;
-PLandroidx/compose/foundation/gestures/DefaultScrollableState;->isScrollInProgress()Z
-PLandroidx/compose/foundation/gestures/DefaultScrollableState;->scroll(Landroidx/compose/foundation/MutatePriority;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/DragEvent$DragDelta;-><clinit>()V
-PLandroidx/compose/foundation/gestures/DragEvent$DragDelta;-><init>(J)V
-PLandroidx/compose/foundation/gestures/DragEvent$DragDelta;-><init>(JLkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/foundation/gestures/DragEvent$DragDelta;->getDelta-F1C5BW0()J
-PLandroidx/compose/foundation/gestures/DragEvent$DragStarted;-><clinit>()V
-PLandroidx/compose/foundation/gestures/DragEvent$DragStarted;-><init>(J)V
-PLandroidx/compose/foundation/gestures/DragEvent$DragStarted;-><init>(JLkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/foundation/gestures/DragEvent$DragStarted;->getStartPoint-F1C5BW0()J
-PLandroidx/compose/foundation/gestures/DragEvent$DragStopped;-><clinit>()V
-PLandroidx/compose/foundation/gestures/DragEvent$DragStopped;-><init>(J)V
-PLandroidx/compose/foundation/gestures/DragEvent$DragStopped;-><init>(JLkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/foundation/gestures/DragEvent$DragStopped;->getVelocity-9UxMQ8M()J
-PLandroidx/compose/foundation/gestures/DragEvent;-><init>()V
-PLandroidx/compose/foundation/gestures/DragEvent;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/foundation/gestures/DragGestureDetectorKt$HorizontalPointerDirectionConfig$1;-><init>()V
-PLandroidx/compose/foundation/gestures/DragGestureDetectorKt$VerticalPointerDirectionConfig$1;-><init>()V
-PLandroidx/compose/foundation/gestures/DragGestureDetectorKt$VerticalPointerDirectionConfig$1;->crossAxisDelta-k-4lQ0M(J)F
-PLandroidx/compose/foundation/gestures/DragGestureDetectorKt$VerticalPointerDirectionConfig$1;->mainAxisDelta-k-4lQ0M(J)F
-PLandroidx/compose/foundation/gestures/DragGestureDetectorKt$VerticalPointerDirectionConfig$1;->offsetFromChanges-dBAh8RU(FF)J
-PLandroidx/compose/foundation/gestures/DragGestureDetectorKt$verticalDrag$1;-><init>(Lkotlin/coroutines/Continuation;)V
-PLandroidx/compose/foundation/gestures/DragGestureDetectorKt$verticalDrag$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/DragGestureDetectorKt;-><clinit>()V
-PLandroidx/compose/foundation/gestures/DragGestureDetectorKt;->access$isPointerUp-DmW0f2w(Landroidx/compose/ui/input/pointer/PointerEvent;J)Z
-PLandroidx/compose/foundation/gestures/DragGestureDetectorKt;->isPointerUp-DmW0f2w(Landroidx/compose/ui/input/pointer/PointerEvent;J)Z
-PLandroidx/compose/foundation/gestures/DragGestureDetectorKt;->pointerSlop-E8SPZFQ(Landroidx/compose/ui/platform/ViewConfiguration;I)F
-PLandroidx/compose/foundation/gestures/DragGestureDetectorKt;->toPointerDirectionConfig(Landroidx/compose/foundation/gestures/Orientation;)Landroidx/compose/foundation/gestures/PointerDirectionConfig;
-PLandroidx/compose/foundation/gestures/DragGestureDetectorKt;->verticalDrag-jO51t88(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;JLkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/DragLogic$processDragStart$1;-><init>(Landroidx/compose/foundation/gestures/DragLogic;Lkotlin/coroutines/Continuation;)V
-PLandroidx/compose/foundation/gestures/DragLogic$processDragStop$1;-><init>(Landroidx/compose/foundation/gestures/DragLogic;Lkotlin/coroutines/Continuation;)V
-PLandroidx/compose/foundation/gestures/DragLogic;->processDragStart(Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/foundation/gestures/DragEvent$DragStarted;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/DragLogic;->processDragStop(Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/foundation/gestures/DragEvent$DragStopped;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/DraggableKt$awaitDownAndSlop$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/DraggableKt$awaitDownAndSlop$postPointerSlop$1;-><init>(Landroidx/compose/ui/input/pointer/util/VelocityTracker;Lkotlin/jvm/internal/Ref$LongRef;)V
-PLandroidx/compose/foundation/gestures/DraggableKt$awaitDownAndSlop$postPointerSlop$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/DraggableKt$awaitDownAndSlop$postPointerSlop$1;->invoke-Uv8p0NA(Landroidx/compose/ui/input/pointer/PointerInputChange;J)V
-PLandroidx/compose/foundation/gestures/DraggableKt$awaitDrag$dragTick$1;-><init>(Landroidx/compose/ui/input/pointer/util/VelocityTracker;Lkotlinx/coroutines/channels/SendChannel;Z)V
-PLandroidx/compose/foundation/gestures/DraggableKt$awaitDrag$dragTick$1;->invoke(Landroidx/compose/ui/input/pointer/PointerInputChange;)V
-PLandroidx/compose/foundation/gestures/DraggableKt$awaitDrag$dragTick$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/DraggableKt$draggable$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/DraggableKt$draggable$1;->invoke-d-4ec7I(Lkotlinx/coroutines/CoroutineScope;JLkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/DraggableKt$draggable$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/DraggableKt$draggable$3;->invoke(Landroidx/compose/ui/input/pointer/PointerInputChange;)Ljava/lang/Boolean;
-PLandroidx/compose/foundation/gestures/DraggableKt$draggable$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/DraggableKt$draggable$4;->invoke()Ljava/lang/Boolean;
-PLandroidx/compose/foundation/gestures/DraggableKt$draggable$4;->invoke()Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/DraggableKt$draggable$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/DraggableKt$draggable$5;->invoke-LuvzFrg(Lkotlinx/coroutines/CoroutineScope;JLkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/DraggableKt$draggable$5;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/DraggableKt$draggable$6;-><init>(Lkotlin/coroutines/Continuation;)V
-PLandroidx/compose/foundation/gestures/DraggableKt$draggable$6;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/DraggableKt$draggable$6;->invoke-d-4ec7I(Lkotlinx/coroutines/CoroutineScope;JLkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/DraggableKt$draggable$6;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$1$1$invoke$$inlined$onDispose$1;->dispose()V
-PLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$2$2;-><init>(Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlinx/coroutines/channels/Channel;Landroidx/compose/foundation/gestures/Orientation;Lkotlin/coroutines/Continuation;)V
-PLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$2$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-PLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$2$2;->invoke(Landroidx/compose/foundation/gestures/DragScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$2$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$2$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/DraggableKt$draggable$9;->access$invoke$lambda$3(Landroidx/compose/runtime/State;)Landroidx/compose/foundation/gestures/DragLogic;
-PLandroidx/compose/foundation/gestures/DraggableKt$draggable$9;->invoke$lambda$3(Landroidx/compose/runtime/State;)Landroidx/compose/foundation/gestures/DragLogic;
-PLandroidx/compose/foundation/gestures/DraggableKt;->access$awaitDrag-Su4bsnU(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Landroidx/compose/ui/input/pointer/PointerInputChange;JLandroidx/compose/ui/input/pointer/util/VelocityTracker;Lkotlinx/coroutines/channels/SendChannel;ZLandroidx/compose/foundation/gestures/Orientation;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/DraggableKt;->access$toFloat-3MmeM6k(JLandroidx/compose/foundation/gestures/Orientation;)F
-PLandroidx/compose/foundation/gestures/DraggableKt;->access$toFloat-sF-c-tU(JLandroidx/compose/foundation/gestures/Orientation;)F
-PLandroidx/compose/foundation/gestures/DraggableKt;->awaitDrag-Su4bsnU(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Landroidx/compose/ui/input/pointer/PointerInputChange;JLandroidx/compose/ui/input/pointer/util/VelocityTracker;Lkotlinx/coroutines/channels/SendChannel;ZLandroidx/compose/foundation/gestures/Orientation;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/DraggableKt;->draggable$default(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/gestures/DraggableState;Lkotlin/jvm/functions/Function1;Landroidx/compose/foundation/gestures/Orientation;ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;ZILjava/lang/Object;)Landroidx/compose/ui/Modifier;
-PLandroidx/compose/foundation/gestures/DraggableKt;->toFloat-3MmeM6k(JLandroidx/compose/foundation/gestures/Orientation;)F
-PLandroidx/compose/foundation/gestures/DraggableKt;->toFloat-sF-c-tU(JLandroidx/compose/foundation/gestures/Orientation;)F
-PLandroidx/compose/foundation/gestures/ForEachGestureKt$awaitAllPointersUp$3;-><init>(Lkotlin/coroutines/Continuation;)V
-PLandroidx/compose/foundation/gestures/ForEachGestureKt$awaitAllPointersUp$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/ForEachGestureKt;->allPointersUp(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;)Z
-PLandroidx/compose/foundation/gestures/ForEachGestureKt;->awaitAllPointersUp(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/PressGestureScopeImpl$reset$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/PressGestureScopeImpl$tryAwaitRelease$1;-><init>(Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V
-PLandroidx/compose/foundation/gestures/PressGestureScopeImpl$tryAwaitRelease$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/PressGestureScopeImpl;->cancel()V
-PLandroidx/compose/foundation/gestures/PressGestureScopeImpl;->release()V
-PLandroidx/compose/foundation/gestures/PressGestureScopeImpl;->tryAwaitRelease(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/ScrollDraggableState$drag$2;-><init>(Landroidx/compose/foundation/gestures/ScrollDraggableState;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V
-PLandroidx/compose/foundation/gestures/ScrollDraggableState$drag$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-PLandroidx/compose/foundation/gestures/ScrollDraggableState$drag$2;->invoke(Landroidx/compose/foundation/gestures/ScrollScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/ScrollDraggableState$drag$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/ScrollDraggableState$drag$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/ScrollDraggableState;-><init>(Landroidx/compose/runtime/State;)V
-PLandroidx/compose/foundation/gestures/ScrollDraggableState;->drag(Landroidx/compose/foundation/MutatePriority;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/ScrollDraggableState;->dragBy(F)V
-PLandroidx/compose/foundation/gestures/ScrollDraggableState;->setLatestScrollScope(Landroidx/compose/foundation/gestures/ScrollScope;)V
-PLandroidx/compose/foundation/gestures/ScrollableDefaults;-><clinit>()V
-PLandroidx/compose/foundation/gestures/ScrollableDefaults;-><init>()V
-PLandroidx/compose/foundation/gestures/ScrollableDefaults;->flingBehavior(Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/gestures/FlingBehavior;
-PLandroidx/compose/foundation/gestures/ScrollableDefaults;->overscrollEffect(Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/OverscrollEffect;
-PLandroidx/compose/foundation/gestures/ScrollableDefaults;->reverseDirection(Landroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/foundation/gestures/Orientation;Z)Z
-PLandroidx/compose/foundation/gestures/ScrollableKt$DefaultScrollMotionDurationScale$1;-><init>()V
-PLandroidx/compose/foundation/gestures/ScrollableKt$DefaultScrollMotionDurationScale$1;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/ScrollableKt$DefaultScrollMotionDurationScale$1;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;
-PLandroidx/compose/foundation/gestures/ScrollableKt$DefaultScrollMotionDurationScale$1;->getScaleFactor()F
-PLandroidx/compose/foundation/gestures/ScrollableKt$NoOpScrollScope$1;-><init>()V
-PLandroidx/compose/foundation/gestures/ScrollableKt$awaitScrollEvent$1;-><init>(Lkotlin/coroutines/Continuation;)V
-PLandroidx/compose/foundation/gestures/ScrollableKt$awaitScrollEvent$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/ScrollableKt$mouseWheelScroll$1$1;-><init>(Landroidx/compose/foundation/gestures/ScrollConfig;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V
-PLandroidx/compose/foundation/gestures/ScrollableKt$mouseWheelScroll$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-PLandroidx/compose/foundation/gestures/ScrollableKt$mouseWheelScroll$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/ScrollableKt$mouseWheelScroll$1;-><init>(Landroidx/compose/foundation/gestures/ScrollConfig;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V
-PLandroidx/compose/foundation/gestures/ScrollableKt$mouseWheelScroll$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-PLandroidx/compose/foundation/gestures/ScrollableKt$mouseWheelScroll$1;->invoke(Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/ScrollableKt$mouseWheelScroll$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/ScrollableKt$mouseWheelScroll$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$1;-><clinit>()V
-PLandroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$1;-><init>()V
-PLandroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$1;->invoke(Landroidx/compose/ui/input/pointer/PointerInputChange;)Ljava/lang/Boolean;
-PLandroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$2$1;-><init>(Landroidx/compose/runtime/State;)V
-PLandroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$2$1;->invoke()Ljava/lang/Boolean;
-PLandroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$2$1;->invoke()Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$3$1$1;-><init>(Landroidx/compose/runtime/State;JLkotlin/coroutines/Continuation;)V
-PLandroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$3$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-PLandroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$3$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$3$1;-><init>(Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V
-PLandroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$3$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$3$1;->invoke-LuvzFrg(Lkotlinx/coroutines/CoroutineScope;JLkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$3$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$scrollContainerInfo$1$1;-><init>(ZLandroidx/compose/foundation/gestures/Orientation;)V
-PLandroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$scrollContainerInfo$1$1;->canScrollVertically()Z
-PLandroidx/compose/foundation/gestures/ScrollableKt$scrollable$2;-><init>(Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/gestures/ScrollableState;ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/OverscrollEffect;Z)V
-PLandroidx/compose/foundation/gestures/ScrollableKt$scrollable$2;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier;
-PLandroidx/compose/foundation/gestures/ScrollableKt$scrollable$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/ScrollableKt$scrollableNestedScrollConnection$1;-><init>(Landroidx/compose/runtime/State;Z)V
-PLandroidx/compose/foundation/gestures/ScrollableKt;-><clinit>()V
-PLandroidx/compose/foundation/gestures/ScrollableKt;->access$awaitScrollEvent(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/ScrollableKt;->access$getNoOpScrollScope$p()Landroidx/compose/foundation/gestures/ScrollScope;
-PLandroidx/compose/foundation/gestures/ScrollableKt;->access$pointerScrollable(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/gestures/Orientation;ZLandroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/OverscrollEffect;ZLandroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier;
-PLandroidx/compose/foundation/gestures/ScrollableKt;->access$scrollableNestedScrollConnection(Landroidx/compose/runtime/State;Z)Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection;
-PLandroidx/compose/foundation/gestures/ScrollableKt;->awaitScrollEvent(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/ScrollableKt;->getDefaultScrollMotionDurationScale()Landroidx/compose/ui/MotionDurationScale;
-PLandroidx/compose/foundation/gestures/ScrollableKt;->mouseWheelScroll(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/State;Landroidx/compose/foundation/gestures/ScrollConfig;)Landroidx/compose/ui/Modifier;
-PLandroidx/compose/foundation/gestures/ScrollableKt;->pointerScrollable(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/gestures/Orientation;ZLandroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/OverscrollEffect;ZLandroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier;
-PLandroidx/compose/foundation/gestures/ScrollableKt;->scrollable(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/OverscrollEffect;ZZLandroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/interaction/MutableInteractionSource;)Landroidx/compose/ui/Modifier;
-PLandroidx/compose/foundation/gestures/ScrollableKt;->scrollableNestedScrollConnection(Landroidx/compose/runtime/State;Z)Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection;
-PLandroidx/compose/foundation/gestures/ScrollableState;->scroll$default(Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/MutatePriority;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/ScrollableStateKt;->ScrollableState(Lkotlin/jvm/functions/Function1;)Landroidx/compose/foundation/gestures/ScrollableState;
-PLandroidx/compose/foundation/gestures/ScrollingLogic$doFlingAnimation$1;-><init>(Landroidx/compose/foundation/gestures/ScrollingLogic;Lkotlin/coroutines/Continuation;)V
-PLandroidx/compose/foundation/gestures/ScrollingLogic$doFlingAnimation$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/ScrollingLogic$doFlingAnimation$2$outerScopeScroll$1;-><init>(Landroidx/compose/foundation/gestures/ScrollingLogic;Landroidx/compose/foundation/gestures/ScrollScope;)V
-PLandroidx/compose/foundation/gestures/ScrollingLogic$doFlingAnimation$2$outerScopeScroll$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/ScrollingLogic$doFlingAnimation$2$outerScopeScroll$1;->invoke-MK-Hz9U(J)J
-PLandroidx/compose/foundation/gestures/ScrollingLogic$doFlingAnimation$2$scope$1;-><init>(Landroidx/compose/foundation/gestures/ScrollingLogic;Lkotlin/jvm/functions/Function1;)V
-PLandroidx/compose/foundation/gestures/ScrollingLogic$doFlingAnimation$2$scope$1;->scrollBy(F)F
-PLandroidx/compose/foundation/gestures/ScrollingLogic$doFlingAnimation$2;-><init>(Landroidx/compose/foundation/gestures/ScrollingLogic;Lkotlin/jvm/internal/Ref$LongRef;JLkotlin/coroutines/Continuation;)V
-PLandroidx/compose/foundation/gestures/ScrollingLogic$doFlingAnimation$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-PLandroidx/compose/foundation/gestures/ScrollingLogic$doFlingAnimation$2;->invoke(Landroidx/compose/foundation/gestures/ScrollScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/ScrollingLogic$doFlingAnimation$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/ScrollingLogic$doFlingAnimation$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/ScrollingLogic$onDragStopped$1;-><init>(Landroidx/compose/foundation/gestures/ScrollingLogic;Lkotlin/coroutines/Continuation;)V
-PLandroidx/compose/foundation/gestures/ScrollingLogic$onDragStopped$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/ScrollingLogic;-><init>(Landroidx/compose/foundation/gestures/Orientation;ZLandroidx/compose/runtime/State;Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/OverscrollEffect;)V
-PLandroidx/compose/foundation/gestures/ScrollingLogic;->dispatchScroll-3eAAhYA(Landroidx/compose/foundation/gestures/ScrollScope;JI)J
-PLandroidx/compose/foundation/gestures/ScrollingLogic;->doFlingAnimation-QWom1Mo(JLkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/ScrollingLogic;->getFlingBehavior()Landroidx/compose/foundation/gestures/FlingBehavior;
-PLandroidx/compose/foundation/gestures/ScrollingLogic;->getScrollableState()Landroidx/compose/foundation/gestures/ScrollableState;
-PLandroidx/compose/foundation/gestures/ScrollingLogic;->getShouldDispatchOverscroll()Z
-PLandroidx/compose/foundation/gestures/ScrollingLogic;->onDragStopped-sF-c-tU(JLkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/ScrollingLogic;->overscrollPostConsumeDelta-OMhpSzk(JJI)V
-PLandroidx/compose/foundation/gestures/ScrollingLogic;->overscrollPreConsumeDelta-OzD1aCk(JI)J
-PLandroidx/compose/foundation/gestures/ScrollingLogic;->registerNestedFling(Z)V
-PLandroidx/compose/foundation/gestures/ScrollingLogic;->reverseIfNeeded(F)F
-PLandroidx/compose/foundation/gestures/ScrollingLogic;->reverseIfNeeded-MK-Hz9U(J)J
-PLandroidx/compose/foundation/gestures/ScrollingLogic;->shouldScrollImmediately()Z
-PLandroidx/compose/foundation/gestures/ScrollingLogic;->singleAxisOffset-MK-Hz9U(J)J
-PLandroidx/compose/foundation/gestures/ScrollingLogic;->singleAxisVelocity-AH228Gc(J)J
-PLandroidx/compose/foundation/gestures/ScrollingLogic;->toFloat-TH1AsA0(J)F
-PLandroidx/compose/foundation/gestures/ScrollingLogic;->toFloat-k-4lQ0M(J)F
-PLandroidx/compose/foundation/gestures/ScrollingLogic;->toOffset-tuRUvjQ(F)J
-PLandroidx/compose/foundation/gestures/ScrollingLogic;->update-QWom1Mo(JF)J
-PLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$2;-><init>(Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Landroidx/compose/ui/input/pointer/PointerInputChange;Lkotlin/coroutines/Continuation;)V
-PLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-PLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$3;-><init>(Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V
-PLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-PLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$4;-><init>(Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V
-PLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$4;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-PLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$4;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+PLandroidx/compose/foundation/MutatorMutex$Mutator;->canInterrupt(Landroidx/compose/foundation/MutatorMutex$Mutator;)Z
+PLandroidx/compose/foundation/MutatorMutex$Mutator;->cancel()V
PLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapGestures$2$1$1;-><init>(Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V
PLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapGestures$2$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
PLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapGestures$2$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
@@ -11840,911 +13634,10 @@
PLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapGestures$2$1$5;-><init>(Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V
PLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapGestures$2$1$5;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
PLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapGestures$2$1$5;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/TapGestureDetectorKt$waitForUpOrCancellation$2;-><init>(Lkotlin/coroutines/Continuation;)V
-PLandroidx/compose/foundation/gestures/TapGestureDetectorKt$waitForUpOrCancellation$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->access$getNoPressGesture$p()Lkotlin/jvm/functions/Function3;
-PLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->waitForUpOrCancellation$default(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Landroidx/compose/ui/input/pointer/PointerEventPass;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/interaction/DragInteraction$Start;-><clinit>()V
-PLandroidx/compose/foundation/interaction/DragInteraction$Start;-><init>()V
-PLandroidx/compose/foundation/interaction/DragInteraction$Stop;-><clinit>()V
-PLandroidx/compose/foundation/interaction/DragInteraction$Stop;-><init>(Landroidx/compose/foundation/interaction/DragInteraction$Start;)V
-PLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;->emit(Landroidx/compose/foundation/interaction/Interaction;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLandroidx/compose/foundation/interaction/PressInteraction$Cancel;-><clinit>()V
-PLandroidx/compose/foundation/interaction/PressInteraction$Cancel;-><init>(Landroidx/compose/foundation/interaction/PressInteraction$Press;)V
-PLandroidx/compose/foundation/interaction/PressInteraction$Cancel;->getPress()Landroidx/compose/foundation/interaction/PressInteraction$Press;
-PLandroidx/compose/foundation/interaction/PressInteraction$Press;->getPressPosition-F1C5BW0()J
-PLandroidx/compose/foundation/interaction/PressInteraction$Release;-><clinit>()V
-PLandroidx/compose/foundation/interaction/PressInteraction$Release;-><init>(Landroidx/compose/foundation/interaction/PressInteraction$Press;)V
-PLandroidx/compose/foundation/interaction/PressInteraction$Release;->getPress()Landroidx/compose/foundation/interaction/PressInteraction$Press;
-PLandroidx/compose/foundation/layout/AndroidWindowInsets;-><init>(ILjava/lang/String;)V
-PLandroidx/compose/foundation/layout/AndroidWindowInsets;->getInsets$foundation_layout_release()Landroidx/core/graphics/Insets;
-PLandroidx/compose/foundation/layout/AndroidWindowInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I
-PLandroidx/compose/foundation/layout/AndroidWindowInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I
-PLandroidx/compose/foundation/layout/AndroidWindowInsets;->getTop(Landroidx/compose/ui/unit/Density;)I
-PLandroidx/compose/foundation/layout/Arrangement$End$1;->arrange(Landroidx/compose/ui/unit/Density;I[ILandroidx/compose/ui/unit/LayoutDirection;[I)V
-PLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;-><init>(FZLkotlin/jvm/functions/Function2;)V
-PLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;-><init>(FZLkotlin/jvm/functions/Function2;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->arrange(Landroidx/compose/ui/unit/Density;I[ILandroidx/compose/ui/unit/LayoutDirection;[I)V
-PLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->arrange(Landroidx/compose/ui/unit/Density;I[I[I)V
-PLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->equals(Ljava/lang/Object;)Z
-PLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->getSpacing-D9Ej5fM()F
-PLandroidx/compose/foundation/layout/Arrangement$spacedBy$1;-><clinit>()V
-PLandroidx/compose/foundation/layout/Arrangement$spacedBy$1;-><init>()V
-PLandroidx/compose/foundation/layout/Arrangement;->getEnd()Landroidx/compose/foundation/layout/Arrangement$Horizontal;
-PLandroidx/compose/foundation/layout/Arrangement;->placeRightOrBottom$foundation_layout_release(I[I[IZ)V
-PLandroidx/compose/foundation/layout/Arrangement;->spacedBy-0680j_4(F)Landroidx/compose/foundation/layout/Arrangement$HorizontalOrVertical;
-PLandroidx/compose/foundation/layout/ColumnKt$columnMeasurePolicy$1$1;-><init>(Landroidx/compose/foundation/layout/Arrangement$Vertical;)V
-PLandroidx/compose/foundation/layout/ColumnKt$columnMeasurePolicy$1$1;->invoke(I[ILandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;[I)V
-PLandroidx/compose/foundation/layout/ColumnKt$columnMeasurePolicy$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/layout/ExcludeInsets;-><init>(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/foundation/layout/WindowInsets;)V
-PLandroidx/compose/foundation/layout/ExcludeInsets;->equals(Ljava/lang/Object;)Z
-PLandroidx/compose/foundation/layout/ExcludeInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I
-PLandroidx/compose/foundation/layout/ExcludeInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I
-PLandroidx/compose/foundation/layout/ExcludeInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I
-PLandroidx/compose/foundation/layout/ExcludeInsets;->getTop(Landroidx/compose/ui/unit/Density;)I
-PLandroidx/compose/foundation/layout/FixedIntInsets;-><init>(IIII)V
-PLandroidx/compose/foundation/layout/FixedIntInsets;->equals(Ljava/lang/Object;)Z
-PLandroidx/compose/foundation/layout/FixedIntInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I
-PLandroidx/compose/foundation/layout/FixedIntInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I
-PLandroidx/compose/foundation/layout/FixedIntInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I
-PLandroidx/compose/foundation/layout/FixedIntInsets;->getTop(Landroidx/compose/ui/unit/Density;)I
-PLandroidx/compose/foundation/layout/InsetsListener;-><init>(Landroidx/compose/foundation/layout/WindowInsetsHolder;)V
-PLandroidx/compose/foundation/layout/InsetsPaddingModifier$measure$1;-><init>(Landroidx/compose/ui/layout/Placeable;II)V
-PLandroidx/compose/foundation/layout/InsetsPaddingModifier$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
-PLandroidx/compose/foundation/layout/InsetsPaddingModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/layout/InsetsPaddingModifier;-><init>(Landroidx/compose/foundation/layout/WindowInsets;Lkotlin/jvm/functions/Function1;)V
-PLandroidx/compose/foundation/layout/InsetsPaddingModifier;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
-PLandroidx/compose/foundation/layout/InsetsPaddingModifier;->getUnconsumedInsets()Landroidx/compose/foundation/layout/WindowInsets;
-PLandroidx/compose/foundation/layout/InsetsPaddingModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
-PLandroidx/compose/foundation/layout/InsetsPaddingModifier;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V
-PLandroidx/compose/foundation/layout/InsetsPaddingModifier;->setConsumedInsets(Landroidx/compose/foundation/layout/WindowInsets;)V
-PLandroidx/compose/foundation/layout/InsetsPaddingModifier;->setUnconsumedInsets(Landroidx/compose/foundation/layout/WindowInsets;)V
-PLandroidx/compose/foundation/layout/InsetsValues;-><init>(IIII)V
-PLandroidx/compose/foundation/layout/LimitInsets;-><init>(Landroidx/compose/foundation/layout/WindowInsets;I)V
-PLandroidx/compose/foundation/layout/LimitInsets;-><init>(Landroidx/compose/foundation/layout/WindowInsets;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/foundation/layout/LimitInsets;->equals(Ljava/lang/Object;)Z
-PLandroidx/compose/foundation/layout/LimitInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I
-PLandroidx/compose/foundation/layout/LimitInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I
-PLandroidx/compose/foundation/layout/LimitInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I
-PLandroidx/compose/foundation/layout/LimitInsets;->getTop(Landroidx/compose/ui/unit/Density;)I
-PLandroidx/compose/foundation/layout/PaddingKt;->PaddingValues-0680j_4(F)Landroidx/compose/foundation/layout/PaddingValues;
-PLandroidx/compose/foundation/layout/SizeKt$createWrapContentHeightModifier$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/layout/SizeKt$createWrapContentHeightModifier$1;->invoke-5SAbXVA(JLandroidx/compose/ui/unit/LayoutDirection;)J
-PLandroidx/compose/foundation/layout/SizeKt;->wrapContentHeight$default(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Alignment$Vertical;ZILjava/lang/Object;)Landroidx/compose/ui/Modifier;
-PLandroidx/compose/foundation/layout/SizeKt;->wrapContentHeight(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Alignment$Vertical;Z)Landroidx/compose/ui/Modifier;
-PLandroidx/compose/foundation/layout/UnionInsets;-><init>(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/foundation/layout/WindowInsets;)V
-PLandroidx/compose/foundation/layout/UnionInsets;->equals(Ljava/lang/Object;)Z
-PLandroidx/compose/foundation/layout/ValueInsets;-><init>(Landroidx/compose/foundation/layout/InsetsValues;Ljava/lang/String;)V
-PLandroidx/compose/foundation/layout/WindowInsets$Companion;-><clinit>()V
-PLandroidx/compose/foundation/layout/WindowInsets$Companion;-><init>()V
-PLandroidx/compose/foundation/layout/WindowInsets;-><clinit>()V
-PLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/foundation/layout/WindowInsetsHolder;Landroid/view/View;)V
-PLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1$invoke$$inlined$onDispose$1;->dispose()V
-PLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1;-><init>(Landroidx/compose/foundation/layout/WindowInsetsHolder;Landroid/view/View;)V
-PLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult;
-PLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion;-><init>()V
-PLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion;->access$systemInsets(Landroidx/compose/foundation/layout/WindowInsetsHolder$Companion;Landroidx/core/view/WindowInsetsCompat;ILjava/lang/String;)Landroidx/compose/foundation/layout/AndroidWindowInsets;
-PLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion;->access$valueInsetsIgnoringVisibility(Landroidx/compose/foundation/layout/WindowInsetsHolder$Companion;Landroidx/core/view/WindowInsetsCompat;ILjava/lang/String;)Landroidx/compose/foundation/layout/ValueInsets;
-PLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion;->current(Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/layout/WindowInsetsHolder;
-PLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion;->getOrCreateFor(Landroid/view/View;)Landroidx/compose/foundation/layout/WindowInsetsHolder;
-PLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion;->systemInsets(Landroidx/core/view/WindowInsetsCompat;ILjava/lang/String;)Landroidx/compose/foundation/layout/AndroidWindowInsets;
-PLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion;->valueInsetsIgnoringVisibility(Landroidx/core/view/WindowInsetsCompat;ILjava/lang/String;)Landroidx/compose/foundation/layout/ValueInsets;
-PLandroidx/compose/foundation/layout/WindowInsetsHolder;-><clinit>()V
-PLandroidx/compose/foundation/layout/WindowInsetsHolder;-><init>(Landroidx/core/view/WindowInsetsCompat;Landroid/view/View;)V
-PLandroidx/compose/foundation/layout/WindowInsetsHolder;-><init>(Landroidx/core/view/WindowInsetsCompat;Landroid/view/View;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/foundation/layout/WindowInsetsHolder;->access$getViewMap$cp()Ljava/util/WeakHashMap;
-PLandroidx/compose/foundation/layout/WindowInsetsHolder;->decrementAccessors(Landroid/view/View;)V
-PLandroidx/compose/foundation/layout/WindowInsetsHolder;->getConsumes()Z
-PLandroidx/compose/foundation/layout/WindowInsetsHolder;->getSystemBars()Landroidx/compose/foundation/layout/AndroidWindowInsets;
-PLandroidx/compose/foundation/layout/WindowInsetsHolder;->incrementAccessors(Landroid/view/View;)V
-PLandroidx/compose/foundation/layout/WindowInsetsKt;->WindowInsets(IIII)Landroidx/compose/foundation/layout/WindowInsets;
-PLandroidx/compose/foundation/layout/WindowInsetsKt;->exclude(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/foundation/layout/WindowInsets;)Landroidx/compose/foundation/layout/WindowInsets;
-PLandroidx/compose/foundation/layout/WindowInsetsKt;->only-bOOhFvg(Landroidx/compose/foundation/layout/WindowInsets;I)Landroidx/compose/foundation/layout/WindowInsets;
-PLandroidx/compose/foundation/layout/WindowInsetsKt;->union(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/foundation/layout/WindowInsets;)Landroidx/compose/foundation/layout/WindowInsets;
-PLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$ModifierLocalConsumedWindowInsets$1;-><clinit>()V
-PLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$ModifierLocalConsumedWindowInsets$1;-><init>()V
-PLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$ModifierLocalConsumedWindowInsets$1;->invoke()Landroidx/compose/foundation/layout/WindowInsets;
-PLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$ModifierLocalConsumedWindowInsets$1;->invoke()Ljava/lang/Object;
-PLandroidx/compose/foundation/layout/WindowInsetsPaddingKt;-><clinit>()V
-PLandroidx/compose/foundation/layout/WindowInsetsPaddingKt;->getModifierLocalConsumedWindowInsets()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
-PLandroidx/compose/foundation/layout/WindowInsetsPaddingKt;->windowInsetsPadding(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/layout/WindowInsets;)Landroidx/compose/ui/Modifier;
-PLandroidx/compose/foundation/layout/WindowInsetsSides$Companion;-><init>()V
-PLandroidx/compose/foundation/layout/WindowInsetsSides$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/foundation/layout/WindowInsetsSides$Companion;->getAllowLeftInLtr-JoeWqyM$foundation_layout_release()I
-PLandroidx/compose/foundation/layout/WindowInsetsSides$Companion;->getAllowRightInLtr-JoeWqyM$foundation_layout_release()I
-PLandroidx/compose/foundation/layout/WindowInsetsSides$Companion;->getBottom-JoeWqyM()I
-PLandroidx/compose/foundation/layout/WindowInsetsSides$Companion;->getHorizontal-JoeWqyM()I
-PLandroidx/compose/foundation/layout/WindowInsetsSides$Companion;->getTop-JoeWqyM()I
-PLandroidx/compose/foundation/layout/WindowInsetsSides;-><clinit>()V
-PLandroidx/compose/foundation/layout/WindowInsetsSides;->access$getAllowLeftInLtr$cp()I
-PLandroidx/compose/foundation/layout/WindowInsetsSides;->access$getAllowRightInLtr$cp()I
-PLandroidx/compose/foundation/layout/WindowInsetsSides;->access$getBottom$cp()I
-PLandroidx/compose/foundation/layout/WindowInsetsSides;->access$getHorizontal$cp()I
-PLandroidx/compose/foundation/layout/WindowInsetsSides;->access$getTop$cp()I
-PLandroidx/compose/foundation/layout/WindowInsetsSides;->constructor-impl(I)I
-PLandroidx/compose/foundation/layout/WindowInsetsSides;->hasAny-bkgdKaI$foundation_layout_release(II)Z
-PLandroidx/compose/foundation/layout/WindowInsetsSides;->plus-gK_yJZ4(II)I
-PLandroidx/compose/foundation/layout/WindowInsets_androidKt;->ValueInsets(Landroidx/core/graphics/Insets;Ljava/lang/String;)Landroidx/compose/foundation/layout/ValueInsets;
-PLandroidx/compose/foundation/layout/WindowInsets_androidKt;->getSystemBars(Landroidx/compose/foundation/layout/WindowInsets$Companion;Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/layout/WindowInsets;
-PLandroidx/compose/foundation/layout/WindowInsets_androidKt;->toInsetsValues(Landroidx/core/graphics/Insets;)Landroidx/compose/foundation/layout/InsetsValues;
-PLandroidx/compose/foundation/layout/WrapContentModifier$measure$1;-><init>(Landroidx/compose/foundation/layout/WrapContentModifier;ILandroidx/compose/ui/layout/Placeable;ILandroidx/compose/ui/layout/MeasureScope;)V
-PLandroidx/compose/foundation/layout/WrapContentModifier$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
-PLandroidx/compose/foundation/layout/WrapContentModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/layout/WrapContentModifier;->access$getAlignmentCallback$p(Landroidx/compose/foundation/layout/WrapContentModifier;)Lkotlin/jvm/functions/Function2;
-PLandroidx/compose/foundation/layout/WrapContentModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
-PLandroidx/compose/foundation/lazy/AwaitFirstLayoutModifier$waitForFirstLayout$1;-><init>(Landroidx/compose/foundation/lazy/AwaitFirstLayoutModifier;Lkotlin/coroutines/Continuation;)V
-PLandroidx/compose/foundation/lazy/AwaitFirstLayoutModifier;-><init>()V
-PLandroidx/compose/foundation/lazy/AwaitFirstLayoutModifier;->onGloballyPositioned(Landroidx/compose/ui/layout/LayoutCoordinates;)V
-PLandroidx/compose/foundation/lazy/AwaitFirstLayoutModifier;->waitForFirstLayout(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLandroidx/compose/foundation/lazy/DataIndex;-><init>(I)V
-PLandroidx/compose/foundation/lazy/DataIndex;->box-impl(I)Landroidx/compose/foundation/lazy/DataIndex;
-PLandroidx/compose/foundation/lazy/DataIndex;->constructor-impl(I)I
-PLandroidx/compose/foundation/lazy/DataIndex;->equals(Ljava/lang/Object;)Z
-PLandroidx/compose/foundation/lazy/DataIndex;->equals-impl(ILjava/lang/Object;)Z
-PLandroidx/compose/foundation/lazy/DataIndex;->equals-impl0(II)Z
-PLandroidx/compose/foundation/lazy/DataIndex;->unbox-impl()I
-PLandroidx/compose/foundation/lazy/EmptyLazyListLayoutInfo;-><clinit>()V
-PLandroidx/compose/foundation/lazy/EmptyLazyListLayoutInfo;-><init>()V
-PLandroidx/compose/foundation/lazy/LazyBeyondBoundsModifierKt;->lazyListBeyondBoundsModifier(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/LazyListBeyondBoundsInfo;ZLandroidx/compose/foundation/gestures/Orientation;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier;
-PLandroidx/compose/foundation/lazy/LazyDslKt;->LazyColumn(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/layout/PaddingValues;ZLandroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/foundation/gestures/FlingBehavior;ZLkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V
-PLandroidx/compose/foundation/lazy/LazyItemScopeImpl;-><init>()V
-PLandroidx/compose/foundation/lazy/LazyItemScopeImpl;->setMaxSize(II)V
-PLandroidx/compose/foundation/lazy/LazyListAnimateScrollScope;-><init>(Landroidx/compose/foundation/lazy/LazyListState;)V
-PLandroidx/compose/foundation/lazy/LazyListBeyondBoundsInfo;-><init>()V
-PLandroidx/compose/foundation/lazy/LazyListBeyondBoundsInfo;->hasIntervals()Z
-PLandroidx/compose/foundation/lazy/LazyListBeyondBoundsModifierLocal;-><init>(Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/LazyListBeyondBoundsInfo;ZLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/foundation/gestures/Orientation;)V
-PLandroidx/compose/foundation/lazy/LazyListBeyondBoundsModifierLocal;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
-PLandroidx/compose/foundation/lazy/LazyListBeyondBoundsModifierLocal;->getValue()Landroidx/compose/ui/layout/BeyondBoundsLayout;
-PLandroidx/compose/foundation/lazy/LazyListBeyondBoundsModifierLocal;->getValue()Ljava/lang/Object;
-PLandroidx/compose/foundation/lazy/LazyListIntervalContent;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function4;)V
-PLandroidx/compose/foundation/lazy/LazyListIntervalContent;->getItem()Lkotlin/jvm/functions/Function4;
-PLandroidx/compose/foundation/lazy/LazyListIntervalContent;->getKey()Lkotlin/jvm/functions/Function1;
-PLandroidx/compose/foundation/lazy/LazyListIntervalContent;->getType()Lkotlin/jvm/functions/Function1;
-PLandroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;-><init>(Lkotlinx/coroutines/CoroutineScope;Z)V
-PLandroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;->onMeasured(IIILjava/util/List;Landroidx/compose/foundation/lazy/LazyMeasuredItemProvider;)V
-PLandroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;->reset()V
-PLandroidx/compose/foundation/lazy/LazyListItemProviderImpl$1;-><init>(Landroidx/compose/foundation/lazy/LazyItemScopeImpl;)V
-PLandroidx/compose/foundation/lazy/LazyListItemProviderImpl$1;->invoke(Landroidx/compose/foundation/lazy/LazyListIntervalContent;ILandroidx/compose/runtime/Composer;I)V
-PLandroidx/compose/foundation/lazy/LazyListItemProviderImpl$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;-><init>(Landroidx/compose/foundation/lazy/layout/IntervalList;Lkotlin/ranges/IntRange;Ljava/util/List;Landroidx/compose/foundation/lazy/LazyItemScopeImpl;)V
-PLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->Item(ILandroidx/compose/runtime/Composer;I)V
-PLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getContentType(I)Ljava/lang/Object;
-PLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getHeaderIndexes()Ljava/util/List;
-PLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getItemCount()I
-PLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getItemScope()Landroidx/compose/foundation/lazy/LazyItemScopeImpl;
-PLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getKey(I)Ljava/lang/Object;
-PLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getKeyToIndexMap()Ljava/util/Map;
-PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;-><init>(Landroidx/compose/runtime/State;)V
-PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;->Item(ILandroidx/compose/runtime/Composer;I)V
-PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;->getContentType(I)Ljava/lang/Object;
-PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;->getHeaderIndexes()Ljava/util/List;
-PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;->getItemCount()I
-PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;->getItemScope()Landroidx/compose/foundation/lazy/LazyItemScopeImpl;
-PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;->getKey(I)Ljava/lang/Object;
-PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;->getKeyToIndexMap()Ljava/util/Map;
-PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$itemProviderState$1;-><init>(Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/foundation/lazy/LazyItemScopeImpl;)V
-PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$itemProviderState$1;->invoke()Landroidx/compose/foundation/lazy/LazyListItemProviderImpl;
-PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$itemProviderState$1;->invoke()Ljava/lang/Object;
-PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$1$1;-><init>(Landroidx/compose/foundation/lazy/LazyListState;)V
-PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$1$1;->invoke()Ljava/lang/Integer;
-PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$1$1;->invoke()Ljava/lang/Object;
-PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$2;-><clinit>()V
-PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$2;-><init>()V
-PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$2;->invoke()Ljava/lang/Integer;
-PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$2;->invoke()Ljava/lang/Object;
-PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$3;-><clinit>()V
-PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$3;-><init>()V
-PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$3;->invoke()Ljava/lang/Integer;
-PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$3;->invoke()Ljava/lang/Object;
-PLandroidx/compose/foundation/lazy/LazyListItemProviderKt;->rememberLazyListItemProvider(Landroidx/compose/foundation/lazy/LazyListState;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/lazy/LazyListItemProvider;
-PLandroidx/compose/foundation/lazy/LazyListKt$ScrollPositionUpdater$1;-><init>(Landroidx/compose/foundation/lazy/LazyListItemProvider;Landroidx/compose/foundation/lazy/LazyListState;I)V
-PLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$2;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScope;JII)V
-PLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$2;->invoke(IILkotlin/jvm/functions/Function1;)Landroidx/compose/ui/layout/MeasureResult;
-PLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;-><init>(IILandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScope;ZLandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;ZIILandroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;J)V
-PLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1;-><init>(ZLandroidx/compose/foundation/layout/PaddingValues;ZLandroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/LazyListItemProvider;Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;Landroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;Landroidx/compose/foundation/lazy/LazyListBeyondBoundsInfo;ILandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;)V
-PLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/lazy/LazyListKt;->LazyList(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/layout/PaddingValues;ZZLandroidx/compose/foundation/gestures/FlingBehavior;ZILandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/ui/Alignment$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;III)V
-PLandroidx/compose/foundation/lazy/LazyListKt;->ScrollPositionUpdater(Landroidx/compose/foundation/lazy/LazyListItemProvider;Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/runtime/Composer;I)V
-PLandroidx/compose/foundation/lazy/LazyListKt;->rememberLazyListMeasurePolicy(Landroidx/compose/foundation/lazy/LazyListItemProvider;Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/LazyListBeyondBoundsInfo;Landroidx/compose/foundation/layout/PaddingValues;ZZILandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;Landroidx/compose/runtime/Composer;III)Lkotlin/jvm/functions/Function2;
-PLandroidx/compose/foundation/lazy/LazyListMeasureKt$measureLazyList$5;-><init>(Ljava/util/List;Landroidx/compose/foundation/lazy/LazyListPositionedItem;)V
-PLandroidx/compose/foundation/lazy/LazyListMeasureKt$measureLazyList$5;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
-PLandroidx/compose/foundation/lazy/LazyListMeasureKt$measureLazyList$5;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/lazy/LazyListMeasureKt;-><clinit>()V
-PLandroidx/compose/foundation/lazy/LazyListMeasureKt;->calculateItemsOffsets(Ljava/util/List;Ljava/util/List;Ljava/util/List;IIIIIZLandroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;ZLandroidx/compose/ui/unit/Density;)Ljava/util/List;
-PLandroidx/compose/foundation/lazy/LazyListMeasureKt;->createItemsAfterList(Landroidx/compose/foundation/lazy/LazyListBeyondBoundsInfo;Ljava/util/List;Landroidx/compose/foundation/lazy/LazyMeasuredItemProvider;II)Ljava/util/List;
-PLandroidx/compose/foundation/lazy/LazyListMeasureKt;->createItemsBeforeList-aZfr-iw(Landroidx/compose/foundation/lazy/LazyListBeyondBoundsInfo;ILandroidx/compose/foundation/lazy/LazyMeasuredItemProvider;II)Ljava/util/List;
-PLandroidx/compose/foundation/lazy/LazyListMeasureKt;->getNotInEmptyRange(I)Z
-PLandroidx/compose/foundation/lazy/LazyListMeasureResult;-><init>(Landroidx/compose/foundation/lazy/LazyMeasuredItem;IZFLandroidx/compose/ui/layout/MeasureResult;Ljava/util/List;IIIZLandroidx/compose/foundation/gestures/Orientation;I)V
-PLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getAlignmentLines()Ljava/util/Map;
-PLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getCanScrollForward()Z
-PLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getConsumedScroll()F
-PLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getFirstVisibleItem()Landroidx/compose/foundation/lazy/LazyMeasuredItem;
-PLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getFirstVisibleItemScrollOffset()I
-PLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getHeight()I
-PLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getTotalItemsCount()I
-PLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getVisibleItemsInfo()Ljava/util/List;
-PLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getWidth()I
-PLandroidx/compose/foundation/lazy/LazyListMeasureResult;->placeChildren()V
-PLandroidx/compose/foundation/lazy/LazyListPinningModifier$Companion$EmptyPinnedItemsHandle$1;-><init>()V
-PLandroidx/compose/foundation/lazy/LazyListPinningModifier$Companion;-><init>()V
-PLandroidx/compose/foundation/lazy/LazyListPinningModifier$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/foundation/lazy/LazyListPinningModifier;-><clinit>()V
-PLandroidx/compose/foundation/lazy/LazyListPinningModifier;-><init>(Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/LazyListBeyondBoundsInfo;)V
-PLandroidx/compose/foundation/lazy/LazyListPinningModifier;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
-PLandroidx/compose/foundation/lazy/LazyListPinningModifier;->getValue()Landroidx/compose/foundation/lazy/layout/PinnableParent;
-PLandroidx/compose/foundation/lazy/LazyListPinningModifier;->getValue()Ljava/lang/Object;
-PLandroidx/compose/foundation/lazy/LazyListPinningModifier;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V
-PLandroidx/compose/foundation/lazy/LazyListPinningModifierKt;->lazyListPinningModifier(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/LazyListBeyondBoundsInfo;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier;
-PLandroidx/compose/foundation/lazy/LazyListPlaceableWrapper;-><init>(JLandroidx/compose/ui/layout/Placeable;)V
-PLandroidx/compose/foundation/lazy/LazyListPlaceableWrapper;-><init>(JLandroidx/compose/ui/layout/Placeable;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/foundation/lazy/LazyListPlaceableWrapper;->getOffset-nOcc-ac()J
-PLandroidx/compose/foundation/lazy/LazyListPlaceableWrapper;->getPlaceable()Landroidx/compose/ui/layout/Placeable;
-PLandroidx/compose/foundation/lazy/LazyListPositionedItem;-><init>(IILjava/lang/Object;IIIZLjava/util/List;Landroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;JZI)V
-PLandroidx/compose/foundation/lazy/LazyListPositionedItem;-><init>(IILjava/lang/Object;IIIZLjava/util/List;Landroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;JZILkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/foundation/lazy/LazyListPositionedItem;->getAnimationSpec(I)Landroidx/compose/animation/core/FiniteAnimationSpec;
-PLandroidx/compose/foundation/lazy/LazyListPositionedItem;->getHasAnimations()Z
-PLandroidx/compose/foundation/lazy/LazyListPositionedItem;->getIndex()I
-PLandroidx/compose/foundation/lazy/LazyListPositionedItem;->getMainAxisSize(Landroidx/compose/ui/layout/Placeable;)I
-PLandroidx/compose/foundation/lazy/LazyListPositionedItem;->getOffset-Bjo55l4(I)J
-PLandroidx/compose/foundation/lazy/LazyListPositionedItem;->getPlaceablesCount()I
-PLandroidx/compose/foundation/lazy/LazyListScope;->item$default(Landroidx/compose/foundation/lazy/LazyListScope;Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function3;ILjava/lang/Object;)V
-PLandroidx/compose/foundation/lazy/LazyListScopeImpl$item$2;-><init>(Ljava/lang/Object;)V
-PLandroidx/compose/foundation/lazy/LazyListScopeImpl$item$2;->invoke(I)Ljava/lang/Object;
-PLandroidx/compose/foundation/lazy/LazyListScopeImpl$item$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/lazy/LazyListScopeImpl$item$3;-><init>(Lkotlin/jvm/functions/Function3;)V
-PLandroidx/compose/foundation/lazy/LazyListScopeImpl$item$3;->invoke(Landroidx/compose/foundation/lazy/LazyItemScope;ILandroidx/compose/runtime/Composer;I)V
-PLandroidx/compose/foundation/lazy/LazyListScopeImpl$item$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/lazy/LazyListScopeImpl;-><init>()V
-PLandroidx/compose/foundation/lazy/LazyListScopeImpl;->getHeaderIndexes()Ljava/util/List;
-PLandroidx/compose/foundation/lazy/LazyListScopeImpl;->getIntervals()Landroidx/compose/foundation/lazy/layout/IntervalList;
-PLandroidx/compose/foundation/lazy/LazyListScopeImpl;->item(Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function3;)V
-PLandroidx/compose/foundation/lazy/LazyListScopeImpl;->items(ILkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function4;)V
-PLandroidx/compose/foundation/lazy/LazyListScrollPosition;-><init>(II)V
-PLandroidx/compose/foundation/lazy/LazyListScrollPosition;->getIndex-jQJCoq8()I
-PLandroidx/compose/foundation/lazy/LazyListScrollPosition;->getScrollOffset()I
-PLandroidx/compose/foundation/lazy/LazyListScrollPosition;->setIndex-ZjPyQlc(I)V
-PLandroidx/compose/foundation/lazy/LazyListScrollPosition;->setScrollOffset(I)V
-PLandroidx/compose/foundation/lazy/LazyListScrollPosition;->update-AhXoVpI(II)V
-PLandroidx/compose/foundation/lazy/LazyListScrollPosition;->updateFromMeasureResult(Landroidx/compose/foundation/lazy/LazyListMeasureResult;)V
-PLandroidx/compose/foundation/lazy/LazyListScrollPosition;->updateScrollPositionIfTheFirstItemWasMoved(Landroidx/compose/foundation/lazy/LazyListItemProvider;)V
-PLandroidx/compose/foundation/lazy/LazyListState$Companion$Saver$1;-><clinit>()V
-PLandroidx/compose/foundation/lazy/LazyListState$Companion$Saver$1;-><init>()V
-PLandroidx/compose/foundation/lazy/LazyListState$Companion$Saver$1;->invoke(Landroidx/compose/runtime/saveable/SaverScope;Landroidx/compose/foundation/lazy/LazyListState;)Ljava/util/List;
-PLandroidx/compose/foundation/lazy/LazyListState$Companion$Saver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/lazy/LazyListState$Companion$Saver$2;-><clinit>()V
-PLandroidx/compose/foundation/lazy/LazyListState$Companion$Saver$2;-><init>()V
-PLandroidx/compose/foundation/lazy/LazyListState$Companion;-><init>()V
-PLandroidx/compose/foundation/lazy/LazyListState$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/foundation/lazy/LazyListState$Companion;->getSaver()Landroidx/compose/runtime/saveable/Saver;
-PLandroidx/compose/foundation/lazy/LazyListState$remeasurementModifier$1;-><init>(Landroidx/compose/foundation/lazy/LazyListState;)V
-PLandroidx/compose/foundation/lazy/LazyListState$remeasurementModifier$1;->onRemeasurementAvailable(Landroidx/compose/ui/layout/Remeasurement;)V
-PLandroidx/compose/foundation/lazy/LazyListState$scroll$1;-><init>(Landroidx/compose/foundation/lazy/LazyListState;Lkotlin/coroutines/Continuation;)V
-PLandroidx/compose/foundation/lazy/LazyListState$scroll$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/lazy/LazyListState$scrollableState$1;-><init>(Landroidx/compose/foundation/lazy/LazyListState;)V
-PLandroidx/compose/foundation/lazy/LazyListState$scrollableState$1;->invoke(F)Ljava/lang/Float;
-PLandroidx/compose/foundation/lazy/LazyListState$scrollableState$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/lazy/LazyListState;-><clinit>()V
-PLandroidx/compose/foundation/lazy/LazyListState;-><init>(II)V
-PLandroidx/compose/foundation/lazy/LazyListState;->access$getSaver$cp()Landroidx/compose/runtime/saveable/Saver;
-PLandroidx/compose/foundation/lazy/LazyListState;->access$setRemeasurement(Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/ui/layout/Remeasurement;)V
-PLandroidx/compose/foundation/lazy/LazyListState;->applyMeasureResult$foundation_release(Landroidx/compose/foundation/lazy/LazyListMeasureResult;)V
-PLandroidx/compose/foundation/lazy/LazyListState;->cancelPrefetchIfVisibleItemsChanged(Landroidx/compose/foundation/lazy/LazyListLayoutInfo;)V
-PLandroidx/compose/foundation/lazy/LazyListState;->getAwaitLayoutModifier$foundation_release()Landroidx/compose/foundation/lazy/AwaitFirstLayoutModifier;
-PLandroidx/compose/foundation/lazy/LazyListState;->getCanScrollBackward()Z
-PLandroidx/compose/foundation/lazy/LazyListState;->getCanScrollForward()Z
-PLandroidx/compose/foundation/lazy/LazyListState;->getFirstVisibleItemIndex()I
-PLandroidx/compose/foundation/lazy/LazyListState;->getFirstVisibleItemScrollOffset()I
-PLandroidx/compose/foundation/lazy/LazyListState;->getInternalInteractionSource$foundation_release()Landroidx/compose/foundation/interaction/MutableInteractionSource;
-PLandroidx/compose/foundation/lazy/LazyListState;->getLayoutInfo()Landroidx/compose/foundation/lazy/LazyListLayoutInfo;
-PLandroidx/compose/foundation/lazy/LazyListState;->getPrefetchState$foundation_release()Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;
-PLandroidx/compose/foundation/lazy/LazyListState;->getPremeasureConstraints-msEJaDk$foundation_release()J
-PLandroidx/compose/foundation/lazy/LazyListState;->getRemeasurement$foundation_release()Landroidx/compose/ui/layout/Remeasurement;
-PLandroidx/compose/foundation/lazy/LazyListState;->getRemeasurementModifier$foundation_release()Landroidx/compose/ui/layout/RemeasurementModifier;
-PLandroidx/compose/foundation/lazy/LazyListState;->getScrollToBeConsumed$foundation_release()F
-PLandroidx/compose/foundation/lazy/LazyListState;->isScrollInProgress()Z
-PLandroidx/compose/foundation/lazy/LazyListState;->notifyPrefetch(F)V
-PLandroidx/compose/foundation/lazy/LazyListState;->onScroll$foundation_release(F)F
-PLandroidx/compose/foundation/lazy/LazyListState;->scroll(Landroidx/compose/foundation/MutatePriority;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLandroidx/compose/foundation/lazy/LazyListState;->setCanScrollBackward(Z)V
-PLandroidx/compose/foundation/lazy/LazyListState;->setCanScrollForward(Z)V
-PLandroidx/compose/foundation/lazy/LazyListState;->setDensity$foundation_release(Landroidx/compose/ui/unit/Density;)V
-PLandroidx/compose/foundation/lazy/LazyListState;->setPlacementAnimator$foundation_release(Landroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;)V
-PLandroidx/compose/foundation/lazy/LazyListState;->setPremeasureConstraints-BRTryo0$foundation_release(J)V
-PLandroidx/compose/foundation/lazy/LazyListState;->setRemeasurement(Landroidx/compose/ui/layout/Remeasurement;)V
-PLandroidx/compose/foundation/lazy/LazyListState;->updateScrollPositionIfTheFirstItemWasMoved$foundation_release(Landroidx/compose/foundation/lazy/LazyListItemProvider;)V
-PLandroidx/compose/foundation/lazy/LazyListStateKt$rememberLazyListState$1$1;-><init>(II)V
-PLandroidx/compose/foundation/lazy/LazyListStateKt$rememberLazyListState$1$1;->invoke()Landroidx/compose/foundation/lazy/LazyListState;
-PLandroidx/compose/foundation/lazy/LazyListStateKt$rememberLazyListState$1$1;->invoke()Ljava/lang/Object;
-PLandroidx/compose/foundation/lazy/LazyListStateKt;->rememberLazyListState(IILandroidx/compose/runtime/Composer;II)Landroidx/compose/foundation/lazy/LazyListState;
-PLandroidx/compose/foundation/lazy/LazyMeasuredItem;-><init>(ILjava/util/List;ZLandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;Landroidx/compose/ui/unit/LayoutDirection;ZIILandroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;IJLjava/lang/Object;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/foundation/lazy/LazyMeasuredItem;->getCrossAxisSize()I
-PLandroidx/compose/foundation/lazy/LazyMeasuredItem;->getIndex()I
-PLandroidx/compose/foundation/lazy/LazyMeasuredItem;->getKey()Ljava/lang/Object;
-PLandroidx/compose/foundation/lazy/LazyMeasuredItem;->getSizeWithSpacings()I
-PLandroidx/compose/foundation/lazy/LazyMeasuredItem;->position(III)Landroidx/compose/foundation/lazy/LazyListPositionedItem;
-PLandroidx/compose/foundation/lazy/LazyMeasuredItemProvider;-><init>(JZLandroidx/compose/foundation/lazy/LazyListItemProvider;Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScope;Landroidx/compose/foundation/lazy/MeasuredItemFactory;)V
-PLandroidx/compose/foundation/lazy/LazyMeasuredItemProvider;-><init>(JZLandroidx/compose/foundation/lazy/LazyListItemProvider;Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScope;Landroidx/compose/foundation/lazy/MeasuredItemFactory;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/foundation/lazy/LazyMeasuredItemProvider;->getAndMeasure-ZjPyQlc(I)Landroidx/compose/foundation/lazy/LazyMeasuredItem;
-PLandroidx/compose/foundation/lazy/LazyMeasuredItemProvider;->getChildConstraints-msEJaDk()J
-PLandroidx/compose/foundation/lazy/LazySemanticsKt$rememberLazyListSemanticState$1$1$scrollAxisRange$1;-><init>(Landroidx/compose/foundation/lazy/LazyListState;)V
-PLandroidx/compose/foundation/lazy/LazySemanticsKt$rememberLazyListSemanticState$1$1$scrollAxisRange$2;-><init>(Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;)V
-PLandroidx/compose/foundation/lazy/LazySemanticsKt$rememberLazyListSemanticState$1$1;-><init>(ZLandroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;Z)V
-PLandroidx/compose/foundation/lazy/LazySemanticsKt$rememberLazyListSemanticState$1$1;->collectionInfo()Landroidx/compose/ui/semantics/CollectionInfo;
-PLandroidx/compose/foundation/lazy/LazySemanticsKt$rememberLazyListSemanticState$1$1;->scrollAxisRange()Landroidx/compose/ui/semantics/ScrollAxisRange;
-PLandroidx/compose/foundation/lazy/LazySemanticsKt;->rememberLazyListSemanticState(Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;ZZLandroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticState;
-PLandroidx/compose/foundation/lazy/layout/DefaultDelegatingLazyLayoutItemProvider$Item$1;-><init>(Landroidx/compose/foundation/lazy/layout/DefaultDelegatingLazyLayoutItemProvider;II)V
-PLandroidx/compose/foundation/lazy/layout/DefaultDelegatingLazyLayoutItemProvider;-><init>(Landroidx/compose/runtime/State;)V
-PLandroidx/compose/foundation/lazy/layout/DefaultDelegatingLazyLayoutItemProvider;->Item(ILandroidx/compose/runtime/Composer;I)V
-PLandroidx/compose/foundation/lazy/layout/DefaultDelegatingLazyLayoutItemProvider;->getContentType(I)Ljava/lang/Object;
-PLandroidx/compose/foundation/lazy/layout/DefaultDelegatingLazyLayoutItemProvider;->getItemCount()I
-PLandroidx/compose/foundation/lazy/layout/DefaultDelegatingLazyLayoutItemProvider;->getKey(I)Ljava/lang/Object;
-PLandroidx/compose/foundation/lazy/layout/DefaultDelegatingLazyLayoutItemProvider;->getKeyToIndexMap()Ljava/util/Map;
-PLandroidx/compose/foundation/lazy/layout/DefaultLazyKey$Companion$CREATOR$1;-><init>()V
-PLandroidx/compose/foundation/lazy/layout/DefaultLazyKey$Companion;-><init>()V
-PLandroidx/compose/foundation/lazy/layout/DefaultLazyKey$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;-><clinit>()V
-PLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;-><init>(I)V
-PLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;->equals(Ljava/lang/Object;)Z
-PLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;->hashCode()I
-PLandroidx/compose/foundation/lazy/layout/DefaultLazyLayoutItemsProvider$generateKeyToIndexMap$1$1;-><init>(IILjava/util/HashMap;)V
-PLandroidx/compose/foundation/lazy/layout/DefaultLazyLayoutItemsProvider$generateKeyToIndexMap$1$1;->invoke(Landroidx/compose/foundation/lazy/layout/IntervalList$Interval;)V
-PLandroidx/compose/foundation/lazy/layout/DefaultLazyLayoutItemsProvider$generateKeyToIndexMap$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/lazy/layout/DefaultLazyLayoutItemsProvider;-><init>(Lkotlin/jvm/functions/Function4;Landroidx/compose/foundation/lazy/layout/IntervalList;Lkotlin/ranges/IntRange;)V
-PLandroidx/compose/foundation/lazy/layout/DefaultLazyLayoutItemsProvider;->Item(ILandroidx/compose/runtime/Composer;I)V
-PLandroidx/compose/foundation/lazy/layout/DefaultLazyLayoutItemsProvider;->generateKeyToIndexMap(Lkotlin/ranges/IntRange;Landroidx/compose/foundation/lazy/layout/IntervalList;)Ljava/util/Map;
-PLandroidx/compose/foundation/lazy/layout/DefaultLazyLayoutItemsProvider;->getContentType(I)Ljava/lang/Object;
-PLandroidx/compose/foundation/lazy/layout/DefaultLazyLayoutItemsProvider;->getItemCount()I
-PLandroidx/compose/foundation/lazy/layout/DefaultLazyLayoutItemsProvider;->getKeyToIndexMap()Ljava/util/Map;
-PLandroidx/compose/foundation/lazy/layout/IntervalList$Interval;-><clinit>()V
-PLandroidx/compose/foundation/lazy/layout/IntervalList$Interval;-><init>(IILjava/lang/Object;)V
-PLandroidx/compose/foundation/lazy/layout/IntervalList$Interval;->getSize()I
-PLandroidx/compose/foundation/lazy/layout/IntervalList$Interval;->getStartIndex()I
-PLandroidx/compose/foundation/lazy/layout/IntervalList$Interval;->getValue()Ljava/lang/Object;
-PLandroidx/compose/foundation/lazy/layout/IntervalListKt;->access$binarySearch(Landroidx/compose/runtime/collection/MutableVector;I)I
-PLandroidx/compose/foundation/lazy/layout/IntervalListKt;->binarySearch(Landroidx/compose/runtime/collection/MutableVector;I)I
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$1;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;I)V
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$1;->invoke(Landroidx/compose/runtime/Composer;I)V
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$2$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;)V
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$2$invoke$$inlined$onDispose$1;->dispose()V
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$2;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;)V
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$2;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult;
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;)V
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1;->invoke(Landroidx/compose/runtime/Composer;I)V
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;ILjava/lang/Object;Ljava/lang/Object;)V
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;->access$set_content$p(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;Lkotlin/jvm/functions/Function2;)V
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;->createContentLambda()Lkotlin/jvm/functions/Function2;
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;->getContent()Lkotlin/jvm/functions/Function2;
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;->getKey()Ljava/lang/Object;
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;->getLastKnownIndex()I
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;->getType()Ljava/lang/Object;
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;-><init>(Landroidx/compose/runtime/saveable/SaveableStateHolder;Lkotlin/jvm/functions/Function0;)V
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;->access$getSaveableStateHolder$p(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;)Landroidx/compose/runtime/saveable/SaveableStateHolder;
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;->getContentType(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;->getItemProvider()Lkotlin/jvm/functions/Function0;
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutItemProviderKt;->DelegatingLazyLayoutItemProvider(Landroidx/compose/runtime/State;)Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutItemProviderKt;->LazyLayoutItemProvider(Landroidx/compose/foundation/lazy/layout/IntervalList;Lkotlin/ranges/IntRange;Lkotlin/jvm/functions/Function4;)Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutItemProviderKt;->findIndexByKey(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;Ljava/lang/Object;I)I
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutItemReusePolicy;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;)V
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutItemReusePolicy;->areCompatible(Ljava/lang/Object;Ljava/lang/Object;)Z
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutItemReusePolicy;->getSlotsToRetain(Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;)V
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$1$2$1;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Lkotlin/jvm/functions/Function2;)V
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$1$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$1$2$1;->invoke-0kLqBqw(Landroidx/compose/ui/layout/SubcomposeMeasureScope;J)Landroidx/compose/ui/layout/MeasureResult;
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$1$itemContentFactory$1$1;-><init>(Landroidx/compose/runtime/State;)V
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$1$itemContentFactory$1$1;->invoke()Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$1$itemContentFactory$1$1;->invoke()Ljava/lang/Object;
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$1;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;ILandroidx/compose/runtime/State;)V
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$1;->invoke(Landroidx/compose/runtime/saveable/SaveableStateHolder;Landroidx/compose/runtime/Composer;I)V
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutKt;->LazyLayout(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Landroidx/compose/ui/layout/SubcomposeMeasureScope;)V
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection;
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->layout(IILjava/util/Map;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/layout/MeasureResult;
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->roundToPx-0680j_4(F)I
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;-><init>()V
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;->getPrefetcher$foundation_release()Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState$Prefetcher;
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;->schedulePrefetch-0kLqBqw(IJ)Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState$PrefetchHandle;
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;->setPrefetcher$foundation_release(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState$Prefetcher;)V
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$Companion;-><init>()V
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$Companion;->access$calculateFrameIntervalIfNeeded(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$Companion;Landroid/view/View;)V
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$Companion;->calculateFrameIntervalIfNeeded(Landroid/view/View;)V
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$PrefetchRequest;-><init>(IJ)V
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$PrefetchRequest;-><init>(IJLkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$PrefetchRequest;->cancel()V
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$PrefetchRequest;->getCanceled()Z
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$PrefetchRequest;->getConstraints-msEJaDk()J
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$PrefetchRequest;->getIndex()I
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$PrefetchRequest;->getMeasured()Z
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$PrefetchRequest;->getPrecomposeHandle()Landroidx/compose/ui/layout/SubcomposeLayoutState$PrecomposedSlotHandle;
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$PrefetchRequest;->setPrecomposeHandle(Landroidx/compose/ui/layout/SubcomposeLayoutState$PrecomposedSlotHandle;)V
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;-><clinit>()V
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Landroid/view/View;)V
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->access$getFrameIntervalNs$cp()J
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->access$setFrameIntervalNs$cp(J)V
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->calculateAverageTime(JJ)J
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->doFrame(J)V
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->enoughTimeLeft(JJJ)Z
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->onForgotten()V
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->onRemembered()V
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->run()V
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->schedulePrefetch-0kLqBqw(IJ)Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState$PrefetchHandle;
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher_androidKt;->LazyLayoutPrefetcher(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/runtime/Composer;I)V
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$1;-><init>(Lkotlin/jvm/functions/Function1;ZLandroidx/compose/ui/semantics/ScrollAxisRange;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/semantics/CollectionInfo;)V
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$1;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$indexForKeyMapping$1;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;)V
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$scrollByAction$1;-><init>(ZLkotlinx/coroutines/CoroutineScope;Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticState;)V
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$scrollToIndexAction$1;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticState;)V
-PLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt;->lazyLayoutSemantics(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticState;Landroidx/compose/foundation/gestures/Orientation;ZLandroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier;
-PLandroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt$rememberLazyNearestItemsRangeState$1$1$1;-><init>(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;)V
-PLandroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt$rememberLazyNearestItemsRangeState$1$1$1;->invoke()Ljava/lang/Object;
-PLandroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt$rememberLazyNearestItemsRangeState$1$1$1;->invoke()Lkotlin/ranges/IntRange;
-PLandroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt$rememberLazyNearestItemsRangeState$1$1$2;-><init>(Landroidx/compose/runtime/MutableState;)V
-PLandroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt$rememberLazyNearestItemsRangeState$1$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLandroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt$rememberLazyNearestItemsRangeState$1$1$2;->emit(Lkotlin/ranges/IntRange;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLandroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt$rememberLazyNearestItemsRangeState$1$1;-><init>(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V
-PLandroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt$rememberLazyNearestItemsRangeState$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-PLandroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt$rememberLazyNearestItemsRangeState$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt;->access$calculateNearestItemsRange(III)Lkotlin/ranges/IntRange;
-PLandroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt;->calculateNearestItemsRange(III)Lkotlin/ranges/IntRange;
-PLandroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt;->rememberLazyNearestItemsRangeState(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State;
-PLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$1;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistry;)V
-PLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$1;->invoke(Ljava/lang/Object;)Ljava/lang/Boolean;
-PLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$1;-><clinit>()V
-PLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$1;-><init>()V
-PLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$1;->invoke(Landroidx/compose/runtime/saveable/SaverScope;Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;)Ljava/util/Map;
-PLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$2;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistry;)V
-PLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion;-><init>()V
-PLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion;->saver(Landroidx/compose/runtime/saveable/SaveableStateRegistry;)Landroidx/compose/runtime/saveable/Saver;
-PLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;Ljava/lang/Object;)V
-PLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$1$invoke$$inlined$onDispose$1;->dispose()V
-PLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$1;-><init>(Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;Ljava/lang/Object;)V
-PLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult;
-PLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$2;-><init>(Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;I)V
-PLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;-><clinit>()V
-PLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistry;)V
-PLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistry;Ljava/util/Map;)V
-PLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->SaveableStateProvider(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V
-PLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->access$getPreviouslyComposedKeys$p(Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;)Ljava/util/Set;
-PLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->canBeSaved(Ljava/lang/Object;)Z
-PLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->consumeRestored(Ljava/lang/String;)Ljava/lang/Object;
-PLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->getWrappedHolder()Landroidx/compose/runtime/saveable/SaveableStateHolder;
-PLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->performSave()Ljava/util/Map;
-PLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->registerProvider(Ljava/lang/String;Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/saveable/SaveableStateRegistry$Entry;
-PLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->setWrappedHolder(Landroidx/compose/runtime/saveable/SaveableStateHolder;)V
-PLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$1;-><init>(Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;Lkotlin/jvm/functions/Function3;I)V
-PLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$1;->invoke(Landroidx/compose/runtime/Composer;I)V
-PLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$holder$1;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistry;)V
-PLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$holder$1;->invoke()Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;
-PLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$holder$1;->invoke()Ljava/lang/Object;
-PLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt;->LazySaveableStateHolderProvider(Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;I)V
-PLandroidx/compose/foundation/lazy/layout/Lazy_androidKt;->getDefaultLazyLayoutKey(I)Ljava/lang/Object;
-PLandroidx/compose/foundation/lazy/layout/MutableIntervalList;-><clinit>()V
-PLandroidx/compose/foundation/lazy/layout/MutableIntervalList;-><init>()V
-PLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->addInterval(ILjava/lang/Object;)V
-PLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->checkIndexBounds(I)V
-PLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->contains(Landroidx/compose/foundation/lazy/layout/IntervalList$Interval;I)Z
-PLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->forEach(IILkotlin/jvm/functions/Function1;)V
-PLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->get(I)Landroidx/compose/foundation/lazy/layout/IntervalList$Interval;
-PLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->getIntervalForIndex(I)Landroidx/compose/foundation/lazy/layout/IntervalList$Interval;
-PLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->getSize()I
-PLandroidx/compose/foundation/relocation/BringIntoViewRequesterKt$bringIntoViewRequester$2$1$invoke$$inlined$onDispose$1;->dispose()V
-PLandroidx/compose/foundation/relocation/BringIntoViewResponderKt$bringIntoViewResponder$2;-><init>(Landroidx/compose/foundation/relocation/BringIntoViewResponder;)V
-PLandroidx/compose/foundation/relocation/BringIntoViewResponderKt$bringIntoViewResponder$2;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier;
-PLandroidx/compose/foundation/relocation/BringIntoViewResponderKt$bringIntoViewResponder$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/relocation/BringIntoViewResponderKt;->bringIntoViewResponder(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/relocation/BringIntoViewResponder;)Landroidx/compose/ui/Modifier;
-PLandroidx/compose/foundation/relocation/BringIntoViewResponderModifier;-><init>(Landroidx/compose/foundation/relocation/BringIntoViewParent;)V
-PLandroidx/compose/foundation/relocation/BringIntoViewResponderModifier;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
-PLandroidx/compose/foundation/relocation/BringIntoViewResponderModifier;->getValue()Landroidx/compose/foundation/relocation/BringIntoViewParent;
-PLandroidx/compose/foundation/relocation/BringIntoViewResponderModifier;->getValue()Ljava/lang/Object;
-PLandroidx/compose/foundation/relocation/BringIntoViewResponderModifier;->setResponder(Landroidx/compose/foundation/relocation/BringIntoViewResponder;)V
-PLandroidx/compose/foundation/text/TextController;->onForgotten()V
-PLandroidx/compose/foundation/text/TextState;->getSelectable()Landroidx/compose/foundation/text/selection/Selectable;
-PLandroidx/compose/material/icons/Icons$Filled;-><clinit>()V
-PLandroidx/compose/material/icons/Icons$Filled;-><init>()V
-PLandroidx/compose/material/icons/Icons$Outlined;-><clinit>()V
-PLandroidx/compose/material/icons/Icons$Outlined;-><init>()V
-PLandroidx/compose/material/icons/filled/AddKt;-><clinit>()V
-PLandroidx/compose/material/icons/filled/AddKt;->getAdd(Landroidx/compose/material/icons/Icons$Filled;)Landroidx/compose/ui/graphics/vector/ImageVector;
-PLandroidx/compose/material/icons/filled/ArrowBackKt;-><clinit>()V
-PLandroidx/compose/material/icons/filled/ArrowBackKt;->getArrowBack(Landroidx/compose/material/icons/Icons$Filled;)Landroidx/compose/ui/graphics/vector/ImageVector;
-PLandroidx/compose/material/icons/outlined/NewReleasesKt;-><clinit>()V
-PLandroidx/compose/material/icons/outlined/NewReleasesKt;->getNewReleases(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector;
-PLandroidx/compose/material/ripple/AndroidRippleIndicationInstance$onInvalidateRipple$1;->invoke()Ljava/lang/Object;
-PLandroidx/compose/material/ripple/AndroidRippleIndicationInstance$onInvalidateRipple$1;->invoke()V
-PLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->access$getInvalidateTick(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;)Z
-PLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->access$setInvalidateTick(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;Z)V
-PLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->addRipple(Landroidx/compose/foundation/interaction/PressInteraction$Press;Lkotlinx/coroutines/CoroutineScope;)V
-PLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->dispose()V
-PLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->onForgotten()V
-PLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->removeRipple(Landroidx/compose/foundation/interaction/PressInteraction$Press;)V
-PLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->resetHostView()V
-PLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->setInvalidateTick(Z)V
-PLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->setRippleHostView(Landroidx/compose/material/ripple/RippleHostView;)V
-PLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1$1;->emit(Landroidx/compose/foundation/interaction/Interaction;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLandroidx/compose/material/ripple/RippleContainer;->disposeRippleIfNeeded(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;)V
-PLandroidx/compose/material/ripple/RippleContainer;->getRippleHostView(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;)Landroidx/compose/material/ripple/RippleHostView;
-PLandroidx/compose/material/ripple/RippleHostMap;->get(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;)Landroidx/compose/material/ripple/RippleHostView;
-PLandroidx/compose/material/ripple/RippleHostMap;->remove(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;)V
-PLandroidx/compose/material/ripple/RippleHostMap;->set(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;Landroidx/compose/material/ripple/RippleHostView;)V
-PLandroidx/compose/material/ripple/RippleHostView$$ExternalSyntheticLambda0;-><init>(Landroidx/compose/material/ripple/RippleHostView;)V
-PLandroidx/compose/material/ripple/RippleHostView$$ExternalSyntheticLambda0;->run()V
-PLandroidx/compose/material/ripple/RippleHostView;->$r8$lambda$4nztiuYeQHklB-09QfMAnp7Ay8E(Landroidx/compose/material/ripple/RippleHostView;)V
-PLandroidx/compose/material/ripple/RippleHostView;->addRipple-KOepWvA(Landroidx/compose/foundation/interaction/PressInteraction$Press;ZJIJFLkotlin/jvm/functions/Function0;)V
-PLandroidx/compose/material/ripple/RippleHostView;->createRipple(Z)V
-PLandroidx/compose/material/ripple/RippleHostView;->disposeRipple()V
-PLandroidx/compose/material/ripple/RippleHostView;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V
-PLandroidx/compose/material/ripple/RippleHostView;->removeRipple()V
-PLandroidx/compose/material/ripple/RippleHostView;->setRippleState$lambda$2(Landroidx/compose/material/ripple/RippleHostView;)V
-PLandroidx/compose/material/ripple/RippleHostView;->setRippleState(Z)V
-PLandroidx/compose/material/ripple/RippleHostView;->updateRippleProperties-biQXAtU(JIJF)V
-PLandroidx/compose/material/ripple/UnprojectedRipple$Companion;-><init>()V
-PLandroidx/compose/material/ripple/UnprojectedRipple$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/material/ripple/UnprojectedRipple$MRadiusHelper;-><clinit>()V
-PLandroidx/compose/material/ripple/UnprojectedRipple$MRadiusHelper;-><init>()V
-PLandroidx/compose/material/ripple/UnprojectedRipple$MRadiusHelper;->setRadius(Landroid/graphics/drawable/RippleDrawable;I)V
-PLandroidx/compose/material/ripple/UnprojectedRipple;-><clinit>()V
-PLandroidx/compose/material/ripple/UnprojectedRipple;-><init>(Z)V
-PLandroidx/compose/material/ripple/UnprojectedRipple;->calculateRippleColor-5vOe2sY(JF)J
-PLandroidx/compose/material/ripple/UnprojectedRipple;->getDirtyBounds()Landroid/graphics/Rect;
-PLandroidx/compose/material/ripple/UnprojectedRipple;->isProjected()Z
-PLandroidx/compose/material/ripple/UnprojectedRipple;->setColor-DxMtmZc(JF)V
-PLandroidx/compose/material/ripple/UnprojectedRipple;->trySetRadius(I)V
-PLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$1$1;-><init>(Landroidx/compose/material3/TopAppBarScrollBehavior;F)V
-PLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$1$1;->invoke()Ljava/lang/Object;
-PLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$1$1;->invoke()V
-PLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$2;-><init>(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/material3/TopAppBarColors;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/TextStyle;ZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;ILandroidx/compose/material3/TopAppBarScrollBehavior;)V
-PLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$2;->invoke(Landroidx/compose/runtime/Composer;I)V
-PLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$3;-><init>(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/TextStyle;ZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/material3/TopAppBarColors;Landroidx/compose/material3/TopAppBarScrollBehavior;II)V
-PLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$actionsRow$1;-><init>(Lkotlin/jvm/functions/Function3;I)V
-PLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$actionsRow$1;->invoke(Landroidx/compose/runtime/Composer;I)V
-PLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$actionsRow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/material3/AppBarKt$TopAppBarLayout$1$3$1;-><init>(JLkotlin/jvm/functions/Function2;I)V
-PLandroidx/compose/material3/AppBarKt$TopAppBarLayout$1$3$1;->invoke(Landroidx/compose/runtime/Composer;I)V
-PLandroidx/compose/material3/AppBarKt$TopAppBarLayout$1$3$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/material3/AppBarKt$TopAppBarLayout$2$measure$1;-><init>(Landroidx/compose/ui/layout/Placeable;ILandroidx/compose/ui/layout/Placeable;Landroidx/compose/foundation/layout/Arrangement$Horizontal;JLandroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/foundation/layout/Arrangement$Vertical;II)V
-PLandroidx/compose/material3/AppBarKt$TopAppBarLayout$2$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
-PLandroidx/compose/material3/AppBarKt$TopAppBarLayout$2$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/material3/AppBarKt$TopAppBarLayout$2;-><init>(FLandroidx/compose/foundation/layout/Arrangement$Horizontal;Landroidx/compose/foundation/layout/Arrangement$Vertical;I)V
-PLandroidx/compose/material3/AppBarKt$TopAppBarLayout$2;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
-PLandroidx/compose/material3/AppBarKt;-><clinit>()V
-PLandroidx/compose/material3/AppBarKt;->SingleRowTopAppBar$lambda$3(Landroidx/compose/runtime/State;)J
-PLandroidx/compose/material3/AppBarKt;->SingleRowTopAppBar(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/TextStyle;ZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/material3/TopAppBarColors;Landroidx/compose/material3/TopAppBarScrollBehavior;Landroidx/compose/runtime/Composer;II)V
-PLandroidx/compose/material3/AppBarKt;->TopAppBar(Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/material3/TopAppBarColors;Landroidx/compose/material3/TopAppBarScrollBehavior;Landroidx/compose/runtime/Composer;II)V
-PLandroidx/compose/material3/AppBarKt;->TopAppBarLayout-kXwM9vE(Landroidx/compose/ui/Modifier;FJJJLkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/TextStyle;FLandroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;IZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
-PLandroidx/compose/material3/AppBarKt;->access$TopAppBarLayout-kXwM9vE(Landroidx/compose/ui/Modifier;FJJJLkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/TextStyle;FLandroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;IZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
-PLandroidx/compose/material3/AppBarKt;->access$getTopAppBarTitleInset$p()F
-PLandroidx/compose/material3/ButtonElevation$animateElevation$1$1$1;->emit(Landroidx/compose/foundation/interaction/Interaction;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLandroidx/compose/material3/ButtonElevation$animateElevation$1$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLandroidx/compose/material3/ButtonKt$Button$3;->invoke(Landroidx/compose/runtime/Composer;I)V
-PLandroidx/compose/material3/ButtonKt$Button$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/material3/ChipElevation$animateElevation$1$1$1;->emit(Landroidx/compose/foundation/interaction/Interaction;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLandroidx/compose/material3/ChipElevation$animateElevation$1$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLandroidx/compose/material3/ChipKt$Chip$2;->invoke(Landroidx/compose/runtime/Composer;I)V
-PLandroidx/compose/material3/ChipKt$Chip$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/material3/ChipKt;->access$Chip-nkUnTEs(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function0;ZLkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/TextStyle;JLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/graphics/Shape;Landroidx/compose/material3/ChipColors;Landroidx/compose/material3/ChipElevation;Landroidx/compose/foundation/BorderStroke;FLandroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/Composer;II)V
-PLandroidx/compose/material3/ColorSchemeKt;->applyTonalElevation-Hht5A8o(Landroidx/compose/material3/ColorScheme;JF)J
-PLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-1$1;-><clinit>()V
-PLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-1$1;-><init>()V
-PLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-10$1;-><clinit>()V
-PLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-10$1;-><init>()V
-PLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-11$1;-><clinit>()V
-PLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-11$1;-><init>()V
-PLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-12$1;-><clinit>()V
-PLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-12$1;-><init>()V
-PLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-2$1;-><clinit>()V
-PLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-2$1;-><init>()V
-PLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-2$1;->invoke(Landroidx/compose/foundation/layout/RowScope;Landroidx/compose/runtime/Composer;I)V
-PLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-3$1;-><clinit>()V
-PLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-3$1;-><init>()V
-PLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-4$1;-><clinit>()V
-PLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-4$1;-><init>()V
-PLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-5$1;-><clinit>()V
-PLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-5$1;-><init>()V
-PLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-6$1;-><clinit>()V
-PLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-6$1;-><init>()V
-PLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-7$1;-><clinit>()V
-PLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-7$1;-><init>()V
-PLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-8$1;-><clinit>()V
-PLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-8$1;-><init>()V
-PLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-9$1;-><clinit>()V
-PLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-9$1;-><init>()V
-PLandroidx/compose/material3/ComposableSingletons$AppBarKt;-><clinit>()V
-PLandroidx/compose/material3/ComposableSingletons$AppBarKt;-><init>()V
-PLandroidx/compose/material3/ComposableSingletons$AppBarKt;->getLambda-2$material3_release()Lkotlin/jvm/functions/Function3;
-PLandroidx/compose/material3/IconButtonColors;-><init>(JJJJ)V
-PLandroidx/compose/material3/IconButtonColors;-><init>(JJJJLkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/material3/IconButtonColors;->containerColor$material3_release(ZLandroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State;
-PLandroidx/compose/material3/IconButtonColors;->contentColor$material3_release(ZLandroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State;
-PLandroidx/compose/material3/IconButtonDefaults;-><clinit>()V
-PLandroidx/compose/material3/IconButtonDefaults;-><init>()V
-PLandroidx/compose/material3/IconButtonDefaults;->iconButtonColors-ro_MJ88(JJJJLandroidx/compose/runtime/Composer;II)Landroidx/compose/material3/IconButtonColors;
-PLandroidx/compose/material3/IconButtonKt$IconButton$3;-><init>(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/material3/IconButtonColors;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function2;II)V
-PLandroidx/compose/material3/IconButtonKt;->IconButton(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/material3/IconButtonColors;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
-PLandroidx/compose/material3/IconKt$Icon$1;-><init>(Landroidx/compose/ui/graphics/vector/ImageVector;Ljava/lang/String;Landroidx/compose/ui/Modifier;JII)V
-PLandroidx/compose/material3/IconKt$Icon$3;-><init>(Landroidx/compose/ui/graphics/painter/Painter;Ljava/lang/String;Landroidx/compose/ui/Modifier;JII)V
-PLandroidx/compose/material3/IconKt$Icon$semantics$1$1;-><init>(Ljava/lang/String;)V
-PLandroidx/compose/material3/IconKt$Icon$semantics$1$1;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V
-PLandroidx/compose/material3/IconKt$Icon$semantics$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/material3/IconKt;->Icon-ww6aTOc(Landroidx/compose/ui/graphics/vector/ImageVector;Ljava/lang/String;Landroidx/compose/ui/Modifier;JLandroidx/compose/runtime/Composer;II)V
-PLandroidx/compose/material3/Shapes;->getLarge()Landroidx/compose/foundation/shape/CornerBasedShape;
-PLandroidx/compose/material3/Shapes;->getSmall()Landroidx/compose/foundation/shape/CornerBasedShape;
-PLandroidx/compose/material3/SuggestionChipDefaults;->getShape(Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/graphics/Shape;
-PLandroidx/compose/material3/SystemBarsDefaultInsets_androidKt;->getSystemBarsForVisualComponents(Landroidx/compose/foundation/layout/WindowInsets$Companion;Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/layout/WindowInsets;
-PLandroidx/compose/material3/TopAppBarColors;-><init>(JJJJJ)V
-PLandroidx/compose/material3/TopAppBarColors;-><init>(JJJJJLkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/material3/TopAppBarColors;->containerColor-XeAY9LY$material3_release(FLandroidx/compose/runtime/Composer;I)J
-PLandroidx/compose/material3/TopAppBarColors;->equals(Ljava/lang/Object;)Z
-PLandroidx/compose/material3/TopAppBarColors;->getActionIconContentColor-0d7_KjU$material3_release()J
-PLandroidx/compose/material3/TopAppBarColors;->getNavigationIconContentColor-0d7_KjU$material3_release()J
-PLandroidx/compose/material3/TopAppBarColors;->getTitleContentColor-0d7_KjU$material3_release()J
-PLandroidx/compose/material3/TopAppBarDefaults;-><clinit>()V
-PLandroidx/compose/material3/TopAppBarDefaults;-><init>()V
-PLandroidx/compose/material3/TopAppBarDefaults;->getWindowInsets(Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/layout/WindowInsets;
-PLandroidx/compose/material3/TopAppBarDefaults;->smallTopAppBarColors-zjMxDiM(JJJJJLandroidx/compose/runtime/Composer;II)Landroidx/compose/material3/TopAppBarColors;
-PLandroidx/compose/material3/TopAppBarDefaults;->topAppBarColors-zjMxDiM(JJJJJLandroidx/compose/runtime/Composer;II)Landroidx/compose/material3/TopAppBarColors;
-PLandroidx/compose/material3/Typography;->getHeadlineSmall()Landroidx/compose/ui/text/TextStyle;
-PLandroidx/compose/material3/tokens/IconButtonTokens;->getStateLayerShape()Landroidx/compose/material3/tokens/ShapeKeyTokens;
-PLandroidx/compose/material3/tokens/IconButtonTokens;->getStateLayerSize-D9Ej5fM()F
-PLandroidx/compose/material3/tokens/SuggestionChipTokens;->getContainerShape()Landroidx/compose/material3/tokens/ShapeKeyTokens;
-PLandroidx/compose/material3/tokens/SuggestionChipTokens;->getLabelTextColor()Landroidx/compose/material3/tokens/ColorSchemeKeyTokens;
-PLandroidx/compose/material3/tokens/SuggestionChipTokens;->getLeadingIconColor()Landroidx/compose/material3/tokens/ColorSchemeKeyTokens;
-PLandroidx/compose/material3/tokens/TopAppBarSmallTokens;-><clinit>()V
-PLandroidx/compose/material3/tokens/TopAppBarSmallTokens;-><init>()V
-PLandroidx/compose/material3/tokens/TopAppBarSmallTokens;->getContainerHeight-D9Ej5fM()F
-PLandroidx/compose/material3/tokens/TopAppBarSmallTokens;->getHeadlineColor()Landroidx/compose/material3/tokens/ColorSchemeKeyTokens;
-PLandroidx/compose/material3/tokens/TopAppBarSmallTokens;->getHeadlineFont()Landroidx/compose/material3/tokens/TypographyKeyTokens;
-PLandroidx/compose/material3/tokens/TopAppBarSmallTokens;->getLeadingIconColor()Landroidx/compose/material3/tokens/ColorSchemeKeyTokens;
-PLandroidx/compose/material3/tokens/TopAppBarSmallTokens;->getOnScrollContainerElevation-D9Ej5fM()F
-PLandroidx/compose/material3/tokens/TopAppBarSmallTokens;->getTrailingIconColor()Landroidx/compose/material3/tokens/ColorSchemeKeyTokens;
-PLandroidx/compose/runtime/AbstractApplier;->clear()V
-PLandroidx/compose/runtime/BroadcastFrameClock;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;
-PLandroidx/compose/runtime/ComposableSingletons$CompositionKt;->getLambda-2$runtime_release()Lkotlin/jvm/functions/Function2;
-PLandroidx/compose/runtime/ComposerImpl$CompositionContextHolder;->onForgotten()V
-PLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->dispose()V
-PLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getComposers()Ljava/util/Set;
-PLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->unregisterComposer$runtime_release(Landroidx/compose/runtime/Composer;)V
-PLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->unregisterComposition$runtime_release(Landroidx/compose/runtime/ControlledComposition;)V
-PLandroidx/compose/runtime/ComposerImpl$deactivateToEndGroup$2$1;-><init>(Ljava/lang/Object;II)V
-PLandroidx/compose/runtime/ComposerImpl$deactivateToEndGroup$2$1;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V
-PLandroidx/compose/runtime/ComposerImpl$deactivateToEndGroup$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/runtime/ComposerImpl$deactivateToEndGroup$2$2;-><init>(Ljava/lang/Object;II)V
-PLandroidx/compose/runtime/ComposerImpl$deactivateToEndGroup$2$2;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V
-PLandroidx/compose/runtime/ComposerImpl$deactivateToEndGroup$2$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/runtime/ComposerImpl$deactivateToEndGroup$2;-><init>(Landroidx/compose/runtime/ComposerImpl;I)V
-PLandroidx/compose/runtime/ComposerImpl$deactivateToEndGroup$2;->invoke(ILjava/lang/Object;)V
-PLandroidx/compose/runtime/ComposerImpl$deactivateToEndGroup$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/runtime/ComposerImpl$doCompose$2$3;->invoke(Landroidx/compose/runtime/State;)V
-PLandroidx/compose/runtime/ComposerImpl$doCompose$2$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/runtime/ComposerImpl$doCompose$2$4;->invoke(Landroidx/compose/runtime/State;)V
-PLandroidx/compose/runtime/ComposerImpl$doCompose$2$4;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/runtime/ComposerImpl$realizeMovement$1;-><init>(II)V
-PLandroidx/compose/runtime/ComposerImpl$realizeMovement$1;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V
-PLandroidx/compose/runtime/ComposerImpl$realizeMovement$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/runtime/ComposerImpl$start$2;-><init>(I)V
-PLandroidx/compose/runtime/ComposerImpl$start$2;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V
-PLandroidx/compose/runtime/ComposerImpl$start$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/runtime/ComposerImpl;->access$getChanges$p(Landroidx/compose/runtime/ComposerImpl;)Ljava/util/List;
-PLandroidx/compose/runtime/ComposerImpl;->access$getReader$p(Landroidx/compose/runtime/ComposerImpl;)Landroidx/compose/runtime/SlotReader;
-PLandroidx/compose/runtime/ComposerImpl;->access$setChanges$p(Landroidx/compose/runtime/ComposerImpl;Ljava/util/List;)V
-PLandroidx/compose/runtime/ComposerImpl;->changed(F)Z
-PLandroidx/compose/runtime/ComposerImpl;->changed(I)Z
-PLandroidx/compose/runtime/ComposerImpl;->deactivateToEndGroup(Z)V
-PLandroidx/compose/runtime/ComposerImpl;->dispose$runtime_release()V
-PLandroidx/compose/runtime/ComposerImpl;->getDeferredChanges$runtime_release()Ljava/util/List;
-PLandroidx/compose/runtime/ComposerImpl;->nodeAt(Landroidx/compose/runtime/SlotReader;I)Ljava/lang/Object;
-PLandroidx/compose/runtime/ComposerImpl;->recordDelete()V
-PLandroidx/compose/runtime/ComposerImpl;->recordRemoveNode(II)V
-PLandroidx/compose/runtime/ComposerImpl;->reportAllMovableContent()V
-PLandroidx/compose/runtime/ComposerImpl;->reportFreeMovableContent$reportGroup(Landroidx/compose/runtime/ComposerImpl;IZI)I
-PLandroidx/compose/runtime/ComposerImpl;->reportFreeMovableContent(I)V
-PLandroidx/compose/runtime/ComposerKt$removeCurrentGroupInstance$1;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V
-PLandroidx/compose/runtime/ComposerKt$removeCurrentGroupInstance$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/runtime/ComposerKt;->access$getRemoveCurrentGroupInstance$p()Lkotlin/jvm/functions/Function3;
-PLandroidx/compose/runtime/ComposerKt;->access$removeRange(Ljava/util/List;II)V
-PLandroidx/compose/runtime/ComposerKt;->distanceFrom(Landroidx/compose/runtime/SlotReader;II)I
-PLandroidx/compose/runtime/ComposerKt;->removeRange(Ljava/util/List;II)V
-PLandroidx/compose/runtime/CompositionContext;->unregisterComposer$runtime_release(Landroidx/compose/runtime/Composer;)V
-PLandroidx/compose/runtime/CompositionImpl;->dispose()V
-PLandroidx/compose/runtime/CompositionImpl;->observesAnyOf(Ljava/util/Set;)Z
-PLandroidx/compose/runtime/CompositionImpl;->setPendingInvalidScopes$runtime_release(Z)V
-PLandroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;->onForgotten()V
-PLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord$Companion;-><init>()V
-PLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord$Companion;->getUnset()Ljava/lang/Object;
-PLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;-><clinit>()V
-PLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;-><init>()V
-PLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->access$getUnset$cp()Ljava/lang/Object;
-PLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->assign(Landroidx/compose/runtime/snapshots/StateRecord;)V
-PLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->create()Landroidx/compose/runtime/snapshots/StateRecord;
-PLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->getDependencies()Landroidx/compose/runtime/collection/IdentityArrayMap;
-PLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->getResult()Ljava/lang/Object;
-PLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->setDependencies(Landroidx/compose/runtime/collection/IdentityArrayMap;)V
-PLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->setResult(Ljava/lang/Object;)V
-PLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->setResultHash(I)V
-PLandroidx/compose/runtime/DerivedSnapshotState$currentRecord$result$1$result$1;-><init>(Landroidx/compose/runtime/DerivedSnapshotState;Landroidx/compose/runtime/collection/IdentityArrayMap;I)V
-PLandroidx/compose/runtime/DerivedSnapshotState$currentRecord$result$1$result$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/runtime/DerivedSnapshotState$currentRecord$result$1$result$1;->invoke(Ljava/lang/Object;)V
-PLandroidx/compose/runtime/DerivedSnapshotState;-><init>(Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/SnapshotMutationPolicy;)V
-PLandroidx/compose/runtime/DerivedSnapshotState;->getCurrentValue()Ljava/lang/Object;
-PLandroidx/compose/runtime/DerivedSnapshotState;->getDependencies()[Ljava/lang/Object;
-PLandroidx/compose/runtime/DerivedSnapshotState;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord;
-PLandroidx/compose/runtime/DerivedSnapshotState;->getPolicy()Landroidx/compose/runtime/SnapshotMutationPolicy;
-PLandroidx/compose/runtime/DerivedSnapshotState;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V
-PLandroidx/compose/runtime/GroupInfo;->setNodeCount(I)V
-PLandroidx/compose/runtime/GroupInfo;->setNodeIndex(I)V
-PLandroidx/compose/runtime/GroupInfo;->setSlotIndex(I)V
-PLandroidx/compose/runtime/Pending;->updateNodeCount(II)Z
-PLandroidx/compose/runtime/PrioritySet;->peek()I
-PLandroidx/compose/runtime/RecomposeScopeImpl;->access$setTrackedInstances$p(Landroidx/compose/runtime/RecomposeScopeImpl;Landroidx/compose/runtime/collection/IdentityArrayIntMap;)V
-PLandroidx/compose/runtime/RecomposeScopeImpl;->getComposition()Landroidx/compose/runtime/CompositionImpl;
-PLandroidx/compose/runtime/RecomposeScopeImpl;->release()V
+PLandroidx/compose/runtime/BroadcastFrameClock$withFrameNanos$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+PLandroidx/compose/runtime/BroadcastFrameClock$withFrameNanos$2$1;->invoke(Ljava/lang/Throwable;)V
PLandroidx/compose/runtime/RecomposeScopeImpl;->rereadTrackedInstances()V
PLandroidx/compose/runtime/RecomposeScopeImpl;->setRereading(Z)V
-PLandroidx/compose/runtime/Recomposer$Companion;->access$removeRunning(Landroidx/compose/runtime/Recomposer$Companion;Landroidx/compose/runtime/Recomposer$RecomposerInfoImpl;)V
-PLandroidx/compose/runtime/Recomposer$Companion;->removeRunning(Landroidx/compose/runtime/Recomposer$RecomposerInfoImpl;)V
-PLandroidx/compose/runtime/Recomposer$effectJob$1$1$1$1;-><init>(Landroidx/compose/runtime/Recomposer;Ljava/lang/Throwable;)V
-PLandroidx/compose/runtime/Recomposer$effectJob$1$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/runtime/Recomposer$effectJob$1$1$1$1;->invoke(Ljava/lang/Throwable;)V
-PLandroidx/compose/runtime/Recomposer$effectJob$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/runtime/Recomposer$effectJob$1$1;->invoke(Ljava/lang/Throwable;)V
-PLandroidx/compose/runtime/Recomposer;->access$getRunnerJob$p(Landroidx/compose/runtime/Recomposer;)Lkotlinx/coroutines/Job;
-PLandroidx/compose/runtime/Recomposer;->access$isClosed$p(Landroidx/compose/runtime/Recomposer;)Z
-PLandroidx/compose/runtime/Recomposer;->access$setCloseCause$p(Landroidx/compose/runtime/Recomposer;Ljava/lang/Throwable;)V
-PLandroidx/compose/runtime/Recomposer;->access$setRunnerJob$p(Landroidx/compose/runtime/Recomposer;Lkotlinx/coroutines/Job;)V
-PLandroidx/compose/runtime/Recomposer;->cancel()V
-PLandroidx/compose/runtime/Recomposer;->unregisterComposition$runtime_release(Landroidx/compose/runtime/ControlledComposition;)V
-PLandroidx/compose/runtime/SlotReader;->containsMark(I)Z
-PLandroidx/compose/runtime/SlotReader;->forEachData$runtime_release(ILkotlin/jvm/functions/Function2;)V
-PLandroidx/compose/runtime/SlotReader;->getCurrentEnd()I
-PLandroidx/compose/runtime/SlotReader;->getGroupSize()I
-PLandroidx/compose/runtime/SlotReader;->hasMark(I)Z
-PLandroidx/compose/runtime/SlotTable;->containsMark()Z
-PLandroidx/compose/runtime/SlotWriter$groupSlots$1;-><init>(IILandroidx/compose/runtime/SlotWriter;)V
-PLandroidx/compose/runtime/SlotWriter;->access$updateContainsMark(Landroidx/compose/runtime/SlotWriter;I)V
-PLandroidx/compose/runtime/SlotWriter;->fixParentAnchorsFor(III)V
-PLandroidx/compose/runtime/SlotWriter;->groupSlots()Ljava/util/Iterator;
-PLandroidx/compose/runtime/SlotWriter;->moveAnchors(III)V
-PLandroidx/compose/runtime/SlotWriter;->moveGroup(I)V
-PLandroidx/compose/runtime/SlotWriter;->slot(II)Ljava/lang/Object;
-PLandroidx/compose/runtime/SlotWriter;->updateDataIndex([III)V
-PLandroidx/compose/runtime/SnapshotStateKt;->derivedStateOf(Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/State;
-PLandroidx/compose/runtime/SnapshotStateKt__DerivedStateKt;->access$getCalculationBlockNestedLevel$p()Landroidx/compose/runtime/SnapshotThreadLocal;
-PLandroidx/compose/runtime/SnapshotStateKt__DerivedStateKt;->access$getDerivedStateObservers$p()Landroidx/compose/runtime/SnapshotThreadLocal;
-PLandroidx/compose/runtime/SnapshotStateKt__DerivedStateKt;->derivedStateOf(Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/State;
-PLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1$readObserver$1;-><init>(Ljava/util/Set;)V
-PLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1$readObserver$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1$readObserver$1;->invoke(Ljava/lang/Object;)V
-PLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1$unregisterApplyObserver$1;-><init>(Lkotlinx/coroutines/channels/Channel;)V
-PLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-PLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt;->access$intersects(Ljava/util/Set;Ljava/util/Set;)Z
-PLandroidx/compose/runtime/Stack;->peek(I)Ljava/lang/Object;
-PLandroidx/compose/runtime/collection/IdentityArrayMap;->clear()V
-PLandroidx/compose/runtime/collection/IdentityArrayMap;->setSize$runtime_release(I)V
-PLandroidx/compose/runtime/collection/IdentityArraySet$iterator$1;-><init>(Landroidx/compose/runtime/collection/IdentityArraySet;)V
-PLandroidx/compose/runtime/collection/IdentityArraySet$iterator$1;->hasNext()Z
-PLandroidx/compose/runtime/collection/IdentityArraySet$iterator$1;->next()Ljava/lang/Object;
-PLandroidx/compose/runtime/collection/IdentityArraySet;->isEmpty()Z
-PLandroidx/compose/runtime/collection/IdentityArraySet;->iterator()Ljava/util/Iterator;
-PLandroidx/compose/runtime/collection/IdentityScopeMap;->clear()V
-PLandroidx/compose/runtime/collection/IdentityScopeMap;->removeScope(Ljava/lang/Object;)V
-PLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->iterator()Ljava/util/Iterator;
-PLandroidx/compose/runtime/collection/MutableVector$VectorListIterator;-><init>(Ljava/util/List;I)V
-PLandroidx/compose/runtime/collection/MutableVector$VectorListIterator;->hasNext()Z
-PLandroidx/compose/runtime/collection/MutableVector$VectorListIterator;->next()Ljava/lang/Object;
-PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/AbstractPersistentList;->remove(Ljava/lang/Object;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList;
-PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->add(Ljava/lang/Object;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList;
-PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->get(I)Ljava/lang/Object;
-PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->indexOf(Ljava/lang/Object;)I
-PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->removeAt(I)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList;
-PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->remove(Ljava/lang/Object;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;
-PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->remove(ILjava/lang/Object;I)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;
-PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->removeEntryAtIndex(II)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;
-PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->moveToNextNode()V
-PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;->getHasNext()Z
-PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;->getHasPrevious()Z
-PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;->getNext()Ljava/lang/Object;
-PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;->getPrevious()Ljava/lang/Object;
-PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;->remove(Ljava/lang/Object;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentSet;
-PLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/ListImplementation;-><clinit>()V
-PLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/ListImplementation;-><init>()V
-PLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/ListImplementation;->checkElementIndex$runtime_release(II)V
-PLandroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$2;-><init>(Landroidx/compose/runtime/internal/ComposableLambdaImpl;Ljava/lang/Object;Ljava/lang/Object;I)V
-PLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Ljava/lang/Object;
-PLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/runtime/saveable/ListSaverKt$listSaver$1;-><init>(Lkotlin/jvm/functions/Function2;)V
-PLandroidx/compose/runtime/saveable/ListSaverKt$listSaver$1;->invoke(Landroidx/compose/runtime/saveable/SaverScope;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/runtime/saveable/ListSaverKt$listSaver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/runtime/saveable/ListSaverKt;->listSaver(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/saveable/Saver;
-PLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$invoke$$inlined$onDispose$1;->dispose()V
-PLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$valueProvider$1$1$1;->canBeSaved(Ljava/lang/Object;)Z
-PLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion$Saver$1;-><clinit>()V
-PLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion$Saver$1;-><init>()V
-PLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion$Saver$1;->invoke(Landroidx/compose/runtime/saveable/SaverScope;Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;)Ljava/util/Map;
-PLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion$Saver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion$Saver$2;-><clinit>()V
-PLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion$Saver$2;-><init>()V
-PLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion;-><init>()V
-PLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion;->getSaver()Landroidx/compose/runtime/saveable/Saver;
-PLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder$registry$1;-><init>(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;)V
-PLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;-><init>(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;Ljava/lang/Object;)V
-PLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;->getRegistry()Landroidx/compose/runtime/saveable/SaveableStateRegistry;
-PLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;->saveTo(Ljava/util/Map;)V
-PLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;Ljava/lang/Object;)V
-PLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1$invoke$$inlined$onDispose$1;->dispose()V
-PLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1;-><init>(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;Ljava/lang/Object;Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;)V
-PLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult;
-PLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;-><clinit>()V
-PLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;-><init>(Ljava/util/Map;)V
-PLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;-><init>(Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->SaveableStateProvider(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V
-PLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->access$getRegistryHolders$p(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;)Ljava/util/Map;
-PLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->access$getSavedStates$p(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;)Ljava/util/Map;
-PLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->access$getSaver$cp()Landroidx/compose/runtime/saveable/Saver;
-PLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->access$saveAll(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;)Ljava/util/Map;
-PLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->getParentSaveableStateRegistry()Landroidx/compose/runtime/saveable/SaveableStateRegistry;
-PLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->removeState(Ljava/lang/Object;)V
-PLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->saveAll()Ljava/util/Map;
-PLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->setParentSaveableStateRegistry(Landroidx/compose/runtime/saveable/SaveableStateRegistry;)V
-PLandroidx/compose/runtime/saveable/SaveableStateHolderKt$rememberSaveableStateHolder$1;-><clinit>()V
-PLandroidx/compose/runtime/saveable/SaveableStateHolderKt$rememberSaveableStateHolder$1;-><init>()V
-PLandroidx/compose/runtime/saveable/SaveableStateHolderKt$rememberSaveableStateHolder$1;->invoke()Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;
-PLandroidx/compose/runtime/saveable/SaveableStateHolderKt$rememberSaveableStateHolder$1;->invoke()Ljava/lang/Object;
-PLandroidx/compose/runtime/saveable/SaveableStateHolderKt;->rememberSaveableStateHolder(Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/saveable/SaveableStateHolder;
-PLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3;->unregister()V
-PLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->access$getValueProviders$p(Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl;)Ljava/util/Map;
-PLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->performSave()Ljava/util/Map;
-PLandroidx/compose/runtime/snapshots/GlobalSnapshot$takeNestedSnapshot$1;-><init>(Lkotlin/jvm/functions/Function1;)V
-PLandroidx/compose/runtime/snapshots/GlobalSnapshot$takeNestedSnapshot$1;->invoke(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/ReadonlySnapshot;
-PLandroidx/compose/runtime/snapshots/GlobalSnapshot$takeNestedSnapshot$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/runtime/snapshots/GlobalSnapshot;->takeNestedSnapshot(Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/Snapshot;
-PLandroidx/compose/runtime/snapshots/MutableSnapshot;->advance$runtime_release()V
-PLandroidx/compose/runtime/snapshots/MutableSnapshot;->getApplied$runtime_release()Z
-PLandroidx/compose/runtime/snapshots/MutableSnapshot;->getPreviousPinnedSnapshots$runtime_release()[I
-PLandroidx/compose/runtime/snapshots/MutableSnapshot;->nestedActivated$runtime_release(Landroidx/compose/runtime/snapshots/Snapshot;)V
-PLandroidx/compose/runtime/snapshots/MutableSnapshot;->notifyObjectsInitialized$runtime_release()V
-PLandroidx/compose/runtime/snapshots/MutableSnapshot;->recordPrevious$runtime_release(I)V
-PLandroidx/compose/runtime/snapshots/MutableSnapshot;->recordPreviousList$runtime_release(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)V
-PLandroidx/compose/runtime/snapshots/MutableSnapshot;->recordPreviousPinnedSnapshot$runtime_release(I)V
-PLandroidx/compose/runtime/snapshots/MutableSnapshot;->recordPreviousPinnedSnapshots$runtime_release([I)V
-PLandroidx/compose/runtime/snapshots/MutableSnapshot;->setApplied$runtime_release(Z)V
-PLandroidx/compose/runtime/snapshots/MutableSnapshot;->takeNestedMutableSnapshot(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/MutableSnapshot;
-PLandroidx/compose/runtime/snapshots/MutableSnapshot;->validateNotAppliedOrPinned$runtime_release()V
-PLandroidx/compose/runtime/snapshots/NestedMutableSnapshot;-><init>(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/snapshots/MutableSnapshot;)V
-PLandroidx/compose/runtime/snapshots/NestedMutableSnapshot;->apply()Landroidx/compose/runtime/snapshots/SnapshotApplyResult;
-PLandroidx/compose/runtime/snapshots/NestedMutableSnapshot;->deactivate()V
-PLandroidx/compose/runtime/snapshots/NestedMutableSnapshot;->dispose()V
-PLandroidx/compose/runtime/snapshots/ReadonlySnapshot;-><init>(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;Lkotlin/jvm/functions/Function1;)V
-PLandroidx/compose/runtime/snapshots/ReadonlySnapshot;->dispose()V
-PLandroidx/compose/runtime/snapshots/ReadonlySnapshot;->getReadObserver$runtime_release()Lkotlin/jvm/functions/Function1;
-PLandroidx/compose/runtime/snapshots/ReadonlySnapshot;->nestedDeactivated$runtime_release(Landroidx/compose/runtime/snapshots/Snapshot;)V
-PLandroidx/compose/runtime/snapshots/Snapshot$Companion$registerApplyObserver$2;->dispose()V
-PLandroidx/compose/runtime/snapshots/Snapshot$Companion;->takeSnapshot(Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/Snapshot;
-PLandroidx/compose/runtime/snapshots/Snapshot;->closeAndReleasePinning$runtime_release()V
-PLandroidx/compose/runtime/snapshots/Snapshot;->closeLocked$runtime_release()V
-PLandroidx/compose/runtime/snapshots/Snapshot;->setId$runtime_release(I)V
-PLandroidx/compose/runtime/snapshots/Snapshot;->setInvalid$runtime_release(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)V
-PLandroidx/compose/runtime/snapshots/Snapshot;->takeoverPinnedSnapshot$runtime_release()I
-PLandroidx/compose/runtime/snapshots/Snapshot;->validateNotDisposed$runtime_release()V
PLandroidx/compose/runtime/snapshots/SnapshotIdSet$iterator$1;-><init>(Landroidx/compose/runtime/snapshots/SnapshotIdSet;Lkotlin/coroutines/Continuation;)V
PLandroidx/compose/runtime/snapshots/SnapshotIdSet$iterator$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
PLandroidx/compose/runtime/snapshots/SnapshotIdSet$iterator$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
@@ -12753,988 +13646,51 @@
PLandroidx/compose/runtime/snapshots/SnapshotIdSet;->access$getLowerSet$p(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)J
PLandroidx/compose/runtime/snapshots/SnapshotIdSet;->access$getUpperSet$p(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)J
PLandroidx/compose/runtime/snapshots/SnapshotIdSet;->iterator()Ljava/util/Iterator;
-PLandroidx/compose/runtime/snapshots/SnapshotIdSetKt;->binarySearch([II)I
-PLandroidx/compose/runtime/snapshots/SnapshotKt$mergedReadObserver$1;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
-PLandroidx/compose/runtime/snapshots/SnapshotKt$mergedReadObserver$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/runtime/snapshots/SnapshotKt$mergedReadObserver$1;->invoke(Ljava/lang/Object;)V
-PLandroidx/compose/runtime/snapshots/SnapshotKt;->addRange(Landroidx/compose/runtime/snapshots/SnapshotIdSet;II)Landroidx/compose/runtime/snapshots/SnapshotIdSet;
-PLandroidx/compose/runtime/snapshots/SnapshotKt;->newWritableRecord(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;Landroidx/compose/runtime/snapshots/Snapshot;)Landroidx/compose/runtime/snapshots/StateRecord;
-PLandroidx/compose/runtime/snapshots/SnapshotKt;->writableRecord(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;Landroidx/compose/runtime/snapshots/Snapshot;)Landroidx/compose/runtime/snapshots/StateRecord;
-PLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->assign(Landroidx/compose/runtime/snapshots/StateRecord;)V
-PLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->create()Landroidx/compose/runtime/snapshots/StateRecord;
-PLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->getModification$runtime_release()I
-PLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->setList$runtime_release(Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList;)V
-PLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->setModification$runtime_release(I)V
-PLandroidx/compose/runtime/snapshots/SnapshotStateList;->add(Ljava/lang/Object;)Z
-PLandroidx/compose/runtime/snapshots/SnapshotStateList;->get(I)Ljava/lang/Object;
-PLandroidx/compose/runtime/snapshots/SnapshotStateList;->getSize()I
-PLandroidx/compose/runtime/snapshots/SnapshotStateList;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V
-PLandroidx/compose/runtime/snapshots/SnapshotStateList;->remove(Ljava/lang/Object;)Z
-PLandroidx/compose/runtime/snapshots/SnapshotStateList;->size()I
-PLandroidx/compose/runtime/snapshots/SnapshotStateListKt;-><clinit>()V
-PLandroidx/compose/runtime/snapshots/SnapshotStateListKt;->access$getSync$p()Ljava/lang/Object;
-PLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap$derivedStateEnterObserver$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->access$setDeriveStateScopeCount$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;I)V
-PLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->clear()V
-PLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->removeScopeIf(Lkotlin/jvm/functions/Function1;)V
-PLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->clear()V
-PLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->clearIf(Lkotlin/jvm/functions/Function1;)V
-PLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->stop()V
-PLandroidx/compose/ui/Modifier$Node;->onDetach()V
-PLandroidx/compose/ui/autofill/AutofillCallback;->unregister(Landroidx/compose/ui/autofill/AndroidAutofill;)V
-PLandroidx/compose/ui/draw/ClipKt;->clipToBounds(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
-PLandroidx/compose/ui/draw/PainterModifier;->calculateScaledSize-E7KxVPU(J)J
-PLandroidx/compose/ui/focus/FocusModifier$WhenMappings;-><clinit>()V
-PLandroidx/compose/ui/focus/FocusModifier;->isValid()Z
-PLandroidx/compose/ui/focus/FocusRequesterModifierLocal;->removeFocusModifier(Landroidx/compose/ui/focus/FocusModifier;)V
-PLandroidx/compose/ui/geometry/Offset;->copy-dBAh8RU$default(JFFILjava/lang/Object;)J
-PLandroidx/compose/ui/geometry/Offset;->copy-dBAh8RU(JFF)J
-PLandroidx/compose/ui/geometry/Offset;->equals-impl0(JJ)Z
PLandroidx/compose/ui/geometry/Offset;->getDistanceSquared-impl(J)F
-PLandroidx/compose/ui/geometry/Offset;->minus-MK-Hz9U(JJ)J
-PLandroidx/compose/ui/geometry/Offset;->plus-MK-Hz9U(JJ)J
-PLandroidx/compose/ui/geometry/Offset;->times-tuRUvjQ(JF)J
-PLandroidx/compose/ui/geometry/Rect;->getHeight()F
-PLandroidx/compose/ui/geometry/Rect;->getWidth()F
-PLandroidx/compose/ui/geometry/Size;->equals(Ljava/lang/Object;)Z
-PLandroidx/compose/ui/geometry/Size;->isEmpty-impl(J)Z
-PLandroidx/compose/ui/geometry/SizeKt;->getCenter-uvyYCjk(J)J
-PLandroidx/compose/ui/graphics/AndroidCanvas;->concat-58bKbWc([F)V
-PLandroidx/compose/ui/graphics/AndroidCanvas_androidKt;->ActualCanvas(Landroidx/compose/ui/graphics/ImageBitmap;)Landroidx/compose/ui/graphics/Canvas;
-PLandroidx/compose/ui/graphics/AndroidImageBitmap;->prepareToDraw()V
-PLandroidx/compose/ui/graphics/AndroidImageBitmap_androidKt;->ActualImageBitmap-x__-hDU(IIIZLandroidx/compose/ui/graphics/colorspace/ColorSpace;)Landroidx/compose/ui/graphics/ImageBitmap;
-PLandroidx/compose/ui/graphics/AndroidImageBitmap_androidKt;->toBitmapConfig-1JJdX4A(I)Landroid/graphics/Bitmap$Config;
-PLandroidx/compose/ui/graphics/AndroidMatrixConversions_androidKt;->setFrom-EL8BTi8(Landroid/graphics/Matrix;[F)V
-PLandroidx/compose/ui/graphics/AndroidMatrixConversions_androidKt;->setFrom-tU-YjHk([FLandroid/graphics/Matrix;)V
-PLandroidx/compose/ui/graphics/AndroidPaint;->setBlendMode-s9anfk8(I)V
-PLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->setNativeBlendMode-GB0RdKg(Landroid/graphics/Paint;I)V
-PLandroidx/compose/ui/graphics/AndroidPath;->addPath-Uv8p0NA(Landroidx/compose/ui/graphics/Path;J)V
-PLandroidx/compose/ui/graphics/AndroidPath;->close()V
-PLandroidx/compose/ui/graphics/AndroidPath;->lineTo(FF)V
-PLandroidx/compose/ui/graphics/AndroidPath;->moveTo(FF)V
-PLandroidx/compose/ui/graphics/AndroidPath;->relativeLineTo(FF)V
-PLandroidx/compose/ui/graphics/AndroidPath;->setFillType-oQ8Xj4U(I)V
-PLandroidx/compose/ui/graphics/Api26Bitmap;-><clinit>()V
-PLandroidx/compose/ui/graphics/Api26Bitmap;-><init>()V
-PLandroidx/compose/ui/graphics/Api26Bitmap;->createBitmap-x__-hDU$ui_graphics_release(IIIZLandroidx/compose/ui/graphics/colorspace/ColorSpace;)Landroid/graphics/Bitmap;
-PLandroidx/compose/ui/graphics/Api26Bitmap;->toFrameworkColorSpace$ui_graphics_release(Landroidx/compose/ui/graphics/colorspace/ColorSpace;)Landroid/graphics/ColorSpace;
-PLandroidx/compose/ui/graphics/BlendMode;-><init>(I)V
-PLandroidx/compose/ui/graphics/BlendMode;->box-impl(I)Landroidx/compose/ui/graphics/BlendMode;
-PLandroidx/compose/ui/graphics/Brush$Companion;-><init>()V
-PLandroidx/compose/ui/graphics/Brush$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/ui/graphics/Brush;-><clinit>()V
-PLandroidx/compose/ui/graphics/Brush;-><init>()V
-PLandroidx/compose/ui/graphics/Brush;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/ui/graphics/CanvasKt;->Canvas(Landroidx/compose/ui/graphics/ImageBitmap;)Landroidx/compose/ui/graphics/Canvas;
-PLandroidx/compose/ui/graphics/ColorKt;->access$getComponents-8_81llA(J)[F
-PLandroidx/compose/ui/graphics/ColorKt;->getComponents-8_81llA(J)[F
-PLandroidx/compose/ui/graphics/ColorKt;->lerp-jxsXWHM(JJF)J
-PLandroidx/compose/ui/graphics/Float16;->toFloat-impl(S)F
-PLandroidx/compose/ui/graphics/ImageBitmapConfig$Companion;-><init>()V
-PLandroidx/compose/ui/graphics/ImageBitmapConfig$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/ui/graphics/ImageBitmapConfig$Companion;->getArgb8888-_sVssgQ()I
-PLandroidx/compose/ui/graphics/ImageBitmapConfig;-><clinit>()V
-PLandroidx/compose/ui/graphics/ImageBitmapConfig;->access$getArgb8888$cp()I
-PLandroidx/compose/ui/graphics/ImageBitmapConfig;->constructor-impl(I)I
-PLandroidx/compose/ui/graphics/ImageBitmapConfig;->equals-impl0(II)Z
-PLandroidx/compose/ui/graphics/ImageBitmapKt;->ImageBitmap-x__-hDU$default(IIIZLandroidx/compose/ui/graphics/colorspace/ColorSpace;ILjava/lang/Object;)Landroidx/compose/ui/graphics/ImageBitmap;
-PLandroidx/compose/ui/graphics/ImageBitmapKt;->ImageBitmap-x__-hDU(IIIZLandroidx/compose/ui/graphics/colorspace/ColorSpace;)Landroidx/compose/ui/graphics/ImageBitmap;
-PLandroidx/compose/ui/graphics/Matrix;-><init>([F)V
-PLandroidx/compose/ui/graphics/Matrix;->box-impl([F)Landroidx/compose/ui/graphics/Matrix;
-PLandroidx/compose/ui/graphics/Matrix;->rotateZ-impl([FF)V
-PLandroidx/compose/ui/graphics/Matrix;->scale-impl([FFFF)V
-PLandroidx/compose/ui/graphics/Matrix;->translate-impl$default([FFFFILjava/lang/Object;)V
-PLandroidx/compose/ui/graphics/Matrix;->translate-impl([FFFF)V
-PLandroidx/compose/ui/graphics/Matrix;->unbox-impl()[F
-PLandroidx/compose/ui/graphics/MatrixKt;->isIdentity-58bKbWc([F)Z
-PLandroidx/compose/ui/graphics/Outline$Rectangle;-><init>(Landroidx/compose/ui/geometry/Rect;)V
-PLandroidx/compose/ui/graphics/Outline$Rectangle;->getRect()Landroidx/compose/ui/geometry/Rect;
-PLandroidx/compose/ui/graphics/OutlineKt;->size(Landroidx/compose/ui/geometry/Rect;)J
-PLandroidx/compose/ui/graphics/OutlineKt;->topLeft(Landroidx/compose/ui/geometry/Rect;)J
-PLandroidx/compose/ui/graphics/Path$Companion;-><clinit>()V
-PLandroidx/compose/ui/graphics/Path$Companion;-><init>()V
-PLandroidx/compose/ui/graphics/Path;-><clinit>()V
-PLandroidx/compose/ui/graphics/Path;->addPath-Uv8p0NA$default(Landroidx/compose/ui/graphics/Path;Landroidx/compose/ui/graphics/Path;JILjava/lang/Object;)V
-PLandroidx/compose/ui/graphics/PathFillType$Companion;-><init>()V
-PLandroidx/compose/ui/graphics/PathFillType$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/ui/graphics/PathFillType$Companion;->getEvenOdd-Rg-k1Os()I
-PLandroidx/compose/ui/graphics/PathFillType$Companion;->getNonZero-Rg-k1Os()I
-PLandroidx/compose/ui/graphics/PathFillType;-><clinit>()V
-PLandroidx/compose/ui/graphics/PathFillType;-><init>(I)V
-PLandroidx/compose/ui/graphics/PathFillType;->access$getEvenOdd$cp()I
-PLandroidx/compose/ui/graphics/PathFillType;->access$getNonZero$cp()I
-PLandroidx/compose/ui/graphics/PathFillType;->box-impl(I)Landroidx/compose/ui/graphics/PathFillType;
-PLandroidx/compose/ui/graphics/PathFillType;->constructor-impl(I)I
-PLandroidx/compose/ui/graphics/PathFillType;->equals-impl0(II)Z
-PLandroidx/compose/ui/graphics/PathFillType;->unbox-impl()I
-PLandroidx/compose/ui/graphics/RectHelper_androidKt;->toAndroidRect(Landroidx/compose/ui/geometry/Rect;)Landroid/graphics/Rect;
-PLandroidx/compose/ui/graphics/SolidColor;-><init>(J)V
-PLandroidx/compose/ui/graphics/SolidColor;-><init>(JLkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/ui/graphics/SolidColor;->applyTo-Pq9zytI(JLandroidx/compose/ui/graphics/Paint;F)V
-PLandroidx/compose/ui/graphics/StrokeCap$Companion;-><init>()V
-PLandroidx/compose/ui/graphics/StrokeCap$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/ui/graphics/StrokeCap$Companion;->getButt-KaPHkGw()I
-PLandroidx/compose/ui/graphics/StrokeCap;-><clinit>()V
-PLandroidx/compose/ui/graphics/StrokeCap;-><init>(I)V
-PLandroidx/compose/ui/graphics/StrokeCap;->access$getButt$cp()I
-PLandroidx/compose/ui/graphics/StrokeCap;->box-impl(I)Landroidx/compose/ui/graphics/StrokeCap;
-PLandroidx/compose/ui/graphics/StrokeCap;->constructor-impl(I)I
-PLandroidx/compose/ui/graphics/StrokeCap;->unbox-impl()I
-PLandroidx/compose/ui/graphics/StrokeJoin$Companion;-><init>()V
-PLandroidx/compose/ui/graphics/StrokeJoin$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/ui/graphics/StrokeJoin$Companion;->getBevel-LxFBmk8()I
-PLandroidx/compose/ui/graphics/StrokeJoin$Companion;->getMiter-LxFBmk8()I
-PLandroidx/compose/ui/graphics/StrokeJoin;-><clinit>()V
-PLandroidx/compose/ui/graphics/StrokeJoin;-><init>(I)V
-PLandroidx/compose/ui/graphics/StrokeJoin;->access$getBevel$cp()I
-PLandroidx/compose/ui/graphics/StrokeJoin;->access$getMiter$cp()I
-PLandroidx/compose/ui/graphics/StrokeJoin;->box-impl(I)Landroidx/compose/ui/graphics/StrokeJoin;
-PLandroidx/compose/ui/graphics/StrokeJoin;->constructor-impl(I)I
-PLandroidx/compose/ui/graphics/StrokeJoin;->unbox-impl()I
-PLandroidx/compose/ui/graphics/WrapperVerificationHelperMethods;-><clinit>()V
-PLandroidx/compose/ui/graphics/WrapperVerificationHelperMethods;-><init>()V
-PLandroidx/compose/ui/graphics/WrapperVerificationHelperMethods;->setBlendMode-GB0RdKg(Landroid/graphics/Paint;I)V
-PLandroidx/compose/ui/graphics/colorspace/ColorModel;->equals-impl0(JJ)Z
-PLandroidx/compose/ui/graphics/colorspace/ColorSpace;->equals(Ljava/lang/Object;)Z
-PLandroidx/compose/ui/graphics/colorspace/ColorSpace;->getModel-xdoWZVw()J
-PLandroidx/compose/ui/graphics/colorspace/ColorSpace;->getName()Ljava/lang/String;
-PLandroidx/compose/ui/graphics/colorspace/ColorSpace;->isSrgb()Z
-PLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->adapt$default(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/WhitePoint;Landroidx/compose/ui/graphics/colorspace/Adaptation;ILjava/lang/Object;)Landroidx/compose/ui/graphics/colorspace/ColorSpace;
-PLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->adapt(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/WhitePoint;Landroidx/compose/ui/graphics/colorspace/Adaptation;)Landroidx/compose/ui/graphics/colorspace/ColorSpace;
-PLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->connect-YBCOT_4$default(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;IILjava/lang/Object;)Landroidx/compose/ui/graphics/colorspace/Connector;
-PLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->connect-YBCOT_4(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;I)Landroidx/compose/ui/graphics/colorspace/Connector;
-PLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->getCieXyz()Landroidx/compose/ui/graphics/colorspace/ColorSpace;
-PLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->getOklab()Landroidx/compose/ui/graphics/colorspace/ColorSpace;
-PLandroidx/compose/ui/graphics/colorspace/Connector$Companion;-><init>()V
-PLandroidx/compose/ui/graphics/colorspace/Connector$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/ui/graphics/colorspace/Connector$Companion;->access$computeTransform-YBCOT_4(Landroidx/compose/ui/graphics/colorspace/Connector$Companion;Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;I)[F
-PLandroidx/compose/ui/graphics/colorspace/Connector$Companion;->computeTransform-YBCOT_4(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;I)[F
-PLandroidx/compose/ui/graphics/colorspace/Connector;-><clinit>()V
-PLandroidx/compose/ui/graphics/colorspace/Connector;-><init>(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;I)V
-PLandroidx/compose/ui/graphics/colorspace/Connector;-><init>(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/ui/graphics/colorspace/Connector;-><init>(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;I[F)V
-PLandroidx/compose/ui/graphics/colorspace/Connector;-><init>(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;I[FLkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/ui/graphics/colorspace/Connector;->transform([F)[F
-PLandroidx/compose/ui/graphics/colorspace/Oklab;->fromXyz([F)[F
-PLandroidx/compose/ui/graphics/colorspace/Oklab;->getMaxValue(I)F
-PLandroidx/compose/ui/graphics/colorspace/Oklab;->getMinValue(I)F
-PLandroidx/compose/ui/graphics/colorspace/Oklab;->toXyz([F)[F
-PLandroidx/compose/ui/graphics/colorspace/RenderIntent$Companion;-><init>()V
-PLandroidx/compose/ui/graphics/colorspace/RenderIntent$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/ui/graphics/colorspace/RenderIntent$Companion;->getAbsolute-uksYyKA()I
-PLandroidx/compose/ui/graphics/colorspace/RenderIntent$Companion;->getPerceptual-uksYyKA()I
-PLandroidx/compose/ui/graphics/colorspace/RenderIntent;-><clinit>()V
-PLandroidx/compose/ui/graphics/colorspace/RenderIntent;->access$getAbsolute$cp()I
-PLandroidx/compose/ui/graphics/colorspace/RenderIntent;->access$getPerceptual$cp()I
-PLandroidx/compose/ui/graphics/colorspace/RenderIntent;->constructor-impl(I)I
-PLandroidx/compose/ui/graphics/colorspace/RenderIntent;->equals-impl0(II)Z
-PLandroidx/compose/ui/graphics/colorspace/Rgb$eotf$1;->invoke(D)Ljava/lang/Double;
-PLandroidx/compose/ui/graphics/colorspace/Rgb$eotf$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/ui/graphics/colorspace/Rgb$oetf$1;->invoke(D)Ljava/lang/Double;
-PLandroidx/compose/ui/graphics/colorspace/Rgb$oetf$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/ui/graphics/colorspace/Rgb;-><init>(Landroidx/compose/ui/graphics/colorspace/Rgb;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;)V
-PLandroidx/compose/ui/graphics/colorspace/Rgb;->access$getMax$p(Landroidx/compose/ui/graphics/colorspace/Rgb;)F
-PLandroidx/compose/ui/graphics/colorspace/Rgb;->access$getMin$p(Landroidx/compose/ui/graphics/colorspace/Rgb;)F
-PLandroidx/compose/ui/graphics/colorspace/Rgb;->fromXyz([F)[F
-PLandroidx/compose/ui/graphics/colorspace/Rgb;->getTransform$ui_graphics_release()[F
-PLandroidx/compose/ui/graphics/colorspace/Rgb;->getWhitePoint()Landroidx/compose/ui/graphics/colorspace/WhitePoint;
-PLandroidx/compose/ui/graphics/colorspace/Rgb;->toXyz([F)[F
-PLandroidx/compose/ui/graphics/colorspace/Xyz;->clamp(F)F
-PLandroidx/compose/ui/graphics/colorspace/Xyz;->fromXyz([F)[F
-PLandroidx/compose/ui/graphics/colorspace/Xyz;->getMaxValue(I)F
-PLandroidx/compose/ui/graphics/colorspace/Xyz;->getMinValue(I)F
-PLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->configurePaint-swdJneE$default(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope;Landroidx/compose/ui/graphics/Brush;Landroidx/compose/ui/graphics/drawscope/DrawStyle;FLandroidx/compose/ui/graphics/ColorFilter;IIILjava/lang/Object;)Landroidx/compose/ui/graphics/Paint;
-PLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawPath-GBMwjPU(Landroidx/compose/ui/graphics/Path;Landroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V
-PLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->transform-58bKbWc([F)V
-PLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawPath-GBMwjPU$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/Path;Landroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;IILjava/lang/Object;)V
-PLandroidx/compose/ui/graphics/painter/BitmapPainter;->setFilterQuality-vDHp3xo$ui_graphics_release(I)V
-PLandroidx/compose/ui/graphics/painter/BitmapPainterKt;->BitmapPainter-QZhYCtY$default(Landroidx/compose/ui/graphics/ImageBitmap;JJIILjava/lang/Object;)Landroidx/compose/ui/graphics/painter/BitmapPainter;
-PLandroidx/compose/ui/graphics/painter/BitmapPainterKt;->BitmapPainter-QZhYCtY(Landroidx/compose/ui/graphics/ImageBitmap;JJI)Landroidx/compose/ui/graphics/painter/BitmapPainter;
-PLandroidx/compose/ui/graphics/vector/DrawCache;-><init>()V
-PLandroidx/compose/ui/graphics/vector/DrawCache;->clear(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V
-PLandroidx/compose/ui/graphics/vector/DrawCache;->drawCachedImage-CJJAR-o(JLandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;Lkotlin/jvm/functions/Function1;)V
-PLandroidx/compose/ui/graphics/vector/DrawCache;->drawInto(Landroidx/compose/ui/graphics/drawscope/DrawScope;FLandroidx/compose/ui/graphics/ColorFilter;)V
-PLandroidx/compose/ui/graphics/vector/GroupComponent;-><init>()V
-PLandroidx/compose/ui/graphics/vector/GroupComponent;->draw(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V
-PLandroidx/compose/ui/graphics/vector/GroupComponent;->getInvalidateListener$ui_release()Lkotlin/jvm/functions/Function0;
-PLandroidx/compose/ui/graphics/vector/GroupComponent;->getNumChildren()I
-PLandroidx/compose/ui/graphics/vector/GroupComponent;->getWillClipPath()Z
-PLandroidx/compose/ui/graphics/vector/GroupComponent;->insertAt(ILandroidx/compose/ui/graphics/vector/VNode;)V
-PLandroidx/compose/ui/graphics/vector/GroupComponent;->remove(II)V
-PLandroidx/compose/ui/graphics/vector/GroupComponent;->setInvalidateListener$ui_release(Lkotlin/jvm/functions/Function0;)V
-PLandroidx/compose/ui/graphics/vector/GroupComponent;->setName(Ljava/lang/String;)V
-PLandroidx/compose/ui/graphics/vector/GroupComponent;->setPivotX(F)V
-PLandroidx/compose/ui/graphics/vector/GroupComponent;->setPivotY(F)V
-PLandroidx/compose/ui/graphics/vector/GroupComponent;->setScaleX(F)V
-PLandroidx/compose/ui/graphics/vector/GroupComponent;->setScaleY(F)V
-PLandroidx/compose/ui/graphics/vector/GroupComponent;->updateClipPath()V
-PLandroidx/compose/ui/graphics/vector/GroupComponent;->updateMatrix()V
-PLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;-><init>(Ljava/lang/String;FFFFFFFLjava/util/List;Ljava/util/List;)V
-PLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;-><init>(Ljava/lang/String;FFFFFFFLjava/util/List;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getChildren()Ljava/util/List;
-PLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getClipPathData()Ljava/util/List;
-PLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getName()Ljava/lang/String;
-PLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getPivotX()F
-PLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getPivotY()F
-PLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getRotate()F
-PLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getScaleX()F
-PLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getScaleY()F
-PLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getTranslationX()F
-PLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getTranslationY()F
-PLandroidx/compose/ui/graphics/vector/ImageVector$Builder;-><clinit>()V
-PLandroidx/compose/ui/graphics/vector/ImageVector$Builder;-><init>(Ljava/lang/String;FFFFJIZ)V
-PLandroidx/compose/ui/graphics/vector/ImageVector$Builder;-><init>(Ljava/lang/String;FFFFJIZILkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/ui/graphics/vector/ImageVector$Builder;-><init>(Ljava/lang/String;FFFFJIZLkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->addPath-oIyEayM$default(Landroidx/compose/ui/graphics/vector/ImageVector$Builder;Ljava/util/List;ILjava/lang/String;Landroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Brush;FFIIFFFFILjava/lang/Object;)Landroidx/compose/ui/graphics/vector/ImageVector$Builder;
-PLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->addPath-oIyEayM(Ljava/util/List;ILjava/lang/String;Landroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Brush;FFIIFFFF)Landroidx/compose/ui/graphics/vector/ImageVector$Builder;
-PLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->asVectorGroup(Landroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;)Landroidx/compose/ui/graphics/vector/VectorGroup;
-PLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->build()Landroidx/compose/ui/graphics/vector/ImageVector;
-PLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->ensureNotConsumed()V
-PLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->getCurrentGroup()Landroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;
-PLandroidx/compose/ui/graphics/vector/ImageVector$Companion;-><init>()V
-PLandroidx/compose/ui/graphics/vector/ImageVector$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/ui/graphics/vector/ImageVector;-><clinit>()V
-PLandroidx/compose/ui/graphics/vector/ImageVector;-><init>(Ljava/lang/String;FFFFLandroidx/compose/ui/graphics/vector/VectorGroup;JIZ)V
-PLandroidx/compose/ui/graphics/vector/ImageVector;-><init>(Ljava/lang/String;FFFFLandroidx/compose/ui/graphics/vector/VectorGroup;JIZLkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/ui/graphics/vector/ImageVector;->equals(Ljava/lang/Object;)Z
-PLandroidx/compose/ui/graphics/vector/ImageVector;->getAutoMirror()Z
-PLandroidx/compose/ui/graphics/vector/ImageVector;->getDefaultHeight-D9Ej5fM()F
-PLandroidx/compose/ui/graphics/vector/ImageVector;->getDefaultWidth-D9Ej5fM()F
-PLandroidx/compose/ui/graphics/vector/ImageVector;->getName()Ljava/lang/String;
-PLandroidx/compose/ui/graphics/vector/ImageVector;->getRoot()Landroidx/compose/ui/graphics/vector/VectorGroup;
-PLandroidx/compose/ui/graphics/vector/ImageVector;->getTintBlendMode-0nO6VwU()I
-PLandroidx/compose/ui/graphics/vector/ImageVector;->getTintColor-0d7_KjU()J
-PLandroidx/compose/ui/graphics/vector/ImageVector;->getViewportHeight()F
-PLandroidx/compose/ui/graphics/vector/ImageVector;->getViewportWidth()F
-PLandroidx/compose/ui/graphics/vector/ImageVectorKt;->access$peek(Ljava/util/ArrayList;)Ljava/lang/Object;
-PLandroidx/compose/ui/graphics/vector/ImageVectorKt;->access$push(Ljava/util/ArrayList;Ljava/lang/Object;)Z
-PLandroidx/compose/ui/graphics/vector/ImageVectorKt;->peek(Ljava/util/ArrayList;)Ljava/lang/Object;
-PLandroidx/compose/ui/graphics/vector/ImageVectorKt;->push(Ljava/util/ArrayList;Ljava/lang/Object;)Z
-PLandroidx/compose/ui/graphics/vector/PathBuilder;-><init>()V
-PLandroidx/compose/ui/graphics/vector/PathBuilder;->addNode(Landroidx/compose/ui/graphics/vector/PathNode;)Landroidx/compose/ui/graphics/vector/PathBuilder;
-PLandroidx/compose/ui/graphics/vector/PathBuilder;->close()Landroidx/compose/ui/graphics/vector/PathBuilder;
-PLandroidx/compose/ui/graphics/vector/PathBuilder;->getNodes()Ljava/util/List;
-PLandroidx/compose/ui/graphics/vector/PathBuilder;->horizontalLineTo(F)Landroidx/compose/ui/graphics/vector/PathBuilder;
-PLandroidx/compose/ui/graphics/vector/PathBuilder;->horizontalLineToRelative(F)Landroidx/compose/ui/graphics/vector/PathBuilder;
-PLandroidx/compose/ui/graphics/vector/PathBuilder;->lineTo(FF)Landroidx/compose/ui/graphics/vector/PathBuilder;
-PLandroidx/compose/ui/graphics/vector/PathBuilder;->lineToRelative(FF)Landroidx/compose/ui/graphics/vector/PathBuilder;
-PLandroidx/compose/ui/graphics/vector/PathBuilder;->moveTo(FF)Landroidx/compose/ui/graphics/vector/PathBuilder;
-PLandroidx/compose/ui/graphics/vector/PathBuilder;->verticalLineTo(F)Landroidx/compose/ui/graphics/vector/PathBuilder;
-PLandroidx/compose/ui/graphics/vector/PathBuilder;->verticalLineToRelative(F)Landroidx/compose/ui/graphics/vector/PathBuilder;
-PLandroidx/compose/ui/graphics/vector/PathComponent$pathMeasure$2;-><clinit>()V
-PLandroidx/compose/ui/graphics/vector/PathComponent$pathMeasure$2;-><init>()V
-PLandroidx/compose/ui/graphics/vector/PathComponent;-><init>()V
-PLandroidx/compose/ui/graphics/vector/PathComponent;->draw(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V
-PLandroidx/compose/ui/graphics/vector/PathComponent;->setFill(Landroidx/compose/ui/graphics/Brush;)V
-PLandroidx/compose/ui/graphics/vector/PathComponent;->setFillAlpha(F)V
-PLandroidx/compose/ui/graphics/vector/PathComponent;->setName(Ljava/lang/String;)V
-PLandroidx/compose/ui/graphics/vector/PathComponent;->setPathData(Ljava/util/List;)V
-PLandroidx/compose/ui/graphics/vector/PathComponent;->setPathFillType-oQ8Xj4U(I)V
-PLandroidx/compose/ui/graphics/vector/PathComponent;->setStroke(Landroidx/compose/ui/graphics/Brush;)V
-PLandroidx/compose/ui/graphics/vector/PathComponent;->setStrokeAlpha(F)V
-PLandroidx/compose/ui/graphics/vector/PathComponent;->setStrokeLineCap-BeK7IIE(I)V
-PLandroidx/compose/ui/graphics/vector/PathComponent;->setStrokeLineJoin-Ww9F2mQ(I)V
-PLandroidx/compose/ui/graphics/vector/PathComponent;->setStrokeLineMiter(F)V
-PLandroidx/compose/ui/graphics/vector/PathComponent;->setStrokeLineWidth(F)V
-PLandroidx/compose/ui/graphics/vector/PathComponent;->setTrimPathEnd(F)V
-PLandroidx/compose/ui/graphics/vector/PathComponent;->setTrimPathOffset(F)V
-PLandroidx/compose/ui/graphics/vector/PathComponent;->setTrimPathStart(F)V
-PLandroidx/compose/ui/graphics/vector/PathComponent;->updatePath()V
-PLandroidx/compose/ui/graphics/vector/PathComponent;->updateRenderPath()V
-PLandroidx/compose/ui/graphics/vector/PathNode$Close;-><clinit>()V
-PLandroidx/compose/ui/graphics/vector/PathNode$Close;-><init>()V
-PLandroidx/compose/ui/graphics/vector/PathNode$HorizontalTo;-><init>(F)V
-PLandroidx/compose/ui/graphics/vector/PathNode$HorizontalTo;->getX()F
-PLandroidx/compose/ui/graphics/vector/PathNode$LineTo;-><init>(FF)V
-PLandroidx/compose/ui/graphics/vector/PathNode$LineTo;->getX()F
-PLandroidx/compose/ui/graphics/vector/PathNode$LineTo;->getY()F
-PLandroidx/compose/ui/graphics/vector/PathNode$MoveTo;-><init>(FF)V
-PLandroidx/compose/ui/graphics/vector/PathNode$MoveTo;->getX()F
-PLandroidx/compose/ui/graphics/vector/PathNode$MoveTo;->getY()F
-PLandroidx/compose/ui/graphics/vector/PathNode$RelativeHorizontalTo;-><init>(F)V
-PLandroidx/compose/ui/graphics/vector/PathNode$RelativeHorizontalTo;->getDx()F
-PLandroidx/compose/ui/graphics/vector/PathNode$RelativeLineTo;-><init>(FF)V
-PLandroidx/compose/ui/graphics/vector/PathNode$RelativeLineTo;->getDx()F
-PLandroidx/compose/ui/graphics/vector/PathNode$RelativeLineTo;->getDy()F
-PLandroidx/compose/ui/graphics/vector/PathNode$RelativeVerticalTo;-><init>(F)V
-PLandroidx/compose/ui/graphics/vector/PathNode$RelativeVerticalTo;->getDy()F
-PLandroidx/compose/ui/graphics/vector/PathNode$VerticalTo;-><init>(F)V
-PLandroidx/compose/ui/graphics/vector/PathNode$VerticalTo;->getY()F
-PLandroidx/compose/ui/graphics/vector/PathNode;-><init>(ZZ)V
-PLandroidx/compose/ui/graphics/vector/PathNode;-><init>(ZZILkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/ui/graphics/vector/PathNode;-><init>(ZZLkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/ui/graphics/vector/PathParser$PathPoint;-><init>(FF)V
-PLandroidx/compose/ui/graphics/vector/PathParser$PathPoint;-><init>(FFILkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/ui/graphics/vector/PathParser$PathPoint;->getX()F
-PLandroidx/compose/ui/graphics/vector/PathParser$PathPoint;->getY()F
-PLandroidx/compose/ui/graphics/vector/PathParser$PathPoint;->reset()V
-PLandroidx/compose/ui/graphics/vector/PathParser$PathPoint;->setX(F)V
-PLandroidx/compose/ui/graphics/vector/PathParser$PathPoint;->setY(F)V
-PLandroidx/compose/ui/graphics/vector/PathParser;-><init>()V
-PLandroidx/compose/ui/graphics/vector/PathParser;->addPathNodes(Ljava/util/List;)Landroidx/compose/ui/graphics/vector/PathParser;
-PLandroidx/compose/ui/graphics/vector/PathParser;->clear()V
-PLandroidx/compose/ui/graphics/vector/PathParser;->close(Landroidx/compose/ui/graphics/Path;)V
-PLandroidx/compose/ui/graphics/vector/PathParser;->horizontalTo(Landroidx/compose/ui/graphics/vector/PathNode$HorizontalTo;Landroidx/compose/ui/graphics/Path;)V
-PLandroidx/compose/ui/graphics/vector/PathParser;->lineTo(Landroidx/compose/ui/graphics/vector/PathNode$LineTo;Landroidx/compose/ui/graphics/Path;)V
-PLandroidx/compose/ui/graphics/vector/PathParser;->moveTo(Landroidx/compose/ui/graphics/vector/PathNode$MoveTo;Landroidx/compose/ui/graphics/Path;)V
-PLandroidx/compose/ui/graphics/vector/PathParser;->relativeHorizontalTo(Landroidx/compose/ui/graphics/vector/PathNode$RelativeHorizontalTo;Landroidx/compose/ui/graphics/Path;)V
-PLandroidx/compose/ui/graphics/vector/PathParser;->relativeLineTo(Landroidx/compose/ui/graphics/vector/PathNode$RelativeLineTo;Landroidx/compose/ui/graphics/Path;)V
-PLandroidx/compose/ui/graphics/vector/PathParser;->relativeVerticalTo(Landroidx/compose/ui/graphics/vector/PathNode$RelativeVerticalTo;Landroidx/compose/ui/graphics/Path;)V
-PLandroidx/compose/ui/graphics/vector/PathParser;->toPath(Landroidx/compose/ui/graphics/Path;)Landroidx/compose/ui/graphics/Path;
-PLandroidx/compose/ui/graphics/vector/PathParser;->verticalTo(Landroidx/compose/ui/graphics/vector/PathNode$VerticalTo;Landroidx/compose/ui/graphics/Path;)V
-PLandroidx/compose/ui/graphics/vector/VNode;-><clinit>()V
-PLandroidx/compose/ui/graphics/vector/VNode;-><init>()V
-PLandroidx/compose/ui/graphics/vector/VNode;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/ui/graphics/vector/VNode;->getInvalidateListener$ui_release()Lkotlin/jvm/functions/Function0;
-PLandroidx/compose/ui/graphics/vector/VNode;->invalidate()V
-PLandroidx/compose/ui/graphics/vector/VNode;->setInvalidateListener$ui_release(Lkotlin/jvm/functions/Function0;)V
-PLandroidx/compose/ui/graphics/vector/VectorApplier;-><clinit>()V
-PLandroidx/compose/ui/graphics/vector/VectorApplier;-><init>(Landroidx/compose/ui/graphics/vector/VNode;)V
-PLandroidx/compose/ui/graphics/vector/VectorApplier;->asGroup(Landroidx/compose/ui/graphics/vector/VNode;)Landroidx/compose/ui/graphics/vector/GroupComponent;
-PLandroidx/compose/ui/graphics/vector/VectorApplier;->insertBottomUp(ILandroidx/compose/ui/graphics/vector/VNode;)V
-PLandroidx/compose/ui/graphics/vector/VectorApplier;->insertBottomUp(ILjava/lang/Object;)V
-PLandroidx/compose/ui/graphics/vector/VectorApplier;->insertTopDown(ILandroidx/compose/ui/graphics/vector/VNode;)V
-PLandroidx/compose/ui/graphics/vector/VectorApplier;->insertTopDown(ILjava/lang/Object;)V
-PLandroidx/compose/ui/graphics/vector/VectorApplier;->onClear()V
-PLandroidx/compose/ui/graphics/vector/VectorComponent$drawVectorBlock$1;-><init>(Landroidx/compose/ui/graphics/vector/VectorComponent;)V
-PLandroidx/compose/ui/graphics/vector/VectorComponent$drawVectorBlock$1;->invoke(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V
-PLandroidx/compose/ui/graphics/vector/VectorComponent$drawVectorBlock$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/ui/graphics/vector/VectorComponent$invalidateCallback$1;-><clinit>()V
-PLandroidx/compose/ui/graphics/vector/VectorComponent$invalidateCallback$1;-><init>()V
-PLandroidx/compose/ui/graphics/vector/VectorComponent$root$1$1;-><init>(Landroidx/compose/ui/graphics/vector/VectorComponent;)V
-PLandroidx/compose/ui/graphics/vector/VectorComponent$root$1$1;->invoke()Ljava/lang/Object;
-PLandroidx/compose/ui/graphics/vector/VectorComponent$root$1$1;->invoke()V
-PLandroidx/compose/ui/graphics/vector/VectorComponent;-><init>()V
-PLandroidx/compose/ui/graphics/vector/VectorComponent;->access$doInvalidate(Landroidx/compose/ui/graphics/vector/VectorComponent;)V
-PLandroidx/compose/ui/graphics/vector/VectorComponent;->doInvalidate()V
-PLandroidx/compose/ui/graphics/vector/VectorComponent;->draw(Landroidx/compose/ui/graphics/drawscope/DrawScope;FLandroidx/compose/ui/graphics/ColorFilter;)V
-PLandroidx/compose/ui/graphics/vector/VectorComponent;->getRoot()Landroidx/compose/ui/graphics/vector/GroupComponent;
-PLandroidx/compose/ui/graphics/vector/VectorComponent;->getViewportHeight()F
-PLandroidx/compose/ui/graphics/vector/VectorComponent;->getViewportWidth()F
-PLandroidx/compose/ui/graphics/vector/VectorComponent;->setIntrinsicColorFilter$ui_release(Landroidx/compose/ui/graphics/ColorFilter;)V
-PLandroidx/compose/ui/graphics/vector/VectorComponent;->setInvalidateCallback$ui_release(Lkotlin/jvm/functions/Function0;)V
-PLandroidx/compose/ui/graphics/vector/VectorComponent;->setName(Ljava/lang/String;)V
-PLandroidx/compose/ui/graphics/vector/VectorComponent;->setViewportHeight(F)V
-PLandroidx/compose/ui/graphics/vector/VectorComponent;->setViewportWidth(F)V
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$1;-><clinit>()V
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$1;-><init>()V
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$1;->invoke()Landroidx/compose/ui/graphics/vector/PathComponent;
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$1;->invoke()Ljava/lang/Object;
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$10;-><clinit>()V
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$10;-><init>()V
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$10;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$10;->invoke-CSYIeUk(Landroidx/compose/ui/graphics/vector/PathComponent;I)V
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$11;-><clinit>()V
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$11;-><init>()V
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$11;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;F)V
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$11;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$12;-><clinit>()V
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$12;-><init>()V
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$12;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;F)V
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$12;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$13;-><clinit>()V
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$13;-><init>()V
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$13;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;F)V
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$13;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$14;-><clinit>()V
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$14;-><init>()V
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$14;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;F)V
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$14;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$1;-><clinit>()V
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$1;-><init>()V
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$1;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;Ljava/lang/String;)V
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$2;-><clinit>()V
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$2;-><init>()V
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$2;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;Ljava/util/List;)V
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$3;-><clinit>()V
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$3;-><init>()V
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$3;->invoke-pweu1eQ(Landroidx/compose/ui/graphics/vector/PathComponent;I)V
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$4;-><clinit>()V
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$4;-><init>()V
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$4;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;Landroidx/compose/ui/graphics/Brush;)V
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$5;-><clinit>()V
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$5;-><init>()V
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$5;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;F)V
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$6;-><clinit>()V
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$6;-><init>()V
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$6;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;Landroidx/compose/ui/graphics/Brush;)V
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$6;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$7;-><clinit>()V
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$7;-><init>()V
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$7;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;F)V
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$7;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$8;-><clinit>()V
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$8;-><init>()V
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$8;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;F)V
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$8;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$9;-><clinit>()V
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$9;-><init>()V
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$9;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$9;->invoke-kLtJ_vA(Landroidx/compose/ui/graphics/vector/PathComponent;I)V
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path-9cdaXJ4$$inlined$ComposeNode$1;-><init>(Lkotlin/jvm/functions/Function0;)V
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path-9cdaXJ4$$inlined$ComposeNode$1;->invoke()Ljava/lang/Object;
-PLandroidx/compose/ui/graphics/vector/VectorComposeKt;->Path-9cdaXJ4(Ljava/util/List;ILjava/lang/String;Landroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Brush;FFIIFFFFLandroidx/compose/runtime/Composer;III)V
-PLandroidx/compose/ui/graphics/vector/VectorConfig;->getOrDefault(Landroidx/compose/ui/graphics/vector/VectorProperty;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/ui/graphics/vector/VectorGroup$iterator$1;-><init>(Landroidx/compose/ui/graphics/vector/VectorGroup;)V
-PLandroidx/compose/ui/graphics/vector/VectorGroup$iterator$1;->hasNext()Z
-PLandroidx/compose/ui/graphics/vector/VectorGroup$iterator$1;->next()Landroidx/compose/ui/graphics/vector/VectorNode;
-PLandroidx/compose/ui/graphics/vector/VectorGroup$iterator$1;->next()Ljava/lang/Object;
-PLandroidx/compose/ui/graphics/vector/VectorGroup;-><init>(Ljava/lang/String;FFFFFFFLjava/util/List;Ljava/util/List;)V
-PLandroidx/compose/ui/graphics/vector/VectorGroup;->access$getChildren$p(Landroidx/compose/ui/graphics/vector/VectorGroup;)Ljava/util/List;
-PLandroidx/compose/ui/graphics/vector/VectorGroup;->iterator()Ljava/util/Iterator;
-PLandroidx/compose/ui/graphics/vector/VectorKt;-><clinit>()V
-PLandroidx/compose/ui/graphics/vector/VectorKt;->getDefaultFillType()I
-PLandroidx/compose/ui/graphics/vector/VectorKt;->getDefaultStrokeLineCap()I
-PLandroidx/compose/ui/graphics/vector/VectorKt;->getDefaultStrokeLineJoin()I
-PLandroidx/compose/ui/graphics/vector/VectorKt;->getEmptyPath()Ljava/util/List;
-PLandroidx/compose/ui/graphics/vector/VectorNode;-><clinit>()V
-PLandroidx/compose/ui/graphics/vector/VectorNode;-><init>()V
-PLandroidx/compose/ui/graphics/vector/VectorNode;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/runtime/Composition;)V
-PLandroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2$invoke$$inlined$onDispose$1;->dispose()V
-PLandroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2;-><init>(Landroidx/compose/runtime/Composition;)V
-PLandroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult;
-PLandroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/ui/graphics/vector/VectorPainter$composeVector$1;-><init>(Lkotlin/jvm/functions/Function4;Landroidx/compose/ui/graphics/vector/VectorPainter;)V
-PLandroidx/compose/ui/graphics/vector/VectorPainter$composeVector$1;->invoke(Landroidx/compose/runtime/Composer;I)V
-PLandroidx/compose/ui/graphics/vector/VectorPainter$composeVector$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/ui/graphics/vector/VectorPainter$vector$1$1;-><init>(Landroidx/compose/ui/graphics/vector/VectorPainter;)V
-PLandroidx/compose/ui/graphics/vector/VectorPainter$vector$1$1;->invoke()Ljava/lang/Object;
-PLandroidx/compose/ui/graphics/vector/VectorPainter$vector$1$1;->invoke()V
-PLandroidx/compose/ui/graphics/vector/VectorPainter;-><clinit>()V
-PLandroidx/compose/ui/graphics/vector/VectorPainter;-><init>()V
-PLandroidx/compose/ui/graphics/vector/VectorPainter;->RenderVector$ui_release(Ljava/lang/String;FFLkotlin/jvm/functions/Function4;Landroidx/compose/runtime/Composer;I)V
-PLandroidx/compose/ui/graphics/vector/VectorPainter;->access$getVector$p(Landroidx/compose/ui/graphics/vector/VectorPainter;)Landroidx/compose/ui/graphics/vector/VectorComponent;
-PLandroidx/compose/ui/graphics/vector/VectorPainter;->access$setDirty(Landroidx/compose/ui/graphics/vector/VectorPainter;Z)V
-PLandroidx/compose/ui/graphics/vector/VectorPainter;->applyColorFilter(Landroidx/compose/ui/graphics/ColorFilter;)Z
-PLandroidx/compose/ui/graphics/vector/VectorPainter;->composeVector(Landroidx/compose/runtime/CompositionContext;Lkotlin/jvm/functions/Function4;)Landroidx/compose/runtime/Composition;
-PLandroidx/compose/ui/graphics/vector/VectorPainter;->getAutoMirror$ui_release()Z
-PLandroidx/compose/ui/graphics/vector/VectorPainter;->getIntrinsicSize-NH-jbRc()J
-PLandroidx/compose/ui/graphics/vector/VectorPainter;->getSize-NH-jbRc$ui_release()J
-PLandroidx/compose/ui/graphics/vector/VectorPainter;->isDirty()Z
-PLandroidx/compose/ui/graphics/vector/VectorPainter;->onDraw(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V
-PLandroidx/compose/ui/graphics/vector/VectorPainter;->setAutoMirror$ui_release(Z)V
-PLandroidx/compose/ui/graphics/vector/VectorPainter;->setDirty(Z)V
-PLandroidx/compose/ui/graphics/vector/VectorPainter;->setIntrinsicColorFilter$ui_release(Landroidx/compose/ui/graphics/ColorFilter;)V
-PLandroidx/compose/ui/graphics/vector/VectorPainter;->setSize-uvyYCjk$ui_release(J)V
-PLandroidx/compose/ui/graphics/vector/VectorPainterKt$RenderVectorGroup$config$1;-><init>()V
-PLandroidx/compose/ui/graphics/vector/VectorPainterKt$rememberVectorPainter$3;-><init>(Landroidx/compose/ui/graphics/vector/ImageVector;)V
-PLandroidx/compose/ui/graphics/vector/VectorPainterKt$rememberVectorPainter$3;->invoke(FFLandroidx/compose/runtime/Composer;I)V
-PLandroidx/compose/ui/graphics/vector/VectorPainterKt$rememberVectorPainter$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/ui/graphics/vector/VectorPainterKt;->RenderVectorGroup(Landroidx/compose/ui/graphics/vector/VectorGroup;Ljava/util/Map;Landroidx/compose/runtime/Composer;II)V
-PLandroidx/compose/ui/graphics/vector/VectorPainterKt;->rememberVectorPainter(Landroidx/compose/ui/graphics/vector/ImageVector;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/graphics/vector/VectorPainter;
-PLandroidx/compose/ui/graphics/vector/VectorPainterKt;->rememberVectorPainter-vIP8VLU(FFFFLjava/lang/String;JIZLkotlin/jvm/functions/Function4;Landroidx/compose/runtime/Composer;II)Landroidx/compose/ui/graphics/vector/VectorPainter;
-PLandroidx/compose/ui/graphics/vector/VectorPath;-><init>(Ljava/lang/String;Ljava/util/List;ILandroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Brush;FFIIFFFF)V
-PLandroidx/compose/ui/graphics/vector/VectorPath;-><init>(Ljava/lang/String;Ljava/util/List;ILandroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Brush;FFIIFFFFLkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/ui/graphics/vector/VectorPath;->getFill()Landroidx/compose/ui/graphics/Brush;
-PLandroidx/compose/ui/graphics/vector/VectorPath;->getFillAlpha()F
-PLandroidx/compose/ui/graphics/vector/VectorPath;->getName()Ljava/lang/String;
-PLandroidx/compose/ui/graphics/vector/VectorPath;->getPathData()Ljava/util/List;
-PLandroidx/compose/ui/graphics/vector/VectorPath;->getPathFillType-Rg-k1Os()I
-PLandroidx/compose/ui/graphics/vector/VectorPath;->getStroke()Landroidx/compose/ui/graphics/Brush;
-PLandroidx/compose/ui/graphics/vector/VectorPath;->getStrokeAlpha()F
-PLandroidx/compose/ui/graphics/vector/VectorPath;->getStrokeLineCap-KaPHkGw()I
-PLandroidx/compose/ui/graphics/vector/VectorPath;->getStrokeLineJoin-LxFBmk8()I
-PLandroidx/compose/ui/graphics/vector/VectorPath;->getStrokeLineMiter()F
-PLandroidx/compose/ui/graphics/vector/VectorPath;->getStrokeLineWidth()F
-PLandroidx/compose/ui/graphics/vector/VectorPath;->getTrimPathEnd()F
-PLandroidx/compose/ui/graphics/vector/VectorPath;->getTrimPathOffset()F
-PLandroidx/compose/ui/graphics/vector/VectorPath;->getTrimPathStart()F
-PLandroidx/compose/ui/graphics/vector/VectorProperty$Fill;-><clinit>()V
-PLandroidx/compose/ui/graphics/vector/VectorProperty$Fill;-><init>()V
-PLandroidx/compose/ui/graphics/vector/VectorProperty$FillAlpha;-><clinit>()V
-PLandroidx/compose/ui/graphics/vector/VectorProperty$FillAlpha;-><init>()V
-PLandroidx/compose/ui/graphics/vector/VectorProperty$PathData;-><clinit>()V
-PLandroidx/compose/ui/graphics/vector/VectorProperty$PathData;-><init>()V
-PLandroidx/compose/ui/graphics/vector/VectorProperty$Stroke;-><clinit>()V
-PLandroidx/compose/ui/graphics/vector/VectorProperty$Stroke;-><init>()V
-PLandroidx/compose/ui/graphics/vector/VectorProperty$StrokeAlpha;-><clinit>()V
-PLandroidx/compose/ui/graphics/vector/VectorProperty$StrokeAlpha;-><init>()V
-PLandroidx/compose/ui/graphics/vector/VectorProperty$StrokeLineWidth;-><clinit>()V
-PLandroidx/compose/ui/graphics/vector/VectorProperty$StrokeLineWidth;-><init>()V
-PLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathEnd;-><clinit>()V
-PLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathEnd;-><init>()V
-PLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathOffset;-><clinit>()V
-PLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathOffset;-><init>()V
-PLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathStart;-><clinit>()V
-PLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathStart;-><init>()V
-PLandroidx/compose/ui/graphics/vector/VectorProperty;-><clinit>()V
-PLandroidx/compose/ui/graphics/vector/VectorProperty;-><init>()V
-PLandroidx/compose/ui/graphics/vector/VectorProperty;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/ui/input/ScrollContainerInfoKt$provideScrollContainerInfo$2;-><init>(Landroidx/compose/ui/input/ScrollContainerInfo;)V
-PLandroidx/compose/ui/input/ScrollContainerInfoKt$provideScrollContainerInfo$2;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier;
-PLandroidx/compose/ui/input/ScrollContainerInfoKt$provideScrollContainerInfo$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/ui/input/ScrollContainerInfoKt;->canScroll(Landroidx/compose/ui/input/ScrollContainerInfo;)Z
-PLandroidx/compose/ui/input/ScrollContainerInfoKt;->provideScrollContainerInfo(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/input/ScrollContainerInfo;)Landroidx/compose/ui/Modifier;
-PLandroidx/compose/ui/input/ScrollContainerInfoModifierLocal;-><init>(Landroidx/compose/ui/input/ScrollContainerInfo;)V
-PLandroidx/compose/ui/input/ScrollContainerInfoModifierLocal;->canScrollVertically()Z
-PLandroidx/compose/ui/input/ScrollContainerInfoModifierLocal;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
-PLandroidx/compose/ui/input/ScrollContainerInfoModifierLocal;->getValue()Landroidx/compose/ui/input/ScrollContainerInfoModifierLocal;
-PLandroidx/compose/ui/input/ScrollContainerInfoModifierLocal;->getValue()Ljava/lang/Object;
-PLandroidx/compose/ui/input/ScrollContainerInfoModifierLocal;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V
-PLandroidx/compose/ui/input/ScrollContainerInfoModifierLocal;->setParent(Landroidx/compose/ui/input/ScrollContainerInfo;)V
-PLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher$dispatchPostFling$1;-><init>(Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;Lkotlin/coroutines/Continuation;)V
-PLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher$dispatchPostFling$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher$dispatchPreFling$1;-><init>(Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;Lkotlin/coroutines/Continuation;)V
-PLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;->dispatchPostFling-RZ2iAVY(JJLkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;->dispatchPostScroll-DzOQY0M(JJI)J
-PLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;->dispatchPreFling-QWom1Mo(JLkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;->dispatchPreScroll-OzD1aCk(JI)J
-PLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;->getCoroutineScope()Lkotlinx/coroutines/CoroutineScope;
-PLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;->getOriginNestedScrollScope$ui_release()Lkotlinx/coroutines/CoroutineScope;
-PLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal$1;->invoke()Ljava/lang/Object;
-PLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal$1;->invoke()Lkotlinx/coroutines/CoroutineScope;
-PLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal$onPostFling$1;-><init>(Landroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal;Lkotlin/coroutines/Continuation;)V
-PLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal$onPostFling$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal$onPreFling$1;-><init>(Landroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal;Lkotlin/coroutines/Continuation;)V
-PLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal;->access$getNestedCoroutineScope(Landroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal;)Lkotlinx/coroutines/CoroutineScope;
-PLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal;->getNestedCoroutineScope()Lkotlinx/coroutines/CoroutineScope;
-PLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal;->getValue()Landroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal;
-PLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal;->getValue()Ljava/lang/Object;
-PLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal;->onPostFling-RZ2iAVY(JJLkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal;->onPostScroll-DzOQY0M(JJI)J
-PLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal;->onPreFling-QWom1Mo(JLkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal;->onPreScroll-OzD1aCk(JI)J
-PLandroidx/compose/ui/input/nestedscroll/NestedScrollSource$Companion;-><init>()V
-PLandroidx/compose/ui/input/nestedscroll/NestedScrollSource$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/ui/input/nestedscroll/NestedScrollSource$Companion;->getDrag-WNlRxjI()I
-PLandroidx/compose/ui/input/nestedscroll/NestedScrollSource$Companion;->getFling-WNlRxjI()I
-PLandroidx/compose/ui/input/nestedscroll/NestedScrollSource;-><clinit>()V
-PLandroidx/compose/ui/input/nestedscroll/NestedScrollSource;->access$getDrag$cp()I
-PLandroidx/compose/ui/input/nestedscroll/NestedScrollSource;->access$getFling$cp()I
-PLandroidx/compose/ui/input/nestedscroll/NestedScrollSource;->constructor-impl(I)I
-PLandroidx/compose/ui/input/nestedscroll/NestedScrollSource;->equals-impl0(II)Z
-PLandroidx/compose/ui/input/pointer/ConsumedData;-><clinit>()V
-PLandroidx/compose/ui/input/pointer/ConsumedData;-><init>(ZZ)V
-PLandroidx/compose/ui/input/pointer/ConsumedData;->getDownChange()Z
-PLandroidx/compose/ui/input/pointer/ConsumedData;->getPositionChange()Z
-PLandroidx/compose/ui/input/pointer/ConsumedData;->setDownChange(Z)V
-PLandroidx/compose/ui/input/pointer/ConsumedData;->setPositionChange(Z)V
+PLandroidx/compose/ui/input/pointer/HistoricalChange;-><clinit>()V
PLandroidx/compose/ui/input/pointer/HistoricalChange;-><init>(JJ)V
PLandroidx/compose/ui/input/pointer/HistoricalChange;-><init>(JJLkotlin/jvm/internal/DefaultConstructorMarker;)V
PLandroidx/compose/ui/input/pointer/HistoricalChange;->getPosition-F1C5BW0()J
PLandroidx/compose/ui/input/pointer/HistoricalChange;->getUptimeMillis()J
-PLandroidx/compose/ui/input/pointer/HitPathTracker;->addHitPath-KNwqfcY(JLjava/util/List;)V
-PLandroidx/compose/ui/input/pointer/HitPathTracker;->dispatchChanges(Landroidx/compose/ui/input/pointer/InternalPointerEvent;Z)Z
-PLandroidx/compose/ui/input/pointer/HitPathTracker;->processCancel()V
-PLandroidx/compose/ui/input/pointer/HitPathTracker;->removeDetachedPointerInputFilters()V
-PLandroidx/compose/ui/input/pointer/InternalPointerEvent;-><init>(Ljava/util/Map;Landroidx/compose/ui/input/pointer/PointerInputEvent;)V
-PLandroidx/compose/ui/input/pointer/InternalPointerEvent;->getChanges()Ljava/util/Map;
-PLandroidx/compose/ui/input/pointer/InternalPointerEvent;->getMotionEvent()Landroid/view/MotionEvent;
-PLandroidx/compose/ui/input/pointer/InternalPointerEvent;->getSuppressMovementConsumption()Z
-PLandroidx/compose/ui/input/pointer/MotionEventAdapter;->addFreshIds(Landroid/view/MotionEvent;)V
-PLandroidx/compose/ui/input/pointer/MotionEventAdapter;->clearOnDeviceChange(Landroid/view/MotionEvent;)V
-PLandroidx/compose/ui/input/pointer/MotionEventAdapter;->endStream(I)V
-PLandroidx/compose/ui/input/pointer/MotionEventAdapter;->getComposePointerId-_I2yYro(I)J
-PLandroidx/compose/ui/input/pointer/MotionEventAdapter;->removeStaleIds(Landroid/view/MotionEvent;)V
-PLandroidx/compose/ui/input/pointer/Node;-><init>(Landroidx/compose/ui/node/PointerInputModifierNode;)V
-PLandroidx/compose/ui/input/pointer/Node;->clearCache()V
-PLandroidx/compose/ui/input/pointer/Node;->dispatchCancel()V
-PLandroidx/compose/ui/input/pointer/Node;->getPointerIds()Landroidx/compose/runtime/collection/MutableVector;
-PLandroidx/compose/ui/input/pointer/Node;->getPointerInputNode()Landroidx/compose/ui/node/PointerInputModifierNode;
PLandroidx/compose/ui/input/pointer/Node;->hasPositionChanged(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEvent;)Z
-PLandroidx/compose/ui/input/pointer/NodeParent;->buildCache(Ljava/util/Map;Landroidx/compose/ui/layout/LayoutCoordinates;Landroidx/compose/ui/input/pointer/InternalPointerEvent;Z)Z
-PLandroidx/compose/ui/input/pointer/NodeParent;->cleanUpHits(Landroidx/compose/ui/input/pointer/InternalPointerEvent;)V
-PLandroidx/compose/ui/input/pointer/NodeParent;->clear()V
-PLandroidx/compose/ui/input/pointer/NodeParent;->dispatchCancel()V
-PLandroidx/compose/ui/input/pointer/NodeParent;->dispatchFinalEventPass(Landroidx/compose/ui/input/pointer/InternalPointerEvent;)Z
-PLandroidx/compose/ui/input/pointer/NodeParent;->dispatchMainEventPass(Ljava/util/Map;Landroidx/compose/ui/layout/LayoutCoordinates;Landroidx/compose/ui/input/pointer/InternalPointerEvent;Z)Z
-PLandroidx/compose/ui/input/pointer/NodeParent;->getChildren()Landroidx/compose/runtime/collection/MutableVector;
-PLandroidx/compose/ui/input/pointer/NodeParent;->removeDetachedPointerInputFilters()V
-PLandroidx/compose/ui/input/pointer/PointerEvent;->getChanges()Ljava/util/List;
-PLandroidx/compose/ui/input/pointer/PointerEvent;->getType-7fucELk()I
-PLandroidx/compose/ui/input/pointer/PointerEventKt;->changedToDown(Landroidx/compose/ui/input/pointer/PointerInputChange;)Z
-PLandroidx/compose/ui/input/pointer/PointerEventKt;->changedToDownIgnoreConsumed(Landroidx/compose/ui/input/pointer/PointerInputChange;)Z
-PLandroidx/compose/ui/input/pointer/PointerEventKt;->changedToUp(Landroidx/compose/ui/input/pointer/PointerInputChange;)Z
-PLandroidx/compose/ui/input/pointer/PointerEventKt;->changedToUpIgnoreConsumed(Landroidx/compose/ui/input/pointer/PointerInputChange;)Z
PLandroidx/compose/ui/input/pointer/PointerEventKt;->isOutOfBounds-jwHxaWs(Landroidx/compose/ui/input/pointer/PointerInputChange;JJ)Z
-PLandroidx/compose/ui/input/pointer/PointerEventKt;->positionChange(Landroidx/compose/ui/input/pointer/PointerInputChange;)J
-PLandroidx/compose/ui/input/pointer/PointerEventKt;->positionChangeIgnoreConsumed(Landroidx/compose/ui/input/pointer/PointerInputChange;)J
-PLandroidx/compose/ui/input/pointer/PointerEventKt;->positionChangeInternal(Landroidx/compose/ui/input/pointer/PointerInputChange;Z)J
-PLandroidx/compose/ui/input/pointer/PointerEventKt;->positionChangedIgnoreConsumed(Landroidx/compose/ui/input/pointer/PointerInputChange;)Z
-PLandroidx/compose/ui/input/pointer/PointerEventPass;->values()[Landroidx/compose/ui/input/pointer/PointerEventPass;
-PLandroidx/compose/ui/input/pointer/PointerEventType$Companion;->getEnter-7fucELk()I
-PLandroidx/compose/ui/input/pointer/PointerEventType$Companion;->getExit-7fucELk()I
-PLandroidx/compose/ui/input/pointer/PointerEventType$Companion;->getPress-7fucELk()I
-PLandroidx/compose/ui/input/pointer/PointerEventType$Companion;->getRelease-7fucELk()I
-PLandroidx/compose/ui/input/pointer/PointerEventType$Companion;->getScroll-7fucELk()I
-PLandroidx/compose/ui/input/pointer/PointerEventType;->access$getEnter$cp()I
-PLandroidx/compose/ui/input/pointer/PointerEventType;->access$getExit$cp()I
-PLandroidx/compose/ui/input/pointer/PointerEventType;->access$getPress$cp()I
-PLandroidx/compose/ui/input/pointer/PointerEventType;->access$getRelease$cp()I
-PLandroidx/compose/ui/input/pointer/PointerEventType;->access$getScroll$cp()I
-PLandroidx/compose/ui/input/pointer/PointerEventType;->equals-impl0(II)Z
-PLandroidx/compose/ui/input/pointer/PointerId;->box-impl(J)Landroidx/compose/ui/input/pointer/PointerId;
-PLandroidx/compose/ui/input/pointer/PointerId;->constructor-impl(J)J
-PLandroidx/compose/ui/input/pointer/PointerId;->equals(Ljava/lang/Object;)Z
-PLandroidx/compose/ui/input/pointer/PointerId;->equals-impl0(JJ)Z
-PLandroidx/compose/ui/input/pointer/PointerId;->hashCode()I
-PLandroidx/compose/ui/input/pointer/PointerId;->hashCode-impl(J)I
-PLandroidx/compose/ui/input/pointer/PointerId;->unbox-impl()J
-PLandroidx/compose/ui/input/pointer/PointerInputChange;-><init>(JJJZFJJZZIJ)V
-PLandroidx/compose/ui/input/pointer/PointerInputChange;-><init>(JJJZFJJZZIJILkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/ui/input/pointer/PointerInputChange;-><init>(JJJZFJJZZIJLkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/ui/input/pointer/PointerInputChange;-><init>(JJJZFJJZZILjava/util/List;J)V
-PLandroidx/compose/ui/input/pointer/PointerInputChange;-><init>(JJJZFJJZZILjava/util/List;JLkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/ui/input/pointer/PointerInputChange;-><init>(JJJZJJZZIJLkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/ui/input/pointer/PointerInputChange;->consume()V
-PLandroidx/compose/ui/input/pointer/PointerInputChange;->getHistorical()Ljava/util/List;
-PLandroidx/compose/ui/input/pointer/PointerInputChange;->getId-J3iCeTQ()J
-PLandroidx/compose/ui/input/pointer/PointerInputChange;->getPosition-F1C5BW0()J
-PLandroidx/compose/ui/input/pointer/PointerInputChange;->getPressed()Z
-PLandroidx/compose/ui/input/pointer/PointerInputChange;->getPressure()F
-PLandroidx/compose/ui/input/pointer/PointerInputChange;->getPreviousPosition-F1C5BW0()J
-PLandroidx/compose/ui/input/pointer/PointerInputChange;->getPreviousPressed()Z
-PLandroidx/compose/ui/input/pointer/PointerInputChange;->getType-T8wyACA()I
-PLandroidx/compose/ui/input/pointer/PointerInputChange;->getUptimeMillis()J
-PLandroidx/compose/ui/input/pointer/PointerInputChange;->isConsumed()Z
-PLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer$PointerInputData;-><init>(JJZI)V
-PLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer$PointerInputData;-><init>(JJZILkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer$PointerInputData;->getDown()Z
-PLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer$PointerInputData;->getPositionOnScreen-F1C5BW0()J
-PLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer$PointerInputData;->getUptime()J
-PLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer;->clear()V
-PLandroidx/compose/ui/input/pointer/PointerInputEvent;-><init>(JLjava/util/List;Landroid/view/MotionEvent;)V
-PLandroidx/compose/ui/input/pointer/PointerInputEvent;->getMotionEvent()Landroid/view/MotionEvent;
-PLandroidx/compose/ui/input/pointer/PointerInputEvent;->getPointers()Ljava/util/List;
-PLandroidx/compose/ui/input/pointer/PointerInputEventData;-><init>(JJJJZFIZLjava/util/List;J)V
-PLandroidx/compose/ui/input/pointer/PointerInputEventData;-><init>(JJJJZFIZLjava/util/List;JLkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/ui/input/pointer/PointerInputEventData;->getDown()Z
-PLandroidx/compose/ui/input/pointer/PointerInputEventData;->getHistorical()Ljava/util/List;
-PLandroidx/compose/ui/input/pointer/PointerInputEventData;->getId-J3iCeTQ()J
-PLandroidx/compose/ui/input/pointer/PointerInputEventData;->getIssuesEnterExit()Z
-PLandroidx/compose/ui/input/pointer/PointerInputEventData;->getPosition-F1C5BW0()J
-PLandroidx/compose/ui/input/pointer/PointerInputEventData;->getPositionOnScreen-F1C5BW0()J
-PLandroidx/compose/ui/input/pointer/PointerInputEventData;->getPressure()F
-PLandroidx/compose/ui/input/pointer/PointerInputEventData;->getScrollDelta-F1C5BW0()J
-PLandroidx/compose/ui/input/pointer/PointerInputEventData;->getType-T8wyACA()I
-PLandroidx/compose/ui/input/pointer/PointerInputEventData;->getUptime()J
-PLandroidx/compose/ui/input/pointer/PointerInputEventProcessor;->processCancel()V
-PLandroidx/compose/ui/input/pointer/PointerInputEventProcessorKt;->ProcessResult(ZZ)I
-PLandroidx/compose/ui/input/pointer/PointerInputFilter;->getShareWithSiblings()Z
-PLandroidx/compose/ui/input/pointer/PointerKeyboardModifiers;->equals(Ljava/lang/Object;)Z
-PLandroidx/compose/ui/input/pointer/PointerKeyboardModifiers;->equals-impl(ILjava/lang/Object;)Z
-PLandroidx/compose/ui/input/pointer/PointerKeyboardModifiers;->unbox-impl()I
-PLandroidx/compose/ui/input/pointer/PointerType$Companion;-><init>()V
-PLandroidx/compose/ui/input/pointer/PointerType$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/ui/input/pointer/PointerType$Companion;->getMouse-T8wyACA()I
-PLandroidx/compose/ui/input/pointer/PointerType$Companion;->getTouch-T8wyACA()I
-PLandroidx/compose/ui/input/pointer/PointerType;-><clinit>()V
-PLandroidx/compose/ui/input/pointer/PointerType;->access$getMouse$cp()I
-PLandroidx/compose/ui/input/pointer/PointerType;->access$getTouch$cp()I
-PLandroidx/compose/ui/input/pointer/PointerType;->constructor-impl(I)I
-PLandroidx/compose/ui/input/pointer/PointerType;->equals-impl0(II)Z
-PLandroidx/compose/ui/input/pointer/ProcessResult;->constructor-impl(I)I
-PLandroidx/compose/ui/input/pointer/ProcessResult;->getAnyMovementConsumed-impl(I)Z
-PLandroidx/compose/ui/input/pointer/ProcessResult;->getDispatchedToAPointerInputModifier-impl(I)Z
PLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine$withTimeout$1;-><init>(Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;Lkotlin/coroutines/Continuation;)V
PLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine$withTimeout$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
PLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine$withTimeout$job$1;-><init>(JLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;Lkotlin/coroutines/Continuation;)V
PLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine$withTimeout$job$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
PLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine$withTimeout$job$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;->getCurrentEvent()Landroidx/compose/ui/input/pointer/PointerEvent;
PLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;->getExtendedTouchPadding-NH-jbRc()J
PLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;->getSize-YbymL2g()J
-PLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;->getViewConfiguration()Landroidx/compose/ui/platform/ViewConfiguration;
PLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;->withTimeout(JLkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$WhenMappings;-><clinit>()V
PLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;->access$getBoundsSize$p(Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;)J
-PLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;->access$getCurrentEvent$p(Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;)Landroidx/compose/ui/input/pointer/PointerEvent;
PLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;->getCoroutineScope()Lkotlinx/coroutines/CoroutineScope;
PLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;->getExtendedTouchPadding-NH-jbRc()J
PLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;->getInterceptOutOfBoundsChildEvents()Z
-PLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;->getViewConfiguration()Landroidx/compose/ui/platform/ViewConfiguration;
-PLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;->onCancel()V
PLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;->toSize-XkaWNTQ(J)J
-PLandroidx/compose/ui/input/pointer/util/Matrix;-><init>(II)V
-PLandroidx/compose/ui/input/pointer/util/Matrix;->get(II)F
-PLandroidx/compose/ui/input/pointer/util/Matrix;->getRow(I)Landroidx/compose/ui/input/pointer/util/Vector;
-PLandroidx/compose/ui/input/pointer/util/Matrix;->set(IIF)V
-PLandroidx/compose/ui/input/pointer/util/PointAtTime;-><init>(JJ)V
-PLandroidx/compose/ui/input/pointer/util/PointAtTime;-><init>(JJLkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/ui/input/pointer/util/PointAtTime;->getPoint-F1C5BW0()J
-PLandroidx/compose/ui/input/pointer/util/PointAtTime;->getTime()J
-PLandroidx/compose/ui/input/pointer/util/PolynomialFit;-><init>(Ljava/util/List;F)V
-PLandroidx/compose/ui/input/pointer/util/PolynomialFit;->getCoefficients()Ljava/util/List;
-PLandroidx/compose/ui/input/pointer/util/PolynomialFit;->getConfidence()F
-PLandroidx/compose/ui/input/pointer/util/Vector;-><init>(I)V
-PLandroidx/compose/ui/input/pointer/util/Vector;->get(I)F
-PLandroidx/compose/ui/input/pointer/util/Vector;->norm()F
-PLandroidx/compose/ui/input/pointer/util/Vector;->set(IF)V
-PLandroidx/compose/ui/input/pointer/util/Vector;->times(Landroidx/compose/ui/input/pointer/util/Vector;)F
-PLandroidx/compose/ui/input/pointer/util/VelocityEstimate$Companion;-><init>()V
-PLandroidx/compose/ui/input/pointer/util/VelocityEstimate$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/ui/input/pointer/util/VelocityEstimate;-><clinit>()V
-PLandroidx/compose/ui/input/pointer/util/VelocityEstimate;-><init>(JFJJ)V
-PLandroidx/compose/ui/input/pointer/util/VelocityEstimate;-><init>(JFJJLkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/ui/input/pointer/util/VelocityEstimate;->getPixelsPerSecond-F1C5BW0()J
-PLandroidx/compose/ui/input/pointer/util/VelocityTracker;->addPosition-Uv8p0NA(JJ)V
-PLandroidx/compose/ui/input/pointer/util/VelocityTracker;->calculateVelocity-9UxMQ8M()J
-PLandroidx/compose/ui/input/pointer/util/VelocityTracker;->getCurrentPointerPositionAccumulator-F1C5BW0$ui_release()J
-PLandroidx/compose/ui/input/pointer/util/VelocityTracker;->getVelocityEstimate()Landroidx/compose/ui/input/pointer/util/VelocityEstimate;
-PLandroidx/compose/ui/input/pointer/util/VelocityTracker;->resetTracking()V
-PLandroidx/compose/ui/input/pointer/util/VelocityTracker;->setCurrentPointerPositionAccumulator-k-4lQ0M$ui_release(J)V
-PLandroidx/compose/ui/input/pointer/util/VelocityTrackerKt;->addPointerInputChange(Landroidx/compose/ui/input/pointer/util/VelocityTracker;Landroidx/compose/ui/input/pointer/PointerInputChange;)V
-PLandroidx/compose/ui/input/pointer/util/VelocityTrackerKt;->polyFitLeastSquares(Ljava/util/List;Ljava/util/List;I)Landroidx/compose/ui/input/pointer/util/PolynomialFit;
-PLandroidx/compose/ui/layout/LayoutId;-><init>(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)V
-PLandroidx/compose/ui/layout/LayoutId;->getLayoutId()Ljava/lang/Object;
-PLandroidx/compose/ui/layout/LayoutId;->modifyParentData(Landroidx/compose/ui/unit/Density;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/ui/layout/LayoutIdKt;->getLayoutId(Landroidx/compose/ui/layout/Measurable;)Ljava/lang/Object;
-PLandroidx/compose/ui/layout/LayoutIdKt;->layoutId(Landroidx/compose/ui/Modifier;Ljava/lang/Object;)Landroidx/compose/ui/Modifier;
-PLandroidx/compose/ui/layout/LayoutModifierImpl;-><init>(Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function1;)V
-PLandroidx/compose/ui/layout/LayoutModifierImpl;->equals(Ljava/lang/Object;)Z
-PLandroidx/compose/ui/layout/LayoutModifierImpl;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
-PLandroidx/compose/ui/layout/LayoutModifierKt;->layout(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function3;)Landroidx/compose/ui/Modifier;
-PLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->getForceRecompose()Z
-PLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->getSlotId()Ljava/lang/Object;
-PLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->setActive(Z)V
-PLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->setSlotId(Ljava/lang/Object;)V
-PLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->getDensity()F
-PLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$precompose$1;-><init>(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;Ljava/lang/Object;)V
-PLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$precompose$1;->dispose()V
-PLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$precompose$1;->getPlaceablesCount()I
-PLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$precompose$1;->premeasure-0kLqBqw(IJ)V
-PLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->access$getPrecomposeMap$p(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)Ljava/util/Map;
-PLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->access$getRoot$p(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)Landroidx/compose/ui/node/LayoutNode;
-PLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->disposeCurrentNodes()V
-PLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->getSlotIdAtIndex(I)Ljava/lang/Object;
-PLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->move$default(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;IIIILjava/lang/Object;)V
-PLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->move(III)V
-PLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->precompose(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Landroidx/compose/ui/layout/SubcomposeLayoutState$PrecomposedSlotHandle;
-PLandroidx/compose/ui/layout/OnRemeasuredModifierKt;->onSizeChanged(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;
-PLandroidx/compose/ui/layout/OnSizeChangedModifier;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
-PLandroidx/compose/ui/layout/OnSizeChangedModifier;->equals(Ljava/lang/Object;)Z
-PLandroidx/compose/ui/layout/OnSizeChangedModifier;->onRemeasured-ozmzZPI(J)V
-PLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeWithLayer-aW-9-wM$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;JFLkotlin/jvm/functions/Function1;ILjava/lang/Object;)V
-PLandroidx/compose/ui/layout/Placeable;->getMeasuredHeight()I
-PLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$5$1$invoke$$inlined$onDispose$1;->dispose()V
-PLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$6;-><init>(Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;II)V
-PLandroidx/compose/ui/layout/SubcomposeLayoutState;->disposeCurrentNodes$ui_release()V
-PLandroidx/compose/ui/layout/SubcomposeLayoutState;->precompose(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Landroidx/compose/ui/layout/SubcomposeLayoutState$PrecomposedSlotHandle;
-PLandroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;->add$ui_release(Ljava/lang/Object;)Z
-PLandroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;->clear()V
-PLandroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;->contains(Ljava/lang/Object;)Z
-PLandroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;->iterator()Ljava/util/Iterator;
-PLandroidx/compose/ui/node/AlignmentLines$recalculate$1;-><init>(Landroidx/compose/ui/node/AlignmentLines;)V
-PLandroidx/compose/ui/node/AlignmentLines$recalculate$1;->invoke(Landroidx/compose/ui/node/AlignmentLinesOwner;)V
-PLandroidx/compose/ui/node/AlignmentLines$recalculate$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/ui/node/AlignmentLines;->access$addAlignmentLine(Landroidx/compose/ui/node/AlignmentLines;Landroidx/compose/ui/layout/AlignmentLine;ILandroidx/compose/ui/node/NodeCoordinator;)V
-PLandroidx/compose/ui/node/AlignmentLines;->access$getAlignmentLineMap$p(Landroidx/compose/ui/node/AlignmentLines;)Ljava/util/Map;
-PLandroidx/compose/ui/node/AlignmentLines;->addAlignmentLine(Landroidx/compose/ui/layout/AlignmentLine;ILandroidx/compose/ui/node/NodeCoordinator;)V
-PLandroidx/compose/ui/node/AlignmentLines;->getAlignmentLinesOwner()Landroidx/compose/ui/node/AlignmentLinesOwner;
-PLandroidx/compose/ui/node/AlignmentLines;->getLastCalculation()Ljava/util/Map;
-PLandroidx/compose/ui/node/AlignmentLines;->recalculate()V
PLandroidx/compose/ui/node/BackwardsCompatNode;->interceptOutOfBoundsChildEvents()Z
-PLandroidx/compose/ui/node/BackwardsCompatNode;->isValid()Z
-PLandroidx/compose/ui/node/BackwardsCompatNode;->onCancelPointerInput()V
-PLandroidx/compose/ui/node/BackwardsCompatNode;->onDetach()V
-PLandroidx/compose/ui/node/BackwardsCompatNode;->sharePointerInputWithSiblings()Z
-PLandroidx/compose/ui/node/BackwardsCompatNodeKt$updateModifierLocalConsumer$1;->invoke(Landroidx/compose/ui/node/BackwardsCompatNode;)V
-PLandroidx/compose/ui/node/BackwardsCompatNodeKt$updateModifierLocalConsumer$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/ui/node/DistanceAndInLayer;->compareTo-S_HNhKs(JJ)I
-PLandroidx/compose/ui/node/DistanceAndInLayer;->constructor-impl(J)J
-PLandroidx/compose/ui/node/DistanceAndInLayer;->getDistance-impl(J)F
-PLandroidx/compose/ui/node/DistanceAndInLayer;->isInLayer-impl(J)Z
-PLandroidx/compose/ui/node/HitTestResult;->access$getHitDepth$p(Landroidx/compose/ui/node/HitTestResult;)I
-PLandroidx/compose/ui/node/HitTestResult;->access$setHitDepth$p(Landroidx/compose/ui/node/HitTestResult;I)V
-PLandroidx/compose/ui/node/HitTestResult;->clear()V
-PLandroidx/compose/ui/node/HitTestResult;->ensureContainerSize()V
-PLandroidx/compose/ui/node/HitTestResult;->findBestHitDistance-ptXAw2c()J
-PLandroidx/compose/ui/node/HitTestResult;->get(I)Ljava/lang/Object;
-PLandroidx/compose/ui/node/HitTestResult;->getSize()I
-PLandroidx/compose/ui/node/HitTestResult;->hasHit()Z
-PLandroidx/compose/ui/node/HitTestResult;->hit(Ljava/lang/Object;ZLkotlin/jvm/functions/Function0;)V
-PLandroidx/compose/ui/node/HitTestResult;->hitInMinimumTouchTarget(Ljava/lang/Object;FZLkotlin/jvm/functions/Function0;)V
-PLandroidx/compose/ui/node/HitTestResult;->isEmpty()Z
PLandroidx/compose/ui/node/HitTestResult;->isHitInMinimumTouchTargetBetter(FZ)Z
-PLandroidx/compose/ui/node/HitTestResult;->resizeToHitDepth()V
-PLandroidx/compose/ui/node/HitTestResult;->size()I
-PLandroidx/compose/ui/node/HitTestResultKt;->DistanceAndInLayer(FZ)J
-PLandroidx/compose/ui/node/HitTestResultKt;->access$DistanceAndInLayer(FZ)J
-PLandroidx/compose/ui/node/InnerNodeCoordinator;->calculateAlignmentLine(Landroidx/compose/ui/layout/AlignmentLine;)I
-PLandroidx/compose/ui/node/LayoutModifierNode;->forceRemeasure()V
-PLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->calculateAlignmentLine(Landroidx/compose/ui/layout/AlignmentLine;)I
-PLandroidx/compose/ui/node/LayoutModifierNodeCoordinatorKt;->access$calculateAlignmentAndPlaceChildAsNeeded(Landroidx/compose/ui/node/LookaheadCapablePlaceable;Landroidx/compose/ui/layout/AlignmentLine;)I
-PLandroidx/compose/ui/node/LayoutModifierNodeCoordinatorKt;->calculateAlignmentAndPlaceChildAsNeeded(Landroidx/compose/ui/node/LookaheadCapablePlaceable;Landroidx/compose/ui/layout/AlignmentLine;)I
-PLandroidx/compose/ui/node/LayoutNode$WhenMappings;-><clinit>()V
-PLandroidx/compose/ui/node/LayoutNode;->forceRemeasure()V
-PLandroidx/compose/ui/node/LayoutNode;->getViewConfiguration()Landroidx/compose/ui/platform/ViewConfiguration;
-PLandroidx/compose/ui/node/LayoutNode;->hitTest-M_7yMNQ$ui_release$default(Landroidx/compose/ui/node/LayoutNode;JLandroidx/compose/ui/node/HitTestResult;ZZILjava/lang/Object;)V
-PLandroidx/compose/ui/node/LayoutNode;->hitTest-M_7yMNQ$ui_release(JLandroidx/compose/ui/node/HitTestResult;ZZ)V
-PLandroidx/compose/ui/node/LayoutNode;->markSubtreeAsNotPlaced()V
-PLandroidx/compose/ui/node/LayoutNode;->move$ui_release(III)V
-PLandroidx/compose/ui/node/LayoutNode;->onChildRemoved(Landroidx/compose/ui/node/LayoutNode;)V
-PLandroidx/compose/ui/node/LayoutNode;->removeAll$ui_release()V
-PLandroidx/compose/ui/node/LayoutNode;->removeAt$ui_release(II)V
-PLandroidx/compose/ui/node/LayoutNode;->rescheduleRemeasureOrRelayout$ui_release(Landroidx/compose/ui/node/LayoutNode;)V
-PLandroidx/compose/ui/node/LayoutNodeAlignmentLines;->calculatePositionInParent-R5De75A(Landroidx/compose/ui/node/NodeCoordinator;J)J
-PLandroidx/compose/ui/node/LayoutNodeAlignmentLines;->getAlignmentLinesMap(Landroidx/compose/ui/node/NodeCoordinator;)Ljava/util/Map;
-PLandroidx/compose/ui/node/LayoutNodeDrawScope;->performDraw(Landroidx/compose/ui/node/DrawModifierNode;Landroidx/compose/ui/graphics/Canvas;)V
-PLandroidx/compose/ui/node/LayoutNodeDrawScope;->roundToPx-0680j_4(F)I
-PLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->calculateAlignmentLines()Ljava/util/Map;
-PLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->get(Landroidx/compose/ui/layout/AlignmentLine;)I
-PLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->isPlaced()Z
-PLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getCoordinatesAccessedDuringPlacement()Z
-PLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->resetAlignmentLines()V
-PLandroidx/compose/ui/node/LookaheadCapablePlaceable;->get(Landroidx/compose/ui/layout/AlignmentLine;)I
-PLandroidx/compose/ui/node/LookaheadCapablePlaceable;->setShallowPlacing$ui_release(Z)V
-PLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->doLookaheadRemeasure-sdFAvZA(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/unit/Constraints;)Z
-PLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->measureAndLayout-0kLqBqw(Landroidx/compose/ui/node/LayoutNode;J)V
-PLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->onNodeDetached(Landroidx/compose/ui/node/LayoutNode;)V
-PLandroidx/compose/ui/node/MutableVectorWithMutationTracking;->clear()V
-PLandroidx/compose/ui/node/MutableVectorWithMutationTracking;->get(I)Ljava/lang/Object;
-PLandroidx/compose/ui/node/MutableVectorWithMutationTracking;->getSize()I
-PLandroidx/compose/ui/node/MutableVectorWithMutationTracking;->removeAt(I)Ljava/lang/Object;
PLandroidx/compose/ui/node/NodeChain$Differ;->remove(I)V
+PLandroidx/compose/ui/node/NodeChain$Differ;->setAfter(Landroidx/compose/runtime/collection/MutableVector;)V
+PLandroidx/compose/ui/node/NodeChain$Differ;->setAggregateChildKindSet(I)V
+PLandroidx/compose/ui/node/NodeChain$Differ;->setBefore(Landroidx/compose/runtime/collection/MutableVector;)V
+PLandroidx/compose/ui/node/NodeChain$Differ;->setNode(Landroidx/compose/ui/Modifier$Node;)V
PLandroidx/compose/ui/node/NodeChain;->access$disposeAndRemoveNode(Landroidx/compose/ui/node/NodeChain;Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node;
PLandroidx/compose/ui/node/NodeChain;->disposeAndRemoveNode(Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node;
PLandroidx/compose/ui/node/NodeChain;->removeNode(Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node;
-PLandroidx/compose/ui/node/NodeCoordinator$Companion$PointerInputSource$1;->childHitTest-YqVAtuI(Landroidx/compose/ui/node/LayoutNode;JLandroidx/compose/ui/node/HitTestResult;ZZ)V
-PLandroidx/compose/ui/node/NodeCoordinator$Companion$PointerInputSource$1;->entityType-OLwlOKw()I
PLandroidx/compose/ui/node/NodeCoordinator$Companion$PointerInputSource$1;->interceptOutOfBoundsChildEvents(Landroidx/compose/ui/node/DelegatableNode;)Z
PLandroidx/compose/ui/node/NodeCoordinator$Companion$PointerInputSource$1;->interceptOutOfBoundsChildEvents(Landroidx/compose/ui/node/PointerInputModifierNode;)Z
-PLandroidx/compose/ui/node/NodeCoordinator$Companion$PointerInputSource$1;->shouldHitTestChildren(Landroidx/compose/ui/node/LayoutNode;)Z
-PLandroidx/compose/ui/node/NodeCoordinator$Companion;->getPointerInputSource()Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;
-PLandroidx/compose/ui/node/NodeCoordinator$hit$1;-><init>(Landroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/node/DelegatableNode;Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V
-PLandroidx/compose/ui/node/NodeCoordinator$hit$1;->invoke()Ljava/lang/Object;
-PLandroidx/compose/ui/node/NodeCoordinator$hit$1;->invoke()V
PLandroidx/compose/ui/node/NodeCoordinator$hitNear$1;-><init>(Landroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/node/DelegatableNode;Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZF)V
PLandroidx/compose/ui/node/NodeCoordinator$hitNear$1;->invoke()Ljava/lang/Object;
PLandroidx/compose/ui/node/NodeCoordinator$hitNear$1;->invoke()V
-PLandroidx/compose/ui/node/NodeCoordinator;->access$getPointerInputSource$cp()Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;
-PLandroidx/compose/ui/node/NodeCoordinator;->access$hit-1hIXUjU(Landroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/node/DelegatableNode;Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V
PLandroidx/compose/ui/node/NodeCoordinator;->access$hitNear-JHbHoSQ(Landroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/node/DelegatableNode;Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZF)V
-PLandroidx/compose/ui/node/NodeCoordinator;->calculateMinimumTouchTargetPadding-E7KxVPU(J)J
-PLandroidx/compose/ui/node/NodeCoordinator;->distanceInMinimumTouchTarget-tz77jQw(JJ)F
-PLandroidx/compose/ui/node/NodeCoordinator;->getChild()Landroidx/compose/ui/node/LookaheadCapablePlaceable;
-PLandroidx/compose/ui/node/NodeCoordinator;->getHasMeasureResult()Z
-PLandroidx/compose/ui/node/NodeCoordinator;->getMinimumTouchTargetSize-NH-jbRc()J
-PLandroidx/compose/ui/node/NodeCoordinator;->headUnchecked-H91voCI(I)Ljava/lang/Object;
-PLandroidx/compose/ui/node/NodeCoordinator;->hit-1hIXUjU(Landroidx/compose/ui/node/DelegatableNode;Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V
PLandroidx/compose/ui/node/NodeCoordinator;->hitNear-JHbHoSQ(Landroidx/compose/ui/node/DelegatableNode;Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZF)V
-PLandroidx/compose/ui/node/NodeCoordinator;->hitTest-YqVAtuI(Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V
-PLandroidx/compose/ui/node/NodeCoordinator;->isPointerInBounds-k-4lQ0M(J)Z
-PLandroidx/compose/ui/node/NodeCoordinator;->isValid()Z
-PLandroidx/compose/ui/node/NodeCoordinator;->offsetFromEdge-MK-Hz9U(J)J
-PLandroidx/compose/ui/node/NodeCoordinator;->replace$ui_release()V
-PLandroidx/compose/ui/node/NodeCoordinator;->shouldSharePointerInputWithSiblings()Z
PLandroidx/compose/ui/node/NodeCoordinator;->speculativeHit-JHbHoSQ(Landroidx/compose/ui/node/DelegatableNode;Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZF)V
-PLandroidx/compose/ui/node/NodeCoordinator;->toCoordinator(Landroidx/compose/ui/layout/LayoutCoordinates;)Landroidx/compose/ui/node/NodeCoordinator;
-PLandroidx/compose/ui/node/NodeCoordinator;->toParentPosition-MK-Hz9U(J)J
-PLandroidx/compose/ui/node/NodeCoordinator;->withinLayerBounds-k-4lQ0M(J)Z
-PLandroidx/compose/ui/node/NodeCoordinatorKt;->access$nextUncheckedUntil-hw7D004(Landroidx/compose/ui/node/DelegatableNode;II)Ljava/lang/Object;
-PLandroidx/compose/ui/node/NodeCoordinatorKt;->nextUncheckedUntil-hw7D004(Landroidx/compose/ui/node/DelegatableNode;II)Ljava/lang/Object;
PLandroidx/compose/ui/node/NodeKindKt;->autoInvalidateRemovedNode(Landroidx/compose/ui/Modifier$Node;)V
-PLandroidx/compose/ui/node/OwnerSnapshotObserver$clearInvalidObservations$1;-><clinit>()V
-PLandroidx/compose/ui/node/OwnerSnapshotObserver$clearInvalidObservations$1;-><init>()V
-PLandroidx/compose/ui/node/OwnerSnapshotObserver$clearInvalidObservations$1;->invoke(Ljava/lang/Object;)Ljava/lang/Boolean;
-PLandroidx/compose/ui/node/OwnerSnapshotObserver$clearInvalidObservations$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/ui/node/OwnerSnapshotObserver;->clearInvalidObservations$ui_release()V
-PLandroidx/compose/ui/node/OwnerSnapshotObserver;->stopObserving$ui_release()V
-PLandroidx/compose/ui/node/PointerInputModifierNodeKt;->getLayoutCoordinates(Landroidx/compose/ui/node/PointerInputModifierNode;)Landroidx/compose/ui/layout/LayoutCoordinates;
-PLandroidx/compose/ui/node/UiApplier;->onClear()V
-PLandroidx/compose/ui/node/UiApplier;->remove(II)V
-PLandroidx/compose/ui/platform/AbstractComposeView;->disposeComposition()V
-PLandroidx/compose/ui/platform/AbstractComposeView;->shouldDelayChildPressedState()Z
-PLandroidx/compose/ui/platform/AndroidComposeView$scrollContainerInfo$1$value$1;->canScrollHorizontally()Z
-PLandroidx/compose/ui/platform/AndroidComposeView$scrollContainerInfo$1$value$1;->canScrollVertically()Z
-PLandroidx/compose/ui/platform/AndroidComposeView$scrollContainerInfo$1$value$1;->isInScrollableViewGroup(Landroid/view/View;)Z
-PLandroidx/compose/ui/platform/AndroidComposeView;->dispatchTouchEvent(Landroid/view/MotionEvent;)Z
-PLandroidx/compose/ui/platform/AndroidComposeView;->hasChangedDevices(Landroid/view/MotionEvent;Landroid/view/MotionEvent;)Z
-PLandroidx/compose/ui/platform/AndroidComposeView;->isBadMotionEvent(Landroid/view/MotionEvent;)Z
-PLandroidx/compose/ui/platform/AndroidComposeView;->isInBounds(Landroid/view/MotionEvent;)Z
-PLandroidx/compose/ui/platform/AndroidComposeView;->isPositionChanged(Landroid/view/MotionEvent;)Z
-PLandroidx/compose/ui/platform/AndroidComposeView;->measureAndLayout-0kLqBqw(Landroidx/compose/ui/node/LayoutNode;J)V
-PLandroidx/compose/ui/platform/AndroidComposeView;->onDetach(Landroidx/compose/ui/node/LayoutNode;)V
-PLandroidx/compose/ui/platform/AndroidComposeView;->onDetachedFromWindow()V
-PLandroidx/compose/ui/platform/AndroidComposeView;->recalculateWindowPosition()V
-PLandroidx/compose/ui/platform/AndroidComposeView;->recalculateWindowPosition(Landroid/view/MotionEvent;)V
-PLandroidx/compose/ui/platform/AndroidComposeView;->recalculateWindowViewTransforms()V
-PLandroidx/compose/ui/platform/AndroidComposeView;->requestClearInvalidObservations()V
-PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1;->onViewDetachedFromWindow(Landroid/view/View;)V
-PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$boundsUpdatesEventLoop$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->access$getHandler$p(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)Landroid/os/Handler;
-PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->access$getSemanticsChangeChecker$p(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)Ljava/lang/Runnable;
-PLandroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsN;-><clinit>()V
-PLandroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsN;-><init>()V
-PLandroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsN;->setPointerIcon(Landroid/view/View;Landroidx/compose/ui/input/pointer/PointerIcon;)V
-PLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$2$invoke$$inlined$onDispose$1;->dispose()V
-PLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$1$invoke$$inlined$onDispose$1;->dispose()V
PLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$callbacks$1$1;->onTrimMemory(I)V
-PLandroidx/compose/ui/platform/AndroidViewConfiguration;->getTouchSlop()F
-PLandroidx/compose/ui/platform/DisposableSaveableStateRegistry;->dispose()V
-PLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$1;->invoke()Ljava/lang/Object;
-PLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$1;->invoke()V
-PLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$registered$1;->saveState()Landroid/os/Bundle;
-PLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt;->access$toBundle(Ljava/util/Map;)Landroid/os/Bundle;
-PLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt;->toBundle(Ljava/util/Map;)Landroid/os/Bundle;
-PLandroidx/compose/ui/platform/InvertMatrixKt;->invertTo-JiSxe2E([F[F)Z
-PLandroidx/compose/ui/platform/OutlineResolver;->isInOutline-k-4lQ0M(J)Z
-PLandroidx/compose/ui/platform/OutlineResolver;->updateCacheWithRect(Landroidx/compose/ui/geometry/Rect;)V
-PLandroidx/compose/ui/platform/RenderNodeApi29;->getClipToBounds()Z
-PLandroidx/compose/ui/platform/RenderNodeApi29;->getMatrix(Landroid/graphics/Matrix;)V
-PLandroidx/compose/ui/platform/RenderNodeLayer$Companion$getMatrix$1;->invoke(Landroidx/compose/ui/platform/DeviceRenderNode;Landroid/graphics/Matrix;)V
-PLandroidx/compose/ui/platform/RenderNodeLayer$Companion$getMatrix$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/ui/platform/RenderNodeLayer;->isInLayer-k-4lQ0M(J)Z
-PLandroidx/compose/ui/platform/ShapeContainingUtilKt;->isInOutline(Landroidx/compose/ui/graphics/Outline;FFLandroidx/compose/ui/graphics/Path;Landroidx/compose/ui/graphics/Path;)Z
-PLandroidx/compose/ui/platform/ShapeContainingUtilKt;->isInRectangle(Landroidx/compose/ui/geometry/Rect;FF)Z
-PLandroidx/compose/ui/platform/ShapeContainingUtilKt;->isWithinEllipse-VE1yxkc(FFJFF)Z
-PLandroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$listener$1;->onViewDetachedFromWindow(Landroid/view/View;)V
-PLandroidx/compose/ui/platform/WindowInfoImpl;->setKeyboardModifiers-5xRPYO0(I)V
-PLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$1;->onViewDetachedFromWindow(Landroid/view/View;)V
-PLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$1;->onViewDetachedFromWindow(Landroid/view/View;)V
-PLandroidx/compose/ui/platform/WrappedComposition;->dispose()V
PLandroidx/compose/ui/res/ImageVectorCache;->clear()V
-PLandroidx/compose/ui/semantics/CollectionInfo;-><clinit>()V
-PLandroidx/compose/ui/semantics/CollectionInfo;-><init>(II)V
-PLandroidx/compose/ui/semantics/Role$Companion;->getImage-o7Vup1c()I
-PLandroidx/compose/ui/semantics/Role;->access$getImage$cp()I
-PLandroidx/compose/ui/semantics/ScrollAxisRange;-><clinit>()V
-PLandroidx/compose/ui/semantics/ScrollAxisRange;-><init>(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Z)V
-PLandroidx/compose/ui/semantics/SemanticsActions;->getScrollBy()Landroidx/compose/ui/semantics/SemanticsPropertyKey;
-PLandroidx/compose/ui/semantics/SemanticsActions;->getScrollToIndex()Landroidx/compose/ui/semantics/SemanticsPropertyKey;
-PLandroidx/compose/ui/semantics/SemanticsProperties;->getIndexForKey()Landroidx/compose/ui/semantics/SemanticsPropertyKey;
-PLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->indexForKey(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Lkotlin/jvm/functions/Function1;)V
-PLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->scrollBy$default(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)V
-PLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->scrollBy(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function2;)V
-PLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->scrollToIndex$default(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V
-PLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->scrollToIndex(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V
-PLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setCollectionInfo(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Landroidx/compose/ui/semantics/CollectionInfo;)V
-PLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setVerticalScrollAxisRange(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Landroidx/compose/ui/semantics/ScrollAxisRange;)V
-PLandroidx/compose/ui/text/font/GenericFontFamily;->getName()Ljava/lang/String;
-PLandroidx/compose/ui/text/font/PlatformTypefacesApi28;->createNamed-RetOiIg(Landroidx/compose/ui/text/font/GenericFontFamily;Landroidx/compose/ui/text/font/FontWeight;I)Landroid/graphics/Typeface;
-PLandroidx/compose/ui/text/input/TextInputServiceAndroid$textInputCommandEventLoop$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/ui/unit/Constraints;->equals(Ljava/lang/Object;)Z
-PLandroidx/compose/ui/unit/Constraints;->equals-impl(JLjava/lang/Object;)Z
-PLandroidx/compose/ui/unit/Density;->toSize-XkaWNTQ(J)J
-PLandroidx/compose/ui/unit/DpSize$Companion;->getUnspecified-MYxV2XQ()J
-PLandroidx/compose/ui/unit/DpSize;->access$getUnspecified$cp()J
-PLandroidx/compose/ui/unit/IntOffsetKt;->plus-Nv-tHpc(JJ)J
-PLandroidx/compose/ui/unit/IntSize;->unbox-impl()J
-PLandroidx/compose/ui/unit/Velocity$Companion;-><init>()V
-PLandroidx/compose/ui/unit/Velocity$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/ui/unit/Velocity$Companion;->getZero-9UxMQ8M()J
-PLandroidx/compose/ui/unit/Velocity;-><clinit>()V
-PLandroidx/compose/ui/unit/Velocity;-><init>(J)V
-PLandroidx/compose/ui/unit/Velocity;->access$getZero$cp()J
-PLandroidx/compose/ui/unit/Velocity;->box-impl(J)Landroidx/compose/ui/unit/Velocity;
-PLandroidx/compose/ui/unit/Velocity;->constructor-impl(J)J
-PLandroidx/compose/ui/unit/Velocity;->copy-OhffZ5M$default(JFFILjava/lang/Object;)J
-PLandroidx/compose/ui/unit/Velocity;->copy-OhffZ5M(JFF)J
-PLandroidx/compose/ui/unit/Velocity;->equals-impl0(JJ)Z
-PLandroidx/compose/ui/unit/Velocity;->getX-impl(J)F
-PLandroidx/compose/ui/unit/Velocity;->getY-impl(J)F
-PLandroidx/compose/ui/unit/Velocity;->minus-AH228Gc(JJ)J
-PLandroidx/compose/ui/unit/Velocity;->plus-AH228Gc(JJ)J
-PLandroidx/compose/ui/unit/Velocity;->times-adjELrA(JF)J
-PLandroidx/compose/ui/unit/Velocity;->unbox-impl()J
-PLandroidx/compose/ui/unit/VelocityKt;->Velocity(FF)J
-PLandroidx/compose/ui/util/MathHelpersKt;->lerp(FFF)F
+PLandroidx/compose/ui/text/font/DeviceFontFamilyName;->equals-impl0(Ljava/lang/String;Ljava/lang/String;)Z
+PLandroidx/compose/ui/text/font/DeviceFontFamilyNameFont;->equals(Ljava/lang/Object;)Z
+PLandroidx/compose/ui/text/font/FontVariation$Settings;->equals(Ljava/lang/Object;)Z
PLandroidx/concurrent/futures/AbstractResolvableFuture$AtomicHelper;-><init>()V
PLandroidx/concurrent/futures/AbstractResolvableFuture$AtomicHelper;-><init>(Landroidx/concurrent/futures/AbstractResolvableFuture$1;)V
PLandroidx/concurrent/futures/AbstractResolvableFuture$Listener;-><clinit>()V
@@ -13755,89 +13711,6 @@
PLandroidx/concurrent/futures/ResolvableFuture;-><init>()V
PLandroidx/concurrent/futures/ResolvableFuture;->create()Landroidx/concurrent/futures/ResolvableFuture;
PLandroidx/concurrent/futures/ResolvableFuture;->set(Ljava/lang/Object;)Z
-PLandroidx/core/app/ActivityCompat$Api16Impl;->startIntentSenderForResult(Landroid/app/Activity;Landroid/content/IntentSender;ILandroid/content/Intent;IIILandroid/os/Bundle;)V
-PLandroidx/core/app/ActivityCompat;->startIntentSenderForResult(Landroid/app/Activity;Landroid/content/IntentSender;ILandroid/content/Intent;IIILandroid/os/Bundle;)V
-PLandroidx/core/app/ComponentActivity;->dispatchKeyEvent(Landroid/view/KeyEvent;)Z
-PLandroidx/core/app/ComponentActivity;->onSaveInstanceState(Landroid/os/Bundle;)V
-PLandroidx/core/app/ComponentActivity;->superDispatchKeyEvent(Landroid/view/KeyEvent;)Z
-PLandroidx/core/content/ContextCompat;-><clinit>()V
-PLandroidx/core/graphics/Insets;-><clinit>()V
-PLandroidx/core/graphics/Insets;-><init>(IIII)V
-PLandroidx/core/view/KeyEventDispatcher;-><clinit>()V
-PLandroidx/core/view/KeyEventDispatcher;->dispatchBeforeHierarchy(Landroid/view/View;Landroid/view/KeyEvent;)Z
-PLandroidx/core/view/KeyEventDispatcher;->dispatchKeyEvent(Landroidx/core/view/KeyEventDispatcher$Component;Landroid/view/View;Landroid/view/Window$Callback;Landroid/view/KeyEvent;)Z
-PLandroidx/core/view/ViewCompat$Api21Impl$1;-><init>(Landroid/view/View;Landroidx/core/view/OnApplyWindowInsetsListener;)V
-PLandroidx/core/view/ViewCompat$Api21Impl;->setOnApplyWindowInsetsListener(Landroid/view/View;Landroidx/core/view/OnApplyWindowInsetsListener;)V
-PLandroidx/core/view/ViewCompat;->dispatchUnhandledKeyEventBeforeHierarchy(Landroid/view/View;Landroid/view/KeyEvent;)Z
-PLandroidx/core/view/ViewCompat;->setOnApplyWindowInsetsListener(Landroid/view/View;Landroidx/core/view/OnApplyWindowInsetsListener;)V
-PLandroidx/core/view/ViewCompat;->setWindowInsetsAnimationCallback(Landroid/view/View;Landroidx/core/view/WindowInsetsAnimationCompat$Callback;)V
-PLandroidx/core/view/ViewKt$ancestors$1;-><clinit>()V
-PLandroidx/core/view/ViewKt$ancestors$1;-><init>()V
-PLandroidx/core/view/ViewKt$ancestors$1;->invoke(Landroid/view/ViewParent;)Landroid/view/ViewParent;
-PLandroidx/core/view/ViewKt$ancestors$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/core/view/ViewKt;->getAncestors(Landroid/view/View;)Lkotlin/sequences/Sequence;
-PLandroidx/core/view/WindowInsetsAnimationCompat$Callback;-><init>(I)V
-PLandroidx/core/view/WindowInsetsAnimationCompat$Callback;->getDispatchMode()I
-PLandroidx/core/view/WindowInsetsAnimationCompat$Impl30$ProxyCallback;-><init>(Landroidx/core/view/WindowInsetsAnimationCompat$Callback;)V
-PLandroidx/core/view/WindowInsetsAnimationCompat$Impl30;->setCallback(Landroid/view/View;Landroidx/core/view/WindowInsetsAnimationCompat$Callback;)V
-PLandroidx/core/view/WindowInsetsAnimationCompat;->setCallback(Landroid/view/View;Landroidx/core/view/WindowInsetsAnimationCompat$Callback;)V
-PLandroidx/core/view/WindowInsetsCompat$Type;->captionBar()I
-PLandroidx/core/view/WindowInsetsCompat$Type;->displayCutout()I
-PLandroidx/core/view/WindowInsetsCompat$Type;->ime()I
-PLandroidx/core/view/WindowInsetsCompat$Type;->mandatorySystemGestures()I
-PLandroidx/core/view/WindowInsetsCompat$Type;->navigationBars()I
-PLandroidx/core/view/WindowInsetsCompat$Type;->statusBars()I
-PLandroidx/core/view/WindowInsetsCompat$Type;->systemBars()I
-PLandroidx/core/view/WindowInsetsCompat$Type;->systemGestures()I
-PLandroidx/core/view/WindowInsetsCompat$Type;->tappableElement()I
-PLandroidx/customview/poolingcontainer/PoolingContainer;->isPoolingContainer(Landroid/view/View;)Z
-PLandroidx/customview/poolingcontainer/PoolingContainer;->isWithinPoolingContainer(Landroid/view/View;)Z
-PLandroidx/emoji2/text/EmojiMetadata;->isDefaultEmoji()Z
-PLandroidx/emoji2/text/EmojiProcessor$ProcessorSm;->isEmojiStyle(I)Z
-PLandroidx/emoji2/text/EmojiProcessor$ProcessorSm;->isTextStyle(I)Z
-PLandroidx/emoji2/text/EmojiProcessor$ProcessorSm;->shouldUseEmojiPresentationStyleForSingleCodepoint()Z
-PLandroidx/emoji2/text/MetadataRepo$Node;->getData()Landroidx/emoji2/text/EmojiMetadata;
-PLandroidx/emoji2/text/flatbuffer/MetadataItem;->emojiStyle()Z
-PLandroidx/lifecycle/DefaultLifecycleObserver;->onDestroy(Landroidx/lifecycle/LifecycleOwner;)V
-PLandroidx/lifecycle/DefaultLifecycleObserver;->onPause(Landroidx/lifecycle/LifecycleOwner;)V
-PLandroidx/lifecycle/DefaultLifecycleObserver;->onStop(Landroidx/lifecycle/LifecycleOwner;)V
-PLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityDestroyed(Landroid/app/Activity;)V
-PLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityPaused(Landroid/app/Activity;)V
-PLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivitySaveInstanceState(Landroid/app/Activity;Landroid/os/Bundle;)V
-PLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityStopped(Landroid/app/Activity;)V
-PLandroidx/lifecycle/Lifecycle$Event;->downFrom(Landroidx/lifecycle/Lifecycle$State;)Landroidx/lifecycle/Lifecycle$Event;
-PLandroidx/lifecycle/LifecycleDispatcher$DispatcherActivityCallback;->onActivitySaveInstanceState(Landroid/app/Activity;Landroid/os/Bundle;)V
-PLandroidx/lifecycle/LifecycleDispatcher$DispatcherActivityCallback;->onActivityStopped(Landroid/app/Activity;)V
-PLandroidx/lifecycle/LifecycleRegistry;->backwardPass(Landroidx/lifecycle/LifecycleOwner;)V
-PLandroidx/lifecycle/LifecycleRegistry;->markState(Landroidx/lifecycle/Lifecycle$State;)V
-PLandroidx/lifecycle/LifecycleRegistry;->setCurrentState(Landroidx/lifecycle/Lifecycle$State;)V
-PLandroidx/lifecycle/LiveData$LifecycleBoundObserver;->detachObserver()V
-PLandroidx/lifecycle/LiveData;->onInactive()V
-PLandroidx/lifecycle/LiveData;->removeObserver(Landroidx/lifecycle/Observer;)V
-PLandroidx/lifecycle/LiveData;->setValue(Ljava/lang/Object;)V
-PLandroidx/lifecycle/MutableLiveData;->setValue(Ljava/lang/Object;)V
-PLandroidx/lifecycle/ProcessLifecycleOwner$1;->run()V
-PLandroidx/lifecycle/ProcessLifecycleOwner$3;->onActivityPaused(Landroid/app/Activity;)V
-PLandroidx/lifecycle/ProcessLifecycleOwner$3;->onActivityStopped(Landroid/app/Activity;)V
-PLandroidx/lifecycle/ProcessLifecycleOwner;->activityPaused()V
-PLandroidx/lifecycle/ProcessLifecycleOwner;->activityStopped()V
-PLandroidx/lifecycle/ProcessLifecycleOwner;->dispatchPauseIfNeeded()V
-PLandroidx/lifecycle/ProcessLifecycleOwner;->dispatchStopIfNeeded()V
-PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityDestroyed(Landroid/app/Activity;)V
-PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPaused(Landroid/app/Activity;)V
-PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPreDestroyed(Landroid/app/Activity;)V
-PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPrePaused(Landroid/app/Activity;)V
-PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPreStopped(Landroid/app/Activity;)V
-PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivitySaveInstanceState(Landroid/app/Activity;Landroid/os/Bundle;)V
-PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityStopped(Landroid/app/Activity;)V
-PLandroidx/lifecycle/ReportFragment;->onDestroy()V
-PLandroidx/lifecycle/ReportFragment;->onPause()V
-PLandroidx/lifecycle/ReportFragment;->onStop()V
-PLandroidx/lifecycle/SavedStateHandlesProvider;->saveState()Landroid/os/Bundle;
-PLandroidx/lifecycle/SavedStateHandlesVM;->getHandles()Ljava/util/Map;
-PLandroidx/lifecycle/ViewModel;->clear()V
-PLandroidx/lifecycle/ViewModel;->onCleared()V
-PLandroidx/lifecycle/ViewModelStore;->clear()V
PLandroidx/profileinstaller/DeviceProfileWriter$$ExternalSyntheticLambda0;-><init>(Landroidx/profileinstaller/DeviceProfileWriter;ILjava/lang/Object;)V
PLandroidx/profileinstaller/DeviceProfileWriter$$ExternalSyntheticLambda0;->run()V
PLandroidx/profileinstaller/DeviceProfileWriter;->$r8$lambda$ERhlvXCSfTRq-n5iULYjO-Ntn-w(Landroidx/profileinstaller/DeviceProfileWriter;ILjava/lang/Object;)V
@@ -13869,45 +13742,11 @@
PLandroidx/profileinstaller/ProfileVerifier$Cache;-><init>(IIJJ)V
PLandroidx/profileinstaller/ProfileVerifier$Cache;->equals(Ljava/lang/Object;)Z
PLandroidx/profileinstaller/ProfileVerifier$Cache;->readFromFile(Ljava/io/File;)Landroidx/profileinstaller/ProfileVerifier$Cache;
-PLandroidx/profileinstaller/ProfileVerifier$Cache;->writeOnFile(Ljava/io/File;)V
PLandroidx/profileinstaller/ProfileVerifier$CompilationStatus;-><init>(IZZ)V
PLandroidx/profileinstaller/ProfileVerifier;-><clinit>()V
PLandroidx/profileinstaller/ProfileVerifier;->getPackageLastUpdateTime(Landroid/content/Context;)J
PLandroidx/profileinstaller/ProfileVerifier;->setCompilationStatus(IZZ)Landroidx/profileinstaller/ProfileVerifier$CompilationStatus;
PLandroidx/profileinstaller/ProfileVerifier;->writeProfileVerification(Landroid/content/Context;Z)Landroidx/profileinstaller/ProfileVerifier$CompilationStatus;
-PLandroidx/savedstate/SavedStateRegistry;->performSave(Landroid/os/Bundle;)V
-PLandroidx/savedstate/SavedStateRegistry;->unregisterSavedStateProvider(Ljava/lang/String;)V
-PLandroidx/savedstate/SavedStateRegistryController;->performSave(Landroid/os/Bundle;)V
-PLcom/android/credentialmanager/CredentialManagerRepo;->getCredentialInitialUiState()Lcom/android/credentialmanager/getflow/GetCredentialUiState;
-PLcom/android/credentialmanager/CredentialManagerRepo;->onCancel()V
-PLcom/android/credentialmanager/CredentialManagerRepo;->onOptionSelected(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Landroid/content/Intent;)V
-PLcom/android/credentialmanager/CredentialSelectorActivity$CredentialManagerBottomSheet$3;->invoke(Landroidx/compose/runtime/Composer;I)V
-PLcom/android/credentialmanager/CredentialSelectorActivity$CredentialManagerBottomSheet$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/CredentialSelectorActivity$CredentialManagerBottomSheet$launcher$1$1;->invoke(Landroidx/activity/result/ActivityResult;)V
-PLcom/android/credentialmanager/CredentialSelectorActivity$CredentialManagerBottomSheet$launcher$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/CredentialSelectorActivity$onCancel$1;->onChanged(Lcom/android/credentialmanager/common/DialogResult;)V
-PLcom/android/credentialmanager/CredentialSelectorActivity$onCancel$1;->onChanged(Ljava/lang/Object;)V
-PLcom/android/credentialmanager/GetFlowUtils$Companion;-><init>()V
-PLcom/android/credentialmanager/GetFlowUtils$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLcom/android/credentialmanager/GetFlowUtils$Companion;->getActionEntryList(Ljava/lang/String;Ljava/util/List;Landroid/graphics/drawable/Drawable;)Ljava/util/List;
-PLcom/android/credentialmanager/GetFlowUtils$Companion;->getAuthenticationEntry(Ljava/lang/String;Ljava/lang/String;Landroid/graphics/drawable/Drawable;Landroid/credentials/ui/Entry;)Lcom/android/credentialmanager/getflow/AuthenticationEntryInfo;
-PLcom/android/credentialmanager/GetFlowUtils$Companion;->getCredentialOptionInfoList(Ljava/lang/String;Ljava/util/List;Landroid/content/Context;)Ljava/util/List;
-PLcom/android/credentialmanager/GetFlowUtils$Companion;->getRemoteEntry(Ljava/lang/String;Landroid/credentials/ui/Entry;)Lcom/android/credentialmanager/getflow/RemoteEntryInfo;
-PLcom/android/credentialmanager/GetFlowUtils$Companion;->toProviderList(Ljava/util/List;Landroid/content/Context;)Ljava/util/List;
-PLcom/android/credentialmanager/GetFlowUtils$Companion;->toRequestDisplayInfo(Landroid/credentials/ui/RequestInfo;Landroid/content/Context;)Lcom/android/credentialmanager/getflow/RequestDisplayInfo;
-PLcom/android/credentialmanager/GetFlowUtils;-><clinit>()V
-PLcom/android/credentialmanager/UserConfigRepo;->setDefaultProvider(Ljava/lang/String;)V
-PLcom/android/credentialmanager/common/DialogResult;-><clinit>()V
-PLcom/android/credentialmanager/common/DialogResult;-><init>(Lcom/android/credentialmanager/common/ResultState;)V
-PLcom/android/credentialmanager/common/DialogResult;->getResultState()Lcom/android/credentialmanager/common/ResultState;
-PLcom/android/credentialmanager/common/ProviderActivityResult;-><clinit>()V
-PLcom/android/credentialmanager/common/ProviderActivityResult;-><init>(ILandroid/content/Intent;)V
-PLcom/android/credentialmanager/common/ProviderActivityResult;->equals(Ljava/lang/Object;)Z
-PLcom/android/credentialmanager/common/ProviderActivityResult;->getData()Landroid/content/Intent;
-PLcom/android/credentialmanager/common/ProviderActivityResult;->getResultCode()I
-PLcom/android/credentialmanager/common/ResultState;->$values()[Lcom/android/credentialmanager/common/ResultState;
-PLcom/android/credentialmanager/common/ResultState;-><clinit>()V
-PLcom/android/credentialmanager/common/ResultState;-><init>(Ljava/lang/String;I)V
PLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$1$1$1;-><init>(Lcom/android/credentialmanager/common/material/ModalBottomSheetState;Lkotlin/coroutines/Continuation;)V
PLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
PLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
@@ -13918,464 +13757,10 @@
PLcom/android/credentialmanager/common/material/ModalBottomSheetKt$rememberModalBottomSheetState$1;->invoke(Lcom/android/credentialmanager/common/material/ModalBottomSheetValue;)Ljava/lang/Boolean;
PLcom/android/credentialmanager/common/material/ModalBottomSheetKt$rememberModalBottomSheetState$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
PLcom/android/credentialmanager/common/material/ModalBottomSheetState;->hide(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLcom/android/credentialmanager/common/material/SwipeableKt$PreUpPostDownNestedScrollConnection$1$onPostFling$1;-><init>(Lcom/android/credentialmanager/common/material/SwipeableKt$PreUpPostDownNestedScrollConnection$1;Lkotlin/coroutines/Continuation;)V
-PLcom/android/credentialmanager/common/material/SwipeableKt$PreUpPostDownNestedScrollConnection$1$onPostFling$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/common/material/SwipeableKt$PreUpPostDownNestedScrollConnection$1$onPreFling$1;-><init>(Lcom/android/credentialmanager/common/material/SwipeableKt$PreUpPostDownNestedScrollConnection$1;Lkotlin/coroutines/Continuation;)V
-PLcom/android/credentialmanager/common/material/SwipeableKt$PreUpPostDownNestedScrollConnection$1;->onPostFling-RZ2iAVY(JJLkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLcom/android/credentialmanager/common/material/SwipeableKt$PreUpPostDownNestedScrollConnection$1;->onPostScroll-DzOQY0M(JJI)J
-PLcom/android/credentialmanager/common/material/SwipeableKt$PreUpPostDownNestedScrollConnection$1;->onPreFling-QWom1Mo(JLkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLcom/android/credentialmanager/common/material/SwipeableKt$PreUpPostDownNestedScrollConnection$1;->onPreScroll-OzD1aCk(JI)J
-PLcom/android/credentialmanager/common/material/SwipeableKt$PreUpPostDownNestedScrollConnection$1;->toFloat(J)F
-PLcom/android/credentialmanager/common/material/SwipeableKt$PreUpPostDownNestedScrollConnection$1;->toOffset(F)J
-PLcom/android/credentialmanager/common/material/SwipeableKt$swipeable$3$4$1$1;-><init>(Lcom/android/credentialmanager/common/material/SwipeableState;FLkotlin/coroutines/Continuation;)V
-PLcom/android/credentialmanager/common/material/SwipeableKt$swipeable$3$4$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-PLcom/android/credentialmanager/common/material/SwipeableKt$swipeable$3$4$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/common/material/SwipeableKt$swipeable$3$4$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/common/material/SwipeableKt$swipeable$3$4$1;->invoke(Lkotlinx/coroutines/CoroutineScope;FLkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLcom/android/credentialmanager/common/material/SwipeableKt$swipeable$3$4$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/common/material/SwipeableState$animateInternalToOffset$2$1;-><init>(Landroidx/compose/foundation/gestures/DragScope;Lkotlin/jvm/internal/Ref$FloatRef;)V
-PLcom/android/credentialmanager/common/material/SwipeableState$animateInternalToOffset$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/common/material/SwipeableState$animateInternalToOffset$2;-><init>(Lcom/android/credentialmanager/common/material/SwipeableState;FLandroidx/compose/animation/core/AnimationSpec;Lkotlin/coroutines/Continuation;)V
-PLcom/android/credentialmanager/common/material/SwipeableState$animateInternalToOffset$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-PLcom/android/credentialmanager/common/material/SwipeableState$animateInternalToOffset$2;->invoke(Landroidx/compose/foundation/gestures/DragScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLcom/android/credentialmanager/common/material/SwipeableState$animateInternalToOffset$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/common/material/SwipeableState$animateInternalToOffset$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/common/material/SwipeableState$animateTo$2$emit$1;-><init>(Lcom/android/credentialmanager/common/material/SwipeableState$animateTo$2;Lkotlin/coroutines/Continuation;)V
-PLcom/android/credentialmanager/common/material/SwipeableState$animateTo$2$emit$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/common/material/SwipeableState$animateTo$2;-><init>(Ljava/lang/Object;Lcom/android/credentialmanager/common/material/SwipeableState;Landroidx/compose/animation/core/AnimationSpec;)V
-PLcom/android/credentialmanager/common/material/SwipeableState$animateTo$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLcom/android/credentialmanager/common/material/SwipeableState$animateTo$2;->emit(Ljava/util/Map;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLcom/android/credentialmanager/common/material/SwipeableState$latestNonEmptyAnchorsFlow$1;->invoke()Ljava/lang/Object;
-PLcom/android/credentialmanager/common/material/SwipeableState$latestNonEmptyAnchorsFlow$1;->invoke()Ljava/util/Map;
-PLcom/android/credentialmanager/common/material/SwipeableState$performFling$2;-><init>(Lcom/android/credentialmanager/common/material/SwipeableState;F)V
-PLcom/android/credentialmanager/common/material/SwipeableState$performFling$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLcom/android/credentialmanager/common/material/SwipeableState$performFling$2;->emit(Ljava/util/Map;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLcom/android/credentialmanager/common/material/SwipeableState$processNewAnchors$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/common/material/SwipeableState$special$$inlined$filter$1$2$1;-><init>(Lcom/android/credentialmanager/common/material/SwipeableState$special$$inlined$filter$1$2;Lkotlin/coroutines/Continuation;)V
-PLcom/android/credentialmanager/common/material/SwipeableState$special$$inlined$filter$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/common/material/SwipeableState$special$$inlined$filter$1$2;-><init>(Lkotlinx/coroutines/flow/FlowCollector;)V
-PLcom/android/credentialmanager/common/material/SwipeableState$special$$inlined$filter$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLcom/android/credentialmanager/common/material/SwipeableState$special$$inlined$filter$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLcom/android/credentialmanager/common/material/SwipeableState;->access$animateInternalToOffset(Lcom/android/credentialmanager/common/material/SwipeableState;FLandroidx/compose/animation/core/AnimationSpec;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLcom/android/credentialmanager/common/material/SwipeableState;->access$getAnimationTarget$p(Lcom/android/credentialmanager/common/material/SwipeableState;)Landroidx/compose/runtime/MutableState;
-PLcom/android/credentialmanager/common/material/SwipeableState;->access$setAnimationRunning(Lcom/android/credentialmanager/common/material/SwipeableState;Z)V
-PLcom/android/credentialmanager/common/material/SwipeableState;->access$setCurrentValue(Lcom/android/credentialmanager/common/material/SwipeableState;Ljava/lang/Object;)V
-PLcom/android/credentialmanager/common/material/SwipeableState;->animateInternalToOffset(FLandroidx/compose/animation/core/AnimationSpec;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLcom/android/credentialmanager/common/material/SwipeableState;->animateTo$default(Lcom/android/credentialmanager/common/material/SwipeableState;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationSpec;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/common/material/SwipeableState;->animateTo(Ljava/lang/Object;Landroidx/compose/animation/core/AnimationSpec;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
PLcom/android/credentialmanager/common/material/SwipeableState;->getConfirmStateChange$frameworks__base__packages__CredentialManager__android_common__CredentialManager()Lkotlin/jvm/functions/Function1;
-PLcom/android/credentialmanager/common/material/SwipeableState;->getVelocityThreshold$frameworks__base__packages__CredentialManager__android_common__CredentialManager()F
-PLcom/android/credentialmanager/common/material/SwipeableState;->performDrag(F)F
-PLcom/android/credentialmanager/common/material/SwipeableState;->performFling(FLkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLcom/android/credentialmanager/common/material/SwipeableState;->setAnimationRunning(Z)V
-PLcom/android/credentialmanager/common/material/SwipeableState;->setCurrentValue(Ljava/lang/Object;)V
-PLcom/android/credentialmanager/common/ui/EntryKt$TransparentBackgroundEntry$1;-><init>(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;II)V
-PLcom/android/credentialmanager/common/ui/EntryKt;->TransparentBackgroundEntry(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
-PLcom/android/credentialmanager/createflow/ActiveEntry;->equals(Ljava/lang/Object;)Z
-PLcom/android/credentialmanager/createflow/ComposableSingletons$CreateCredentialComponentsKt$lambda-2$1;->invoke(Landroidx/compose/runtime/Composer;I)V
-PLcom/android/credentialmanager/createflow/ComposableSingletons$CreateCredentialComponentsKt$lambda-2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/createflow/ComposableSingletons$CreateCredentialComponentsKt$lambda-3$1;->invoke(Landroidx/compose/runtime/Composer;I)V
-PLcom/android/credentialmanager/createflow/ComposableSingletons$CreateCredentialComponentsKt$lambda-3$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/createflow/ComposableSingletons$CreateCredentialComponentsKt;->getLambda-2$frameworks__base__packages__CredentialManager__android_common__CredentialManager()Lkotlin/jvm/functions/Function2;
-PLcom/android/credentialmanager/createflow/ComposableSingletons$CreateCredentialComponentsKt;->getLambda-3$frameworks__base__packages__CredentialManager__android_common__CredentialManager()Lkotlin/jvm/functions/Function2;
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$1$10;-><init>(Ljava/lang/Object;)V
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$1$10;->invoke()Ljava/lang/Object;
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$1$10;->invoke()V
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$1$11;-><init>(Ljava/lang/Object;)V
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$1$11;->invoke(Lcom/android/credentialmanager/createflow/ActiveEntry;)V
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$1$11;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$1$12;-><init>(Ljava/lang/Object;)V
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$1$12;->invoke()Ljava/lang/Object;
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$1$12;->invoke()V
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$1$13;-><init>(Ljava/lang/Object;)V
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$1$14;-><init>(Ljava/lang/Object;)V
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$1$14;->invoke()Ljava/lang/Object;
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$1$14;->invoke()V
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$1$15;-><init>(Ljava/lang/Object;)V
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$1$15;->invoke()Ljava/lang/Object;
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$1$15;->invoke()V
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$1$6;->invoke(Lcom/android/credentialmanager/createflow/EntryInfo;)V
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$1$6;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$1$7;->invoke()Ljava/lang/Object;
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$1$7;->invoke()V
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$1$8;->invoke()Ljava/lang/Object;
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$1$8;->invoke()V
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$1$9;-><init>(Ljava/lang/Object;)V
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$3;->invoke(Landroidx/compose/runtime/Composer;I)V
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$CreateCredentialScreen$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$MoreOptionsDisabledProvidersRow$1$1$1;-><clinit>()V
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$MoreOptionsDisabledProvidersRow$1$1$1;-><init>()V
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$MoreOptionsDisabledProvidersRow$1$1$1;->invoke(Lcom/android/credentialmanager/createflow/ProviderInfo;)Ljava/lang/CharSequence;
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$MoreOptionsDisabledProvidersRow$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$MoreOptionsDisabledProvidersRow$1;-><init>(Ljava/util/List;)V
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$MoreOptionsDisabledProvidersRow$1;->invoke(Landroidx/compose/runtime/Composer;I)V
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$MoreOptionsDisabledProvidersRow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$MoreOptionsInfoRow$1;-><init>(Lcom/android/credentialmanager/createflow/EnabledProviderInfo;Lcom/android/credentialmanager/createflow/CreateOptionInfo;Lcom/android/credentialmanager/createflow/RequestDisplayInfo;)V
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$MoreOptionsInfoRow$1;->invoke(Landroidx/compose/runtime/Composer;I)V
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$MoreOptionsInfoRow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$MoreOptionsInfoRow$2;-><init>(Lcom/android/credentialmanager/createflow/EnabledProviderInfo;)V
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$MoreOptionsInfoRow$2;->invoke(Landroidx/compose/runtime/Composer;I)V
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$MoreOptionsInfoRow$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$MoreOptionsRowIntroCard$1;-><init>(Lcom/android/credentialmanager/createflow/EnabledProviderInfo;Lkotlin/jvm/functions/Function0;ILkotlin/jvm/functions/Function0;)V
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$MoreOptionsRowIntroCard$1;->invoke(Landroidx/compose/foundation/layout/ColumnScope;Landroidx/compose/runtime/Composer;I)V
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$MoreOptionsRowIntroCard$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$MoreOptionsSelectionCard$1$1$1;-><init>(Lcom/android/credentialmanager/createflow/RequestDisplayInfo;)V
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$MoreOptionsSelectionCard$1$1$1;->invoke(Landroidx/compose/runtime/Composer;I)V
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$MoreOptionsSelectionCard$1$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$MoreOptionsSelectionCard$1$1$2;-><init>(ZLkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;)V
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$MoreOptionsSelectionCard$1$1$2;->invoke(Landroidx/compose/runtime/Composer;I)V
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$MoreOptionsSelectionCard$1$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$MoreOptionsSelectionCard$1$1$3$1$1$1$1;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/Pair;)V
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$MoreOptionsSelectionCard$1$1$3$1$1$1$1;->invoke()Ljava/lang/Object;
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$MoreOptionsSelectionCard$1$1$3$1$1$1$1;->invoke()V
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$MoreOptionsSelectionCard$1$1$3$1$1$1;-><init>(Lcom/android/credentialmanager/createflow/RequestDisplayInfo;Lkotlin/Pair;Lkotlin/jvm/functions/Function1;)V
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$MoreOptionsSelectionCard$1$1$3$1$1$1;->invoke(Landroidx/compose/foundation/lazy/LazyItemScope;Landroidx/compose/runtime/Composer;I)V
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$MoreOptionsSelectionCard$1$1$3$1$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$MoreOptionsSelectionCard$1$1$3$1$2;-><init>(Ljava/util/List;Lkotlin/jvm/functions/Function0;I)V
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$MoreOptionsSelectionCard$1$1$3$1$2;->invoke(Landroidx/compose/foundation/lazy/LazyItemScope;Landroidx/compose/runtime/Composer;I)V
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$MoreOptionsSelectionCard$1$1$3$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$MoreOptionsSelectionCard$1$1$3$1;-><init>(ZLjava/util/List;Ljava/util/List;Lcom/android/credentialmanager/createflow/RequestDisplayInfo;Lkotlin/jvm/functions/Function1;Ljava/util/List;Lkotlin/jvm/functions/Function0;ILkotlin/jvm/functions/Function1;I)V
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$MoreOptionsSelectionCard$1$1$3$1;->invoke(Landroidx/compose/foundation/lazy/LazyListScope;)V
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$MoreOptionsSelectionCard$1$1$3$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$MoreOptionsSelectionCard$1$1$3;-><init>(ZLjava/util/List;Ljava/util/List;Lcom/android/credentialmanager/createflow/RequestDisplayInfo;Lkotlin/jvm/functions/Function1;Ljava/util/List;Lkotlin/jvm/functions/Function0;ILkotlin/jvm/functions/Function1;I)V
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$MoreOptionsSelectionCard$1$1$3;->invoke(Landroidx/compose/foundation/layout/ColumnScope;Landroidx/compose/runtime/Composer;I)V
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$MoreOptionsSelectionCard$1$1$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$MoreOptionsSelectionCard$1;-><init>(Lcom/android/credentialmanager/createflow/RequestDisplayInfo;ZLkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;ZLjava/util/List;Ljava/util/List;Lkotlin/jvm/functions/Function1;Ljava/util/List;Lkotlin/jvm/functions/Function0;ILkotlin/jvm/functions/Function1;I)V
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$MoreOptionsSelectionCard$1;->invoke(Landroidx/compose/foundation/layout/ColumnScope;Landroidx/compose/runtime/Composer;I)V
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$MoreOptionsSelectionCard$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$PrimaryCreateOptionRow$1;->invoke()Ljava/lang/Object;
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt$PrimaryCreateOptionRow$1;->invoke()V
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt;->MoreOptionsDisabledProvidersRow(Ljava/util/List;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;I)V
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt;->MoreOptionsInfoRow(Lcom/android/credentialmanager/createflow/RequestDisplayInfo;Lcom/android/credentialmanager/createflow/EnabledProviderInfo;Lcom/android/credentialmanager/createflow/CreateOptionInfo;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;I)V
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt;->MoreOptionsRowIntroCard(Lcom/android/credentialmanager/createflow/EnabledProviderInfo;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;I)V
-PLcom/android/credentialmanager/createflow/CreateCredentialComponentsKt;->MoreOptionsSelectionCard(Lcom/android/credentialmanager/createflow/RequestDisplayInfo;Ljava/util/List;Ljava/util/List;Ljava/util/List;ZZLkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V
-PLcom/android/credentialmanager/createflow/CreateCredentialUiState;->copy$default(Lcom/android/credentialmanager/createflow/CreateCredentialUiState;Ljava/util/List;Ljava/util/List;Lcom/android/credentialmanager/createflow/CreateScreenState;Lcom/android/credentialmanager/createflow/RequestDisplayInfo;Ljava/util/List;ZLcom/android/credentialmanager/createflow/ActiveEntry;Lcom/android/credentialmanager/createflow/EntryInfo;ZZLjava/lang/Boolean;ILjava/lang/Object;)Lcom/android/credentialmanager/createflow/CreateCredentialUiState;
-PLcom/android/credentialmanager/createflow/CreateCredentialUiState;->copy(Ljava/util/List;Ljava/util/List;Lcom/android/credentialmanager/createflow/CreateScreenState;Lcom/android/credentialmanager/createflow/RequestDisplayInfo;Ljava/util/List;ZLcom/android/credentialmanager/createflow/ActiveEntry;Lcom/android/credentialmanager/createflow/EntryInfo;ZZLjava/lang/Boolean;)Lcom/android/credentialmanager/createflow/CreateCredentialUiState;
-PLcom/android/credentialmanager/createflow/CreateCredentialUiState;->equals(Ljava/lang/Object;)Z
-PLcom/android/credentialmanager/createflow/CreateCredentialUiState;->getDisabledProviders()Ljava/util/List;
-PLcom/android/credentialmanager/createflow/CreateCredentialUiState;->getHasDefaultProvider()Z
-PLcom/android/credentialmanager/createflow/CreateCredentialUiState;->getProviderActivityPending()Z
-PLcom/android/credentialmanager/createflow/CreateCredentialUiState;->getSelectedEntry()Lcom/android/credentialmanager/createflow/EntryInfo;
-PLcom/android/credentialmanager/createflow/CreateCredentialUiState;->getSortedCreateOptionsPairs()Ljava/util/List;
-PLcom/android/credentialmanager/createflow/CreateCredentialUiState;->isFromProviderSelection()Ljava/lang/Boolean;
-PLcom/android/credentialmanager/createflow/CreateCredentialViewModel;->launchProviderUi(Landroidx/activity/compose/ManagedActivityResultLauncher;)V
-PLcom/android/credentialmanager/createflow/CreateCredentialViewModel;->onBackCreationSelectionButtonSelected()V
-PLcom/android/credentialmanager/createflow/CreateCredentialViewModel;->onCancel()V
-PLcom/android/credentialmanager/createflow/CreateCredentialViewModel;->onChangeDefaultSelected()V
-PLcom/android/credentialmanager/createflow/CreateCredentialViewModel;->onConfirmEntrySelected()V
-PLcom/android/credentialmanager/createflow/CreateCredentialViewModel;->onDefaultChanged(Ljava/lang/String;)V
-PLcom/android/credentialmanager/createflow/CreateCredentialViewModel;->onDisabledPasswordManagerSelected()V
-PLcom/android/credentialmanager/createflow/CreateCredentialViewModel;->onEntrySelected(Lcom/android/credentialmanager/createflow/EntryInfo;)V
-PLcom/android/credentialmanager/createflow/CreateCredentialViewModel;->onEntrySelectedFromMoreOptionScreen(Lcom/android/credentialmanager/createflow/ActiveEntry;)V
-PLcom/android/credentialmanager/createflow/CreateCredentialViewModel;->onMoreOptionsSelectedOnCreationSelection()V
-PLcom/android/credentialmanager/createflow/CreateCredentialViewModel;->onProviderActivityResult(Lcom/android/credentialmanager/common/ProviderActivityResult;)V
-PLcom/android/credentialmanager/createflow/CreateCredentialViewModel;->onUseOnceSelected()V
-PLcom/android/credentialmanager/createflow/CreateCredentialViewModel;->setUiState(Lcom/android/credentialmanager/createflow/CreateCredentialUiState;)V
-PLcom/android/credentialmanager/createflow/CreateOptionInfo;->getPasskeyCount()Ljava/lang/Integer;
-PLcom/android/credentialmanager/createflow/CreateOptionInfo;->getPasswordCount()Ljava/lang/Integer;
-PLcom/android/credentialmanager/createflow/EntryInfo;->getEntryKey()Ljava/lang/String;
-PLcom/android/credentialmanager/createflow/EntryInfo;->getEntrySubkey()Ljava/lang/String;
-PLcom/android/credentialmanager/createflow/EntryInfo;->getFillInIntent()Landroid/content/Intent;
-PLcom/android/credentialmanager/createflow/EntryInfo;->getPendingIntent()Landroid/app/PendingIntent;
-PLcom/android/credentialmanager/createflow/EntryInfo;->getProviderId()Ljava/lang/String;
-PLcom/android/credentialmanager/createflow/RequestDisplayInfo;->equals(Ljava/lang/Object;)Z
-PLcom/android/credentialmanager/getflow/ActionEntryInfo;-><clinit>()V
-PLcom/android/credentialmanager/getflow/ActionEntryInfo;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/app/PendingIntent;Landroid/content/Intent;Ljava/lang/String;Landroid/graphics/drawable/Drawable;Ljava/lang/String;)V
-PLcom/android/credentialmanager/getflow/ActionEntryInfo;->getIcon()Landroid/graphics/drawable/Drawable;
-PLcom/android/credentialmanager/getflow/ActionEntryInfo;->getSubTitle()Ljava/lang/String;
-PLcom/android/credentialmanager/getflow/ActionEntryInfo;->getTitle()Ljava/lang/String;
-PLcom/android/credentialmanager/getflow/ComposableSingletons$GetCredentialComponentsKt$lambda-1$1;-><clinit>()V
-PLcom/android/credentialmanager/getflow/ComposableSingletons$GetCredentialComponentsKt$lambda-1$1;-><init>()V
-PLcom/android/credentialmanager/getflow/ComposableSingletons$GetCredentialComponentsKt$lambda-1$1;->invoke(Landroidx/compose/runtime/Composer;I)V
-PLcom/android/credentialmanager/getflow/ComposableSingletons$GetCredentialComponentsKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/getflow/ComposableSingletons$GetCredentialComponentsKt$lambda-2$1;-><clinit>()V
-PLcom/android/credentialmanager/getflow/ComposableSingletons$GetCredentialComponentsKt$lambda-2$1;-><init>()V
-PLcom/android/credentialmanager/getflow/ComposableSingletons$GetCredentialComponentsKt$lambda-2$1;->invoke(Landroidx/compose/runtime/Composer;I)V
-PLcom/android/credentialmanager/getflow/ComposableSingletons$GetCredentialComponentsKt$lambda-2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/getflow/ComposableSingletons$GetCredentialComponentsKt$lambda-3$1;-><clinit>()V
-PLcom/android/credentialmanager/getflow/ComposableSingletons$GetCredentialComponentsKt$lambda-3$1;-><init>()V
-PLcom/android/credentialmanager/getflow/ComposableSingletons$GetCredentialComponentsKt$lambda-3$1;->invoke(Landroidx/compose/runtime/Composer;I)V
-PLcom/android/credentialmanager/getflow/ComposableSingletons$GetCredentialComponentsKt$lambda-3$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/getflow/ComposableSingletons$GetCredentialComponentsKt$lambda-4$1;-><clinit>()V
-PLcom/android/credentialmanager/getflow/ComposableSingletons$GetCredentialComponentsKt$lambda-4$1;-><init>()V
-PLcom/android/credentialmanager/getflow/ComposableSingletons$GetCredentialComponentsKt$lambda-5$1;-><clinit>()V
-PLcom/android/credentialmanager/getflow/ComposableSingletons$GetCredentialComponentsKt$lambda-5$1;-><init>()V
-PLcom/android/credentialmanager/getflow/ComposableSingletons$GetCredentialComponentsKt$lambda-6$1;-><clinit>()V
-PLcom/android/credentialmanager/getflow/ComposableSingletons$GetCredentialComponentsKt$lambda-6$1;-><init>()V
-PLcom/android/credentialmanager/getflow/ComposableSingletons$GetCredentialComponentsKt$lambda-7$1;-><clinit>()V
-PLcom/android/credentialmanager/getflow/ComposableSingletons$GetCredentialComponentsKt$lambda-7$1;-><init>()V
-PLcom/android/credentialmanager/getflow/ComposableSingletons$GetCredentialComponentsKt;-><clinit>()V
-PLcom/android/credentialmanager/getflow/ComposableSingletons$GetCredentialComponentsKt;-><init>()V
-PLcom/android/credentialmanager/getflow/ComposableSingletons$GetCredentialComponentsKt;->getLambda-1$frameworks__base__packages__CredentialManager__android_common__CredentialManager()Lkotlin/jvm/functions/Function2;
-PLcom/android/credentialmanager/getflow/ComposableSingletons$GetCredentialComponentsKt;->getLambda-2$frameworks__base__packages__CredentialManager__android_common__CredentialManager()Lkotlin/jvm/functions/Function2;
-PLcom/android/credentialmanager/getflow/ComposableSingletons$GetCredentialComponentsKt;->getLambda-3$frameworks__base__packages__CredentialManager__android_common__CredentialManager()Lkotlin/jvm/functions/Function2;
-PLcom/android/credentialmanager/getflow/CredentialEntryInfo;-><clinit>()V
-PLcom/android/credentialmanager/getflow/CredentialEntryInfo;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/app/PendingIntent;Landroid/content/Intent;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/graphics/drawable/Drawable;Ljava/lang/Long;)V
-PLcom/android/credentialmanager/getflow/CredentialEntryInfo;->getCredentialType()Ljava/lang/String;
-PLcom/android/credentialmanager/getflow/CredentialEntryInfo;->getCredentialTypeDisplayName()Ljava/lang/String;
-PLcom/android/credentialmanager/getflow/CredentialEntryInfo;->getDisplayName()Ljava/lang/String;
-PLcom/android/credentialmanager/getflow/CredentialEntryInfo;->getIcon()Landroid/graphics/drawable/Drawable;
-PLcom/android/credentialmanager/getflow/CredentialEntryInfo;->getLastUsedTimeMillis()Ljava/lang/Long;
-PLcom/android/credentialmanager/getflow/CredentialEntryInfo;->getUserName()Ljava/lang/String;
-PLcom/android/credentialmanager/getflow/CredentialEntryInfoComparatorByTypeThenTimestamp;-><init>()V
-PLcom/android/credentialmanager/getflow/CredentialEntryInfoComparatorByTypeThenTimestamp;->compare(Lcom/android/credentialmanager/getflow/CredentialEntryInfo;Lcom/android/credentialmanager/getflow/CredentialEntryInfo;)I
-PLcom/android/credentialmanager/getflow/CredentialEntryInfoComparatorByTypeThenTimestamp;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
-PLcom/android/credentialmanager/getflow/EntryInfo;-><clinit>()V
-PLcom/android/credentialmanager/getflow/EntryInfo;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/app/PendingIntent;Landroid/content/Intent;)V
-PLcom/android/credentialmanager/getflow/EntryInfo;->getEntryKey()Ljava/lang/String;
-PLcom/android/credentialmanager/getflow/EntryInfo;->getEntrySubkey()Ljava/lang/String;
-PLcom/android/credentialmanager/getflow/EntryInfo;->getFillInIntent()Landroid/content/Intent;
-PLcom/android/credentialmanager/getflow/EntryInfo;->getPendingIntent()Landroid/app/PendingIntent;
-PLcom/android/credentialmanager/getflow/EntryInfo;->getProviderId()Ljava/lang/String;
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$ActionChips$2;-><init>(Ljava/util/List;Lkotlin/jvm/functions/Function1;I)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$ActionChips$2;->invoke(Landroidx/compose/foundation/layout/ColumnScope;Landroidx/compose/runtime/Composer;I)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$ActionChips$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$ActionChips$3;-><init>(Ljava/util/List;Lkotlin/jvm/functions/Function1;I)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$ActionEntryRow$1;-><init>(Lkotlin/jvm/functions/Function1;Lcom/android/credentialmanager/getflow/ActionEntryInfo;)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$ActionEntryRow$1;->invoke()Ljava/lang/Object;
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$ActionEntryRow$1;->invoke()V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$ActionEntryRow$2;-><init>(Lcom/android/credentialmanager/getflow/ActionEntryInfo;)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$ActionEntryRow$2;->invoke(Landroidx/compose/runtime/Composer;I)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$ActionEntryRow$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$ActionEntryRow$3;-><init>(Lcom/android/credentialmanager/getflow/ActionEntryInfo;)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$ActionEntryRow$3;->invoke(Landroidx/compose/runtime/Composer;I)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$ActionEntryRow$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$1$1$1;-><init>(ZLkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$1$1$1;->invoke(Landroidx/compose/runtime/Composer;I)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$1$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$1$1$2$1$4;-><init>(Ljava/util/List;Lkotlin/jvm/functions/Function1;I)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$1$1$2$1$4;->invoke(Landroidx/compose/foundation/lazy/LazyItemScope;Landroidx/compose/runtime/Composer;I)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$1$1$2$1$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$1$1$2$1$invoke$$inlined$items$default$1;-><clinit>()V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$1$1$2$1$invoke$$inlined$items$default$1;-><init>()V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$1$1$2$1$invoke$$inlined$items$default$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$1$1$2$1$invoke$$inlined$items$default$1;->invoke(Ljava/lang/Object;)Ljava/lang/Void;
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$1$1$2$1$invoke$$inlined$items$default$3;-><init>(Lkotlin/jvm/functions/Function1;Ljava/util/List;)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$1$1$2$1$invoke$$inlined$items$default$3;->invoke(I)Ljava/lang/Object;
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$1$1$2$1$invoke$$inlined$items$default$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$1$1$2$1$invoke$$inlined$items$default$4;-><init>(Ljava/util/List;Lkotlin/jvm/functions/Function1;I)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$1$1$2$1$invoke$$inlined$items$default$4;->invoke(Landroidx/compose/foundation/lazy/LazyItemScope;ILandroidx/compose/runtime/Composer;I)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$1$1$2$1$invoke$$inlined$items$default$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$1$1$2$1;-><init>(Ljava/util/List;Ljava/util/List;Lcom/android/credentialmanager/getflow/ProviderDisplayInfo;Lkotlin/jvm/functions/Function1;ILjava/util/List;)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$1$1$2$1;->invoke(Landroidx/compose/foundation/lazy/LazyListScope;)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$1$1$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$1$1$2;-><init>(Ljava/util/List;Ljava/util/List;Lcom/android/credentialmanager/getflow/ProviderDisplayInfo;Lkotlin/jvm/functions/Function1;ILjava/util/List;)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$1$1$2;->invoke(Landroidx/compose/foundation/layout/ColumnScope;Landroidx/compose/runtime/Composer;I)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$1$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$1;-><init>(ZLkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Ljava/util/List;Ljava/util/List;Lcom/android/credentialmanager/getflow/ProviderDisplayInfo;Lkotlin/jvm/functions/Function1;ILjava/util/List;)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$1;->invoke(Landroidx/compose/foundation/layout/ColumnScope;Landroidx/compose/runtime/Composer;I)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$CredentialEntryRow$1;-><init>(Lkotlin/jvm/functions/Function1;Lcom/android/credentialmanager/getflow/CredentialEntryInfo;)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$CredentialEntryRow$1;->invoke()Ljava/lang/Object;
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$CredentialEntryRow$1;->invoke()V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$CredentialEntryRow$2;-><init>(Lcom/android/credentialmanager/getflow/CredentialEntryInfo;)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$CredentialEntryRow$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$CredentialEntryRow$3;-><init>(Lcom/android/credentialmanager/getflow/CredentialEntryInfo;)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$CredentialEntryRow$3;->invoke(Landroidx/compose/runtime/Composer;I)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$CredentialEntryRow$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$1$1;-><init>(Ljava/lang/Object;)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$1$2;-><init>(Ljava/lang/Object;)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$1$2;->invoke()Ljava/lang/Object;
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$1$2;->invoke()V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$1$3;-><init>(Ljava/lang/Object;)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$1$3;->invoke(Lcom/android/credentialmanager/getflow/EntryInfo;)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$1$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$1$4;-><init>(Ljava/lang/Object;)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$1$5;-><init>(Ljava/lang/Object;)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$1;-><init>(Lcom/android/credentialmanager/getflow/GetCredentialUiState;Lcom/android/credentialmanager/getflow/GetCredentialViewModel;Landroidx/activity/compose/ManagedActivityResultLauncher;)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$1;->invoke(Landroidx/compose/foundation/layout/ColumnScope;Landroidx/compose/runtime/Composer;I)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$2;-><init>(Lcom/android/credentialmanager/common/material/ModalBottomSheetState;Lcom/android/credentialmanager/getflow/GetCredentialViewModel;Lkotlin/coroutines/Continuation;)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$5;-><init>(Lcom/android/credentialmanager/getflow/GetCredentialViewModel;Landroidx/activity/compose/ManagedActivityResultLauncher;I)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$5;->invoke(Landroidx/compose/runtime/Composer;I)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$PerUserNameCredentials$1;-><init>(Lcom/android/credentialmanager/getflow/PerUserNameCredentialEntryList;Lkotlin/jvm/functions/Function1;I)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$PerUserNameCredentials$1;->invoke(Landroidx/compose/foundation/layout/ColumnScope;Landroidx/compose/runtime/Composer;I)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$PerUserNameCredentials$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$PerUserNameCredentials$2;-><init>(Lcom/android/credentialmanager/getflow/PerUserNameCredentialEntryList;Lkotlin/jvm/functions/Function1;I)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$PrimarySelectionCard$1$1$1$1$invoke$$inlined$items$default$17;-><clinit>()V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$PrimarySelectionCard$1$1$1$1$invoke$$inlined$items$default$17;-><init>()V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$PrimarySelectionCard$1$1$1$1$invoke$$inlined$items$default$17;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$PrimarySelectionCard$1$1$1$1$invoke$$inlined$items$default$17;->invoke(Ljava/lang/Object;)Ljava/lang/Void;
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$PrimarySelectionCard$1$1$1$1$invoke$$inlined$items$default$19;-><init>(Lkotlin/jvm/functions/Function1;Ljava/util/List;)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$PrimarySelectionCard$1$1$1$1$invoke$$inlined$items$default$19;->invoke(I)Ljava/lang/Object;
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$PrimarySelectionCard$1$1$1$1$invoke$$inlined$items$default$19;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$PrimarySelectionCard$1$1$1$1$invoke$$inlined$items$default$1;-><clinit>()V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$PrimarySelectionCard$1$1$1$1$invoke$$inlined$items$default$1;-><init>()V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$PrimarySelectionCard$1$1$1$1$invoke$$inlined$items$default$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$PrimarySelectionCard$1$1$1$1$invoke$$inlined$items$default$1;->invoke(Ljava/lang/Object;)Ljava/lang/Void;
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$PrimarySelectionCard$1$1$1$1$invoke$$inlined$items$default$20;-><init>(Ljava/util/List;Lkotlin/jvm/functions/Function1;I)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$PrimarySelectionCard$1$1$1$1$invoke$$inlined$items$default$20;->invoke(Landroidx/compose/foundation/lazy/LazyItemScope;ILandroidx/compose/runtime/Composer;I)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$PrimarySelectionCard$1$1$1$1$invoke$$inlined$items$default$20;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$PrimarySelectionCard$1$1$1$1$invoke$$inlined$items$default$3;-><init>(Lkotlin/jvm/functions/Function1;Ljava/util/List;)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$PrimarySelectionCard$1$1$1$1$invoke$$inlined$items$default$3;->invoke(I)Ljava/lang/Object;
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$PrimarySelectionCard$1$1$1$1$invoke$$inlined$items$default$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$PrimarySelectionCard$1$1$1$1$invoke$$inlined$items$default$4;-><init>(Ljava/util/List;Lkotlin/jvm/functions/Function1;I)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$PrimarySelectionCard$1$1$1$1$invoke$$inlined$items$default$4;->invoke(Landroidx/compose/foundation/lazy/LazyItemScope;ILandroidx/compose/runtime/Composer;I)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$PrimarySelectionCard$1$1$1$1$invoke$$inlined$items$default$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$PrimarySelectionCard$1$1$1$1$invoke$$inlined$items$default$5;-><clinit>()V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$PrimarySelectionCard$1$1$1$1$invoke$$inlined$items$default$5;-><init>()V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$PrimarySelectionCard$1$1$1$1$invoke$$inlined$items$default$7;-><init>(Lkotlin/jvm/functions/Function1;Ljava/util/List;)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$PrimarySelectionCard$1$1$1$1$invoke$$inlined$items$default$8;-><init>(Ljava/util/List;Lkotlin/jvm/functions/Function1;I)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$PrimarySelectionCard$1$1$1$1;-><init>(IILjava/util/List;Ljava/util/List;Lkotlin/jvm/functions/Function1;I)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$PrimarySelectionCard$1$1$1$1;->invoke(Landroidx/compose/foundation/lazy/LazyListScope;)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$PrimarySelectionCard$1$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$PrimarySelectionCard$1$1$1;-><init>(Ljava/util/List;Ljava/util/List;Lkotlin/jvm/functions/Function1;I)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$PrimarySelectionCard$1$1$1;->invoke(Landroidx/compose/foundation/layout/ColumnScope;Landroidx/compose/runtime/Composer;I)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$PrimarySelectionCard$1$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$PrimarySelectionCard$1;-><init>(Ljava/util/List;Ljava/util/List;Lcom/android/credentialmanager/getflow/RequestDisplayInfo;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/functions/Function0;)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$PrimarySelectionCard$1;->invoke(Landroidx/compose/foundation/layout/ColumnScope;Landroidx/compose/runtime/Composer;I)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$PrimarySelectionCard$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt;->ActionChips(Ljava/util/List;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt;->ActionEntryRow(Lcom/android/credentialmanager/getflow/ActionEntryInfo;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt;->AllSignInOptionCard(Ljava/util/List;Lcom/android/credentialmanager/getflow/ProviderDisplayInfo;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;ZLandroidx/compose/runtime/Composer;I)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt;->CredentialEntryRow(Lcom/android/credentialmanager/getflow/CredentialEntryInfo;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt;->GetCredentialScreen(Lcom/android/credentialmanager/getflow/GetCredentialViewModel;Landroidx/activity/compose/ManagedActivityResultLauncher;Landroidx/compose/runtime/Composer;I)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt;->PerUserNameCredentials(Lcom/android/credentialmanager/getflow/PerUserNameCredentialEntryList;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)V
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt;->PrimarySelectionCard(Lcom/android/credentialmanager/getflow/RequestDisplayInfo;Lcom/android/credentialmanager/getflow/ProviderDisplayInfo;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;I)V
-PLcom/android/credentialmanager/getflow/GetCredentialUiState;-><clinit>()V
-PLcom/android/credentialmanager/getflow/GetCredentialUiState;-><init>(Ljava/util/List;Lcom/android/credentialmanager/getflow/RequestDisplayInfo;Lcom/android/credentialmanager/getflow/GetScreenState;Lcom/android/credentialmanager/getflow/ProviderDisplayInfo;Lcom/android/credentialmanager/getflow/EntryInfo;ZZZ)V
-PLcom/android/credentialmanager/getflow/GetCredentialUiState;-><init>(Ljava/util/List;Lcom/android/credentialmanager/getflow/RequestDisplayInfo;Lcom/android/credentialmanager/getflow/GetScreenState;Lcom/android/credentialmanager/getflow/ProviderDisplayInfo;Lcom/android/credentialmanager/getflow/EntryInfo;ZZZILkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLcom/android/credentialmanager/getflow/GetCredentialUiState;->copy$default(Lcom/android/credentialmanager/getflow/GetCredentialUiState;Ljava/util/List;Lcom/android/credentialmanager/getflow/RequestDisplayInfo;Lcom/android/credentialmanager/getflow/GetScreenState;Lcom/android/credentialmanager/getflow/ProviderDisplayInfo;Lcom/android/credentialmanager/getflow/EntryInfo;ZZZILjava/lang/Object;)Lcom/android/credentialmanager/getflow/GetCredentialUiState;
-PLcom/android/credentialmanager/getflow/GetCredentialUiState;->copy(Ljava/util/List;Lcom/android/credentialmanager/getflow/RequestDisplayInfo;Lcom/android/credentialmanager/getflow/GetScreenState;Lcom/android/credentialmanager/getflow/ProviderDisplayInfo;Lcom/android/credentialmanager/getflow/EntryInfo;ZZZ)Lcom/android/credentialmanager/getflow/GetCredentialUiState;
-PLcom/android/credentialmanager/getflow/GetCredentialUiState;->equals(Ljava/lang/Object;)Z
-PLcom/android/credentialmanager/getflow/GetCredentialUiState;->getCurrentScreenState()Lcom/android/credentialmanager/getflow/GetScreenState;
-PLcom/android/credentialmanager/getflow/GetCredentialUiState;->getHidden()Z
-PLcom/android/credentialmanager/getflow/GetCredentialUiState;->getProviderActivityPending()Z
-PLcom/android/credentialmanager/getflow/GetCredentialUiState;->getProviderDisplayInfo()Lcom/android/credentialmanager/getflow/ProviderDisplayInfo;
-PLcom/android/credentialmanager/getflow/GetCredentialUiState;->getProviderInfoList()Ljava/util/List;
-PLcom/android/credentialmanager/getflow/GetCredentialUiState;->getRequestDisplayInfo()Lcom/android/credentialmanager/getflow/RequestDisplayInfo;
-PLcom/android/credentialmanager/getflow/GetCredentialUiState;->getSelectedEntry()Lcom/android/credentialmanager/getflow/EntryInfo;
-PLcom/android/credentialmanager/getflow/GetCredentialUiState;->isNoAccount()Z
-PLcom/android/credentialmanager/getflow/GetCredentialViewModel$dialogResult$2;-><clinit>()V
-PLcom/android/credentialmanager/getflow/GetCredentialViewModel$dialogResult$2;-><init>()V
-PLcom/android/credentialmanager/getflow/GetCredentialViewModel$dialogResult$2;->invoke()Landroidx/lifecycle/MutableLiveData;
-PLcom/android/credentialmanager/getflow/GetCredentialViewModel$dialogResult$2;->invoke()Ljava/lang/Object;
-PLcom/android/credentialmanager/getflow/GetCredentialViewModel;-><clinit>()V
-PLcom/android/credentialmanager/getflow/GetCredentialViewModel;-><init>()V
-PLcom/android/credentialmanager/getflow/GetCredentialViewModel;-><init>(Lcom/android/credentialmanager/CredentialManagerRepo;)V
-PLcom/android/credentialmanager/getflow/GetCredentialViewModel;-><init>(Lcom/android/credentialmanager/CredentialManagerRepo;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLcom/android/credentialmanager/getflow/GetCredentialViewModel;->getDialogResult()Landroidx/lifecycle/MutableLiveData;
-PLcom/android/credentialmanager/getflow/GetCredentialViewModel;->getUiState()Lcom/android/credentialmanager/getflow/GetCredentialUiState;
-PLcom/android/credentialmanager/getflow/GetCredentialViewModel;->launchProviderUi(Landroidx/activity/compose/ManagedActivityResultLauncher;)V
-PLcom/android/credentialmanager/getflow/GetCredentialViewModel;->observeDialogResult()Landroidx/lifecycle/LiveData;
-PLcom/android/credentialmanager/getflow/GetCredentialViewModel;->onCancel()V
-PLcom/android/credentialmanager/getflow/GetCredentialViewModel;->onEntrySelected(Lcom/android/credentialmanager/getflow/EntryInfo;)V
-PLcom/android/credentialmanager/getflow/GetCredentialViewModel;->onMoreOptionSelected()V
-PLcom/android/credentialmanager/getflow/GetCredentialViewModel;->onProviderActivityResult(Lcom/android/credentialmanager/common/ProviderActivityResult;)V
-PLcom/android/credentialmanager/getflow/GetCredentialViewModel;->setUiState(Lcom/android/credentialmanager/getflow/GetCredentialUiState;)V
-PLcom/android/credentialmanager/getflow/GetCredentialViewModelKt$toProviderDisplayInfo$$inlined$compareByDescending$1;-><init>()V
-PLcom/android/credentialmanager/getflow/GetCredentialViewModelKt$toProviderDisplayInfo$$inlined$compareByDescending$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
-PLcom/android/credentialmanager/getflow/GetCredentialViewModelKt$toProviderDisplayInfo$1$1$1;-><init>(Lcom/android/credentialmanager/getflow/CredentialEntryInfo;)V
-PLcom/android/credentialmanager/getflow/GetCredentialViewModelKt$toProviderDisplayInfo$1$1$1;->apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/getflow/GetCredentialViewModelKt$toProviderDisplayInfo$1$1$1;->apply(Ljava/lang/String;Ljava/util/List;)Ljava/util/List;
-PLcom/android/credentialmanager/getflow/GetCredentialViewModelKt;->access$toGetScreenState(Ljava/util/List;)Lcom/android/credentialmanager/getflow/GetScreenState;
-PLcom/android/credentialmanager/getflow/GetCredentialViewModelKt;->access$toProviderDisplayInfo(Ljava/util/List;)Lcom/android/credentialmanager/getflow/ProviderDisplayInfo;
-PLcom/android/credentialmanager/getflow/GetCredentialViewModelKt;->toGetScreenState(Ljava/util/List;)Lcom/android/credentialmanager/getflow/GetScreenState;
-PLcom/android/credentialmanager/getflow/GetCredentialViewModelKt;->toProviderDisplayInfo(Ljava/util/List;)Lcom/android/credentialmanager/getflow/ProviderDisplayInfo;
-PLcom/android/credentialmanager/getflow/GetScreenState;->$values()[Lcom/android/credentialmanager/getflow/GetScreenState;
-PLcom/android/credentialmanager/getflow/GetScreenState;-><clinit>()V
-PLcom/android/credentialmanager/getflow/GetScreenState;-><init>(Ljava/lang/String;I)V
-PLcom/android/credentialmanager/getflow/PerUserNameCredentialEntryList;-><clinit>()V
-PLcom/android/credentialmanager/getflow/PerUserNameCredentialEntryList;-><init>(Ljava/lang/String;Ljava/util/List;)V
-PLcom/android/credentialmanager/getflow/PerUserNameCredentialEntryList;->getSortedCredentialEntryList()Ljava/util/List;
-PLcom/android/credentialmanager/getflow/PerUserNameCredentialEntryList;->getUserName()Ljava/lang/String;
-PLcom/android/credentialmanager/getflow/ProviderDisplayInfo;-><clinit>()V
-PLcom/android/credentialmanager/getflow/ProviderDisplayInfo;-><init>(Ljava/util/List;Ljava/util/List;Lcom/android/credentialmanager/getflow/RemoteEntryInfo;)V
-PLcom/android/credentialmanager/getflow/ProviderDisplayInfo;->equals(Ljava/lang/Object;)Z
-PLcom/android/credentialmanager/getflow/ProviderDisplayInfo;->getAuthenticationEntryList()Ljava/util/List;
-PLcom/android/credentialmanager/getflow/ProviderDisplayInfo;->getRemoteEntry()Lcom/android/credentialmanager/getflow/RemoteEntryInfo;
-PLcom/android/credentialmanager/getflow/ProviderDisplayInfo;->getSortedUserNameToCredentialEntryList()Ljava/util/List;
-PLcom/android/credentialmanager/getflow/ProviderInfo;-><clinit>()V
-PLcom/android/credentialmanager/getflow/ProviderInfo;-><init>(Ljava/lang/String;Landroid/graphics/drawable/Drawable;Ljava/lang/String;Ljava/util/List;Lcom/android/credentialmanager/getflow/AuthenticationEntryInfo;Lcom/android/credentialmanager/getflow/RemoteEntryInfo;Ljava/util/List;)V
-PLcom/android/credentialmanager/getflow/ProviderInfo;->getActionEntryList()Ljava/util/List;
-PLcom/android/credentialmanager/getflow/ProviderInfo;->getAuthenticationEntry()Lcom/android/credentialmanager/getflow/AuthenticationEntryInfo;
-PLcom/android/credentialmanager/getflow/ProviderInfo;->getCredentialEntryList()Ljava/util/List;
-PLcom/android/credentialmanager/getflow/ProviderInfo;->getRemoteEntry()Lcom/android/credentialmanager/getflow/RemoteEntryInfo;
-PLcom/android/credentialmanager/getflow/RequestDisplayInfo;-><clinit>()V
-PLcom/android/credentialmanager/getflow/RequestDisplayInfo;-><init>(Ljava/lang/String;)V
-PLcom/android/credentialmanager/getflow/RequestDisplayInfo;->equals(Ljava/lang/Object;)Z
-PLcom/android/credentialmanager/getflow/RequestDisplayInfo;->getAppName()Ljava/lang/String;
-PLcom/android/credentialmanager/jetpack/provider/Action$Companion;-><init>()V
-PLcom/android/credentialmanager/jetpack/provider/Action$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLcom/android/credentialmanager/jetpack/provider/Action$Companion;->fromSlice(Landroid/app/slice/Slice;)Lcom/android/credentialmanager/jetpack/provider/Action;
-PLcom/android/credentialmanager/jetpack/provider/Action;-><clinit>()V
-PLcom/android/credentialmanager/jetpack/provider/Action;-><init>(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Landroid/app/PendingIntent;)V
-PLcom/android/credentialmanager/jetpack/provider/Action;->getPendingIntent()Landroid/app/PendingIntent;
-PLcom/android/credentialmanager/jetpack/provider/Action;->getSubTitle()Ljava/lang/CharSequence;
-PLcom/android/credentialmanager/jetpack/provider/Action;->getTitle()Ljava/lang/CharSequence;
-PLcom/android/credentialmanager/jetpack/provider/CredentialEntry$Companion;-><init>()V
-PLcom/android/credentialmanager/jetpack/provider/CredentialEntry$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLcom/android/credentialmanager/jetpack/provider/CredentialEntry$Companion;->fromSlice(Landroid/app/slice/Slice;)Lcom/android/credentialmanager/jetpack/provider/CredentialEntry;
-PLcom/android/credentialmanager/jetpack/provider/CredentialEntry;-><clinit>()V
-PLcom/android/credentialmanager/jetpack/provider/CredentialEntry;-><init>(Ljava/lang/String;Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/CharSequence;Landroid/app/PendingIntent;JLandroid/graphics/drawable/Icon;Z)V
-PLcom/android/credentialmanager/jetpack/provider/CredentialEntry;->getDisplayName()Ljava/lang/CharSequence;
-PLcom/android/credentialmanager/jetpack/provider/CredentialEntry;->getIcon()Landroid/graphics/drawable/Icon;
-PLcom/android/credentialmanager/jetpack/provider/CredentialEntry;->getLastUsedTimeMillis()J
-PLcom/android/credentialmanager/jetpack/provider/CredentialEntry;->getPendingIntent()Landroid/app/PendingIntent;
-PLcom/android/credentialmanager/jetpack/provider/CredentialEntry;->getType()Ljava/lang/String;
-PLcom/android/credentialmanager/jetpack/provider/CredentialEntry;->getTypeDisplayName()Ljava/lang/CharSequence;
-PLcom/android/credentialmanager/jetpack/provider/CredentialEntry;->getUsername()Ljava/lang/CharSequence;
-PLkotlin/collections/AbstractList$Companion;->orderedEquals$kotlin_stdlib(Ljava/util/Collection;Ljava/util/Collection;)Z
-PLkotlin/collections/AbstractList;->equals(Ljava/lang/Object;)Z
-PLkotlin/collections/ArraysKt;->fill$default([IIIIILjava/lang/Object;)V
-PLkotlin/collections/ArraysKt;->fill([IIII)V
-PLkotlin/collections/ArraysKt;->indexOf([Ljava/lang/Object;Ljava/lang/Object;)I
-PLkotlin/collections/ArraysKt___ArraysJvmKt;->fill$default([IIIIILjava/lang/Object;)V
-PLkotlin/collections/ArraysKt___ArraysJvmKt;->fill([IIII)V
-PLkotlin/collections/ArraysKt___ArraysKt;->indexOf([Ljava/lang/Object;Ljava/lang/Object;)I
-PLkotlin/collections/CollectionsKt;->arrayListOf([Ljava/lang/Object;)Ljava/util/ArrayList;
-PLkotlin/collections/CollectionsKt;->firstOrNull(Ljava/util/List;)Ljava/lang/Object;
-PLkotlin/collections/CollectionsKt;->getOrNull(Ljava/util/List;I)Ljava/lang/Object;
-PLkotlin/collections/CollectionsKt;->joinToString$default(Ljava/lang/Iterable;Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/CharSequence;ILjava/lang/CharSequence;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ljava/lang/String;
-PLkotlin/collections/CollectionsKt;->mutableListOf([Ljava/lang/Object;)Ljava/util/List;
-PLkotlin/collections/CollectionsKt;->optimizeReadOnlyList(Ljava/util/List;)Ljava/util/List;
-PLkotlin/collections/CollectionsKt;->removeFirstOrNull(Ljava/util/List;)Ljava/lang/Object;
-PLkotlin/collections/CollectionsKt;->take(Ljava/lang/Iterable;I)Ljava/util/List;
-PLkotlin/collections/CollectionsKt;->toIntArray(Ljava/util/Collection;)[I
-PLkotlin/collections/CollectionsKt__CollectionsKt;->arrayListOf([Ljava/lang/Object;)Ljava/util/ArrayList;
-PLkotlin/collections/CollectionsKt__CollectionsKt;->mutableListOf([Ljava/lang/Object;)Ljava/util/List;
-PLkotlin/collections/CollectionsKt__CollectionsKt;->optimizeReadOnlyList(Ljava/util/List;)Ljava/util/List;
-PLkotlin/collections/CollectionsKt__MutableCollectionsKt;->removeFirstOrNull(Ljava/util/List;)Ljava/lang/Object;
-PLkotlin/collections/CollectionsKt___CollectionsKt;->firstOrNull(Ljava/util/List;)Ljava/lang/Object;
-PLkotlin/collections/CollectionsKt___CollectionsKt;->getOrNull(Ljava/util/List;I)Ljava/lang/Object;
-PLkotlin/collections/CollectionsKt___CollectionsKt;->joinTo(Ljava/lang/Iterable;Ljava/lang/Appendable;Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/CharSequence;ILjava/lang/CharSequence;Lkotlin/jvm/functions/Function1;)Ljava/lang/Appendable;
-PLkotlin/collections/CollectionsKt___CollectionsKt;->joinToString$default(Ljava/lang/Iterable;Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/CharSequence;ILjava/lang/CharSequence;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ljava/lang/String;
-PLkotlin/collections/CollectionsKt___CollectionsKt;->joinToString(Ljava/lang/Iterable;Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/CharSequence;ILjava/lang/CharSequence;Lkotlin/jvm/functions/Function1;)Ljava/lang/String;
-PLkotlin/collections/CollectionsKt___CollectionsKt;->take(Ljava/lang/Iterable;I)Ljava/util/List;
-PLkotlin/collections/CollectionsKt___CollectionsKt;->toIntArray(Ljava/util/Collection;)[I
-PLkotlin/collections/EmptyMap;->containsKey(Ljava/lang/Object;)Z
-PLkotlin/collections/EmptyMap;->getSize()I
-PLkotlin/collections/EmptyMap;->size()I
-PLkotlin/collections/MapsKt;->getValue(Ljava/util/Map;Ljava/lang/Object;)Ljava/lang/Object;
-PLkotlin/collections/MapsKt;->toMutableMap(Ljava/util/Map;)Ljava/util/Map;
-PLkotlin/collections/MapsKt__MapWithDefaultKt;->getOrImplicitDefaultNullable(Ljava/util/Map;Ljava/lang/Object;)Ljava/lang/Object;
-PLkotlin/collections/MapsKt__MapsKt;->getValue(Ljava/util/Map;Ljava/lang/Object;)Ljava/lang/Object;
-PLkotlin/collections/MapsKt__MapsKt;->toMutableMap(Ljava/util/Map;)Ljava/util/Map;
-PLkotlin/coroutines/jvm/internal/Boxing;->boxFloat(F)Ljava/lang/Float;
+PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$7;->invoke()Ljava/lang/Object;
+PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$7;->invoke()V
PLkotlin/coroutines/jvm/internal/Boxing;->boxInt(I)Ljava/lang/Integer;
-PLkotlin/jvm/internal/FunctionReference;->getArity()I
-PLkotlin/jvm/internal/Intrinsics;->areEqual(Ljava/lang/Float;F)Z
-PLkotlin/jvm/internal/Ref$FloatRef;-><init>()V
-PLkotlin/jvm/internal/Ref$LongRef;-><init>()V
-PLkotlin/jvm/internal/TypeIntrinsics;->asMutableCollection(Ljava/lang/Object;)Ljava/util/Collection;
-PLkotlin/jvm/internal/TypeIntrinsics;->castToCollection(Ljava/lang/Object;)Ljava/util/Collection;
-PLkotlin/math/MathKt;->getSign(I)I
-PLkotlin/math/MathKt__MathJVMKt;->getSign(I)I
-PLkotlin/ranges/IntRange;->equals(Ljava/lang/Object;)Z
-PLkotlin/ranges/IntRange;->isEmpty()Z
-PLkotlin/ranges/RangesKt;->coerceAtLeast(JJ)J
-PLkotlin/ranges/RangesKt;->coerceAtMost(FF)F
-PLkotlin/ranges/RangesKt;->coerceAtMost(JJ)J
-PLkotlin/ranges/RangesKt;->coerceIn(DDD)D
-PLkotlin/ranges/RangesKt;->until(II)Lkotlin/ranges/IntRange;
-PLkotlin/ranges/RangesKt___RangesKt;->coerceAtLeast(JJ)J
-PLkotlin/ranges/RangesKt___RangesKt;->coerceAtMost(FF)F
-PLkotlin/ranges/RangesKt___RangesKt;->coerceAtMost(JJ)J
-PLkotlin/ranges/RangesKt___RangesKt;->coerceIn(DDD)D
-PLkotlin/ranges/RangesKt___RangesKt;->until(II)Lkotlin/ranges/IntRange;
PLkotlin/sequences/SequenceBuilderIterator;-><init>()V
PLkotlin/sequences/SequenceBuilderIterator;->getContext()Lkotlin/coroutines/CoroutineContext;
PLkotlin/sequences/SequenceBuilderIterator;->hasNext()Z
@@ -14389,181 +13774,33 @@
PLkotlin/sequences/SequencesKt__SequenceBuilderKt$sequence$$inlined$Sequence$1;->iterator()Ljava/util/Iterator;
PLkotlin/sequences/SequencesKt__SequenceBuilderKt;->iterator(Lkotlin/jvm/functions/Function2;)Ljava/util/Iterator;
PLkotlin/sequences/SequencesKt__SequenceBuilderKt;->sequence(Lkotlin/jvm/functions/Function2;)Lkotlin/sequences/Sequence;
-PLkotlin/text/StringsKt;->appendElement(Ljava/lang/Appendable;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)V
-PLkotlin/text/StringsKt__AppendableKt;->appendElement(Ljava/lang/Appendable;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)V
-PLkotlinx/coroutines/AbstractTimeSourceKt;-><clinit>()V
-PLkotlinx/coroutines/AbstractTimeSourceKt;->getTimeSource()Lkotlinx/coroutines/AbstractTimeSource;
-PLkotlinx/coroutines/CancellableContinuationImpl;->cancelCompletedResult$external__kotlinx_coroutines__android_common__kotlinx_coroutines(Ljava/lang/Object;Ljava/lang/Throwable;)V
-PLkotlinx/coroutines/CancellableContinuationKt;->disposeOnCancellation(Lkotlinx/coroutines/CancellableContinuation;Lkotlinx/coroutines/DisposableHandle;)V
-PLkotlinx/coroutines/CancellableContinuationKt;->removeOnCancellation(Lkotlinx/coroutines/CancellableContinuation;Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)V
-PLkotlinx/coroutines/CoroutineScopeKt;->cancel$default(Lkotlinx/coroutines/CoroutineScope;Ljava/util/concurrent/CancellationException;ILjava/lang/Object;)V
-PLkotlinx/coroutines/CoroutineScopeKt;->cancel(Lkotlinx/coroutines/CoroutineScope;Ljava/util/concurrent/CancellationException;)V
-PLkotlinx/coroutines/DefaultExecutor;->acknowledgeShutdownIfNeeded()V
-PLkotlinx/coroutines/DefaultExecutor;->createThreadSync()Ljava/lang/Thread;
-PLkotlinx/coroutines/DefaultExecutor;->getThread()Ljava/lang/Thread;
-PLkotlinx/coroutines/DefaultExecutor;->isShutdownRequested()Z
-PLkotlinx/coroutines/DefaultExecutor;->notifyStartup()Z
-PLkotlinx/coroutines/DefaultExecutor;->run()V
-PLkotlinx/coroutines/DelayKt;->delay(JLkotlin/coroutines/Continuation;)Ljava/lang/Object;
PLkotlinx/coroutines/DelayKt;->getDelay(Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/Delay;
-PLkotlinx/coroutines/DisposeOnCancel;-><init>(Lkotlinx/coroutines/DisposableHandle;)V
-PLkotlinx/coroutines/DisposeOnCancel;->invoke(Ljava/lang/Throwable;)V
-PLkotlinx/coroutines/EventLoop;->getNextTime()J
-PLkotlinx/coroutines/EventLoop;->isUnconfinedQueueEmpty()Z
-PLkotlinx/coroutines/EventLoopImplBase$DelayedResumeTask;-><init>(Lkotlinx/coroutines/EventLoopImplBase;JLkotlinx/coroutines/CancellableContinuation;)V
-PLkotlinx/coroutines/EventLoopImplBase$DelayedTask;-><init>(J)V
-PLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->dispose()V
-PLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->getHeap()Lkotlinx/coroutines/internal/ThreadSafeHeap;
-PLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->getIndex()I
-PLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->scheduleTask(JLkotlinx/coroutines/EventLoopImplBase$DelayedTaskQueue;Lkotlinx/coroutines/EventLoopImplBase;)I
-PLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->setHeap(Lkotlinx/coroutines/internal/ThreadSafeHeap;)V
-PLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->setIndex(I)V
-PLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->timeToExecute(J)Z
-PLkotlinx/coroutines/EventLoopImplBase$DelayedTaskQueue;-><init>(J)V
-PLkotlinx/coroutines/EventLoopImplBase;->access$isCompleted(Lkotlinx/coroutines/EventLoopImplBase;)Z
-PLkotlinx/coroutines/EventLoopImplBase;->dequeue()Ljava/lang/Runnable;
-PLkotlinx/coroutines/EventLoopImplBase;->getNextTime()J
-PLkotlinx/coroutines/EventLoopImplBase;->isCompleted()Z
-PLkotlinx/coroutines/EventLoopImplBase;->isEmpty()Z
-PLkotlinx/coroutines/EventLoopImplBase;->processNextEvent()J
-PLkotlinx/coroutines/EventLoopImplBase;->schedule(JLkotlinx/coroutines/EventLoopImplBase$DelayedTask;)V
-PLkotlinx/coroutines/EventLoopImplBase;->scheduleImpl(JLkotlinx/coroutines/EventLoopImplBase$DelayedTask;)I
PLkotlinx/coroutines/EventLoopImplBase;->scheduleResumeAfterDelay(JLkotlinx/coroutines/CancellableContinuation;)V
-PLkotlinx/coroutines/EventLoopImplBase;->shouldUnpark(Lkotlinx/coroutines/EventLoopImplBase$DelayedTask;)Z
-PLkotlinx/coroutines/EventLoopImplPlatform;->unpark()V
PLkotlinx/coroutines/EventLoop_commonKt;-><clinit>()V
-PLkotlinx/coroutines/EventLoop_commonKt;->access$getDISPOSED_TASK$p()Lkotlinx/coroutines/internal/Symbol;
PLkotlinx/coroutines/EventLoop_commonKt;->delayToNanos(J)J
-PLkotlinx/coroutines/ExceptionsKt;->CancellationException(Ljava/lang/String;Ljava/lang/Throwable;)Ljava/util/concurrent/CancellationException;
-PLkotlinx/coroutines/InvokeOnCompletion;->invoke(Ljava/lang/Throwable;)V
-PLkotlinx/coroutines/JobImpl;->getOnCancelComplete$external__kotlinx_coroutines__android_common__kotlinx_coroutines()Z
-PLkotlinx/coroutines/JobKt;->cancelAndJoin(Lkotlinx/coroutines/Job;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLkotlinx/coroutines/JobKt__JobKt;->cancelAndJoin(Lkotlinx/coroutines/Job;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLkotlinx/coroutines/JobSupport$ChildCompletion;-><init>(Lkotlinx/coroutines/JobSupport;Lkotlinx/coroutines/JobSupport$Finishing;Lkotlinx/coroutines/ChildHandleNode;Ljava/lang/Object;)V
-PLkotlinx/coroutines/JobSupport$ChildCompletion;->invoke(Ljava/lang/Throwable;)V
-PLkotlinx/coroutines/JobSupport$Finishing;->isSealed()Z
-PLkotlinx/coroutines/JobSupport$Finishing;->setRootCause(Ljava/lang/Throwable;)V
-PLkotlinx/coroutines/JobSupport;->access$continueCompleting(Lkotlinx/coroutines/JobSupport;Lkotlinx/coroutines/JobSupport$Finishing;Lkotlinx/coroutines/ChildHandleNode;Ljava/lang/Object;)V
-PLkotlinx/coroutines/JobSupport;->cancellationExceptionMessage()Ljava/lang/String;
-PLkotlinx/coroutines/JobSupport;->continueCompleting(Lkotlinx/coroutines/JobSupport$Finishing;Lkotlinx/coroutines/ChildHandleNode;Ljava/lang/Object;)V
-PLkotlinx/coroutines/JobSupport;->join(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLkotlinx/coroutines/JobSupport;->joinInternal()Z
-PLkotlinx/coroutines/JobSupport;->joinSuspend(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLkotlinx/coroutines/JobSupport;->onCompletionInternal(Ljava/lang/Object;)V
-PLkotlinx/coroutines/JobSupport;->tryWaitForChild(Lkotlinx/coroutines/JobSupport$Finishing;Lkotlinx/coroutines/ChildHandleNode;Ljava/lang/Object;)Z
-PLkotlinx/coroutines/JobSupportKt;->access$getTOO_LATE_TO_CANCEL$p()Lkotlinx/coroutines/internal/Symbol;
-PLkotlinx/coroutines/RemoveOnCancel;-><init>(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)V
-PLkotlinx/coroutines/ResumeOnCompletion;-><init>(Lkotlin/coroutines/Continuation;)V
-PLkotlinx/coroutines/ResumeOnCompletion;->invoke(Ljava/lang/Throwable;)V
-PLkotlinx/coroutines/ThreadLocalEventLoop;->setEventLoop$external__kotlinx_coroutines__android_common__kotlinx_coroutines(Lkotlinx/coroutines/EventLoop;)V
-PLkotlinx/coroutines/UndispatchedCoroutine;->afterResume(Ljava/lang/Object;)V
-PLkotlinx/coroutines/channels/AbstractChannel$RemoveReceiveOnCancel;->invoke(Ljava/lang/Throwable;)V
-PLkotlinx/coroutines/channels/AbstractSendChannel$SendBuffered;-><init>(Ljava/lang/Object;)V
-PLkotlinx/coroutines/channels/AbstractSendChannel$SendBuffered;->completeResumeSend()V
-PLkotlinx/coroutines/channels/AbstractSendChannel$SendBuffered;->getPollResult()Ljava/lang/Object;
-PLkotlinx/coroutines/channels/AbstractSendChannel$SendBuffered;->tryResumeSend(Lkotlinx/coroutines/internal/LockFreeLinkedListNode$PrepareOp;)Lkotlinx/coroutines/internal/Symbol;
-PLkotlinx/coroutines/channels/AbstractSendChannel;->sendBuffered(Ljava/lang/Object;)Lkotlinx/coroutines/channels/ReceiveOrClosed;
-PLkotlinx/coroutines/channels/LinkedListChannel;->offerInternal(Ljava/lang/Object;)Ljava/lang/Object;
-PLkotlinx/coroutines/channels/Send;-><init>()V
-PLkotlinx/coroutines/flow/AbstractFlow$collect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLkotlinx/coroutines/flow/DistinctFlowImpl$collect$2$emit$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultAreEquivalent$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Boolean;
-PLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultAreEquivalent$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1$emit$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLkotlinx/coroutines/flow/FlowKt__LimitKt$emitAbort$1;-><init>(Lkotlin/coroutines/Continuation;)V
-PLkotlinx/coroutines/flow/FlowKt__LimitKt$emitAbort$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLkotlinx/coroutines/flow/FlowKt__LimitKt$take$$inlined$unsafeFlow$1$1;-><init>(Lkotlinx/coroutines/flow/FlowKt__LimitKt$take$$inlined$unsafeFlow$1;Lkotlin/coroutines/Continuation;)V
-PLkotlinx/coroutines/flow/FlowKt__LimitKt$take$$inlined$unsafeFlow$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLkotlinx/coroutines/flow/FlowKt__LimitKt$take$$inlined$unsafeFlow$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLkotlinx/coroutines/flow/FlowKt__LimitKt$take$2$1$emit$1;-><init>(Lkotlinx/coroutines/flow/FlowKt__LimitKt$take$2$1;Lkotlin/coroutines/Continuation;)V
-PLkotlinx/coroutines/flow/FlowKt__LimitKt$take$2$1$emit$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLkotlinx/coroutines/flow/FlowKt__LimitKt$take$2$1;-><init>(Lkotlin/jvm/internal/Ref$IntRef;ILkotlinx/coroutines/flow/FlowCollector;)V
-PLkotlinx/coroutines/flow/FlowKt__LimitKt$take$2$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLkotlinx/coroutines/flow/FlowKt__LimitKt;->access$emitAbort$FlowKt__LimitKt(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLkotlinx/coroutines/flow/FlowKt__LimitKt;->emitAbort$FlowKt__LimitKt(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLkotlinx/coroutines/flow/SharedFlowImpl$collect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLkotlinx/coroutines/flow/SharedFlowImpl;->emit$suspendImpl(Lkotlinx/coroutines/flow/SharedFlowImpl;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLkotlinx/coroutines/flow/SharedFlowImpl;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLkotlinx/coroutines/flow/SharedFlowImpl;->getQueueEndIndex()J
-PLkotlinx/coroutines/flow/SharedFlowSlot;->freeLocked(Ljava/lang/Object;)[Lkotlin/coroutines/Continuation;
-PLkotlinx/coroutines/flow/SharedFlowSlot;->freeLocked(Lkotlinx/coroutines/flow/SharedFlowImpl;)[Lkotlin/coroutines/Continuation;
-PLkotlinx/coroutines/flow/StartedWhileSubscribed;->access$getReplayExpiration$p(Lkotlinx/coroutines/flow/StartedWhileSubscribed;)J
-PLkotlinx/coroutines/flow/StartedWhileSubscribed;->access$getStopTimeout$p(Lkotlinx/coroutines/flow/StartedWhileSubscribed;)J
-PLkotlinx/coroutines/flow/StateFlowSlot;->freeLocked(Ljava/lang/Object;)[Lkotlin/coroutines/Continuation;
-PLkotlinx/coroutines/flow/StateFlowSlot;->freeLocked(Lkotlinx/coroutines/flow/StateFlowImpl;)[Lkotlin/coroutines/Continuation;
-PLkotlinx/coroutines/flow/internal/AbortFlowException;-><init>(Lkotlinx/coroutines/flow/FlowCollector;)V
-PLkotlinx/coroutines/flow/internal/AbortFlowException;->fillInStackTrace()Ljava/lang/Throwable;
-PLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->freeSlot(Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;)V
-PLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$emit$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLkotlinx/coroutines/flow/internal/ChildCancelledException;-><init>()V
-PLkotlinx/coroutines/flow/internal/ChildCancelledException;->fillInStackTrace()Ljava/lang/Throwable;
-PLkotlinx/coroutines/flow/internal/DownstreamExceptionContext;-><init>(Ljava/lang/Throwable;Lkotlin/coroutines/CoroutineContext;)V
-PLkotlinx/coroutines/flow/internal/FlowExceptions_commonKt;->checkOwnership(Lkotlinx/coroutines/flow/internal/AbortFlowException;Lkotlinx/coroutines/flow/FlowCollector;)V
-PLkotlinx/coroutines/flow/internal/NopCollector;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLkotlinx/coroutines/flow/internal/SafeCollector;->checkContext(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext;Ljava/lang/Object;)V
-PLkotlinx/coroutines/flow/internal/SafeCollector;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLkotlinx/coroutines/flow/internal/SafeCollector;->emit(Lkotlin/coroutines/Continuation;Ljava/lang/Object;)Ljava/lang/Object;
-PLkotlinx/coroutines/flow/internal/SafeCollector;->getContext()Lkotlin/coroutines/CoroutineContext;
-PLkotlinx/coroutines/flow/internal/SafeCollector;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLkotlinx/coroutines/flow/internal/SafeCollector;->releaseIntercepted()V
-PLkotlinx/coroutines/flow/internal/SafeCollectorKt$emitFun$1;-><clinit>()V
-PLkotlinx/coroutines/flow/internal/SafeCollectorKt$emitFun$1;-><init>()V
-PLkotlinx/coroutines/flow/internal/SafeCollectorKt$emitFun$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLkotlinx/coroutines/flow/internal/SafeCollectorKt$emitFun$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLkotlinx/coroutines/flow/internal/SafeCollectorKt;-><clinit>()V
-PLkotlinx/coroutines/flow/internal/SafeCollectorKt;->access$getEmitFun$p()Lkotlin/jvm/functions/Function3;
-PLkotlinx/coroutines/flow/internal/SafeCollector_commonKt$checkContext$result$1;-><init>(Lkotlinx/coroutines/flow/internal/SafeCollector;)V
-PLkotlinx/coroutines/flow/internal/SafeCollector_commonKt$checkContext$result$1;->invoke(ILkotlin/coroutines/CoroutineContext$Element;)Ljava/lang/Integer;
-PLkotlinx/coroutines/flow/internal/SafeCollector_commonKt$checkContext$result$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLkotlinx/coroutines/flow/internal/SafeCollector_commonKt;->checkContext(Lkotlinx/coroutines/flow/internal/SafeCollector;Lkotlin/coroutines/CoroutineContext;)V
-PLkotlinx/coroutines/flow/internal/SafeCollector_commonKt;->transitiveCoroutineParent(Lkotlinx/coroutines/Job;Lkotlinx/coroutines/Job;)Lkotlinx/coroutines/Job;
-PLkotlinx/coroutines/internal/DispatchedContinuation;->postponeCancellation(Ljava/lang/Throwable;)Z
PLkotlinx/coroutines/internal/LockFreeLinkedListHead;->isEmpty()Z
-PLkotlinx/coroutines/internal/LockFreeLinkedListNode;->addLast(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)V
-PLkotlinx/coroutines/internal/LockFreeLinkedListNode;->findPrevNonRemoved(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)Lkotlinx/coroutines/internal/LockFreeLinkedListNode;
-PLkotlinx/coroutines/internal/LockFreeLinkedListNode;->removeFirstOrNull()Lkotlinx/coroutines/internal/LockFreeLinkedListNode;
-PLkotlinx/coroutines/internal/ThreadSafeHeap;-><init>()V
-PLkotlinx/coroutines/internal/ThreadSafeHeap;->addImpl(Lkotlinx/coroutines/internal/ThreadSafeHeapNode;)V
-PLkotlinx/coroutines/internal/ThreadSafeHeap;->firstImpl()Lkotlinx/coroutines/internal/ThreadSafeHeapNode;
-PLkotlinx/coroutines/internal/ThreadSafeHeap;->getSize()I
-PLkotlinx/coroutines/internal/ThreadSafeHeap;->isEmpty()Z
-PLkotlinx/coroutines/internal/ThreadSafeHeap;->peek()Lkotlinx/coroutines/internal/ThreadSafeHeapNode;
-PLkotlinx/coroutines/internal/ThreadSafeHeap;->realloc()[Lkotlinx/coroutines/internal/ThreadSafeHeapNode;
-PLkotlinx/coroutines/internal/ThreadSafeHeap;->remove(Lkotlinx/coroutines/internal/ThreadSafeHeapNode;)Z
-PLkotlinx/coroutines/internal/ThreadSafeHeap;->removeAtImpl(I)Lkotlinx/coroutines/internal/ThreadSafeHeapNode;
-PLkotlinx/coroutines/internal/ThreadSafeHeap;->setSize(I)V
-PLkotlinx/coroutines/internal/ThreadSafeHeap;->siftUpFrom(I)V
-PLkotlinx/coroutines/sync/Mutex$DefaultImpls;->unlock$default(Lkotlinx/coroutines/sync/Mutex;Ljava/lang/Object;ILjava/lang/Object;)V
-PLkotlinx/coroutines/sync/MutexImpl$LockCont$tryResumeLockWaiter$1;-><init>(Lkotlinx/coroutines/sync/MutexImpl;Lkotlinx/coroutines/sync/MutexImpl$LockCont;)V
-PLkotlinx/coroutines/sync/MutexImpl$LockCont;-><init>(Lkotlinx/coroutines/sync/MutexImpl;Ljava/lang/Object;Lkotlinx/coroutines/CancellableContinuation;)V
-PLkotlinx/coroutines/sync/MutexImpl$LockCont;->completeResumeLockWaiter()V
-PLkotlinx/coroutines/sync/MutexImpl$LockCont;->tryResumeLockWaiter()Z
-PLkotlinx/coroutines/sync/MutexImpl$LockWaiter;-><init>(Lkotlinx/coroutines/sync/MutexImpl;Ljava/lang/Object;)V
-PLkotlinx/coroutines/sync/MutexImpl$LockWaiter;->take()Z
-PLkotlinx/coroutines/sync/MutexImpl$LockedQueue;-><init>(Ljava/lang/Object;)V
PLkotlinx/coroutines/sync/MutexImpl$UnlockOp;-><init>(Lkotlinx/coroutines/sync/MutexImpl$LockedQueue;)V
PLkotlinx/coroutines/sync/MutexImpl$UnlockOp;->complete(Ljava/lang/Object;Ljava/lang/Object;)V
PLkotlinx/coroutines/sync/MutexImpl$UnlockOp;->complete(Lkotlinx/coroutines/sync/MutexImpl;Ljava/lang/Object;)V
PLkotlinx/coroutines/sync/MutexImpl$UnlockOp;->prepare(Ljava/lang/Object;)Ljava/lang/Object;
PLkotlinx/coroutines/sync/MutexImpl$UnlockOp;->prepare(Lkotlinx/coroutines/sync/MutexImpl;)Ljava/lang/Object;
-PLkotlinx/coroutines/sync/MutexImpl;->access$get_state$p(Lkotlinx/coroutines/sync/MutexImpl;)Lkotlinx/atomicfu/AtomicRef;
-PLkotlinx/coroutines/sync/MutexImpl;->lockSuspend(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLkotlinx/coroutines/sync/MutexKt;->access$getLOCKED$p()Lkotlinx/coroutines/internal/Symbol;
[Landroidx/compose/animation/core/AnimationEndReason;
[Landroidx/compose/animation/core/MutatePriority;
[Landroidx/compose/foundation/MutatePriority;
+[Landroidx/compose/foundation/gestures/ContentInViewModifier$Request;
[Landroidx/compose/foundation/gestures/Orientation;
[Landroidx/compose/foundation/layout/Direction;
[Landroidx/compose/foundation/layout/LayoutOrientation;
[Landroidx/compose/foundation/layout/RowColumnParentData;
[Landroidx/compose/foundation/layout/SizeMode;
+[Landroidx/compose/foundation/lazy/LazyListBeyondBoundsInfo$Interval;
+[Landroidx/compose/foundation/lazy/layout/IntervalList$Interval;
+[Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$PrefetchRequest;
[Landroidx/compose/foundation/relocation/BringIntoViewRequesterModifier;
[Landroidx/compose/material3/tokens/ColorSchemeKeyTokens;
[Landroidx/compose/material3/tokens/ShapeKeyTokens;
[Landroidx/compose/material3/tokens/TypographyKeyTokens;
[Landroidx/compose/runtime/InvalidationResult;
-[Landroidx/compose/runtime/ParcelableSnapshotMutableState;
[Landroidx/compose/runtime/ProvidedValue;
[Landroidx/compose/runtime/Recomposer$State;
[Landroidx/compose/runtime/collection/IdentityArraySet;
@@ -14572,16 +13809,15 @@
[Landroidx/compose/ui/Modifier$Element;
[Landroidx/compose/ui/Modifier$Node;
[Landroidx/compose/ui/Modifier;
-[Landroidx/compose/ui/focus/FocusEventModifierLocal;
-[Landroidx/compose/ui/focus/FocusModifier;
-[Landroidx/compose/ui/focus/FocusRequesterModifierLocal;
+[Landroidx/compose/ui/focus/FocusRequesterModifierNode;
[Landroidx/compose/ui/focus/FocusStateImpl;
[Landroidx/compose/ui/graphics/colorspace/ColorSpace;
-[Landroidx/compose/ui/input/key/KeyInputModifier;
[Landroidx/compose/ui/input/pointer/Node;
[Landroidx/compose/ui/input/pointer/PointerEventPass;
+[Landroidx/compose/ui/input/pointer/PointerId;
[Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;
-[Landroidx/compose/ui/input/pointer/util/PointAtTime;
+[Landroidx/compose/ui/input/pointer/util/DataPointAtTime;
+[Landroidx/compose/ui/input/pointer/util/VelocityTracker1D$Strategy;
[Landroidx/compose/ui/layout/Measurable;
[Landroidx/compose/ui/layout/Placeable;
[Landroidx/compose/ui/modifier/ModifierLocal;
@@ -14594,26 +13830,27 @@
[Landroidx/compose/ui/platform/TextToolbarStatus;
[Landroidx/compose/ui/text/android/style/LineHeightStyleSpan;
[Landroidx/compose/ui/text/android/style/PlaceholderSpan;
+[Landroidx/compose/ui/text/font/Font;
+[Landroidx/compose/ui/text/font/FontVariation$Setting;
[Landroidx/compose/ui/text/font/FontWeight;
[Landroidx/compose/ui/text/platform/style/ShaderBrushSpan;
[Landroidx/compose/ui/unit/LayoutDirection;
[Landroidx/compose/ui/unit/TextUnitType;
-[Landroidx/core/content/res/FontResourcesParserCompat$FontFileResourceEntry;
[Landroidx/core/provider/FontsContractCompat$FontInfo;
-[Landroidx/emoji2/text/EmojiCompat$InitCallback;
-[Landroidx/emoji2/text/EmojiSpan;
-[Landroidx/lifecycle/GeneratedAdapter;
[Landroidx/lifecycle/Lifecycle$Event;
[Landroidx/lifecycle/Lifecycle$State;
[Landroidx/lifecycle/viewmodel/ViewModelInitializer;
-[Lcom/android/credentialmanager/common/DialogType;
+[Lcom/android/credentialmanager/common/CredentialType;
+[Lcom/android/credentialmanager/common/DialogState;
+[Lcom/android/credentialmanager/common/ProviderActivityState;
[Lcom/android/credentialmanager/common/material/ModalBottomSheetValue;
-[Lcom/android/credentialmanager/createflow/CreateScreenState;
-[Lcom/android/credentialmanager/jetpack/provider/CredentialCountInformation;
+[Lcom/android/credentialmanager/getflow/GetScreenState;
+[Lcom/android/credentialmanager/logging/GetCredentialEvent;
+[Lcom/android/credentialmanager/logging/LifecycleEvent;
+[Lcom/android/credentialmanager/ui/theme/typography/TypefaceNames$Config;
[Lkotlin/LazyThreadSafetyMode;
[Lkotlin/Pair;
[Lkotlin/coroutines/Continuation;
-[Lkotlin/coroutines/CoroutineContext;
[Lkotlin/coroutines/intrinsics/CoroutineSingletons;
[Lkotlin/jvm/functions/Function0;
[Lkotlin/reflect/KClass;
@@ -14625,3 +13862,4 @@
[Lkotlinx/coroutines/flow/SharingCommand;
[Lkotlinx/coroutines/flow/StateFlowSlot;
[Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;
+[Lkotlinx/coroutines/internal/ThreadSafeHeapNode;
\ No newline at end of file
diff --git a/packages/CredentialManager/src/com/android/credentialmanager/CredentialManagerRepo.kt b/packages/CredentialManager/src/com/android/credentialmanager/CredentialManagerRepo.kt
index 693e767..2dafbcb 100644
--- a/packages/CredentialManager/src/com/android/credentialmanager/CredentialManagerRepo.kt
+++ b/packages/CredentialManager/src/com/android/credentialmanager/CredentialManagerRepo.kt
@@ -38,6 +38,7 @@
import com.android.credentialmanager.getflow.GetCredentialUiState
import com.android.credentialmanager.getflow.findAutoSelectEntry
import com.android.credentialmanager.common.ProviderActivityState
+import com.android.credentialmanager.createflow.isFlowAutoSelectable
/**
* Client for interacting with Credential Manager. Also holds data inputs from it.
@@ -49,11 +50,11 @@
private val context: Context,
intent: Intent,
userConfigRepo: UserConfigRepo,
+ isNewActivity: Boolean,
) {
val requestInfo: RequestInfo?
private val providerEnabledList: List<ProviderData>
private val providerDisabledList: List<DisabledProviderData>?
- // TODO: require non-null.
val resultReceiver: ResultReceiver?
var initialUiState: UiState
@@ -112,20 +113,30 @@
val providerDisableListUiState = getCreateProviderDisableListInitialUiState()
val requestDisplayInfoUiState =
getCreateRequestDisplayInfoInitialUiState(originName)!!
+ val createCredentialUiState = CreateFlowUtils.toCreateCredentialUiState(
+ enabledProviders = providerEnableListUiState,
+ disabledProviders = providerDisableListUiState,
+ defaultProviderIdPreferredByApp =
+ requestDisplayInfoUiState.appPreferredDefaultProviderId,
+ defaultProviderIdsSetByUser =
+ requestDisplayInfoUiState.userSetDefaultProviderIds,
+ requestDisplayInfo = requestDisplayInfoUiState,
+ isOnPasskeyIntroStateAlready = false,
+ isPasskeyFirstUse = isPasskeyFirstUse,
+ )!!
+ val isFlowAutoSelectable = isFlowAutoSelectable(createCredentialUiState)
UiState(
- createCredentialUiState = CreateFlowUtils.toCreateCredentialUiState(
- enabledProviders = providerEnableListUiState,
- disabledProviders = providerDisableListUiState,
- defaultProviderIdPreferredByApp =
- requestDisplayInfoUiState.appPreferredDefaultProviderId,
- defaultProviderIdsSetByUser =
- requestDisplayInfoUiState.userSetDefaultProviderIds,
- requestDisplayInfo = requestDisplayInfoUiState,
- isOnPasskeyIntroStateAlready = false,
- isPasskeyFirstUse = isPasskeyFirstUse,
- )!!,
+ createCredentialUiState = createCredentialUiState,
getCredentialUiState = null,
- cancelRequestState = cancelUiRequestState
+ cancelRequestState = cancelUiRequestState,
+ isInitialRender = isNewActivity,
+ isAutoSelectFlow = isFlowAutoSelectable,
+ providerActivityState =
+ if (isFlowAutoSelectable) ProviderActivityState.READY_TO_LAUNCH
+ else ProviderActivityState.NOT_APPLICABLE,
+ selectedEntry =
+ if (isFlowAutoSelectable) createCredentialUiState.activeEntry?.activeEntryInfo
+ else null,
)
}
RequestInfo.TYPE_GET -> {
@@ -140,7 +151,8 @@
if (autoSelectEntry == null) ProviderActivityState.NOT_APPLICABLE
else ProviderActivityState.READY_TO_LAUNCH,
isAutoSelectFlow = autoSelectEntry != null,
- cancelRequestState = cancelUiRequestState
+ cancelRequestState = cancelUiRequestState,
+ isInitialRender = isNewActivity,
)
}
else -> {
@@ -149,6 +161,7 @@
createCredentialUiState = null,
getCredentialUiState = null,
cancelRequestState = cancelUiRequestState,
+ isInitialRender = isNewActivity,
)
} else {
throw IllegalStateException("Unrecognized request type: ${requestInfo?.type}")
@@ -168,7 +181,7 @@
// The dialog is canceled because we launched into settings.
fun onSettingLaunchCancel() {
- onCancel(BaseDialogResult.RESULT_CODE_DIALOG_COMPLETE_WITH_SELECTION)
+ onCancel(BaseDialogResult.RESULT_CODE_CANCELED_AND_LAUNCHED_SETTINGS)
}
fun onParsingFailureCancel() {
diff --git a/packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorActivity.kt b/packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorActivity.kt
index 54a8678d..c409ba6 100644
--- a/packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorActivity.kt
+++ b/packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorActivity.kt
@@ -62,7 +62,8 @@
return
}
val userConfigRepo = UserConfigRepo(this)
- val credManRepo = CredentialManagerRepo(this, intent, userConfigRepo)
+ val credManRepo = CredentialManagerRepo(
+ this, intent, userConfigRepo, isNewActivity = true)
val backPressedCallback = object : OnBackPressedCallback(
true // default to enabled
@@ -103,7 +104,8 @@
}
} else {
val userConfigRepo = UserConfigRepo(this)
- val credManRepo = CredentialManagerRepo(this, intent, userConfigRepo)
+ val credManRepo = CredentialManagerRepo(
+ this, intent, userConfigRepo, isNewActivity = false)
viewModel.onNewCredentialManagerRepo(credManRepo)
}
} catch (e: Exception) {
diff --git a/packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorViewModel.kt b/packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorViewModel.kt
index 081490e..cf962d1 100644
--- a/packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorViewModel.kt
+++ b/packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorViewModel.kt
@@ -34,6 +34,7 @@
import com.android.credentialmanager.common.ProviderActivityResult
import com.android.credentialmanager.common.ProviderActivityState
import com.android.credentialmanager.createflow.ActiveEntry
+import com.android.credentialmanager.createflow.isFlowAutoSelectable
import com.android.credentialmanager.createflow.CreateCredentialUiState
import com.android.credentialmanager.createflow.CreateScreenState
import com.android.credentialmanager.getflow.GetCredentialUiState
@@ -53,6 +54,7 @@
// launched immediately, and canceling it will cancel the whole UI flow.
val isAutoSelectFlow: Boolean = false,
val cancelRequestState: CancelUiRequestState?,
+ val isInitialRender: Boolean,
)
data class CancelUiRequestState(
@@ -82,6 +84,10 @@
uiState = uiState.copy(dialogState = DialogState.COMPLETE)
}
+ fun onInitialRenderComplete() {
+ uiState = uiState.copy(isInitialRender = false)
+ }
+
fun onCancellationUiRequested(appDisplayName: String?) {
uiState = uiState.copy(cancelRequestState = CancelUiRequestState(appDisplayName))
}
@@ -96,7 +102,7 @@
fun onNewCredentialManagerRepo(credManRepo: CredentialManagerRepo) {
this.credManRepo = credManRepo
- uiState = credManRepo.initState()
+ uiState = credManRepo.initState().copy(isInitialRender = false)
if (this.credManRepo.requestInfo?.token != credManRepo.requestInfo?.token) {
this.uiMetrics.resetInstanceId()
@@ -114,7 +120,12 @@
uiState = uiState.copy(providerActivityState = ProviderActivityState.PENDING)
val intentSenderRequest = IntentSenderRequest.Builder(entry.pendingIntent)
.setFillInIntent(entry.fillInIntent).build()
- launcher.launch(intentSenderRequest)
+ try {
+ launcher.launch(intentSenderRequest)
+ } catch (e: Exception) {
+ Log.w(Constants.LOG_TAG, "Failed to launch provider UI: $e")
+ onInternalError()
+ }
} else {
Log.d(Constants.LOG_TAG, "No provider UI to launch")
onInternalError()
@@ -228,7 +239,8 @@
getCredentialUiState = uiState.getCredentialUiState?.copy(
currentScreenState = GetScreenState.ALL_SIGN_IN_OPTIONS,
isNoAccount = isNoAccount,
- )
+ ),
+ isInitialRender = true,
)
}
@@ -252,30 +264,39 @@
/***** Create Flow Callbacks *****/
/**************************************************************************/
fun createFlowOnConfirmIntro() {
+ userConfigRepo.setIsPasskeyFirstUse(false)
val prevUiState = uiState.createCredentialUiState
if (prevUiState == null) {
Log.d(Constants.LOG_TAG, "Encountered unexpected null create ui state")
onInternalError()
return
}
- val newUiState = CreateFlowUtils.toCreateCredentialUiState(
- enabledProviders = prevUiState.enabledProviders,
- disabledProviders = prevUiState.disabledProviders,
- defaultProviderIdPreferredByApp =
- prevUiState.requestDisplayInfo.appPreferredDefaultProviderId,
- defaultProviderIdsSetByUser =
- prevUiState.requestDisplayInfo.userSetDefaultProviderIds,
- requestDisplayInfo = prevUiState.requestDisplayInfo,
+ val newScreenState = CreateFlowUtils.toCreateScreenState(
+ createOptionSize = prevUiState.sortedCreateOptionsPairs.size,
isOnPasskeyIntroStateAlready = true,
- isPasskeyFirstUse = userConfigRepo.getIsPasskeyFirstUse()
+ requestDisplayInfo = prevUiState.requestDisplayInfo,
+ remoteEntry = prevUiState.remoteEntry,
+ isPasskeyFirstUse = true,
)
- if (newUiState == null) {
- Log.d(Constants.LOG_TAG, "Unable to update create ui state")
+ if (newScreenState == null) {
+ Log.d(Constants.LOG_TAG, "Unexpected: couldn't resolve new screen state")
onInternalError()
return
}
- uiState = uiState.copy(createCredentialUiState = newUiState)
- userConfigRepo.setIsPasskeyFirstUse(false)
+ val newCreateCredentialUiState = prevUiState.copy(
+ currentScreenState = newScreenState,
+ )
+ val isFlowAutoSelectable = isFlowAutoSelectable(newCreateCredentialUiState)
+ uiState = uiState.copy(
+ createCredentialUiState = newCreateCredentialUiState,
+ isAutoSelectFlow = isFlowAutoSelectable,
+ providerActivityState =
+ if (isFlowAutoSelectable) ProviderActivityState.READY_TO_LAUNCH
+ else ProviderActivityState.NOT_APPLICABLE,
+ selectedEntry =
+ if (isFlowAutoSelectable) newCreateCredentialUiState.activeEntry?.activeEntryInfo
+ else null,
+ )
}
fun createFlowOnMoreOptionsSelectedOnCreationSelection() {
diff --git a/packages/CredentialManager/src/com/android/credentialmanager/DataConverter.kt b/packages/CredentialManager/src/com/android/credentialmanager/DataConverter.kt
index a35310c..b86eec0 100644
--- a/packages/CredentialManager/src/com/android/credentialmanager/DataConverter.kt
+++ b/packages/CredentialManager/src/com/android/credentialmanager/DataConverter.kt
@@ -17,7 +17,6 @@
package com.android.credentialmanager
import android.app.slice.Slice
-import android.app.slice.SliceItem
import android.content.ComponentName
import android.content.Context
import android.content.pm.PackageManager
@@ -63,7 +62,6 @@
import org.json.JSONObject
import java.time.Instant
-// TODO: remove all !! checks
fun getAppLabel(
pm: PackageManager,
appPackageName: String
@@ -89,7 +87,7 @@
val component = ComponentName.unflattenFromString(providerFlattenedComponentName)
if (component == null) {
// Test data has only package name not component name.
- // TODO: remove once test data is removed
+ // For test data usage only.
try {
val pkgInfo = pm.getPackageInfo(
providerFlattenedComponentName,
@@ -201,7 +199,8 @@
ComponentName::class.java
)
val preferTopBrandingContent: TopBrandingContent? =
- if (preferUiBrandingComponentName == null) null
+ if (!requestInfo.hasPermissionToOverrideDefault() ||
+ preferUiBrandingComponentName == null) null
else {
val (displayName, icon) = getServiceLabelAndIcon(
context.packageManager, preferUiBrandingComponentName.flattenToString())
@@ -213,7 +212,7 @@
}
}
return com.android.credentialmanager.getflow.RequestDisplayInfo(
- appName = originName
+ appName = originName?.ifEmpty { null }
?: getAppLabel(context.packageManager, requestInfo.appPackageName)
?: return null,
preferImmediatelyAvailableCredentials = preferImmediatelyAvailableCredentials,
@@ -286,7 +285,8 @@
pendingIntent = credentialEntry.pendingIntent,
fillInIntent = it.frameworkExtrasIntent,
credentialType = CredentialType.UNKNOWN,
- credentialTypeDisplayName = credentialEntry.typeDisplayName.toString(),
+ credentialTypeDisplayName =
+ credentialEntry.typeDisplayName?.toString().orEmpty(),
userName = credentialEntry.title.toString(),
displayName = credentialEntry.subtitle?.toString(),
icon = credentialEntry.icon.loadDrawable(context),
@@ -302,7 +302,6 @@
)
}
}
- // TODO: handle empty list due to parsing error.
return result
}
@@ -334,12 +333,8 @@
val structuredAuthEntry =
AuthenticationAction.fromSlice(entry.slice) ?: return@forEach
- // TODO: replace with official jetpack code.
- val titleItem: SliceItem? = entry.slice.items.firstOrNull {
- it.hasHint(
- "androidx.credentials.provider.authenticationAction.SLICE_HINT_TITLE")
- }
- val title: String = titleItem?.text?.toString() ?: providerDisplayName
+ val title: String =
+ structuredAuthEntry.title.toString().ifEmpty { providerDisplayName }
result.add(AuthenticationEntryInfo(
providerId = providerId,
@@ -395,7 +390,6 @@
subTitle = actionEntryUi.subtitle?.toString(),
))
}
- // TODO: handle empty list
return result
}
}
@@ -461,7 +455,7 @@
if (requestInfo == null) {
return null
}
- val appLabel = originName
+ val appLabel = originName?.ifEmpty { null }
?: getAppLabel(context.packageManager, requestInfo.appPackageName)
?: return null
val createCredentialRequest = requestInfo.createCredentialRequest ?: return null
@@ -486,6 +480,10 @@
createCredentialRequestJetpack.preferImmediatelyAvailableCredentials,
appPreferredDefaultProviderId = appPreferredDefaultProviderId,
userSetDefaultProviderIds = requestInfo.defaultProviderIds.toSet(),
+ // The jetpack library requires a fix to parse this value correctly for
+ // the password type. For now, directly parse it ourselves.
+ isAutoSelectRequest = createCredentialRequest.credentialData.getBoolean(
+ Constants.BUNDLE_KEY_PREFER_IMMEDIATELY_AVAILABLE_CREDENTIALS, false),
)
is CreatePublicKeyCredentialRequest -> {
newRequestDisplayInfoFromPasskeyJson(
@@ -496,6 +494,10 @@
createCredentialRequestJetpack.preferImmediatelyAvailableCredentials,
appPreferredDefaultProviderId = appPreferredDefaultProviderId,
userSetDefaultProviderIds = requestInfo.defaultProviderIds.toSet(),
+ // The jetpack library requires a fix to parse this value correctly for
+ // the passkey type. For now, directly parse it ourselves.
+ isAutoSelectRequest = createCredentialRequest.credentialData.getBoolean(
+ Constants.BUNDLE_KEY_PREFER_IMMEDIATELY_AVAILABLE_CREDENTIALS, false),
)
}
is CreateCustomCredentialRequest -> {
@@ -514,6 +516,7 @@
createCredentialRequestJetpack.preferImmediatelyAvailableCredentials,
appPreferredDefaultProviderId = appPreferredDefaultProviderId,
userSetDefaultProviderIds = requestInfo.defaultProviderIds.toSet(),
+ isAutoSelectRequest = createCredentialRequestJetpack.isAutoSelectAllowed,
)
}
else -> null
@@ -601,7 +604,7 @@
)
}
- private fun toCreateScreenState(
+ fun toCreateScreenState(
createOptionSize: Int,
isOnPasskeyIntroStateAlready: Boolean,
requestDisplayInfo: RequestDisplayInfo,
@@ -660,8 +663,14 @@
passwordCount = createEntry.getPasswordCredentialCount(),
passkeyCount = createEntry.getPublicKeyCredentialCount(),
totalCredentialCount = createEntry.getTotalCredentialCount(),
- lastUsedTime = createEntry.lastUsedTime,
- footerDescription = createEntry.description?.toString()
+ lastUsedTime = createEntry.lastUsedTime ?: Instant.MIN,
+ footerDescription = createEntry.description?.toString(),
+ // TODO(b/281065680): replace with official library constant once available
+ allowAutoSelect =
+ it.slice.items.firstOrNull {
+ it.hasHint("androidx.credentials.provider.createEntry.SLICE_HINT_AUTO_" +
+ "SELECT_ALLOWED")
+ }?.text == "true",
))
}
return result.sortedWith(
@@ -693,6 +702,7 @@
preferImmediatelyAvailableCredentials: Boolean,
appPreferredDefaultProviderId: String?,
userSetDefaultProviderIds: Set<String>,
+ isAutoSelectRequest: Boolean
): RequestDisplayInfo? {
val json = JSONObject(requestJson)
var passkeyUsername = ""
@@ -715,6 +725,7 @@
preferImmediatelyAvailableCredentials,
appPreferredDefaultProviderId,
userSetDefaultProviderIds,
+ isAutoSelectRequest,
)
}
}
diff --git a/packages/CredentialManager/src/com/android/credentialmanager/common/Constants.kt b/packages/CredentialManager/src/com/android/credentialmanager/common/Constants.kt
index 37e21a8..c6dc594 100644
--- a/packages/CredentialManager/src/com/android/credentialmanager/common/Constants.kt
+++ b/packages/CredentialManager/src/com/android/credentialmanager/common/Constants.kt
@@ -19,5 +19,7 @@
class Constants {
companion object Constants {
const val LOG_TAG = "CredentialSelector"
+ const val BUNDLE_KEY_PREFER_IMMEDIATELY_AVAILABLE_CREDENTIALS =
+ "androidx.credentials.BUNDLE_KEY_IS_AUTO_SELECT_ALLOWED"
}
}
\ No newline at end of file
diff --git a/packages/CredentialManager/src/com/android/credentialmanager/common/ui/BottomSheet.kt b/packages/CredentialManager/src/com/android/credentialmanager/common/ui/BottomSheet.kt
index 3399681..a5998faa 100644
--- a/packages/CredentialManager/src/com/android/credentialmanager/common/ui/BottomSheet.kt
+++ b/packages/CredentialManager/src/com/android/credentialmanager/common/ui/BottomSheet.kt
@@ -20,10 +20,6 @@
import androidx.compose.foundation.layout.ColumnScope
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
-import androidx.compose.runtime.getValue
-import androidx.compose.runtime.mutableStateOf
-import androidx.compose.runtime.setValue
-import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
@@ -40,16 +36,19 @@
@Composable
fun ModalBottomSheet(
sheetContent: @Composable ColumnScope.() -> Unit,
- onDismiss: () -> Unit
+ onDismiss: () -> Unit,
+ isInitialRender: Boolean,
+ onInitialRenderComplete: () -> Unit,
+ isAutoSelectFlow: Boolean,
) {
- var isInitialRender by remember { mutableStateOf(true) }
val scope = rememberCoroutineScope()
val state = rememberModalBottomSheetState(
- initialValue = ModalBottomSheetValue.Hidden,
+ initialValue = if (isAutoSelectFlow) ModalBottomSheetValue.Expanded
+ else ModalBottomSheetValue.Hidden,
skipHalfExpanded = true
)
val sysUiController = rememberSystemUiController()
- if (state.targetValue == ModalBottomSheetValue.Hidden) {
+ if (state.targetValue == ModalBottomSheetValue.Hidden || isAutoSelectFlow) {
setTransparentSystemBarsColor(sysUiController)
} else {
setBottomSheetSystemBarsColor(sysUiController)
@@ -64,7 +63,7 @@
LaunchedEffect(state.currentValue) {
if (state.currentValue == ModalBottomSheetValue.Hidden) {
if (isInitialRender) {
- isInitialRender = false
+ onInitialRenderComplete()
scope.launch { state.show() }
} else {
onDismiss()
diff --git a/packages/CredentialManager/src/com/android/credentialmanager/common/ui/Entry.kt b/packages/CredentialManager/src/com/android/credentialmanager/common/ui/Entry.kt
index 2dba2ab..1c394ec 100644
--- a/packages/CredentialManager/src/com/android/credentialmanager/common/ui/Entry.kt
+++ b/packages/CredentialManager/src/com/android/credentialmanager/common/ui/Entry.kt
@@ -255,7 +255,7 @@
Column(modifier = Modifier.wrapContentSize()
.padding(start = 16.dp, top = 16.dp, bottom = 16.dp)) {
SmallTitleText(entryHeadlineText)
- if (entrySecondLineText != null) {
+ if (entrySecondLineText != null && entrySecondLineText.isNotEmpty()) {
BodySmallText(entrySecondLineText)
}
}
diff --git a/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateCredentialComponents.kt b/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateCredentialComponents.kt
index d16120f..a3087cf 100644
--- a/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateCredentialComponents.kt
+++ b/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateCredentialComponents.kt
@@ -164,7 +164,10 @@
}
}
},
- onDismiss = viewModel::onUserCancel
+ onDismiss = viewModel::onUserCancel,
+ isInitialRender = viewModel.uiState.isInitialRender,
+ isAutoSelectFlow = viewModel.uiState.isAutoSelectFlow,
+ onInitialRenderComplete = viewModel::onInitialRenderComplete,
)
}
@@ -436,7 +439,8 @@
},
)
}
- if (createOptionInfo.footerDescription != null) {
+ val footerDescription = createOptionInfo.footerDescription
+ if (footerDescription != null && footerDescription.length > 0) {
item {
Divider(
thickness = 1.dp,
@@ -446,7 +450,7 @@
}
item {
Row(modifier = Modifier.fillMaxWidth().wrapContentHeight()) {
- BodySmallText(text = createOptionInfo.footerDescription)
+ BodySmallText(text = footerDescription)
}
}
}
diff --git a/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateModel.kt b/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateModel.kt
index fe1ce1b..e9e8c2e 100644
--- a/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateModel.kt
+++ b/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateModel.kt
@@ -34,6 +34,20 @@
val foundCandidateFromUserDefaultProvider: Boolean,
)
+internal fun isFlowAutoSelectable(
+ uiState: CreateCredentialUiState
+): Boolean {
+ return uiState.requestDisplayInfo.isAutoSelectRequest &&
+ // Even if the flow is auto selectable, still allow passkey intro screen to show once if
+ // applicable.
+ uiState.currentScreenState != CreateScreenState.PASSKEY_INTRO &&
+ uiState.currentScreenState != CreateScreenState.MORE_ABOUT_PASSKEYS_INTRO &&
+ uiState.sortedCreateOptionsPairs.size == 1 &&
+ uiState.activeEntry?.activeEntryInfo?.let {
+ it is CreateOptionInfo && it.allowAutoSelect
+ } ?: false
+}
+
internal fun hasContentToDisplay(state: CreateCredentialUiState): Boolean {
return state.sortedCreateOptionsPairs.isNotEmpty() ||
(!state.requestDisplayInfo.preferImmediatelyAvailableCredentials &&
@@ -72,8 +86,9 @@
val passwordCount: Int?,
val passkeyCount: Int?,
val totalCredentialCount: Int?,
- val lastUsedTime: Instant?,
+ val lastUsedTime: Instant,
val footerDescription: String?,
+ val allowAutoSelect: Boolean,
) : BaseEntry(
providerId,
entryKey,
@@ -107,6 +122,8 @@
val preferImmediatelyAvailableCredentials: Boolean,
val appPreferredDefaultProviderId: String?,
val userSetDefaultProviderIds: Set<String>,
+ // Whether the given CreateCredentialRequest allows auto select.
+ val isAutoSelectRequest: Boolean,
)
/**
diff --git a/packages/CredentialManager/src/com/android/credentialmanager/getflow/GetCredentialComponents.kt b/packages/CredentialManager/src/com/android/credentialmanager/getflow/GetCredentialComponents.kt
index ccbd46d..934b0ae 100644
--- a/packages/CredentialManager/src/com/android/credentialmanager/getflow/GetCredentialComponents.kt
+++ b/packages/CredentialManager/src/com/android/credentialmanager/getflow/GetCredentialComponents.kt
@@ -148,6 +148,9 @@
}
},
onDismiss = viewModel::onUserCancel,
+ isInitialRender = viewModel.uiState.isInitialRender,
+ isAutoSelectFlow = viewModel.uiState.isAutoSelectFlow,
+ onInitialRenderComplete = viewModel::onInitialRenderComplete,
)
}
}
@@ -217,13 +220,27 @@
text = stringResource(
if (hasSingleEntry) {
val singleEntryType = sortedUserNameToCredentialEntryList.firstOrNull()
- ?.sortedCredentialEntryList?.first()?.credentialType
+ ?.sortedCredentialEntryList?.firstOrNull()?.credentialType
if (singleEntryType == CredentialType.PASSKEY)
R.string.get_dialog_title_use_passkey_for
else if (singleEntryType == CredentialType.PASSWORD)
R.string.get_dialog_title_use_password_for
+ else if (authenticationEntryList.isNotEmpty())
+ R.string.get_dialog_title_unlock_options_for
else R.string.get_dialog_title_use_sign_in_for
- } else R.string.get_dialog_title_choose_sign_in_for,
+ } else {
+ if (authenticationEntryList.isNotEmpty() ||
+ sortedUserNameToCredentialEntryList.any { perNameEntryList ->
+ perNameEntryList.sortedCredentialEntryList.any { entry ->
+ entry.credentialType != CredentialType.PASSWORD &&
+ entry.credentialType != CredentialType.PASSKEY
+ }
+ }
+ )
+ R.string.get_dialog_title_choose_sign_in_for
+ else
+ R.string.get_dialog_title_choose_saved_sign_in_for
+ },
requestDisplayInfo.appName
),
)
@@ -544,7 +561,12 @@
enforceOneLine: Boolean = false,
) {
Entry(
- onClick = { onEntrySelected(authenticationEntryInfo) },
+ onClick = if (authenticationEntryInfo.isUnlockedAndEmpty) {
+ {}
+ } // No-op
+ else {
+ { onEntrySelected(authenticationEntryInfo) }
+ },
iconImageBitmap = authenticationEntryInfo.icon.toBitmap().asImageBitmap(),
entryHeadlineText = authenticationEntryInfo.title,
entrySecondLineText = stringResource(
diff --git a/packages/CredentialManager/src/com/android/credentialmanager/ui/theme/PlatformTheme.kt b/packages/CredentialManager/src/com/android/credentialmanager/ui/theme/PlatformTheme.kt
index 662199a..2f1ce68 100644
--- a/packages/CredentialManager/src/com/android/credentialmanager/ui/theme/PlatformTheme.kt
+++ b/packages/CredentialManager/src/com/android/credentialmanager/ui/theme/PlatformTheme.kt
@@ -32,7 +32,11 @@
/** File copied from PlatformComposeCore. */
-/** The Material 3 theme that should wrap all Platform Composables. */
+/**
+ * The Material 3 theme that should wrap all Platform Composables.
+ *
+ * TODO(b/280685309): Merge with the official SysUI platform theme.
+ */
@Composable
fun PlatformTheme(
isDarkTheme: Boolean = isSystemInDarkTheme(),
@@ -40,7 +44,6 @@
) {
val context = LocalContext.current
- // TODO(b/230605885): Define our color scheme.
val colorScheme =
if (isDarkTheme) {
dynamicDarkColorScheme(context)
diff --git a/packages/CtsShim/build/Android.bp b/packages/CtsShim/build/Android.bp
index af3e210..d778feb 100644
--- a/packages/CtsShim/build/Android.bp
+++ b/packages/CtsShim/build/Android.bp
@@ -43,6 +43,9 @@
compile_multilib: "both",
jni_libs: ["libshim_jni"],
+ // Explicitly uncompress native libs rather than letting the build system doing it and destroy the
+ // v2/v3 signature.
+ use_embedded_native_libs: true,
uses_libs: ["android.test.runner"],
@@ -124,6 +127,9 @@
compile_multilib: "both",
jni_libs: ["libshim_jni"],
+ // Explicitly uncompress native libs rather than letting the build system doing it and destroy the
+ // v2/v3 signature.
+ use_embedded_native_libs: true,
uses_libs: ["android.test.runner"],
}
diff --git a/packages/InputDevices/res/raw/keyboard_layout_ukrainian.kcm b/packages/InputDevices/res/raw/keyboard_layout_ukrainian.kcm
index 1346bbb..90041da 100644
--- a/packages/InputDevices/res/raw/keyboard_layout_ukrainian.kcm
+++ b/packages/InputDevices/res/raw/keyboard_layout_ukrainian.kcm
@@ -36,8 +36,7 @@
key 1 {
label: '1'
base: '1'
- shift: '!'
- ralt: '!'
+ shift, ralt: '!'
}
key 2 {
@@ -64,8 +63,7 @@
key 5 {
label: '5'
base: '5'
- shift: '%'
- ralt: '%'
+ shift, ralt: '%'
}
key 6 {
@@ -85,22 +83,19 @@
key 8 {
label: '8'
base: '8'
- shift: '*'
- ralt: '*'
+ shift, ralt: '*'
}
key 9 {
label: '9'
base: '9'
- shift: '('
- ralt: '('
+ shift, ralt: '('
}
key 0 {
label: '0'
base: '0'
- shift: ')'
- ralt: ')'
+ shift, ralt: ')'
}
key MINUS {
@@ -108,7 +103,7 @@
base: '-'
shift: '_'
ralt: '-'
- ralt+shift: '_'
+ shift+ralt: '_'
}
key EQUALS {
@@ -116,7 +111,7 @@
base: '='
shift: '+'
ralt: '='
- ralt+shift: '+'
+ shift+ralt: '+'
}
### ROW 2
@@ -126,9 +121,6 @@
base: '\u0439'
shift, capslock: '\u0419'
shift+capslock: '\u0439'
- ralt: 'q'
- shift+ralt, capslock+ralt: 'Q'
- shift+capslock+ralt: 'q'
}
key W {
@@ -136,9 +128,6 @@
base: '\u0446'
shift, capslock: '\u0426'
shift+capslock: '\u0446'
- ralt: 'w'
- shift+ralt, capslock+ralt: 'W'
- shift+capslock+ralt: 'w'
}
key E {
@@ -146,9 +135,6 @@
base: '\u0443'
shift, capslock: '\u0423'
shift+capslock: '\u0443'
- ralt: 'e'
- shift+ralt, capslock+ralt: 'E'
- shift+capslock+ralt: 'e'
}
key R {
@@ -156,9 +142,6 @@
base: '\u043a'
shift, capslock: '\u041a'
shift+capslock: '\u043a'
- ralt: 'r'
- shift+ralt, capslock+ralt: 'R'
- shift+capslock+ralt: 'r'
}
key T {
@@ -166,9 +149,6 @@
base: '\u0435'
shift, capslock: '\u0415'
shift+capslock: '\u0435'
- ralt: 't'
- shift+ralt, capslock+ralt: 'T'
- shift+capslock+ralt: 't'
}
key Y {
@@ -176,9 +156,6 @@
base: '\u043d'
shift, capslock: '\u041d'
shift+capslock: '\u043d'
- ralt: 'y'
- shift+ralt, capslock+ralt: 'Y'
- shift+capslock+ralt: 'y'
}
key U {
@@ -186,9 +163,9 @@
base: '\u0433'
shift, capslock: '\u0413'
shift+capslock: '\u0433'
- ralt: 'u'
- shift+ralt, capslock+ralt: 'U'
- shift+capslock+ralt: 'u'
+ ralt: '\u0491'
+ shift+ralt, capslock+ralt: '\u0490'
+ shift+capslock+ralt: '\u0491'
}
key I {
@@ -196,9 +173,6 @@
base: '\u0448'
shift, capslock: '\u0428'
shift+capslock: '\u0448'
- ralt: 'i'
- shift+ralt, capslock+ralt: 'I'
- shift+capslock+ralt: 'i'
}
key O {
@@ -206,9 +180,6 @@
base: '\u0449'
shift, capslock: '\u0429'
shift+capslock: '\u0449'
- ralt: 'o'
- shift+ralt, capslock+ralt: 'O'
- shift+capslock+ralt: 'o'
}
key P {
@@ -216,9 +187,6 @@
base: '\u0437'
shift, capslock: '\u0417'
shift+capslock: '\u0437'
- ralt: 'p'
- shift+ralt, capslock+ralt: 'P'
- shift+capslock+ralt: 'p'
}
key LEFT_BRACKET {
@@ -226,8 +194,6 @@
base: '\u0445'
shift, capslock: '\u0425'
shift+capslock: '\u0445'
- ralt: '['
- ralt+shift: '{'
}
key RIGHT_BRACKET {
@@ -235,8 +201,6 @@
base: '\u0457'
shift, capslock: '\u0407'
shift+capslock: '\u0457'
- ralt: ']'
- ralt+shift: '}'
}
### ROW 3
@@ -246,9 +210,6 @@
base: '\u0444'
shift, capslock: '\u0424'
shift+capslock: '\u0444'
- ralt: 'a'
- shift+ralt, capslock+ralt: 'A'
- shift+capslock+ralt: 'a'
}
key S {
@@ -256,9 +217,6 @@
base: '\u0456'
shift, capslock: '\u0406'
shift+capslock: '\u0456'
- ralt: 's'
- shift+ralt, capslock+ralt: 'S'
- shift+capslock+ralt: 's'
}
key D {
@@ -266,9 +224,6 @@
base: '\u0432'
shift, capslock: '\u0412'
shift+capslock: '\u0432'
- ralt: 'd'
- shift+ralt, capslock+ralt: 'D'
- shift+capslock+ralt: 'd'
}
key F {
@@ -276,9 +231,6 @@
base: '\u0430'
shift, capslock: '\u0410'
shift+capslock: '\u0430'
- ralt: 'f'
- shift+ralt, capslock+ralt: 'F'
- shift+capslock+ralt: 'f'
}
key G {
@@ -286,9 +238,6 @@
base: '\u043f'
shift, capslock: '\u041f'
shift+capslock: '\u043f'
- ralt: 'g'
- shift+ralt, capslock+ralt: 'G'
- shift+capslock+ralt: 'g'
}
key H {
@@ -296,9 +245,6 @@
base: '\u0440'
shift, capslock: '\u0420'
shift+capslock: '\u0440'
- ralt: 'h'
- shift+ralt, capslock+ralt: 'H'
- shift+capslock+ralt: 'h'
}
key J {
@@ -306,9 +252,6 @@
base: '\u043e'
shift, capslock: '\u041e'
shift+capslock: '\u043e'
- ralt: 'j'
- shift+ralt, capslock+ralt: 'J'
- shift+capslock+ralt: 'j'
}
key K {
@@ -316,9 +259,6 @@
base: '\u043b'
shift, capslock: '\u041b'
shift+capslock: '\u043b'
- ralt: 'k'
- shift+ralt, capslock+ralt: 'K'
- shift+capslock+ralt: 'k'
}
key L {
@@ -326,9 +266,6 @@
base: '\u0434'
shift, capslock: '\u0414'
shift+capslock: '\u0434'
- ralt: 'l'
- shift+ralt, capslock+ralt: 'L'
- shift+capslock+ralt: 'l'
}
key SEMICOLON {
@@ -372,9 +309,6 @@
base: '\u044f'
shift, capslock: '\u042f'
shift+capslock: '\u044f'
- ralt: 'z'
- shift+ralt, capslock+ralt: 'Z'
- shift+capslock+ralt: 'z'
}
key X {
@@ -382,9 +316,6 @@
base: '\u0447'
shift, capslock: '\u0427'
shift+capslock: '\u0447'
- ralt: 'x'
- shift+ralt, capslock+ralt: 'X'
- shift+capslock+ralt: 'x'
}
key C {
@@ -392,9 +323,6 @@
base: '\u0441'
shift, capslock: '\u0421'
shift+capslock: '\u0441'
- ralt: 'c'
- shift+ralt, capslock+ralt: 'C'
- shift+capslock+ralt: 'c'
}
key V {
@@ -402,9 +330,6 @@
base: '\u043c'
shift, capslock: '\u041c'
shift+capslock: '\u043c'
- ralt: 'v'
- shift+ralt, capslock+ralt: 'V'
- shift+capslock+ralt: 'v'
}
key B {
@@ -412,9 +337,6 @@
base: '\u0438'
shift, capslock: '\u0418'
shift+capslock: '\u0438'
- ralt: 'b'
- shift+ralt, capslock+ralt: 'B'
- shift+capslock+ralt: 'b'
}
key N {
@@ -422,9 +344,6 @@
base: '\u0442'
shift, capslock: '\u0422'
shift+capslock: '\u0442'
- ralt: 'n'
- shift+ralt, capslock+ralt: 'N'
- shift+capslock+ralt: 'n'
}
key M {
@@ -432,9 +351,6 @@
base: '\u044c'
shift, capslock: '\u042c'
shift+capslock: '\u044c'
- ralt: 'm'
- shift+ralt, capslock+ralt: 'M'
- shift+capslock+ralt: 'm'
}
key COMMA {
diff --git a/packages/SettingsLib/CollapsingToolbarBaseActivity/Android.bp b/packages/SettingsLib/CollapsingToolbarBaseActivity/Android.bp
index e9000a8..df43863 100644
--- a/packages/SettingsLib/CollapsingToolbarBaseActivity/Android.bp
+++ b/packages/SettingsLib/CollapsingToolbarBaseActivity/Android.bp
@@ -27,6 +27,7 @@
"//apex_available:platform",
"com.android.adservices",
"com.android.cellbroadcast",
+ "com.android.devicelock",
"com.android.extservices",
"com.android.permission",
"com.android.healthfitness",
diff --git a/packages/SettingsLib/SettingsTheme/Android.bp b/packages/SettingsLib/SettingsTheme/Android.bp
index d26ad1c..e6fb720 100644
--- a/packages/SettingsLib/SettingsTheme/Android.bp
+++ b/packages/SettingsLib/SettingsTheme/Android.bp
@@ -16,6 +16,7 @@
apex_available: [
"//apex_available:platform",
"com.android.cellbroadcast",
+ "com.android.devicelock",
"com.android.extservices",
"com.android.permission",
"com.android.adservices",
diff --git a/packages/SettingsLib/SettingsTransition/Android.bp b/packages/SettingsLib/SettingsTransition/Android.bp
index 0f9f781..48cc75d 100644
--- a/packages/SettingsLib/SettingsTransition/Android.bp
+++ b/packages/SettingsLib/SettingsTransition/Android.bp
@@ -22,6 +22,7 @@
"//apex_available:platform",
"com.android.adservices",
"com.android.cellbroadcast",
+ "com.android.devicelock",
"com.android.extservices",
"com.android.permission",
"com.android.healthfitness",
diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/BrowseActivity.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/BrowseActivity.kt
index 621e6ea..0f5862a 100644
--- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/BrowseActivity.kt
+++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/BrowseActivity.kt
@@ -20,6 +20,7 @@
import android.content.Intent
import android.os.Bundle
+import android.util.Log
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.annotation.VisibleForTesting
@@ -40,6 +41,7 @@
import com.android.settingslib.spa.R
import com.android.settingslib.spa.framework.common.LogCategory
import com.android.settingslib.spa.framework.common.NullPageProvider
+import com.android.settingslib.spa.framework.common.SettingsPage
import com.android.settingslib.spa.framework.common.SettingsPageProvider
import com.android.settingslib.spa.framework.common.SettingsPageProviderRepository
import com.android.settingslib.spa.framework.common.SpaEnvironmentFactory
@@ -51,7 +53,7 @@
import com.android.settingslib.spa.framework.compose.localNavController
import com.android.settingslib.spa.framework.compose.rememberAnimatedNavController
import com.android.settingslib.spa.framework.theme.SettingsTheme
-import com.android.settingslib.spa.framework.util.PageWithEvent
+import com.android.settingslib.spa.framework.util.PageLogger
import com.android.settingslib.spa.framework.util.getDestination
import com.android.settingslib.spa.framework.util.getEntryId
import com.android.settingslib.spa.framework.util.getSessionName
@@ -87,25 +89,50 @@
setContent {
SettingsTheme {
val sppRepository by spaEnvironment.pageProviderRepository
- BrowseContent(sppRepository, intent)
+ BrowseContent(
+ sppRepository = sppRepository,
+ isPageEnabled = ::isPageEnabled,
+ initialIntent = intent,
+ )
}
}
}
+
+ open fun isPageEnabled(page: SettingsPage) = page.isEnabled()
}
@VisibleForTesting
@Composable
-fun BrowseContent(sppRepository: SettingsPageProviderRepository, initialIntent: Intent? = null) {
+internal fun BrowseContent(
+ sppRepository: SettingsPageProviderRepository,
+ isPageEnabled: (SettingsPage) -> Boolean,
+ initialIntent: Intent?,
+) {
val navController = rememberAnimatedNavController()
CompositionLocalProvider(navController.localNavController()) {
val controller = LocalNavController.current as NavControllerWrapperImpl
- controller.NavContent(sppRepository.getAllProviders())
+ controller.NavContent(sppRepository.getAllProviders()) { page ->
+ if (remember { isPageEnabled(page) }) {
+ LaunchedEffect(Unit) {
+ Log.d(TAG, "Launching page ${page.sppName}")
+ }
+ page.PageLogger()
+ page.UiLayout()
+ } else {
+ LaunchedEffect(Unit) {
+ controller.navigateBack()
+ }
+ }
+ }
controller.InitialDestination(initialIntent, sppRepository.getDefaultStartPage())
}
}
@Composable
-private fun NavControllerWrapperImpl.NavContent(allProvider: Collection<SettingsPageProvider>) {
+private fun NavControllerWrapperImpl.NavContent(
+ allProvider: Collection<SettingsPageProvider>,
+ content: @Composable (SettingsPage) -> Unit,
+) {
AnimatedNavHost(
navController = navController,
startDestination = NullPageProvider.name,
@@ -139,7 +166,7 @@
},
) { navBackStackEntry ->
val page = remember { spp.createSettingsPage(navBackStackEntry.arguments) }
- page.PageWithEvent()
+ content(page)
}
}
}
diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/util/PageLogger.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/util/PageLogger.kt
index dde4e04..a9e5e39 100644
--- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/util/PageLogger.kt
+++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/util/PageLogger.kt
@@ -29,14 +29,12 @@
import com.android.settingslib.spa.framework.compose.NavControllerWrapper
@Composable
-internal fun SettingsPage.PageWithEvent() {
- if (!isEnabled()) return
+internal fun SettingsPage.PageLogger() {
val navController = LocalNavController.current
LifecycleEffect(
onStart = { logPageEvent(LogEvent.PAGE_ENTER, navController) },
onStop = { logPageEvent(LogEvent.PAGE_LEAVE, navController) },
)
- UiLayout()
}
private fun SettingsPage.logPageEvent(event: LogEvent, navController: NavControllerWrapper) {
diff --git a/packages/SettingsLib/Spa/tests/src/com/android/settingslib/spa/framework/BrowseActivityTest.kt b/packages/SettingsLib/Spa/tests/src/com/android/settingslib/spa/framework/BrowseActivityTest.kt
index 218f569..92d3411 100644
--- a/packages/SettingsLib/Spa/tests/src/com/android/settingslib/spa/framework/BrowseActivityTest.kt
+++ b/packages/SettingsLib/Spa/tests/src/com/android/settingslib/spa/framework/BrowseActivityTest.kt
@@ -26,6 +26,7 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import com.android.settingslib.spa.framework.common.LogCategory
import com.android.settingslib.spa.framework.common.LogEvent
+import com.android.settingslib.spa.framework.common.SettingsPage
import com.android.settingslib.spa.framework.common.SpaEnvironmentFactory
import com.android.settingslib.spa.framework.common.createSettingsPage
import com.android.settingslib.spa.tests.testutils.SpaEnvironmentForTest
@@ -38,8 +39,6 @@
import org.junit.Test
import org.junit.runner.RunWith
-const val WAIT_UNTIL_TIMEOUT = 1000L
-
@RunWith(AndroidJUnit4::class)
class BrowseActivityTest {
@get:Rule
@@ -49,19 +48,26 @@
private val spaLogger = SpaLoggerForTest()
@Test
- fun testBrowsePage() {
- spaLogger.reset()
- val spaEnvironment =
- SpaEnvironmentForTest(context, listOf(SppHome.createSettingsPage()), logger = spaLogger)
+ fun browseContent_onNavigate_logPageEvent() {
+ val spaEnvironment = SpaEnvironmentForTest(
+ context = context,
+ rootPages = listOf(SppHome.createSettingsPage()),
+ logger = spaLogger,
+ )
SpaEnvironmentFactory.reset(spaEnvironment)
-
val sppRepository by spaEnvironment.pageProviderRepository
val sppHome = sppRepository.getProviderOrNull("SppHome")!!
val pageHome = sppHome.createSettingsPage()
val sppLayer1 = sppRepository.getProviderOrNull("SppLayer1")!!
val pageLayer1 = sppLayer1.createSettingsPage()
- composeTestRule.setContent { BrowseContent(sppRepository) }
+ composeTestRule.setContent {
+ BrowseContent(
+ sppRepository = sppRepository,
+ isPageEnabled = SettingsPage::isEnabled,
+ initialIntent = null,
+ )
+ }
composeTestRule.onNodeWithText(sppHome.getTitle(null)).assertIsDisplayed()
spaLogger.verifyPageEvent(pageHome.id, 1, 0)
@@ -69,7 +75,7 @@
// click to layer1 page
composeTestRule.onNodeWithText("SppHome to Layer1").assertIsDisplayed().performClick()
- waitUntil(WAIT_UNTIL_TIMEOUT) {
+ waitUntil {
composeTestRule.onAllNodesWithText(sppLayer1.getTitle(null))
.fetchSemanticsNodes().size == 1
}
@@ -78,18 +84,24 @@
}
@Test
- fun testBrowseDisabledPage() {
- spaLogger.reset()
+ fun browseContent_whenDisabled_noLogPageEvent() {
val spaEnvironment = SpaEnvironmentForTest(
- context, listOf(SppDisabled.createSettingsPage()), logger = spaLogger
+ context = context,
+ rootPages = listOf(SppDisabled.createSettingsPage()),
+ logger = spaLogger,
)
SpaEnvironmentFactory.reset(spaEnvironment)
-
val sppRepository by spaEnvironment.pageProviderRepository
val sppDisabled = sppRepository.getProviderOrNull("SppDisabled")!!
val pageDisabled = sppDisabled.createSettingsPage()
- composeTestRule.setContent { BrowseContent(sppRepository) }
+ composeTestRule.setContent {
+ BrowseContent(
+ sppRepository = sppRepository,
+ isPageEnabled = SettingsPage::isEnabled,
+ initialIntent = null,
+ )
+ }
composeTestRule.onNodeWithText(sppDisabled.getTitle(null)).assertDoesNotExist()
spaLogger.verifyPageEvent(pageDisabled.id, 0, 0)
diff --git a/packages/SettingsLib/SpaPrivileged/AndroidManifest.xml b/packages/SettingsLib/SpaPrivileged/AndroidManifest.xml
index 5396de0..17c139b 100644
--- a/packages/SettingsLib/SpaPrivileged/AndroidManifest.xml
+++ b/packages/SettingsLib/SpaPrivileged/AndroidManifest.xml
@@ -18,6 +18,5 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.settingslib.spaprivileged">
<uses-permission android:name="android.permission.MANAGE_USERS" />
- <uses-permission android:name="android.permission.GRANT_RUNTIME_PERMISSIONS" />
</manifest>
diff --git a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/model/app/AppListRepository.kt b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/model/app/AppListRepository.kt
index 2c3e58e..2b38b4c 100644
--- a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/model/app/AppListRepository.kt
+++ b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/model/app/AppListRepository.kt
@@ -49,7 +49,7 @@
): Flow<(app: ApplicationInfo) -> Boolean>
/** Gets the system app package names. */
- fun getSystemPackageNamesBlocking(userId: Int, showInstantApps: Boolean): Set<String>
+ fun getSystemPackageNamesBlocking(userId: Int): Set<String>
}
/**
@@ -58,12 +58,8 @@
object AppListRepositoryUtil {
/** Gets the system app package names. */
@JvmStatic
- fun getSystemPackageNames(
- context: Context,
- userId: Int,
- showInstantApps: Boolean,
- ): Set<String> =
- AppListRepositoryImpl(context).getSystemPackageNamesBlocking(userId, showInstantApps)
+ fun getSystemPackageNames(context: Context, userId: Int): Set<String> =
+ AppListRepositoryImpl(context).getSystemPackageNamesBlocking(userId)
}
internal class AppListRepositoryImpl(private val context: Context) : AppListRepository {
@@ -140,12 +136,12 @@
): Flow<(app: ApplicationInfo) -> Boolean> =
userIdFlow.combine(showSystemFlow, ::showSystemPredicate)
- override fun getSystemPackageNamesBlocking(userId: Int, showInstantApps: Boolean) =
- runBlocking { getSystemPackageNames(userId, showInstantApps) }
+ override fun getSystemPackageNamesBlocking(userId: Int) =
+ runBlocking { getSystemPackageNames(userId) }
- private suspend fun getSystemPackageNames(userId: Int, showInstantApps: Boolean): Set<String> =
+ private suspend fun getSystemPackageNames(userId: Int): Set<String> =
coroutineScope {
- val loadAppsDeferred = async { loadApps(userId, showInstantApps) }
+ val loadAppsDeferred = async { loadApps(userId) }
val homeOrLauncherPackages = loadHomeOrLauncherPackages(userId)
val showSystemPredicate =
{ app: ApplicationInfo -> isSystemApp(app, homeOrLauncherPackages) }
@@ -184,10 +180,8 @@
}
}
- private fun isSystemApp(app: ApplicationInfo, homeOrLauncherPackages: Set<String>): Boolean {
- return !app.isUpdatedSystemApp && app.isSystemApp &&
- !(app.packageName in homeOrLauncherPackages)
- }
+ private fun isSystemApp(app: ApplicationInfo, homeOrLauncherPackages: Set<String>): Boolean =
+ app.isSystemApp && !app.isUpdatedSystemApp && app.packageName !in homeOrLauncherPackages
companion object {
private fun ApplicationInfo.isInAppList(
diff --git a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppOpPermissionAppList.kt b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppOpPermissionAppList.kt
index 338b16d..e9da88e 100644
--- a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppOpPermissionAppList.kt
+++ b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppOpPermissionAppList.kt
@@ -46,7 +46,7 @@
) : AppRecord
abstract class AppOpPermissionListModel(
- private val context: Context,
+ protected val context: Context,
private val packageManagers: IPackageManagers = PackageManagers,
) : TogglePermissionAppListModel<AppOpPermissionRecord> {
diff --git a/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/model/app/AppListRepositoryTest.kt b/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/model/app/AppListRepositoryTest.kt
index b732a6a..302f780 100644
--- a/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/model/app/AppListRepositoryTest.kt
+++ b/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/model/app/AppListRepositoryTest.kt
@@ -78,9 +78,15 @@
whenever(context.packageManager).thenReturn(packageManager)
whenever(context.userManager).thenReturn(userManager)
whenever(packageManager.getInstalledModules(anyInt())).thenReturn(emptyList())
+ whenever(packageManager.getHomeActivities(any())).thenAnswer {
+ @Suppress("UNCHECKED_CAST")
+ val resolveInfos = it.arguments[0] as MutableList<ResolveInfo>
+ resolveInfos += resolveInfoOf(packageName = HOME_APP.packageName)
+ null
+ }
whenever(
packageManager.queryIntentActivitiesAsUser(any(), any<ResolveInfoFlags>(), anyInt())
- ).thenReturn(emptyList())
+ ).thenReturn(listOf(resolveInfoOf(packageName = IN_LAUNCHER_APP.packageName)))
whenever(userManager.getUserInfo(ADMIN_USER_ID)).thenReturn(UserInfo().apply {
flags = UserInfo.FLAG_ADMIN
})
@@ -290,35 +296,16 @@
@Test
fun showSystemPredicate_isHome() = runTest {
- val app = HOME_APP
-
- whenever(packageManager.getHomeActivities(any())).thenAnswer {
- @Suppress("UNCHECKED_CAST")
- val resolveInfos = it.arguments[0] as MutableList<ResolveInfo>
- resolveInfos.add(resolveInfoOf(packageName = app.packageName))
- null
- }
-
val showSystemPredicate = getShowSystemPredicate(showSystem = false)
- assertThat(showSystemPredicate(app)).isTrue()
+ assertThat(showSystemPredicate(HOME_APP)).isTrue()
}
@Test
fun showSystemPredicate_appInLauncher() = runTest {
- val app = IN_LAUNCHER_APP
-
- whenever(
- packageManager.queryIntentActivitiesAsUser(
- any(),
- any<ResolveInfoFlags>(),
- eq(ADMIN_USER_ID)
- )
- ).thenReturn(listOf(resolveInfoOf(packageName = app.packageName)))
-
val showSystemPredicate = getShowSystemPredicate(showSystem = false)
- assertThat(showSystemPredicate(app)).isTrue()
+ assertThat(showSystemPredicate(IN_LAUNCHER_APP)).isTrue()
}
@Test
@@ -333,10 +320,9 @@
val systemPackageNames = AppListRepositoryUtil.getSystemPackageNames(
context = context,
userId = ADMIN_USER_ID,
- showInstantApps = false,
)
- assertThat(systemPackageNames).containsExactly("system.app", "home.app", "app.in.launcher")
+ assertThat(systemPackageNames).containsExactly(SYSTEM_APP.packageName)
}
private suspend fun getShowSystemPredicate(showSystem: Boolean) =
diff --git a/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/model/app/AppListViewModelTest.kt b/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/model/app/AppListViewModelTest.kt
index 36d9db5..6889e5d 100644
--- a/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/model/app/AppListViewModelTest.kt
+++ b/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/model/app/AppListViewModelTest.kt
@@ -96,10 +96,7 @@
showSystemFlow: Flow<Boolean>,
): Flow<(app: ApplicationInfo) -> Boolean> = flowOf { true }
- override fun getSystemPackageNamesBlocking(
- userId: Int,
- showInstantApps: Boolean,
- ): Set<String> = emptySet()
+ override fun getSystemPackageNamesBlocking(userId: Int): Set<String> = emptySet()
}
private object FakeAppRepository : AppRepository {
diff --git a/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/model/app/AppOpsControllerTest.kt b/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/model/app/AppOpsControllerTest.kt
index 23270c1..eb3d7dc 100644
--- a/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/model/app/AppOpsControllerTest.kt
+++ b/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/model/app/AppOpsControllerTest.kt
@@ -55,6 +55,7 @@
@Before
fun setUp() {
whenever(context.appOpsManager).thenReturn(appOpsManager)
+ whenever(context.packageManager).thenReturn(packageManager)
doNothing().`when`(packageManager)
.updatePermissionFlags(anyString(), anyString(), anyInt(), anyInt(), any())
}
diff --git a/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/AppOpPermissionAppListTest.kt b/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/AppOpPermissionAppListTest.kt
index af59a55..c54f4f8 100644
--- a/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/AppOpPermissionAppListTest.kt
+++ b/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/AppOpPermissionAppListTest.kt
@@ -19,6 +19,7 @@
import android.app.AppOpsManager
import android.content.Context
import android.content.pm.ApplicationInfo
+import android.content.pm.PackageManager
import androidx.compose.runtime.State
import androidx.compose.ui.test.junit4.createComposeRule
import androidx.lifecycle.MutableLiveData
@@ -38,6 +39,10 @@
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mock
+import org.mockito.Mockito.any
+import org.mockito.Mockito.anyInt
+import org.mockito.Mockito.anyString
+import org.mockito.Mockito.doNothing
import org.mockito.Mockito.verify
import org.mockito.Mockito.`when` as whenever
import org.mockito.Spy
@@ -57,11 +62,16 @@
@Mock private lateinit var appOpsManager: AppOpsManager
+ @Mock private lateinit var packageManager: PackageManager
+
private lateinit var listModel: TestAppOpPermissionAppListModel
@Before
fun setUp() {
whenever(context.appOpsManager).thenReturn(appOpsManager)
+ whenever(context.packageManager).thenReturn(packageManager)
+ doNothing().`when`(packageManager)
+ .updatePermissionFlags(anyString(), anyString(), anyInt(), anyInt(), any())
listModel = TestAppOpPermissionAppListModel()
}
diff --git a/packages/SettingsLib/TopIntroPreference/Android.bp b/packages/SettingsLib/TopIntroPreference/Android.bp
index eca1165..5d09a1a 100644
--- a/packages/SettingsLib/TopIntroPreference/Android.bp
+++ b/packages/SettingsLib/TopIntroPreference/Android.bp
@@ -23,6 +23,7 @@
apex_available: [
"//apex_available:platform",
"com.android.cellbroadcast",
+ "com.android.devicelock",
"com.android.healthfitness",
],
}
diff --git a/packages/SettingsLib/Utils/Android.bp b/packages/SettingsLib/Utils/Android.bp
index 33ba64a..dc2b52d 100644
--- a/packages/SettingsLib/Utils/Android.bp
+++ b/packages/SettingsLib/Utils/Android.bp
@@ -25,6 +25,7 @@
"//apex_available:platform",
"com.android.adservices",
"com.android.cellbroadcast",
+ "com.android.devicelock",
"com.android.extservices",
"com.android.healthfitness",
"com.android.permission",
diff --git a/packages/SettingsLib/res/values/dimens.xml b/packages/SettingsLib/res/values/dimens.xml
index e9aded0..2372c80 100644
--- a/packages/SettingsLib/res/values/dimens.xml
+++ b/packages/SettingsLib/res/values/dimens.xml
@@ -67,6 +67,8 @@
<!-- SignalDrawable -->
<dimen name="signal_icon_size">15dp</dimen>
+ <!-- The size of the roaming icon in the top-left corner of the signal icon. -->
+ <dimen name="signal_icon_size_roaming">8dp</dimen>
<!-- Size of nearby icon -->
<dimen name="bt_nearby_icon_size">24dp</dimen>
diff --git a/packages/SettingsLib/res/values/strings.xml b/packages/SettingsLib/res/values/strings.xml
index 214c903..4e75792 100644
--- a/packages/SettingsLib/res/values/strings.xml
+++ b/packages/SettingsLib/res/values/strings.xml
@@ -244,7 +244,7 @@
<!-- Bluetooth settings. The user-visible string that is used whenever referring to the Hearing Aid profile. -->
<string name="bluetooth_profile_hearing_aid">Hearing Aids</string>
<!-- Bluetooth settings. The user-visible string that is used whenever referring to the LE audio profile. -->
- <string name="bluetooth_profile_le_audio">LE audio</string>
+ <string name="bluetooth_profile_le_audio">LE audio (experimental)</string>
<!-- Bluetooth settings. Connection options screen. The summary for the Hearing Aid checkbox preference when Hearing Aid is connected. -->
<string name="bluetooth_hearing_aid_profile_summary_connected">Connected to Hearing Aids</string>
<!-- Bluetooth settings. Connection options screen. The summary for the LE audio checkbox preference when LE audio is connected. -->
diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothUtils.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothUtils.java
index 810545c..f12aa26 100644
--- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothUtils.java
+++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothUtils.java
@@ -6,6 +6,7 @@
import android.bluetooth.BluetoothClass;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothProfile;
+import android.bluetooth.BluetoothCsipSetCoordinator;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
@@ -174,14 +175,21 @@
resources, ((BitmapDrawable) pair.first).getBitmap()), pair.second);
}
+ int hashCode;
+ if ((cachedDevice.getGroupId() != BluetoothCsipSetCoordinator.GROUP_ID_INVALID)) {
+ hashCode = new Integer(cachedDevice.getGroupId()).hashCode();
+ } else {
+ hashCode = cachedDevice.getAddress().hashCode();
+ }
+
return new Pair<>(buildBtRainbowDrawable(context,
- pair.first, cachedDevice.getAddress().hashCode()), pair.second);
+ pair.first, hashCode), pair.second);
}
/**
* Build Bluetooth device icon with rainbow
*/
- public static Drawable buildBtRainbowDrawable(Context context, Drawable drawable,
+ private static Drawable buildBtRainbowDrawable(Context context, Drawable drawable,
int hashCode) {
final Resources resources = context.getResources();
diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java
index e884cf8..1aa1741 100644
--- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java
+++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java
@@ -581,9 +581,14 @@
*/
public void setName(String name) {
// Prevent getName() to be set to null if setName(null) is called
- if (name != null && !TextUtils.equals(name, getName())) {
- mDevice.setAlias(name);
- dispatchAttributesChanged();
+ if (name == null || TextUtils.equals(name, getName())) {
+ return;
+ }
+ mDevice.setAlias(name);
+ dispatchAttributesChanged();
+
+ for (CachedBluetoothDevice cbd : mMemberDevices) {
+ cbd.setName(name);
}
}
@@ -1543,8 +1548,7 @@
refresh();
}
- return new Pair<>(BluetoothUtils.buildBtRainbowDrawable(
- mContext, pair.first, getAddress().hashCode()), pair.second);
+ return BluetoothUtils.getBtRainbowDrawableWithDescription(mContext, this);
}
void releaseLruCache() {
diff --git a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java
index 6cf6825..82c6f11 100644
--- a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java
+++ b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java
@@ -542,13 +542,6 @@
//TODO(b/148765806): use correct device type once api is ready.
mediaDevice = new InfoMediaDevice(mContext, mRouterManager, route,
mPackageName, mPreferenceItemMap.get(route.getId()));
- if (!TextUtils.isEmpty(mPackageName)
- && getRoutingSessionInfo().getSelectedRoutes().contains(route.getId())) {
- mediaDevice.setState(STATE_SELECTED);
- if (mCurrentConnectedDevice == null) {
- mCurrentConnectedDevice = mediaDevice;
- }
- }
break;
case TYPE_BUILTIN_SPEAKER:
case TYPE_USB_DEVICE:
@@ -581,7 +574,13 @@
break;
}
-
+ if (mediaDevice != null && !TextUtils.isEmpty(mPackageName)
+ && getRoutingSessionInfo().getSelectedRoutes().contains(route.getId())) {
+ mediaDevice.setState(STATE_SELECTED);
+ if (mCurrentConnectedDevice == null) {
+ mCurrentConnectedDevice = mediaDevice;
+ }
+ }
if (mediaDevice != null) {
mMediaDevices.add(mediaDevice);
}
diff --git a/packages/SettingsLib/src/com/android/settingslib/qrcode/QrDecorateView.java b/packages/SettingsLib/src/com/android/settingslib/qrcode/QrDecorateView.java
index ac9cdac..e034254 100644
--- a/packages/SettingsLib/src/com/android/settingslib/qrcode/QrDecorateView.java
+++ b/packages/SettingsLib/src/com/android/settingslib/qrcode/QrDecorateView.java
@@ -95,9 +95,6 @@
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
- if (!isLaidOut()) {
- return;
- }
if (mMaskBitmap == null) {
mMaskBitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888);
mMaskCanvas = new Canvas(mMaskBitmap);
diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiStatusTracker.java b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiStatusTracker.java
index adaf4a1..c45d774 100644
--- a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiStatusTracker.java
+++ b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiStatusTracker.java
@@ -343,7 +343,12 @@
}
@Nullable
- private WifiInfo getMainOrUnderlyingWifiInfo(NetworkCapabilities networkCapabilities) {
+ private WifiInfo getMainOrUnderlyingWifiInfo(
+ @Nullable NetworkCapabilities networkCapabilities) {
+ if (networkCapabilities == null) {
+ return null;
+ }
+
WifiInfo mainWifiInfo = getMainWifiInfo(networkCapabilities);
if (mainWifiInfo != null) {
return mainWifiInfo;
@@ -376,7 +381,10 @@
}
@Nullable
- private WifiInfo getMainWifiInfo(NetworkCapabilities networkCapabilities) {
+ private WifiInfo getMainWifiInfo(@Nullable NetworkCapabilities networkCapabilities) {
+ if (networkCapabilities == null) {
+ return null;
+ }
boolean canHaveWifiInfo = networkCapabilities.hasTransport(TRANSPORT_WIFI)
|| networkCapabilities.hasTransport(TRANSPORT_CELLULAR);
if (!canHaveWifiInfo) {
@@ -402,7 +410,11 @@
getMainOrUnderlyingWifiInfo(networkCapabilities));
}
- private boolean connectionIsWifi(NetworkCapabilities networkCapabilities, WifiInfo wifiInfo) {
+ private boolean connectionIsWifi(
+ @Nullable NetworkCapabilities networkCapabilities, WifiInfo wifiInfo) {
+ if (networkCapabilities == null) {
+ return false;
+ }
return wifiInfo != null || networkCapabilities.hasTransport(TRANSPORT_WIFI);
}
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/InfoMediaManagerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/InfoMediaManagerTest.java
index 0969327..aa5f3df 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/InfoMediaManagerTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/InfoMediaManagerTest.java
@@ -25,6 +25,8 @@
import static android.media.MediaRoute2ProviderService.REASON_NETWORK_ERROR;
import static android.media.MediaRoute2ProviderService.REASON_UNKNOWN_ERROR;
+import static com.android.settingslib.media.LocalMediaManager.MediaDeviceState.STATE_SELECTED;
+
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
@@ -1006,6 +1008,37 @@
}
@Test
+ public void addMediaDevice_deviceIncludedInSelectedDevices_shouldSetAsCurrentConnected() {
+ final MediaRoute2Info route2Info = mock(MediaRoute2Info.class);
+ final CachedBluetoothDeviceManager cachedBluetoothDeviceManager =
+ mock(CachedBluetoothDeviceManager.class);
+ final CachedBluetoothDevice cachedDevice = mock(CachedBluetoothDevice.class);
+ final List<RoutingSessionInfo> routingSessionInfos = new ArrayList<>();
+ final RoutingSessionInfo sessionInfo = mock(RoutingSessionInfo.class);
+ routingSessionInfos.add(sessionInfo);
+
+ when(mRouterManager.getRoutingSessions(TEST_PACKAGE_NAME)).thenReturn(routingSessionInfos);
+ when(sessionInfo.getSelectedRoutes()).thenReturn(ImmutableList.of(TEST_ID));
+ when(route2Info.getType()).thenReturn(TYPE_BLUETOOTH_A2DP);
+ when(route2Info.getAddress()).thenReturn("00:00:00:00:00:00");
+ when(route2Info.getId()).thenReturn(TEST_ID);
+ when(mLocalBluetoothManager.getCachedDeviceManager())
+ .thenReturn(cachedBluetoothDeviceManager);
+ when(cachedBluetoothDeviceManager.findDevice(any(BluetoothDevice.class)))
+ .thenReturn(cachedDevice);
+ mInfoMediaManager.mRouterManager = mRouterManager;
+
+ mInfoMediaManager.mMediaDevices.clear();
+ mInfoMediaManager.addMediaDevice(route2Info);
+
+ MediaDevice device = mInfoMediaManager.mMediaDevices.get(0);
+
+ assertThat(device instanceof BluetoothMediaDevice).isTrue();
+ assertThat(device.getState()).isEqualTo(STATE_SELECTED);
+ assertThat(mInfoMediaManager.getCurrentConnectedDevice()).isEqualTo(device);
+ }
+
+ @Test
public void shouldDisableMediaOutput_infosIsEmpty_returnsTrue() {
mShadowRouter2Manager.setTransferableRoutes(new ArrayList<>());
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/wifi/WifiStatusTrackerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/wifi/WifiStatusTrackerTest.java
index 6e975cf..5a9a9d1 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/wifi/WifiStatusTrackerTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/wifi/WifiStatusTrackerTest.java
@@ -305,4 +305,16 @@
assertThat(mWifiStatusTracker.isDefaultNetwork).isTrue();
}
+
+ /** Regression test for b/280169520. */
+ @Test
+ public void networkCallbackNullCapabilities_noCrash() {
+ Network primaryNetwork = Mockito.mock(Network.class);
+
+ // WHEN the network capabilities are null
+ mNetworkCallbackCaptor.getValue().onCapabilitiesChanged(
+ primaryNetwork, /* networkCapabilities= */ null);
+
+ // THEN there's no crash (no assert needed)
+ }
}
diff --git a/packages/SettingsProvider/src/android/provider/settings/validators/SystemSettingsValidators.java b/packages/SettingsProvider/src/android/provider/settings/validators/SystemSettingsValidators.java
index 85623b2..753c860 100644
--- a/packages/SettingsProvider/src/android/provider/settings/validators/SystemSettingsValidators.java
+++ b/packages/SettingsProvider/src/android/provider/settings/validators/SystemSettingsValidators.java
@@ -183,6 +183,7 @@
VALIDATORS.put(System.NOTIFICATION_LIGHT_PULSE, BOOLEAN_VALIDATOR);
VALIDATORS.put(System.POINTER_LOCATION, BOOLEAN_VALIDATOR);
VALIDATORS.put(System.SHOW_TOUCHES, BOOLEAN_VALIDATOR);
+ VALIDATORS.put(System.SHOW_KEY_PRESSES, BOOLEAN_VALIDATOR);
VALIDATORS.put(System.WINDOW_ORIENTATION_LISTENER_LOG, BOOLEAN_VALIDATOR);
VALIDATORS.put(System.LOCKSCREEN_SOUNDS_ENABLED, BOOLEAN_VALIDATOR);
VALIDATORS.put(System.LOCKSCREEN_DISABLED, BOOLEAN_VALIDATOR);
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java
index d3a9e91..1fd84c7 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java
@@ -2778,6 +2778,9 @@
Settings.System.SHOW_TOUCHES,
SystemSettingsProto.DevOptions.SHOW_TOUCHES);
dumpSetting(s, p,
+ Settings.System.SHOW_KEY_PRESSES,
+ SystemSettingsProto.DevOptions.SHOW_KEY_PRESSES);
+ dumpSetting(s, p,
Settings.System.POINTER_LOCATION,
SystemSettingsProto.DevOptions.POINTER_LOCATION);
dumpSetting(s, p,
diff --git a/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java b/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java
index 2e49dd5..73123c2 100644
--- a/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java
+++ b/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java
@@ -77,7 +77,8 @@
Settings.System.SCREEN_BRIGHTNESS, // removed in P
Settings.System.SETUP_WIZARD_HAS_RUN, // Only used by SuW
Settings.System.SHOW_GTALK_SERVICE_STATUS, // candidate for backup?
- Settings.System.SHOW_TOUCHES, // bug?
+ Settings.System.SHOW_TOUCHES,
+ Settings.System.SHOW_KEY_PRESSES,
Settings.System.SIP_ADDRESS_ONLY, // value, not a setting
Settings.System.SIP_ALWAYS, // value, not a setting
Settings.System.SYSTEM_LOCALES, // bug?
diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml
index a27f113..fe90caf 100644
--- a/packages/SystemUI/AndroidManifest.xml
+++ b/packages/SystemUI/AndroidManifest.xml
@@ -716,8 +716,11 @@
android:exported="true" />
<!-- started from Telecomm(CallsManager) -->
+ <!-- Sets an empty label to avoid an announcement from TalkBack,
+ the dialog contents are sufficient and will still be read by TalkBack -->
<activity
android:name=".telephony.ui.activity.SwitchToManagedProfileForCallActivity"
+ android:label=" "
android:excludeFromRecents="true"
android:exported="true"
android:finishOnCloseSystemDialogs="true"
@@ -969,6 +972,22 @@
android:permission="android.permission.BIND_JOB_SERVICE"/>
<!-- region Note Task -->
+ <activity
+ android:name=".notetask.shortcut.CreateNoteTaskShortcutActivity"
+ android:enabled="false"
+ android:exported="true"
+ android:excludeFromRecents="true"
+ android:resizeableActivity="false"
+ android:theme="@android:style/Theme.NoDisplay"
+ android:label="@string/note_task_button_label"
+ android:icon="@drawable/ic_note_task_shortcut_widget">
+
+ <intent-filter>
+ <action android:name="android.intent.action.CREATE_SHORTCUT" />
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
+ </activity>
+
<service android:name=".notetask.NoteTaskControllerUpdateService" />
<activity
@@ -1098,5 +1117,16 @@
android:exported="true"
android:permission="android.permission.CUSTOMIZE_SYSTEM_UI"
/>
+
+ <!-- TODO(b/278897602): Disable EmojiCompatInitializer until threading issues are fixed.
+ https://developer.android.com/reference/androidx/emoji2/text/EmojiCompatInitializer -->
+ <provider
+ android:name="androidx.startup.InitializationProvider"
+ android:authorities="${applicationId}.androidx-startup"
+ android:exported="false"
+ tools:node="merge">
+ <meta-data android:name="androidx.emoji2.text.EmojiCompatInitializer"
+ tools:node="remove" />
+ </provider>
</application>
</manifest>
diff --git a/packages/SystemUI/plugin/Android.bp b/packages/SystemUI/plugin/Android.bp
index fec093b..bb47a2f 100644
--- a/packages/SystemUI/plugin/Android.bp
+++ b/packages/SystemUI/plugin/Android.bp
@@ -34,6 +34,8 @@
// If you add a static lib here, you may need to also add the package to the ClassLoaderFilter
// in PluginInstance. That will ensure that loaded plugins have access to the related classes.
+ // You should also add it to proguard_common.flags so that proguard does not remove the portions
+ // of the library which are used by the plugins but not by systemui itself.
static_libs: [
"androidx.annotation_annotation",
"PluginCoreLib",
diff --git a/packages/SystemUI/proguard_common.flags b/packages/SystemUI/proguard_common.flags
index 1d008cf..02d5510 100644
--- a/packages/SystemUI/proguard_common.flags
+++ b/packages/SystemUI/proguard_common.flags
@@ -62,11 +62,17 @@
-keep class ** extends androidx.preference.PreferenceFragment
-keep class com.android.systemui.tuner.*
-# The plugins subpackage acts as a shared library that might be referenced in
+# The plugins, log & common subpackages act as shared libraries that might be referenced in
# dynamically-loaded plugin APKs.
-keep class com.android.systemui.plugins.** {
*;
}
+-keep class com.android.systemui.log.** {
+ *;
+}
+-keep class com.android.systemui.common.** {
+ *;
+}
-keep class com.android.systemui.fragments.FragmentService$FragmentCreator {
*;
}
diff --git a/packages/SystemUI/res-keyguard/layout/status_bar_mobile_signal_group_inner.xml b/packages/SystemUI/res-keyguard/layout/status_bar_mobile_signal_group_inner.xml
index 29832a0..c85449d0 100644
--- a/packages/SystemUI/res-keyguard/layout/status_bar_mobile_signal_group_inner.xml
+++ b/packages/SystemUI/res-keyguard/layout/status_bar_mobile_signal_group_inner.xml
@@ -78,16 +78,10 @@
android:id="@+id/mobile_roaming"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
+ android:layout_gravity="top|start"
android:src="@drawable/stat_sys_roaming"
android:contentDescription="@string/data_connection_roaming"
android:visibility="gone" />
</FrameLayout>
- <ImageView
- android:id="@+id/mobile_roaming_large"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:src="@drawable/stat_sys_roaming_large"
- android:contentDescription="@string/data_connection_roaming"
- android:visibility="gone" />
</com.android.keyguard.AlphaOptimizedLinearLayout>
</merge>
diff --git a/packages/SystemUI/res/drawable/action_chip_background.xml b/packages/SystemUI/res/drawable/action_chip_background.xml
index 745470f..9492472 100644
--- a/packages/SystemUI/res/drawable/action_chip_background.xml
+++ b/packages/SystemUI/res/drawable/action_chip_background.xml
@@ -20,7 +20,7 @@
android:color="@color/overlay_button_ripple">
<item android:id="@android:id/background">
<shape android:shape="rectangle">
- <solid android:color="?androidprv:attr/colorAccentSecondary"/>
+ <solid android:color="?androidprv:attr/materialColorSecondary"/>
<corners android:radius="@dimen/overlay_button_corner_radius"/>
</shape>
</item>
diff --git a/packages/SystemUI/res/drawable/action_chip_container_background.xml b/packages/SystemUI/res/drawable/action_chip_container_background.xml
index 36083f1..2ee2710 100644
--- a/packages/SystemUI/res/drawable/action_chip_container_background.xml
+++ b/packages/SystemUI/res/drawable/action_chip_container_background.xml
@@ -18,6 +18,6 @@
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
android:shape="rectangle">
- <solid android:color="?androidprv:attr/colorSurface"/>
+ <solid android:color="?androidprv:attr/materialColorSurfaceBright"/>
<corners android:radius="@dimen/overlay_action_container_corner_radius"/>
</shape>
diff --git a/packages/SystemUI/res/drawable/overlay_cancel.xml b/packages/SystemUI/res/drawable/circular_background.xml
similarity index 62%
rename from packages/SystemUI/res/drawable/overlay_cancel.xml
rename to packages/SystemUI/res/drawable/circular_background.xml
index 3fa12dd..4fef0d6 100644
--- a/packages/SystemUI/res/drawable/overlay_cancel.xml
+++ b/packages/SystemUI/res/drawable/circular_background.xml
@@ -16,14 +16,11 @@
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
- android:width="48dp"
- android:height="48dp"
- android:viewportWidth="32.0"
- android:viewportHeight="32.0">
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0">
<path
- android:fillColor="?androidprv:attr/colorAccentTertiary"
- android:pathData="M16,16m-16,0a16,16 0,1 1,32 0a16,16 0,1 1,-32 0"/>
- <path
- android:fillColor="?attr/overlayButtonTextColor"
- android:pathData="M23,10.41L21.59,9 16,14.59 10.41,9 9,10.41 14.59,16 9,21.59 10.41,23 16,17.41 21.59,23 23,21.59 17.41,16z"/>
-</vector>
+ android:fillColor="#ff000000"
+ android:pathData="M12,12m-12,0a12,12 0,1 1,24 0a12,12 0,1 1,-24 0"/>
+ </vector>
diff --git a/packages/SystemUI/res/drawable/ic_qr_code_scanner.xml b/packages/SystemUI/res/drawable/ic_qr_code_scanner.xml
index f79e830..d84fce9 100644
--- a/packages/SystemUI/res/drawable/ic_qr_code_scanner.xml
+++ b/packages/SystemUI/res/drawable/ic_qr_code_scanner.xml
@@ -15,13 +15,12 @@
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="24dp"
- android:height="24dp"
- android:viewportWidth="24"
- android:viewportHeight="24"
- android:tint="?attr/colorControlNormal">
-
- <path
- android:pathData="M3,9H9V3H3V9ZM5,5H7V7H5V5ZM15,3V9H21V3H15ZM19,7H17V5H19V7ZM3,21H9V15H3V21ZM5,17H7V19H5V17ZM13,15V17H11V15V13V11H13V13H15V11H17V13V15H13ZM17,19H21V21H17H15V19V17H17V19ZM19,11H21V17H19V11ZM7,11H9V13H7V11ZM11,19H13V21H11V19ZM5,13H3V11H5V13ZM13,9H11V3H13V9Z"
- android:fillColor="@android:color/white"/>
-</vector>
\ No newline at end of file
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="960"
+ android:viewportHeight="960"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M80,280L80,80L280,80L280,160L160,160L160,280L80,280ZM80,880L80,680L160,680L160,800L280,800L280,880L80,880ZM680,880L680,800L800,800L800,680L880,680L880,880L680,880ZM800,280L800,160L680,160L680,80L880,80L880,280L800,280ZM700,700L760,700L760,760L700,760L700,700ZM700,580L760,580L760,640L700,640L700,580ZM640,640L700,640L700,700L640,700L640,640ZM580,700L640,700L640,760L580,760L580,700ZM520,640L580,640L580,700L520,700L520,640ZM640,520L700,520L700,580L640,580L640,520ZM580,580L640,580L640,640L580,640L580,580ZM520,520L580,520L580,580L520,580L520,520ZM760,200L760,440L520,440L520,200L760,200ZM440,520L440,760L200,760L200,520L440,520ZM440,200L440,440L200,440L200,200L440,200ZM380,700L380,580L260,580L260,700L380,700ZM380,380L380,260L260,260L260,380L380,380ZM700,380L700,260L580,260L580,380L700,380Z"/>
+</vector>
diff --git a/packages/SystemUI/res/drawable/overlay_border.xml b/packages/SystemUI/res/drawable/overlay_border.xml
index c1accdc..a59f923 100644
--- a/packages/SystemUI/res/drawable/overlay_border.xml
+++ b/packages/SystemUI/res/drawable/overlay_border.xml
@@ -18,6 +18,6 @@
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
android:shape="rectangle">
- <solid android:color="?androidprv:attr/colorSurface"/>
- <corners android:radius="24dp"/>
+ <solid android:color="?androidprv:attr/materialColorSurfaceBright"/>
+ <corners android:radius="16dp"/>
</shape>
diff --git a/packages/SystemUI/res/drawable/overlay_button_background.xml b/packages/SystemUI/res/drawable/overlay_button_background.xml
index c045048..4e5b8fb 100644
--- a/packages/SystemUI/res/drawable/overlay_button_background.xml
+++ b/packages/SystemUI/res/drawable/overlay_button_background.xml
@@ -17,12 +17,11 @@
<!-- Button background for activities downstream of overlays
(clipboard text editor, long screenshots) -->
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
android:color="@color/overlay_button_ripple">
<item android:id="@android:id/background">
<inset android:insetTop="4dp" android:insetBottom="4dp">
<shape android:shape="rectangle">
- <solid android:color="?androidprv:attr/colorAccentPrimary"/>
+ <solid android:color="#fff"/>
<corners android:radius="20dp"/>
<size android:height="40dp"/>
</shape>
@@ -31,7 +30,7 @@
<item android:id="@android:id/mask">
<inset android:insetTop="4dp" android:insetBottom="4dp">
<shape android:shape="rectangle">
- <solid android:color="?android:textColorPrimary"/>
+ <solid android:color="#000"/>
<corners android:radius="20dp"/>
<size android:height="40dp"/>
</shape>
diff --git a/packages/SystemUI/res/drawable/overlay_button_outline.xml b/packages/SystemUI/res/drawable/overlay_button_outline.xml
new file mode 100644
index 0000000..4d91503
--- /dev/null
+++ b/packages/SystemUI/res/drawable/overlay_button_outline.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2021 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.
+ -->
+<!-- Button background for activities downstream of overlays
+ (clipboard text editor, long screenshots) -->
+<ripple xmlns:android="http://schemas.android.com/apk/res/android"
+ android:color="@color/overlay_button_ripple">
+ <item android:id="@android:id/background">
+ <inset android:insetTop="4dp" android:insetBottom="4dp">
+ <shape android:shape="rectangle">
+ <solid android:color="@android:color/transparent" />
+ <stroke android:width="1dp" android:color="#fff"/>
+ <corners android:radius="20dp"/>
+ <size android:height="40dp"/>
+ </shape>
+ </inset>
+ </item>
+ <item android:id="@android:id/mask">
+ <inset android:insetTop="4dp" android:insetBottom="4dp">
+ <shape android:shape="rectangle">
+ <solid android:color="#000"/>
+ <corners android:radius="20dp"/>
+ <size android:height="40dp"/>
+ </shape>
+ </inset>
+ </item>
+</ripple>
\ No newline at end of file
diff --git a/packages/SystemUI/res/drawable/overlay_preview_background.xml b/packages/SystemUI/res/drawable/overlay_preview_background.xml
index 5adfaa13..d39d71e 100644
--- a/packages/SystemUI/res/drawable/overlay_preview_background.xml
+++ b/packages/SystemUI/res/drawable/overlay_preview_background.xml
@@ -17,5 +17,6 @@
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
- <corners android:radius="20dp"/>
+ <!-- preview radius should be equal to [overlay border radius - overlay border width] -->
+ <corners android:radius="12dp"/>
</shape>
diff --git a/packages/SystemUI/res/drawable/screenshot_edit_background.xml b/packages/SystemUI/res/drawable/screenshot_edit_background.xml
index a1185a2..07e5aff 100644
--- a/packages/SystemUI/res/drawable/screenshot_edit_background.xml
+++ b/packages/SystemUI/res/drawable/screenshot_edit_background.xml
@@ -20,13 +20,7 @@
android:color="@color/overlay_button_ripple">
<item android:id="@android:id/background">
<shape android:shape="rectangle">
- <solid android:color="?androidprv:attr/colorAccentPrimary"/>
- <corners android:radius="16dp"/>
- </shape>
- </item>
- <item android:id="@android:id/mask">
- <shape android:shape="rectangle">
- <solid android:color="?android:textColorPrimary"/>
+ <solid android:color="?androidprv:attr/materialColorSecondaryFixedDim"/>
<corners android:radius="16dp"/>
</shape>
</item>
diff --git a/packages/SystemUI/res/drawable/stat_sys_roaming.xml b/packages/SystemUI/res/drawable/stat_sys_roaming.xml
index 0dd9f5a..2dd12ca 100644
--- a/packages/SystemUI/res/drawable/stat_sys_roaming.xml
+++ b/packages/SystemUI/res/drawable/stat_sys_roaming.xml
@@ -14,10 +14,10 @@
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="@dimen/signal_icon_size"
- android:height="@dimen/signal_icon_size"
- android:viewportWidth="17"
- android:viewportHeight="17">
+ android:width="@dimen/signal_icon_size_roaming"
+ android:height="@dimen/signal_icon_size_roaming"
+ android:viewportWidth="8"
+ android:viewportHeight="8">
<path
android:fillColor="#FFFFFFFF"
diff --git a/packages/SystemUI/res/layout/app_clips_screenshot.xml b/packages/SystemUI/res/layout/app_clips_screenshot.xml
index 5155b77..2459eea 100644
--- a/packages/SystemUI/res/layout/app_clips_screenshot.xml
+++ b/packages/SystemUI/res/layout/app_clips_screenshot.xml
@@ -87,19 +87,4 @@
tools:background="?android:colorBackground"
tools:minHeight="100dp"
tools:minWidth="100dp" />
-
- <com.android.systemui.screenshot.MagnifierView
- android:id="@+id/magnifier"
- android:visibility="invisible"
- android:layout_width="200dp"
- android:layout_height="200dp"
- android:elevation="2dp"
- app:layout_constraintTop_toTopOf="@id/preview"
- app:layout_constraintLeft_toLeftOf="parent"
- app:handleThickness="@dimen/screenshot_crop_handle_thickness"
- app:handleColor="?android:attr/colorAccent"
- app:scrimColor="?android:colorBackgroundFloating"
- app:scrimAlpha="128"
- app:borderThickness="4dp"
- app:borderColor="#fff" />
</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/packages/SystemUI/res/layout/auth_biometric_contents.xml b/packages/SystemUI/res/layout/auth_biometric_contents.xml
index be76405..b3b40f3 100644
--- a/packages/SystemUI/res/layout/auth_biometric_contents.xml
+++ b/packages/SystemUI/res/layout/auth_biometric_contents.xml
@@ -24,6 +24,7 @@
android:singleLine="true"
android:marqueeRepeatLimit="1"
android:ellipsize="marquee"
+ android:importantForAccessibility="no"
style="@style/TextAppearance.AuthCredential.Title"/>
<TextView
@@ -34,6 +35,7 @@
android:singleLine="true"
android:marqueeRepeatLimit="1"
android:ellipsize="marquee"
+ android:importantForAccessibility="no"
style="@style/TextAppearance.AuthCredential.Subtitle"/>
<TextView
diff --git a/packages/SystemUI/res/layout/clipboard_edit_text_activity.xml b/packages/SystemUI/res/layout/clipboard_edit_text_activity.xml
index cb7f40f..ae24313 100644
--- a/packages/SystemUI/res/layout/clipboard_edit_text_activity.xml
+++ b/packages/SystemUI/res/layout/clipboard_edit_text_activity.xml
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
@@ -15,6 +16,8 @@
android:paddingHorizontal="16dp"
android:background="@drawable/overlay_button_background"
android:text="@string/clipboard_edit_text_done"
+ android:backgroundTint="?androidprv:attr/materialColorPrimary"
+ android:textColor="?androidprv:attr/materialColorOnPrimary"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
diff --git a/packages/SystemUI/res/layout/clipboard_overlay.xml b/packages/SystemUI/res/layout/clipboard_overlay.xml
index 297cf2b..2500769 100644
--- a/packages/SystemUI/res/layout/clipboard_overlay.xml
+++ b/packages/SystemUI/res/layout/clipboard_overlay.xml
@@ -179,6 +179,10 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="@dimen/overlay_dismiss_button_margin"
- android:src="@drawable/overlay_cancel"/>
+ android:background="@drawable/circular_background"
+ android:backgroundTint="?androidprv:attr/materialColorPrimaryFixedDim"
+ android:tint="?androidprv:attr/materialColorOnPrimaryFixed"
+ android:padding="4dp"
+ android:src="@drawable/ic_close"/>
</FrameLayout>
</com.android.systemui.clipboardoverlay.ClipboardOverlayView>
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/dream_overlay_container.xml b/packages/SystemUI/res/layout/dream_overlay_container.xml
index ae0a937..19fb874 100644
--- a/packages/SystemUI/res/layout/dream_overlay_container.xml
+++ b/packages/SystemUI/res/layout/dream_overlay_container.xml
@@ -25,10 +25,6 @@
android:id="@+id/dream_overlay_content"
android:layout_width="match_parent"
android:layout_height="0dp"
- android:paddingTop="@dimen/dream_overlay_container_padding_top"
- android:paddingEnd="@dimen/dream_overlay_container_padding_end"
- android:paddingBottom="@dimen/dream_overlay_container_padding_bottom"
- android:paddingStart="@dimen/dream_overlay_container_padding_start"
android:clipToPadding="false"
android:clipChildren="false"
app:layout_constraintTop_toBottomOf="@id/dream_overlay_status_bar"
diff --git a/packages/SystemUI/res/layout/keyboard_shortcuts_search_view.xml b/packages/SystemUI/res/layout/keyboard_shortcuts_search_view.xml
index 8a66f50..13425c9 100644
--- a/packages/SystemUI/res/layout/keyboard_shortcuts_search_view.xml
+++ b/packages/SystemUI/res/layout/keyboard_shortcuts_search_view.xml
@@ -34,6 +34,7 @@
android:layout_height="wrap_content">
<EditText
android:id="@+id/keyboard_shortcuts_search"
+ android:layout_gravity="center_vertical|start"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
@@ -54,58 +55,62 @@
<ImageView
android:id="@+id/keyboard_shortcuts_search_cancel"
+ android:layout_gravity="center_vertical|end"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_gravity="end"
- android:layout_marginTop="24dp"
- android:layout_marginBottom="24dp"
android:layout_marginEnd="49dp"
android:padding="16dp"
android:contentDescription="@string/keyboard_shortcut_clear_text"
android:src="@drawable/ic_shortcutlist_search_button_cancel" />
</FrameLayout>
- <LinearLayout
+ <HorizontalScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:orientation="horizontal">
- <View
- android:layout_width="0dp"
- android:layout_height="0dp"
- android:layout_marginStart="37dp"/>
-
- <Button
- android:id="@+id/shortcut_system"
- android:layout_width="120dp"
+ android:scrollbars="none">
+ <LinearLayout
+ android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginStart="12dp"
- style="@style/ShortCutButton"
- android:text="@string/keyboard_shortcut_search_category_system"/>
+ android:gravity="center_vertical"
+ android:orientation="horizontal">
+ <View
+ android:layout_width="0dp"
+ android:layout_height="0dp"
+ android:layout_marginStart="37dp"/>
- <Button
- android:id="@+id/shortcut_input"
- android:layout_width="120dp"
- android:layout_height="wrap_content"
- android:layout_marginStart="12dp"
- style="@style/ShortCutButton"
- android:text="@string/keyboard_shortcut_search_category_input"/>
+ <Button
+ android:id="@+id/shortcut_system"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="12dp"
+ style="@style/ShortCutButton"
+ android:text="@string/keyboard_shortcut_search_category_system"/>
- <Button
- android:id="@+id/shortcut_open_apps"
- android:layout_width="120dp"
- android:layout_height="wrap_content"
- android:layout_marginStart="12dp"
- style="@style/ShortCutButton"
- android:text="@string/keyboard_shortcut_search_category_open_apps"/>
+ <Button
+ android:id="@+id/shortcut_input"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="12dp"
+ style="@style/ShortCutButton"
+ android:text="@string/keyboard_shortcut_search_category_input"/>
- <Button
- android:id="@+id/shortcut_specific_app"
- android:layout_width="120dp"
- android:layout_height="wrap_content"
- android:layout_marginStart="12dp"
- style="@style/ShortCutButton"
- android:text="@string/keyboard_shortcut_search_category_current_app"/>
- </LinearLayout>
+ <Button
+ android:id="@+id/shortcut_open_apps"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="12dp"
+ style="@style/ShortCutButton"
+ android:text="@string/keyboard_shortcut_search_category_open_apps"/>
+
+ <Button
+ android:id="@+id/shortcut_specific_app"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="12dp"
+ style="@style/ShortCutButton"
+ android:text="@string/keyboard_shortcut_search_category_current_app"/>
+ </LinearLayout>
+ </HorizontalScrollView>
<TextView
android:id="@+id/shortcut_search_no_result"
diff --git a/packages/SystemUI/res/layout/long_screenshot.xml b/packages/SystemUI/res/layout/long_screenshot.xml
index 2927d6b..8a19c2e 100644
--- a/packages/SystemUI/res/layout/long_screenshot.xml
+++ b/packages/SystemUI/res/layout/long_screenshot.xml
@@ -16,9 +16,9 @@
-->
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
- android:background="?android:colorBackgroundFloating"
android:id="@+id/root"
android:layout_width="match_parent"
android:layout_height="match_parent">
@@ -32,7 +32,8 @@
android:layout_marginStart="8dp"
android:layout_marginTop="@dimen/long_screenshot_action_bar_top_margin"
android:background="@drawable/overlay_button_background"
- android:textColor="?android:textColorSecondary"
+ android:backgroundTint="?androidprv:attr/materialColorPrimary"
+ android:textColor="?androidprv:attr/materialColorOnPrimary"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@id/preview" />
@@ -45,8 +46,9 @@
android:text="@android:string/cancel"
android:layout_marginStart="6dp"
android:layout_marginTop="@dimen/long_screenshot_action_bar_top_margin"
- android:background="@drawable/overlay_button_background"
- android:textColor="?android:textColorSecondary"
+ android:background="@drawable/overlay_button_outline"
+ android:backgroundTint="?androidprv:attr/materialColorPrimary"
+ android:textColor="?androidprv:attr/materialColorOnSurface"
app:layout_constraintStart_toEndOf="@id/save"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@id/preview"
@@ -55,7 +57,7 @@
<ImageButton
android:id="@+id/share"
style="@android:style/Widget.Material.Button.Borderless"
- android:tint="?android:textColorPrimary"
+ android:tint="?androidprv:attr/materialColorOnSurface"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_marginEnd="8dp"
@@ -112,10 +114,10 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:handleThickness="@dimen/screenshot_crop_handle_thickness"
- app:handleColor="?android:attr/colorAccent"
- app:scrimColor="?android:colorBackgroundFloating"
+ app:handleColor="?androidprv:attr/materialColorSecondary"
+ app:scrimColor="?androidprv:attr/materialColorSurfaceContainer"
app:scrimAlpha="128"
- app:containerBackgroundColor="?android:colorBackgroundFloating"
+ app:containerBackgroundColor="?androidprv:attr/materialColorSurfaceContainer"
tools:background="?android:colorBackground"
tools:minHeight="100dp"
tools:minWidth="100dp" />
@@ -129,12 +131,11 @@
app:layout_constraintTop_toTopOf="@id/preview"
app:layout_constraintLeft_toLeftOf="parent"
app:handleThickness="@dimen/screenshot_crop_handle_thickness"
- app:handleColor="?android:attr/colorAccent"
- app:scrimColor="?android:colorBackgroundFloating"
+ app:handleColor="?androidprv:attr/materialColorSecondary"
+ app:scrimColor="?androidprv:attr/materialColorSurfaceContainer"
app:scrimAlpha="128"
app:borderThickness="4dp"
- app:borderColor="#fff"
- />
+ app:borderColor="?androidprv:attr/materialColorSurfaceBright" />
<ImageButton
android:id="@+id/edit"
@@ -146,12 +147,11 @@
android:background="@drawable/screenshot_edit_background"
android:src="@drawable/ic_screenshot_edit"
android:contentDescription="@string/screenshot_edit_label"
- android:tint="?android:textColorSecondary"
+ android:tint="?androidprv:attr/materialColorOnSecondaryFixed"
android:padding="16dp"
android:scaleType="fitCenter"
app:layout_constraintBottom_toBottomOf="parent"
- app:layout_constraintEnd_toEndOf="parent"
- />
+ app:layout_constraintEnd_toEndOf="parent"/>
<ImageView
android:id="@+id/transition"
@@ -160,7 +160,6 @@
app:layout_constraintTop_toTopOf="@id/preview"
app:layout_constraintLeft_toLeftOf="parent"
android:scaleType="centerCrop"
- android:visibility="invisible"
- />
+ android:visibility="invisible" />
</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/packages/SystemUI/res/layout/media_session_end_dialog.xml b/packages/SystemUI/res/layout/media_session_end_dialog.xml
new file mode 100644
index 0000000..e1050f6
--- /dev/null
+++ b/packages/SystemUI/res/layout/media_session_end_dialog.xml
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ 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.
+ -->
+
+<LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
+ android:id="@+id/end_session_dialog"
+ android:layout_width="@dimen/large_dialog_width"
+ android:layout_height="wrap_content"
+ android:orientation="vertical">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ style="@style/Widget.SliceView.Panel"
+ android:gravity="center_vertical|center_horizontal"
+ android:layout_marginTop="@dimen/dialog_top_padding"
+ android:layout_marginBottom="@dimen/dialog_bottom_padding"
+ android:orientation="vertical">
+
+ <ImageView
+ android:id="@+id/end_icon"
+ android:gravity="center_vertical|center_horizontal"
+ android:layout_width="36dp"
+ android:layout_height="36dp"
+ android:importantForAccessibility="no"/>
+
+ <TextView
+ android:id="@+id/end_session_dialog_title"
+ android:text="@string/media_output_end_session_dialog_summary"
+ android:layout_marginTop="16dp"
+ android:layout_marginBottom="@dimen/dialog_side_padding"
+ android:layout_marginStart="@dimen/dialog_side_padding"
+ android:layout_marginEnd="@dimen/dialog_bottom_padding"
+ android:ellipsize="end"
+ android:gravity="center_vertical|center_horizontal"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textColor="?android:attr/textColorPrimary"
+ android:fontFamily="@*android:string/config_headlineFontFamilyMedium"
+ android:textSize="24sp"/>
+ </LinearLayout>
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:gravity="end|center_vertical"
+ android:layout_marginTop="8dp"
+ android:layout_marginStart="@dimen/dialog_side_padding"
+ android:layout_marginEnd="@dimen/dialog_side_padding"
+ android:layout_marginBottom="@dimen/dialog_bottom_padding"
+ android:orientation="horizontal">
+ <Button
+ android:id="@+id/cancel_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginEnd="8dp"
+ android:text="@string/cancel"
+ android:ellipsize="end"
+ android:layout_gravity="end|center_vertical"
+ android:singleLine="true"
+ style="@style/Widget.Dialog.Button.BorderButton"
+ android:clickable="true"
+ android:focusable="true"/>
+ <Button
+ android:id="@+id/stop_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="end|center_vertical"
+ android:text="@string/media_output_end_session_dialog_stop"
+ style="@style/Widget.Dialog.Button"
+ android:singleLine="true"
+ android:ellipsize="end"
+ android:clickable="true"
+ android:focusable="true"/>
+ </LinearLayout>
+</LinearLayout>
diff --git a/packages/SystemUI/res/layout/mobile_signal_group.xml b/packages/SystemUI/res/layout/mobile_signal_group.xml
index 5552020..bfd079b 100644
--- a/packages/SystemUI/res/layout/mobile_signal_group.xml
+++ b/packages/SystemUI/res/layout/mobile_signal_group.xml
@@ -77,11 +77,4 @@
android:contentDescription="@string/data_connection_roaming"
android:visibility="gone" />
</FrameLayout>
- <ImageView
- android:id="@+id/mobile_roaming_large"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:src="@drawable/stat_sys_roaming_large"
- android:contentDescription="@string/data_connection_roaming"
- android:visibility="gone" />
</com.android.keyguard.AlphaOptimizedLinearLayout>
diff --git a/packages/SystemUI/res/layout/overlay_action_chip.xml b/packages/SystemUI/res/layout/overlay_action_chip.xml
index e0c20ff..e7c382f 100644
--- a/packages/SystemUI/res/layout/overlay_action_chip.xml
+++ b/packages/SystemUI/res/layout/overlay_action_chip.xml
@@ -16,12 +16,12 @@
-->
<com.android.systemui.screenshot.OverlayActionChip
xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
android:id="@+id/overlay_action_chip"
android:theme="@style/FloatingOverlay"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/overlay_action_chip_margin_start"
- android:paddingVertical="@dimen/overlay_action_chip_margin_vertical"
android:layout_gravity="center"
android:gravity="center"
android:alpha="0.0">
@@ -33,7 +33,7 @@
android:gravity="center">
<ImageView
android:id="@+id/overlay_action_chip_icon"
- android:tint="?attr/overlayButtonTextColor"
+ android:tint="?androidprv:attr/materialColorOnSecondary"
android:layout_width="@dimen/overlay_action_chip_icon_size"
android:layout_height="@dimen/overlay_action_chip_icon_size"/>
<TextView
@@ -42,6 +42,6 @@
android:layout_height="wrap_content"
android:fontFamily="@*android:string/config_headlineFontFamilyMedium"
android:textSize="@dimen/overlay_action_chip_text_size"
- android:textColor="?attr/overlayButtonTextColor"/>
+ android:textColor="?androidprv:attr/materialColorOnSecondary"/>
</LinearLayout>
</com.android.systemui.screenshot.OverlayActionChip>
diff --git a/packages/SystemUI/res/layout/screenshot_static.xml b/packages/SystemUI/res/layout/screenshot_static.xml
index 7e9202c..3b728a9 100644
--- a/packages/SystemUI/res/layout/screenshot_static.xml
+++ b/packages/SystemUI/res/layout/screenshot_static.xml
@@ -16,6 +16,7 @@
-->
<com.android.systemui.screenshot.DraggableConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
@@ -68,7 +69,7 @@
android:layout_marginTop="@dimen/overlay_border_width_neg"
android:layout_marginEnd="@dimen/overlay_border_width_neg"
android:layout_marginBottom="@dimen/overlay_preview_container_margin"
- android:elevation="7dp"
+ android:elevation="8dp"
android:alpha="0"
android:background="@drawable/overlay_border"
app:layout_constraintStart_toStartOf="@id/actions_container_background"
@@ -83,7 +84,7 @@
android:layout_marginStart="@dimen/overlay_border_width"
android:layout_marginBottom="@dimen/overlay_border_width"
android:layout_gravity="center"
- android:elevation="7dp"
+ android:elevation="8dp"
android:contentDescription="@string/screenshot_edit_description"
android:scaleType="fitEnd"
android:background="@drawable/overlay_preview_background"
@@ -93,17 +94,17 @@
app:layout_constraintBottom_toBottomOf="@id/screenshot_preview_border"/>
<ImageView
android:id="@+id/screenshot_badge"
- android:layout_width="48dp"
- android:layout_height="48dp"
+ android:layout_width="56dp"
+ android:layout_height="56dp"
android:visibility="gone"
- android:elevation="8dp"
+ android:elevation="9dp"
app:layout_constraintBottom_toBottomOf="@id/screenshot_preview_border"
app:layout_constraintEnd_toEndOf="@id/screenshot_preview_border"/>
<FrameLayout
android:id="@+id/screenshot_dismiss_button"
android:layout_width="@dimen/overlay_dismiss_button_tappable_size"
android:layout_height="@dimen/overlay_dismiss_button_tappable_size"
- android:elevation="10dp"
+ android:elevation="11dp"
android:visibility="gone"
app:layout_constraintStart_toEndOf="@id/screenshot_preview"
app:layout_constraintEnd_toEndOf="@id/screenshot_preview"
@@ -115,7 +116,11 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="@dimen/overlay_dismiss_button_margin"
- android:src="@drawable/overlay_cancel"/>
+ android:background="@drawable/circular_background"
+ android:backgroundTint="?androidprv:attr/materialColorPrimary"
+ android:tint="?androidprv:attr/materialColorOnPrimary"
+ android:padding="4dp"
+ android:src="@drawable/ic_close"/>
</FrameLayout>
<ImageView
android:id="@+id/screenshot_scrollable_preview"
@@ -150,8 +155,7 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintWidth_max="450dp"
- app:layout_constraintHorizontal_bias="0"
- >
+ app:layout_constraintHorizontal_bias="0">
<include layout="@layout/screenshot_work_profile_first_run" />
<include layout="@layout/screenshot_detection_notice" />
</FrameLayout>
diff --git a/packages/SystemUI/res/layout/screenshot_work_profile_first_run.xml b/packages/SystemUI/res/layout/screenshot_work_profile_first_run.xml
index 392d845..78cd718 100644
--- a/packages/SystemUI/res/layout/screenshot_work_profile_first_run.xml
+++ b/packages/SystemUI/res/layout/screenshot_work_profile_first_run.xml
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
android:id="@+id/work_profile_first_run"
android:layout_height="wrap_content"
android:layout_width="match_parent"
@@ -33,9 +34,13 @@
android:layout_height="@dimen/overlay_dismiss_button_tappable_size"
android:contentDescription="@string/screenshot_dismiss_work_profile">
<ImageView
- android:layout_width="24dp"
- android:layout_height="24dp"
+ android:layout_width="16dp"
+ android:layout_height="16dp"
android:layout_gravity="center"
- android:src="@drawable/overlay_cancel"/>
+ android:background="@drawable/circular_background"
+ android:backgroundTint="?androidprv:attr/materialColorSurfaceContainerHigh"
+ android:tint="?androidprv:attr/materialColorOnSurface"
+ android:padding="2dp"
+ android:src="@drawable/ic_close"/>
</FrameLayout>
</LinearLayout>
diff --git a/packages/SystemUI/res/layout/udfps_keyguard_preview.xml b/packages/SystemUI/res/layout/udfps_keyguard_preview.xml
new file mode 100644
index 0000000..c068b7b
--- /dev/null
+++ b/packages/SystemUI/res/layout/udfps_keyguard_preview.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ 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.
+ -->
+
+<androidx.constraintlayout.widget.ConstraintLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:contentDescription="@string/accessibility_fingerprint_label"
+ android:background="@drawable/fingerprint_bg">
+
+ <!-- LockScreen fingerprint icon from 0 stroke width to full width -->
+ <com.airbnb.lottie.LottieAnimationView
+ android:layout_width="0dp"
+ android:layout_height="0dp"
+ android:scaleType="centerCrop"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintHeight_percent="0.5"
+ app:layout_constraintWidth_percent="0.5"
+ app:lottie_autoPlay="false"
+ app:lottie_loop="false"
+ app:lottie_progress="1.0"
+ app:lottie_colorFilter="?android:attr/textColorPrimary"
+ app:lottie_rawRes="@raw/udfps_lockscreen_fp" />
+</androidx.constraintlayout.widget.ConstraintLayout >
\ No newline at end of file
diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml
index 1252695..26d6875 100644
--- a/packages/SystemUI/res/values/config.xml
+++ b/packages/SystemUI/res/values/config.xml
@@ -892,5 +892,5 @@
<!-- Time (in ms) to delay the bouncer views from showing when passive auth may be used for
device entry. -->
- <integer name="primary_bouncer_passive_auth_delay">250</integer>
+ <integer name="primary_bouncer_passive_auth_delay">500</integer>
</resources>
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index aff0e80..bf0b8a6 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -342,23 +342,22 @@
<dimen name="screenshot_crop_handle_thickness">3dp</dimen>
- <dimen name="long_screenshot_action_bar_top_margin">8dp</dimen>
+ <dimen name="long_screenshot_action_bar_top_margin">4dp</dimen>
<!-- Dimensions shared between "overlays" (clipboard and screenshot preview UIs) -->
<!-- Constrained size of the floating overlay preview -->
<dimen name="overlay_x_scale">80dp</dimen>
<!-- Radius of the chip background on floating overlay actions -->
- <dimen name="overlay_button_corner_radius">8dp</dimen>
+ <dimen name="overlay_button_corner_radius">16dp</dimen>
<!-- Margin between successive chips -->
<dimen name="overlay_action_chip_margin_start">8dp</dimen>
- <!-- Padding to make tappable chip height 48dp (18+11+11+4+4) -->
- <dimen name="overlay_action_chip_margin_vertical">4dp</dimen>
- <dimen name="overlay_action_chip_padding_vertical">11dp</dimen>
- <dimen name="overlay_action_chip_icon_size">18sp</dimen>
+ <dimen name="overlay_action_chip_padding_vertical">12dp</dimen>
+ <dimen name="overlay_action_chip_icon_size">24sp</dimen>
<!-- Padding on each side of the icon for icon-only chips -->
- <dimen name="overlay_action_chip_icon_only_padding_horizontal">14dp</dimen>
+ <dimen name="overlay_action_chip_icon_only_padding_horizontal">12dp</dimen>
<!-- Padding at the edges of the chip for icon-and-text chips -->
- <dimen name="overlay_action_chip_padding_horizontal">12dp</dimen>
+ <dimen name="overlay_action_chip_padding_start">12dp</dimen>
+ <dimen name="overlay_action_chip_padding_end">16dp</dimen>
<!-- Spacing between chip icon and chip text -->
<dimen name="overlay_action_chip_spacing">8dp</dimen>
<dimen name="overlay_action_chip_text_size">14sp</dimen>
@@ -368,8 +367,8 @@
<dimen name="overlay_action_container_margin_horizontal">8dp</dimen>
<dimen name="overlay_action_container_margin_bottom">6dp</dimen>
<dimen name="overlay_bg_protection_height">242dp</dimen>
- <dimen name="overlay_action_container_corner_radius">18dp</dimen>
- <dimen name="overlay_action_container_padding_vertical">4dp</dimen>
+ <dimen name="overlay_action_container_corner_radius">20dp</dimen>
+ <dimen name="overlay_action_container_padding_vertical">8dp</dimen>
<dimen name="overlay_action_container_padding_right">8dp</dimen>
<dimen name="overlay_action_container_padding_end">8dp</dimen>
<dimen name="overlay_dismiss_button_tappable_size">48dp</dimen>
diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml
index c57fef1..cbc73fa 100644
--- a/packages/SystemUI/res/values/strings.xml
+++ b/packages/SystemUI/res/values/strings.xml
@@ -1312,9 +1312,17 @@
<string name="volume_panel_dialog_settings_button">Settings</string>
<!-- Title for notification after audio lowers -->
- <string name="csd_lowered_title" product="default">Lowered to safer volume</string>
+ <string name="csd_lowered_title" product="default">Volume lowered to safer level</string>
<!-- Message shown in notification after system lowers audio -->
- <string name="csd_system_lowered_text" product="default">The volume has been high for longer than recommended</string>
+ <string name="csd_system_lowered_text" product="default">Headphone volume has been high for longer than recommended</string>
+ <!-- Message shown in notification after system lowers audio after 500% of
+ sound dosage is reached.
+ -->
+ <string name="csd_500_system_lowered_text" product="default">Headphone volume has exceeded the safe limit for this week</string>
+ <!-- Message for sound dose warning dialog button to keep listening -->
+ <string name="csd_button_keep_listening" product="default">Keep listening</string>
+ <!-- Message for sound dose warning dialog button to lower volume -->
+ <string name="csd_button_lower_volume" product="default">Lower volume</string>
<!-- content description for audio output chooser [CHAR LIMIT=NONE]-->
@@ -2684,6 +2692,10 @@
<string name="media_output_group_title_speakers_and_displays">Speakers & Displays</string>
<!-- Title for Suggested Devices group. [CHAR LIMIT=NONE] -->
<string name="media_output_group_title_suggested_device">Suggested Devices</string>
+ <!-- Summary for end session dialog. [CHAR LIMIT=NONE] -->
+ <string name="media_output_end_session_dialog_summary">Stop your shared session to move media to another device</string>
+ <!-- Button text for stopping session [CHAR LIMIT=60] -->
+ <string name="media_output_end_session_dialog_stop">Stop</string>
<!-- Media Output Broadcast Dialog -->
diff --git a/packages/SystemUI/res/values/styles.xml b/packages/SystemUI/res/values/styles.xml
index 9d0cc11..cee2135 100644
--- a/packages/SystemUI/res/values/styles.xml
+++ b/packages/SystemUI/res/values/styles.xml
@@ -782,10 +782,12 @@
</style>
<style name="LongScreenshotActivity" parent="@android:style/Theme.DeviceDefault.DayNight">
+ <item name="android:colorBackground">?androidprv:attr/materialColorSurfaceContainer</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowLightStatusBar">true</item>
<item name="android:windowLightNavigationBar">true</item>
- <item name="android:navigationBarColor">?android:attr/colorBackgroundFloating</item>
+ <item name="android:statusBarColor">?androidprv:attr/materialColorSurfaceContainer</item>
+ <item name="android:navigationBarColor">?androidprv:attr/materialColorSurfaceContainerHighest</item>
<item name="android:windowActivityTransitions">true</item>
</style>
diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/plugins/PluginInstance.java b/packages/SystemUI/shared/src/com/android/systemui/shared/plugins/PluginInstance.java
index 4a66562..9a9a242 100644
--- a/packages/SystemUI/shared/src/com/android/systemui/shared/plugins/PluginInstance.java
+++ b/packages/SystemUI/shared/src/com/android/systemui/shared/plugins/PluginInstance.java
@@ -230,7 +230,10 @@
private ClassLoader getParentClassLoader(ClassLoader baseClassLoader) {
return new PluginManagerImpl.ClassLoaderFilter(
- baseClassLoader, "com.android.systemui.log", "com.android.systemui.plugin");
+ baseClassLoader,
+ "com.android.systemui.common",
+ "com.android.systemui.log",
+ "com.android.systemui.plugin");
}
/** Returns class loader specific for the given plugin. */
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java
index d8bf570..676f342 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java
@@ -179,6 +179,20 @@
}
/**
+ * Set alpha directly to mView will clip clock, so we set alpha to clock face instead
+ */
+ public void setAlpha(float alpha) {
+ ClockController clock = getClock();
+ if (clock != null) {
+ clock.getLargeClock().getView().setAlpha(alpha);
+ clock.getSmallClock().getView().setAlpha(alpha);
+ }
+ if (mStatusArea != null) {
+ mStatusArea.setAlpha(alpha);
+ }
+ }
+
+ /**
* Attach the controller to the view it relates to.
*/
@Override
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardPINView.java b/packages/SystemUI/src/com/android/keyguard/KeyguardPINView.java
index 0982030..58807e4 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardPINView.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardPINView.java
@@ -16,6 +16,7 @@
package com.android.keyguard;
+import static com.android.internal.jank.InteractionJankMonitor.CUJ_LOCKSCREEN_PIN_APPEAR;
import static com.android.internal.jank.InteractionJankMonitor.CUJ_LOCKSCREEN_PIN_DISAPPEAR;
import static com.android.systemui.statusbar.policy.DevicePostureController.DEVICE_POSTURE_HALF_OPENED;
import static com.android.systemui.statusbar.policy.DevicePostureController.DEVICE_POSTURE_UNKNOWN;
@@ -184,6 +185,7 @@
}
mAppearAnimator.setDuration(ANIMATION_DURATION);
mAppearAnimator.addUpdateListener(animation -> animate(animation.getAnimatedFraction()));
+ mAppearAnimator.addListener(getAnimationListener(CUJ_LOCKSCREEN_PIN_APPEAR));
mAppearAnimator.start();
}
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java
index 693268d..1cbcb9d 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java
@@ -264,8 +264,7 @@
*/
@Override
public void finish(boolean strongAuth, int targetUserId) {
- if (mFeatureFlags.isEnabled(Flags.PREVENT_BYPASS_KEYGUARD)
- && !mKeyguardStateController.canDismissLockScreen() && !strongAuth) {
+ if (!mKeyguardStateController.canDismissLockScreen() && !strongAuth) {
Log.e(TAG,
"Tried to dismiss keyguard when lockscreen is not dismissible and user "
+ "was not authenticated with a primary security method "
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardStatusView.java b/packages/SystemUI/src/com/android/keyguard/KeyguardStatusView.java
index d8e1eb0f..2313609 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardStatusView.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardStatusView.java
@@ -135,4 +135,31 @@
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
Trace.endSection();
}
+
+ /**
+ * Clock content will be clipped when goes beyond bounds,
+ * so we setAlpha for all views except clock
+ */
+ public void setAlpha(float alpha, boolean excludeClock) {
+ if (!excludeClock) {
+ setAlpha(alpha);
+ return;
+ }
+ if (alpha == 1 || alpha == 0) {
+ setAlpha(alpha);
+ }
+ for (int i = 0; i < getChildCount(); i++) {
+ View child = getChildAt(i);
+ if (child == mStatusViewContainer) {
+ for (int j = 0; j < mStatusViewContainer.getChildCount(); j++) {
+ View innerChild = mStatusViewContainer.getChildAt(j);
+ if (innerChild != mClockView) {
+ innerChild.setAlpha(alpha);
+ }
+ }
+ } else {
+ child.setAlpha(alpha);
+ }
+ }
+ }
}
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardStatusViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardStatusViewController.java
index 794eeda..af47466 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardStatusViewController.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardStatusViewController.java
@@ -180,7 +180,8 @@
*/
public void setAlpha(float alpha) {
if (!mKeyguardVisibilityHelper.isVisibilityAnimating()) {
- mView.setAlpha(alpha);
+ mView.setAlpha(alpha, true);
+ mKeyguardClockSwitchController.setAlpha(alpha);
}
}
diff --git a/packages/SystemUI/src/com/android/keyguard/logging/TrustRepositoryLogger.kt b/packages/SystemUI/src/com/android/keyguard/logging/TrustRepositoryLogger.kt
index daafea8..f05152a 100644
--- a/packages/SystemUI/src/com/android/keyguard/logging/TrustRepositoryLogger.kt
+++ b/packages/SystemUI/src/com/android/keyguard/logging/TrustRepositoryLogger.kt
@@ -17,9 +17,11 @@
package com.android.keyguard.logging
import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.keyguard.shared.model.TrustManagedModel
import com.android.systemui.keyguard.shared.model.TrustModel
import com.android.systemui.log.LogBuffer
import com.android.systemui.log.LogLevel
+import com.android.systemui.log.LogLevel.DEBUG
import com.android.systemui.log.dagger.KeyguardUpdateMonitorLog
import javax.inject.Inject
@@ -39,7 +41,7 @@
) {
logBuffer.log(
TAG,
- LogLevel.DEBUG,
+ DEBUG,
{
bool1 = enabled
bool2 = newlyUnlocked
@@ -65,7 +67,7 @@
fun trustModelEmitted(value: TrustModel) {
logBuffer.log(
TAG,
- LogLevel.DEBUG,
+ DEBUG,
{
int1 = value.userId
bool1 = value.isTrusted
@@ -77,12 +79,40 @@
fun isCurrentUserTrusted(isCurrentUserTrusted: Boolean) {
logBuffer.log(
TAG,
- LogLevel.DEBUG,
+ DEBUG,
{ bool1 = isCurrentUserTrusted },
{ "isCurrentUserTrusted emitted: $bool1" }
)
}
+ fun isCurrentUserTrustManaged(isTrustManaged: Boolean) {
+ logBuffer.log(TAG, DEBUG, { bool1 = isTrustManaged }, { "isTrustManaged emitted: $bool1" })
+ }
+
+ fun onTrustManagedChanged(trustManaged: Boolean, userId: Int) {
+ logBuffer.log(
+ TAG,
+ DEBUG,
+ {
+ bool1 = trustManaged
+ int1 = userId
+ },
+ { "onTrustManagedChanged isTrustManaged: $bool1 for user: $int1" }
+ )
+ }
+
+ fun trustManagedModelEmitted(it: TrustManagedModel) {
+ logBuffer.log(
+ TAG,
+ DEBUG,
+ {
+ bool1 = it.isTrustManaged
+ int1 = it.userId
+ },
+ { "trustManagedModel emitted: userId: $int1, isTrustManaged: $bool1" }
+ )
+ }
+
companion object {
const val TAG = "TrustRepositoryLog"
}
diff --git a/packages/SystemUI/src/com/android/systemui/Dependency.java b/packages/SystemUI/src/com/android/systemui/Dependency.java
index aade71a..be5bb07 100644
--- a/packages/SystemUI/src/com/android/systemui/Dependency.java
+++ b/packages/SystemUI/src/com/android/systemui/Dependency.java
@@ -320,7 +320,6 @@
@Inject @Main Lazy<Looper> mMainLooper;
@Inject @Main Lazy<Handler> mMainHandler;
@Inject @Named(TIME_TICK_HANDLER_NAME) Lazy<Handler> mTimeTickHandler;
- @Nullable
@Inject @Named(LEAK_REPORT_EMAIL_NAME) Lazy<String> mLeakReportEmail;
@Inject @Main Lazy<Executor> mMainExecutor;
@Inject @Background Lazy<Executor> mBackgroundExecutor;
diff --git a/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java b/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java
index 8578845..70c39df 100644
--- a/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java
+++ b/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java
@@ -31,9 +31,6 @@
import android.os.SystemProperties;
import android.os.Trace;
import android.os.UserHandle;
-import android.util.ArrayMap;
-import android.util.Dumpable;
-import android.util.DumpableContainer;
import android.util.Log;
import android.util.TimingsTraceLog;
import android.view.SurfaceControl;
@@ -57,18 +54,12 @@
* Application class for SystemUI.
*/
public class SystemUIApplication extends Application implements
- SystemUIAppComponentFactory.ContextInitializer, DumpableContainer {
+ SystemUIAppComponentFactory.ContextInitializer {
public static final String TAG = "SystemUIService";
private static final boolean DEBUG = false;
private BootCompleteCacheImpl mBootCompleteCache;
- private DumpManager mDumpManager;
-
- /**
- * Map of dumpables added externally.
- */
- private final ArrayMap<String, Dumpable> mDumpables = new ArrayMap<>();
/**
* Hold a reference on the stuff we start.
@@ -233,7 +224,7 @@
}
}
- mDumpManager = mSysUIComponent.createDumpManager();
+ DumpManager dumpManager = mSysUIComponent.createDumpManager();
Log.v(TAG, "Starting SystemUI services for user " +
Process.myUserHandle().getIdentifier() + ".");
@@ -267,7 +258,7 @@
notifyBootCompleted(mServices[i]);
}
- mDumpManager.registerDumpable(mServices[i].getClass().getName(), mServices[i]);
+ dumpManager.registerDumpable(mServices[i].getClass().getName(), mServices[i]);
}
mSysUIComponent.getInitController().executePostInitTasks();
log.traceEnd();
@@ -342,36 +333,6 @@
return startable;
}
- // TODO(b/217567642): add unit tests? There doesn't seem to be a SystemUiApplicationTest...
- @Override
- public boolean addDumpable(Dumpable dumpable) {
- String name = dumpable.getDumpableName();
- if (mDumpables.containsKey(name)) {
- // This is normal because SystemUIApplication is an application context that is shared
- // among multiple components
- if (DEBUG) {
- Log.d(TAG, "addDumpable(): ignoring " + dumpable + " as there is already a dumpable"
- + " with that name (" + name + "): " + mDumpables.get(name));
- }
- return false;
- }
- if (DEBUG) Log.d(TAG, "addDumpable(): adding '" + name + "' = " + dumpable);
- mDumpables.put(name, dumpable);
-
- // TODO(b/217567642): replace com.android.systemui.dump.Dumpable by
- // com.android.util.Dumpable and get rid of the intermediate lambda
- mDumpManager.registerDumpable(dumpable.getDumpableName(), dumpable::dump);
- return true;
- }
-
- // TODO(b/217567642): implement
- @Override
- public boolean removeDumpable(Dumpable dumpable) {
- Log.w(TAG, "removeDumpable(" + dumpable + "): not implemented");
-
- return false;
- }
-
@Override
public void onConfigurationChanged(Configuration newConfig) {
if (mServicesStarted) {
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricFingerprintIconController.kt b/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricFingerprintIconController.kt
index 5499d2c..f04fdfff 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricFingerprintIconController.kt
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricFingerprintIconController.kt
@@ -23,6 +23,7 @@
import android.view.DisplayInfo
import android.view.Surface
import android.view.View
+import androidx.annotation.VisibleForTesting
import com.airbnb.lottie.LottieAnimationView
import com.android.settingslib.widget.LottieColorUtils
import com.android.systemui.R
@@ -133,13 +134,19 @@
}
}
- private fun getIconContentDescription(@BiometricState newState: Int): CharSequence? {
+ @VisibleForTesting
+ fun getIconContentDescription(@BiometricState newState: Int): CharSequence? {
val id = when (newState) {
STATE_IDLE,
STATE_AUTHENTICATING_ANIMATING_IN,
STATE_AUTHENTICATING,
STATE_PENDING_CONFIRMATION,
- STATE_AUTHENTICATED -> R.string.security_settings_sfps_enroll_find_sensor_message
+ STATE_AUTHENTICATED ->
+ if (isSideFps) {
+ R.string.security_settings_sfps_enroll_find_sensor_message
+ } else {
+ R.string.fingerprint_dialog_touch_sensor
+ }
STATE_ERROR,
STATE_HELP -> R.string.biometric_dialog_try_again
else -> null
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricView.java b/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricView.java
index f330c34..e089fd3 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricView.java
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricView.java
@@ -741,10 +741,10 @@
mTitleView.setText(mPromptInfo.getTitle());
- //setSelected could make marguee work
+ // setSelected could make marquee work
mTitleView.setSelected(true);
mSubtitleView.setSelected(true);
- //make description view become scrollable
+ // make description view become scrollable
mDescriptionView.setMovementMethod(new ScrollingMovementMethod());
if (isDeviceCredentialAllowed()) {
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthDialogPanelInteractionDetector.kt b/packages/SystemUI/src/com/android/systemui/biometrics/AuthDialogPanelInteractionDetector.kt
index b72801d..8edccf166 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthDialogPanelInteractionDetector.kt
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthDialogPanelInteractionDetector.kt
@@ -21,7 +21,7 @@
fun enable(onPanelInteraction: Runnable) {
if (action == null) {
action = Action(onPanelInteraction)
- shadeExpansionStateManager.addExpansionListener(this::onPanelExpansionChanged)
+ shadeExpansionStateManager.addShadeExpansionListener(this::onPanelExpansionChanged)
} else {
Log.e(TAG, "Already enabled")
}
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/dagger/BiometricsModule.kt b/packages/SystemUI/src/com/android/systemui/biometrics/dagger/BiometricsModule.kt
index c831663..096d941 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/dagger/BiometricsModule.kt
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/dagger/BiometricsModule.kt
@@ -29,6 +29,8 @@
import com.android.systemui.biometrics.domain.interactor.DisplayStateInteractorImpl
import com.android.systemui.biometrics.domain.interactor.LogContextInteractor
import com.android.systemui.biometrics.domain.interactor.LogContextInteractorImpl
+import com.android.systemui.biometrics.domain.interactor.SideFpsOverlayInteractor
+import com.android.systemui.biometrics.domain.interactor.SideFpsOverlayInteractorImpl
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.util.concurrency.ThreadFactory
import dagger.Binds
@@ -65,6 +67,11 @@
@SysUISingleton
fun bindsLogContextInteractor(impl: LogContextInteractorImpl): LogContextInteractor
+ @Binds
+ @SysUISingleton
+ fun providesSideFpsOverlayInteractor(impl: SideFpsOverlayInteractorImpl):
+ SideFpsOverlayInteractor
+
companion object {
/** Background [Executor] for HAL related operations. */
@Provides
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/data/repository/FingerprintPropertyRepository.kt b/packages/SystemUI/src/com/android/systemui/biometrics/data/repository/FingerprintPropertyRepository.kt
index 33fb36c..c43722f 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/data/repository/FingerprintPropertyRepository.kt
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/data/repository/FingerprintPropertyRepository.kt
@@ -57,13 +57,8 @@
/** The types of fingerprint sensor (rear, ultrasonic, optical, etc.). */
val sensorType: StateFlow<FingerprintSensorType>
- /** The primary sensor location relative to the default display. */
- val sensorLocation: StateFlow<SensorLocationInternal>
-
- // TODO(b/251476085): don't implement until we need it, but expose alternative locations as
- // a map of display id -> location or similar.
/** The sensor location relative to each physical display. */
- // val sensorLocations<Map<String, SensorLocationInternal>>
+ val sensorLocations: StateFlow<Map<String, SensorLocationInternal>>
}
@SysUISingleton
@@ -104,15 +99,19 @@
MutableStateFlow(FingerprintSensorType.UNKNOWN)
override val sensorType = _sensorType.asStateFlow()
- private val _sensorLocation: MutableStateFlow<SensorLocationInternal> =
- MutableStateFlow(SensorLocationInternal.DEFAULT)
- override val sensorLocation = _sensorLocation.asStateFlow()
+ private val _sensorLocations: MutableStateFlow<Map<String, SensorLocationInternal>> =
+ MutableStateFlow(mapOf("" to SensorLocationInternal.DEFAULT))
+ override val sensorLocations: StateFlow<Map<String, SensorLocationInternal>> =
+ _sensorLocations.asStateFlow()
private fun setProperties(prop: FingerprintSensorPropertiesInternal) {
_sensorId.value = prop.sensorId
_strength.value = sensorStrengthIntToObject(prop.sensorStrength)
_sensorType.value = sensorTypeIntToObject(prop.sensorType)
- _sensorLocation.value = prop.location
+ _sensorLocations.value =
+ prop.allLocations.associateBy { sensorLocationInternal ->
+ sensorLocationInternal.displayId
+ }
}
companion object {
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/domain/interactor/SideFpsOverlayInteractor.kt b/packages/SystemUI/src/com/android/systemui/biometrics/domain/interactor/SideFpsOverlayInteractor.kt
new file mode 100644
index 0000000..aa85e5f3
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/domain/interactor/SideFpsOverlayInteractor.kt
@@ -0,0 +1,51 @@
+/*
+ * 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.biometrics.domain.interactor
+
+import android.hardware.biometrics.SensorLocationInternal
+import android.util.Log
+import com.android.systemui.biometrics.data.repository.FingerprintPropertyRepository
+import com.android.systemui.dagger.SysUISingleton
+import javax.inject.Inject
+
+/** Business logic for SideFps overlay offsets. */
+interface SideFpsOverlayInteractor {
+
+ /** Get the corresponding offsets based on different displayId. */
+ fun getOverlayOffsets(displayId: String): SensorLocationInternal
+}
+
+@SysUISingleton
+class SideFpsOverlayInteractorImpl
+@Inject
+constructor(private val fingerprintPropertyRepository: FingerprintPropertyRepository) :
+ SideFpsOverlayInteractor {
+
+ override fun getOverlayOffsets(displayId: String): SensorLocationInternal {
+ val offsets = fingerprintPropertyRepository.sensorLocations.value
+ return if (offsets.containsKey(displayId)) {
+ offsets[displayId]!!
+ } else {
+ Log.w(TAG, "No location specified for display: $displayId")
+ offsets[""]!!
+ }
+ }
+
+ companion object {
+ private const val TAG = "SideFpsOverlayInteractorImpl"
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/complication/ComplicationLayoutEngine.java b/packages/SystemUI/src/com/android/systemui/complication/ComplicationLayoutEngine.java
index e82564d..e1dd1a6 100644
--- a/packages/SystemUI/src/com/android/systemui/complication/ComplicationLayoutEngine.java
+++ b/packages/SystemUI/src/com/android/systemui/complication/ComplicationLayoutEngine.java
@@ -16,9 +16,21 @@
package com.android.systemui.complication;
+import static com.android.systemui.complication.ComplicationLayoutParams.DIRECTION_DOWN;
+import static com.android.systemui.complication.ComplicationLayoutParams.DIRECTION_END;
+import static com.android.systemui.complication.ComplicationLayoutParams.DIRECTION_START;
+import static com.android.systemui.complication.ComplicationLayoutParams.DIRECTION_UP;
+import static com.android.systemui.complication.ComplicationLayoutParams.POSITION_BOTTOM;
+import static com.android.systemui.complication.ComplicationLayoutParams.POSITION_END;
+import static com.android.systemui.complication.ComplicationLayoutParams.POSITION_START;
+import static com.android.systemui.complication.ComplicationLayoutParams.POSITION_TOP;
import static com.android.systemui.complication.dagger.ComplicationHostViewModule.COMPLICATIONS_FADE_IN_DURATION;
import static com.android.systemui.complication.dagger.ComplicationHostViewModule.COMPLICATIONS_FADE_OUT_DURATION;
-import static com.android.systemui.complication.dagger.ComplicationHostViewModule.COMPLICATION_MARGIN_DEFAULT;
+import static com.android.systemui.complication.dagger.ComplicationHostViewModule.COMPLICATION_DIRECTIONAL_SPACING_DEFAULT;
+import static com.android.systemui.complication.dagger.ComplicationHostViewModule.COMPLICATION_MARGIN_POSITION_BOTTOM;
+import static com.android.systemui.complication.dagger.ComplicationHostViewModule.COMPLICATION_MARGIN_POSITION_END;
+import static com.android.systemui.complication.dagger.ComplicationHostViewModule.COMPLICATION_MARGIN_POSITION_START;
+import static com.android.systemui.complication.dagger.ComplicationHostViewModule.COMPLICATION_MARGIN_POSITION_TOP;
import static com.android.systemui.complication.dagger.ComplicationHostViewModule.SCOPED_COMPLICATIONS_LAYOUT;
import android.util.Log;
@@ -29,6 +41,7 @@
import androidx.constraintlayout.widget.Constraints;
import com.android.systemui.R;
+import com.android.systemui.complication.ComplicationLayoutParams.Direction;
import com.android.systemui.complication.ComplicationLayoutParams.Position;
import com.android.systemui.complication.dagger.ComplicationModule;
import com.android.systemui.statusbar.CrossFadeHelper;
@@ -55,6 +68,47 @@
public static final String TAG = "ComplicationLayoutEng";
/**
+ * Container for storing and operating on a tuple of margin values.
+ */
+ public static class Margins {
+ public final int start;
+ public final int top;
+ public final int end;
+ public final int bottom;
+
+ /**
+ * Default constructor with all margins set to 0.
+ */
+ public Margins() {
+ this(0, 0, 0, 0);
+ }
+
+ /**
+ * Cosntructor to specify margin in each direction.
+ * @param start start margin
+ * @param top top margin
+ * @param end end margin
+ * @param bottom bottom margin
+ */
+ public Margins(int start, int top, int end, int bottom) {
+ this.start = start;
+ this.top = top;
+ this.end = end;
+ this.bottom = bottom;
+ }
+
+ /**
+ * Creates a new {@link Margins} by adding the corresponding dimensions together.
+ */
+ public static Margins combine(Margins margins1, Margins margins2) {
+ return new Margins(margins1.start + margins2.start,
+ margins1.top + margins2.top,
+ margins1.end + margins2.end,
+ margins1.bottom + margins2.bottom);
+ }
+ }
+
+ /**
* {@link ViewEntry} is an internal container, capturing information necessary for working with
* a particular {@link Complication} view.
*/
@@ -65,15 +119,13 @@
private final Parent mParent;
@Complication.Category
private final int mCategory;
- private final int mDefaultMargin;
/**
* Default constructor. {@link Parent} allows for the {@link ViewEntry}'s surrounding
* view hierarchy to be accessed without traversing the entire view tree.
*/
ViewEntry(View view, ComplicationLayoutParams layoutParams,
- TouchInsetManager.TouchInsetSession touchSession, int category, Parent parent,
- int defaultMargin) {
+ TouchInsetManager.TouchInsetSession touchSession, int category, Parent parent) {
mView = view;
// Views that are generated programmatically do not have a unique id assigned to them
// at construction. A new id is assigned here to enable ConstraintLayout relative
@@ -84,7 +136,6 @@
mTouchInsetSession = touchSession;
mCategory = category;
mParent = parent;
- mDefaultMargin = defaultMargin;
touchSession.addViewToTracking(mView);
}
@@ -192,23 +243,8 @@
break;
}
- if (!isRoot) {
- final int margin = mLayoutParams.getMargin(mDefaultMargin);
- switch(direction) {
- case ComplicationLayoutParams.DIRECTION_DOWN:
- params.setMargins(0, margin, 0, 0);
- break;
- case ComplicationLayoutParams.DIRECTION_UP:
- params.setMargins(0, 0, 0, margin);
- break;
- case ComplicationLayoutParams.DIRECTION_END:
- params.setMarginStart(margin);
- break;
- case ComplicationLayoutParams.DIRECTION_START:
- params.setMarginEnd(margin);
- break;
- }
- }
+ final Margins margins = mParent.getMargins(this, isRoot);
+ params.setMarginsRelative(margins.start, margins.top, margins.end, margins.bottom);
});
if (mLayoutParams.constraintSpecified()) {
@@ -275,7 +311,6 @@
private final ComplicationLayoutParams mLayoutParams;
private final int mCategory;
private Parent mParent;
- private int mDefaultMargin;
Builder(View view, TouchInsetManager.TouchInsetSession touchSession,
ComplicationLayoutParams lp, @Complication.Category int category) {
@@ -311,20 +346,10 @@
}
/**
- * Sets the margin that will be applied in the direction the complication is laid out
- * towards.
- */
- Builder setDefaultMargin(int margin) {
- mDefaultMargin = margin;
- return this;
- }
-
- /**
* Builds and returns the resulting {@link ViewEntry}.
*/
ViewEntry build() {
- return new ViewEntry(mView, mLayoutParams, mTouchSession, mCategory, mParent,
- mDefaultMargin);
+ return new ViewEntry(mView, mLayoutParams, mTouchSession, mCategory, mParent);
}
}
@@ -336,6 +361,11 @@
* Indicates the {@link ViewEntry} requests removal.
*/
void removeEntry(ViewEntry entry);
+
+ /**
+ * Returns the margins to be applied to the entry
+ */
+ Margins getMargins(ViewEntry entry, boolean isRoot);
}
}
@@ -347,6 +377,15 @@
private static class PositionGroup implements DirectionGroup.Parent {
private final HashMap<Integer, DirectionGroup> mDirectionGroups = new HashMap<>();
+ private final HashMap<Integer, Margins> mDirectionalMargins;
+
+ private final int mDefaultDirectionalSpacing;
+
+ PositionGroup(int defaultDirectionalSpacing, HashMap<Integer, Margins> directionalMargins) {
+ mDefaultDirectionalSpacing = defaultDirectionalSpacing;
+ mDirectionalMargins = directionalMargins;
+ }
+
/**
* Invoked by the {@link PositionGroup} holder to introduce a {@link Complication} view to
* this group. It is assumed that the caller has correctly identified this
@@ -370,6 +409,26 @@
updateViews();
}
+ @Override
+ public int getDefaultDirectionalSpacing() {
+ return mDefaultDirectionalSpacing;
+ }
+
+ @Override
+ public Margins getMargins(ViewEntry entry, boolean isRoot) {
+ if (isRoot) {
+ Margins cumulativeMargins = new Margins();
+
+ for (Margins margins : mDirectionalMargins.values()) {
+ cumulativeMargins = Margins.combine(margins, cumulativeMargins);
+ }
+
+ return cumulativeMargins;
+ }
+
+ return mDirectionalMargins.get(entry.getLayoutParams().getDirection());
+ }
+
private void updateViews() {
ViewEntry head = null;
@@ -417,14 +476,22 @@
* {@link DirectionGroup}.
*/
void onEntriesChanged();
+
+ /**
+ * Returns the default spacing between elements.
+ */
+ int getDefaultDirectionalSpacing();
+
+ /**
+ * Returns the margins for the view entry.
+ */
+ Margins getMargins(ViewEntry entry, boolean isRoot);
}
private final ArrayList<ViewEntry> mViews = new ArrayList<>();
private final Parent mParent;
/**
- * Creates a new {@link DirectionGroup} with the specified parent. Note that the
- * {@link DirectionGroup} does not store its own direction. It is the responsibility of the
- * {@link DirectionGroup.Parent} to maintain this association.
+ * Creates a new {@link DirectionGroup} with the specified parent.
*/
DirectionGroup(Parent parent) {
mParent = parent;
@@ -463,6 +530,33 @@
mParent.onEntriesChanged();
}
+ @Override
+ public Margins getMargins(ViewEntry entry, boolean isRoot) {
+ int directionalSpacing = entry.getLayoutParams().getDirectionalSpacing(
+ mParent.getDefaultDirectionalSpacing());
+
+ Margins margins = new Margins();
+
+ if (!isRoot) {
+ switch (entry.getLayoutParams().getDirection()) {
+ case ComplicationLayoutParams.DIRECTION_START:
+ margins = new Margins(0, 0, directionalSpacing, 0);
+ break;
+ case ComplicationLayoutParams.DIRECTION_UP:
+ margins = new Margins(0, 0, 0, directionalSpacing);
+ break;
+ case ComplicationLayoutParams.DIRECTION_END:
+ margins = new Margins(directionalSpacing, 0, 0, 0);
+ break;
+ case ComplicationLayoutParams.DIRECTION_DOWN:
+ margins = new Margins(0, directionalSpacing, 0, 0);
+ break;
+ }
+ }
+
+ return Margins.combine(mParent.getMargins(entry, isRoot), margins);
+ }
+
/**
* Invoked by {@link Parent} to update the layout of all children {@link ViewEntry} with
* the specified head. Note that the head might not be in this group and instead part of a
@@ -484,25 +578,70 @@
}
private final ConstraintLayout mLayout;
- private final int mDefaultMargin;
+ private final int mDefaultDirectionalSpacing;
private final HashMap<ComplicationId, ViewEntry> mEntries = new HashMap<>();
private final HashMap<Integer, PositionGroup> mPositions = new HashMap<>();
private final TouchInsetManager.TouchInsetSession mSession;
private final int mFadeInDuration;
private final int mFadeOutDuration;
+ private final HashMap<Integer, HashMap<Integer, Margins>> mPositionDirectionMarginMapping;
/** */
@Inject
public ComplicationLayoutEngine(@Named(SCOPED_COMPLICATIONS_LAYOUT) ConstraintLayout layout,
- @Named(COMPLICATION_MARGIN_DEFAULT) int defaultMargin,
+ @Named(COMPLICATION_DIRECTIONAL_SPACING_DEFAULT) int defaultDirectionalSpacing,
+ @Named(COMPLICATION_MARGIN_POSITION_START) int complicationMarginPositionStart,
+ @Named(COMPLICATION_MARGIN_POSITION_TOP) int complicationMarginPositionTop,
+ @Named(COMPLICATION_MARGIN_POSITION_END) int complicationMarginPositionEnd,
+ @Named(COMPLICATION_MARGIN_POSITION_BOTTOM) int complicationMarginPositionBottom,
TouchInsetManager.TouchInsetSession session,
@Named(COMPLICATIONS_FADE_IN_DURATION) int fadeInDuration,
@Named(COMPLICATIONS_FADE_OUT_DURATION) int fadeOutDuration) {
mLayout = layout;
- mDefaultMargin = defaultMargin;
+ mDefaultDirectionalSpacing = defaultDirectionalSpacing;
mSession = session;
mFadeInDuration = fadeInDuration;
mFadeOutDuration = fadeOutDuration;
+ mPositionDirectionMarginMapping = generatePositionDirectionalMarginsMapping(
+ complicationMarginPositionStart,
+ complicationMarginPositionTop,
+ complicationMarginPositionEnd,
+ complicationMarginPositionBottom);
+ }
+
+ private static HashMap<Integer, HashMap<Integer, Margins>>
+ generatePositionDirectionalMarginsMapping(int complicationMarginPositionStart,
+ int complicationMarginPositionTop,
+ int complicationMarginPositionEnd,
+ int complicationMarginPositionBottom) {
+ HashMap<Integer, HashMap<Integer, Margins>> mapping = new HashMap<>();
+
+ final Margins startMargins = new Margins(complicationMarginPositionStart, 0, 0, 0);
+ final Margins topMargins = new Margins(0, complicationMarginPositionTop, 0, 0);
+ final Margins endMargins = new Margins(0, 0, complicationMarginPositionEnd, 0);
+ final Margins bottomMargins = new Margins(0, 0, 0, complicationMarginPositionBottom);
+
+ addToMapping(mapping, POSITION_START | POSITION_TOP, DIRECTION_END, topMargins);
+ addToMapping(mapping, POSITION_START | POSITION_TOP, DIRECTION_DOWN, startMargins);
+
+ addToMapping(mapping, POSITION_START | POSITION_BOTTOM, DIRECTION_END, bottomMargins);
+ addToMapping(mapping, POSITION_START | POSITION_BOTTOM, DIRECTION_UP, startMargins);
+
+ addToMapping(mapping, POSITION_END | POSITION_TOP, DIRECTION_START, topMargins);
+ addToMapping(mapping, POSITION_END | POSITION_TOP, DIRECTION_DOWN, endMargins);
+
+ addToMapping(mapping, POSITION_END | POSITION_BOTTOM, DIRECTION_START, bottomMargins);
+ addToMapping(mapping, POSITION_END | POSITION_BOTTOM, DIRECTION_UP, endMargins);
+
+ return mapping;
+ }
+
+ private static void addToMapping(HashMap<Integer, HashMap<Integer, Margins>> mapping,
+ @Position int position, @Direction int direction, Margins margins) {
+ if (!mapping.containsKey(position)) {
+ mapping.put(position, new HashMap<>());
+ }
+ mapping.get(position).put(direction, margins);
}
@Override
@@ -537,13 +676,13 @@
removeComplication(id);
}
- final ViewEntry.Builder entryBuilder = new ViewEntry.Builder(view, mSession, lp, category)
- .setDefaultMargin(mDefaultMargin);
+ final ViewEntry.Builder entryBuilder = new ViewEntry.Builder(view, mSession, lp, category);
// Add position group if doesn't already exist
final int position = lp.getPosition();
if (!mPositions.containsKey(position)) {
- mPositions.put(position, new PositionGroup());
+ mPositions.put(position, new PositionGroup(mDefaultDirectionalSpacing,
+ mPositionDirectionMarginMapping.get(lp.getPosition())));
}
// Insert entry into group
diff --git a/packages/SystemUI/src/com/android/systemui/complication/ComplicationLayoutParams.java b/packages/SystemUI/src/com/android/systemui/complication/ComplicationLayoutParams.java
index 71ba720..42b4efd 100644
--- a/packages/SystemUI/src/com/android/systemui/complication/ComplicationLayoutParams.java
+++ b/packages/SystemUI/src/com/android/systemui/complication/ComplicationLayoutParams.java
@@ -51,7 +51,7 @@
private static final int FIRST_POSITION = POSITION_TOP;
private static final int LAST_POSITION = POSITION_END;
- private static final int MARGIN_UNSPECIFIED = 0xFFFFFFFF;
+ private static final int DIRECTIONAL_SPACING_UNSPECIFIED = 0xFFFFFFFF;
private static final int CONSTRAINT_UNSPECIFIED = 0xFFFFFFFF;
@Retention(RetentionPolicy.SOURCE)
@@ -80,7 +80,7 @@
private final int mWeight;
- private final int mMargin;
+ private final int mDirectionalSpacing;
private final int mConstraint;
@@ -113,7 +113,25 @@
*/
public ComplicationLayoutParams(int width, int height, @Position int position,
@Direction int direction, int weight) {
- this(width, height, position, direction, weight, MARGIN_UNSPECIFIED, CONSTRAINT_UNSPECIFIED,
+ this(width, height, position, direction, weight, DIRECTIONAL_SPACING_UNSPECIFIED,
+ CONSTRAINT_UNSPECIFIED, false);
+ }
+
+ /**
+ * Constructs a {@link ComplicationLayoutParams}.
+ * @param width The width {@link android.view.View.MeasureSpec} for the view.
+ * @param height The height {@link android.view.View.MeasureSpec} for the view.
+ * @param position The place within the parent container where the view should be positioned.
+ * @param direction The direction the view should be laid out from either the parent container
+ * or preceding view.
+ * @param weight The weight that should be considered for this view when compared to other
+ * views. This has an impact on the placement of the view but not the rendering of
+ * the view.
+ * @param directionalSpacing The spacing to apply between complications.
+ */
+ public ComplicationLayoutParams(int width, int height, @Position int position,
+ @Direction int direction, int weight, int directionalSpacing) {
+ this(width, height, position, direction, weight, directionalSpacing, CONSTRAINT_UNSPECIFIED,
false);
}
@@ -127,31 +145,14 @@
* @param weight The weight that should be considered for this view when compared to other
* views. This has an impact on the placement of the view but not the rendering of
* the view.
- * @param margin The margin to apply between complications.
- */
- public ComplicationLayoutParams(int width, int height, @Position int position,
- @Direction int direction, int weight, int margin) {
- this(width, height, position, direction, weight, margin, CONSTRAINT_UNSPECIFIED, false);
- }
-
- /**
- * Constructs a {@link ComplicationLayoutParams}.
- * @param width The width {@link android.view.View.MeasureSpec} for the view.
- * @param height The height {@link android.view.View.MeasureSpec} for the view.
- * @param position The place within the parent container where the view should be positioned.
- * @param direction The direction the view should be laid out from either the parent container
- * or preceding view.
- * @param weight The weight that should be considered for this view when compared to other
- * views. This has an impact on the placement of the view but not the rendering of
- * the view.
- * @param margin The margin to apply between complications.
+ * @param directionalSpacing The spacing to apply between complications.
* @param constraint The max width or height the complication is allowed to spread, depending on
* its direction. For horizontal directions, this would be applied on width,
* and for vertical directions, height.
*/
public ComplicationLayoutParams(int width, int height, @Position int position,
- @Direction int direction, int weight, int margin, int constraint) {
- this(width, height, position, direction, weight, margin, constraint, false);
+ @Direction int direction, int weight, int directionalSpacing, int constraint) {
+ this(width, height, position, direction, weight, directionalSpacing, constraint, false);
}
/**
@@ -172,8 +173,8 @@
*/
public ComplicationLayoutParams(int width, int height, @Position int position,
@Direction int direction, int weight, boolean snapToGuide) {
- this(width, height, position, direction, weight, MARGIN_UNSPECIFIED, CONSTRAINT_UNSPECIFIED,
- snapToGuide);
+ this(width, height, position, direction, weight, DIRECTIONAL_SPACING_UNSPECIFIED,
+ CONSTRAINT_UNSPECIFIED, snapToGuide);
}
/**
@@ -186,7 +187,7 @@
* @param weight The weight that should be considered for this view when compared to other
* views. This has an impact on the placement of the view but not the rendering of
* the view.
- * @param margin The margin to apply between complications.
+ * @param directionalSpacing The spacing to apply between complications.
* @param constraint The max width or height the complication is allowed to spread, depending on
* its direction. For horizontal directions, this would be applied on width,
* and for vertical directions, height.
@@ -197,7 +198,8 @@
* from the end of the parent to the guide.
*/
public ComplicationLayoutParams(int width, int height, @Position int position,
- @Direction int direction, int weight, int margin, int constraint, boolean snapToGuide) {
+ @Direction int direction, int weight, int directionalSpacing, int constraint,
+ boolean snapToGuide) {
super(width, height);
if (!validatePosition(position)) {
@@ -213,7 +215,7 @@
mWeight = weight;
- mMargin = margin;
+ mDirectionalSpacing = directionalSpacing;
mConstraint = constraint;
@@ -228,7 +230,7 @@
mPosition = source.mPosition;
mDirection = source.mDirection;
mWeight = source.mWeight;
- mMargin = source.mMargin;
+ mDirectionalSpacing = source.mDirectionalSpacing;
mConstraint = source.mConstraint;
mSnapToGuide = source.mSnapToGuide;
}
@@ -300,11 +302,12 @@
}
/**
- * Returns the margin to apply between complications, or the given default if no margin is
+ * Returns the spacing to apply between complications, or the given default if no spacing is
* specified.
*/
- public int getMargin(int defaultMargin) {
- return mMargin == MARGIN_UNSPECIFIED ? defaultMargin : mMargin;
+ public int getDirectionalSpacing(int defaultSpacing) {
+ return mDirectionalSpacing == DIRECTIONAL_SPACING_UNSPECIFIED
+ ? defaultSpacing : mDirectionalSpacing;
}
/**
diff --git a/packages/SystemUI/src/com/android/systemui/complication/dagger/ComplicationHostViewModule.java b/packages/SystemUI/src/com/android/systemui/complication/dagger/ComplicationHostViewModule.java
index 1158565..a7d017dd 100644
--- a/packages/SystemUI/src/com/android/systemui/complication/dagger/ComplicationHostViewModule.java
+++ b/packages/SystemUI/src/com/android/systemui/complication/dagger/ComplicationHostViewModule.java
@@ -36,11 +36,20 @@
@Module
public abstract class ComplicationHostViewModule {
public static final String SCOPED_COMPLICATIONS_LAYOUT = "scoped_complications_layout";
- public static final String COMPLICATION_MARGIN_DEFAULT = "complication_margin_default";
+ public static final String COMPLICATION_DIRECTIONAL_SPACING_DEFAULT =
+ "complication_directional_spacing_default";
public static final String COMPLICATIONS_FADE_OUT_DURATION = "complications_fade_out_duration";
public static final String COMPLICATIONS_FADE_IN_DURATION = "complications_fade_in_duration";
public static final String COMPLICATIONS_RESTORE_TIMEOUT = "complication_restore_timeout";
public static final String COMPLICATIONS_FADE_OUT_DELAY = "complication_fade_out_delay";
+ public static final String COMPLICATION_MARGIN_POSITION_START =
+ "complication_margin_position_start";
+ public static final String COMPLICATION_MARGIN_POSITION_TOP =
+ "complication_margin_position_top";
+ public static final String COMPLICATION_MARGIN_POSITION_END =
+ "complication_margin_position_end";
+ public static final String COMPLICATION_MARGIN_POSITION_BOTTOM =
+ "complication_margin_position_bottom";
/**
* Generates a {@link ConstraintLayout}, which can host
@@ -58,11 +67,35 @@
}
@Provides
- @Named(COMPLICATION_MARGIN_DEFAULT)
+ @Named(COMPLICATION_DIRECTIONAL_SPACING_DEFAULT)
static int providesComplicationPadding(@Main Resources resources) {
return resources.getDimensionPixelSize(R.dimen.dream_overlay_complication_margin);
}
+ @Provides
+ @Named(COMPLICATION_MARGIN_POSITION_START)
+ static int providesComplicationMarginPositionStart(@Main Resources resources) {
+ return resources.getDimensionPixelSize(R.dimen.dream_overlay_container_padding_start);
+ }
+
+ @Provides
+ @Named(COMPLICATION_MARGIN_POSITION_TOP)
+ static int providesComplicationMarginPositionTop(@Main Resources resources) {
+ return resources.getDimensionPixelSize(R.dimen.dream_overlay_container_padding_top);
+ }
+
+ @Provides
+ @Named(COMPLICATION_MARGIN_POSITION_END)
+ static int providesComplicationMarginPositionEnd(@Main Resources resources) {
+ return resources.getDimensionPixelSize(R.dimen.dream_overlay_container_padding_end);
+ }
+
+ @Provides
+ @Named(COMPLICATION_MARGIN_POSITION_BOTTOM)
+ static int providesComplicationMarginPositionBottom(@Main Resources resources) {
+ return resources.getDimensionPixelSize(R.dimen.dream_overlay_container_padding_bottom);
+ }
+
/**
* Provides the fade out duration for complications.
*/
diff --git a/packages/SystemUI/src/com/android/systemui/controls/management/ControlsProviderSelectorActivity.kt b/packages/SystemUI/src/com/android/systemui/controls/management/ControlsProviderSelectorActivity.kt
index 92aff06..e600632 100644
--- a/packages/SystemUI/src/com/android/systemui/controls/management/ControlsProviderSelectorActivity.kt
+++ b/packages/SystemUI/src/com/android/systemui/controls/management/ControlsProviderSelectorActivity.kt
@@ -189,7 +189,7 @@
authorizedPanelsRepository.addAuthorizedPanels(
setOf(serviceInfo.componentName.packageName)
)
- val selected = SelectedItem.PanelItem(appName, componentName)
+ val selected = SelectedItem.PanelItem(appName, serviceInfo.componentName)
controlsController.setPreferredSelection(selected)
animateExitAndFinish()
openControlsOrigin()
diff --git a/packages/SystemUI/src/com/android/systemui/dagger/ReferenceSystemUIModule.java b/packages/SystemUI/src/com/android/systemui/dagger/ReferenceSystemUIModule.java
index d5a4146..f68bd49 100644
--- a/packages/SystemUI/src/com/android/systemui/dagger/ReferenceSystemUIModule.java
+++ b/packages/SystemUI/src/com/android/systemui/dagger/ReferenceSystemUIModule.java
@@ -23,8 +23,6 @@
import android.hardware.SensorPrivacyManager;
import android.os.Handler;
-import androidx.annotation.Nullable;
-
import com.android.internal.logging.UiEventLogger;
import com.android.keyguard.KeyguardViewController;
import com.android.systemui.battery.BatterySaverModule;
@@ -74,12 +72,12 @@
import com.android.systemui.statusbar.policy.SensorPrivacyControllerImpl;
import com.android.systemui.volume.dagger.VolumeModule;
-import javax.inject.Named;
-
import dagger.Binds;
import dagger.Module;
import dagger.Provides;
+import javax.inject.Named;
+
/**
* A dagger module for injecting default implementations of components of System UI.
*
@@ -115,9 +113,8 @@
@SysUISingleton
@Provides
@Named(LEAK_REPORT_EMAIL_NAME)
- @Nullable
static String provideLeakReportEmail() {
- return null;
+ return "";
}
@Binds
diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java b/packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java
index 0d3503e..07efbfe 100644
--- a/packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java
+++ b/packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java
@@ -217,7 +217,7 @@
true /* settingDef */,
true /* configured */,
DozeLog.REASON_SENSOR_TAP,
- false /* reports touch coordinates */,
+ true /* reports touch coordinates */,
true /* touchscreen */,
false /* ignoresSetting */,
dozeParameters.singleTapUsesProx(mDevicePosture) /* requiresProx */,
diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java b/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java
index b709608..85272a6 100644
--- a/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java
+++ b/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java
@@ -323,9 +323,7 @@
return;
}
if (isDoubleTap || isTap) {
- if (screenX != -1 && screenY != -1) {
- mDozeHost.onSlpiTap(screenX, screenY);
- }
+ mDozeHost.onSlpiTap(screenX, screenY);
gentleWakeUp(pulseReason);
} else if (isPickup) {
if (shouldDropPickupEvent()) {
diff --git a/packages/SystemUI/src/com/android/systemui/flags/Flags.kt b/packages/SystemUI/src/com/android/systemui/flags/Flags.kt
index 8707c96..0960197 100644
--- a/packages/SystemUI/src/com/android/systemui/flags/Flags.kt
+++ b/packages/SystemUI/src/com/android/systemui/flags/Flags.kt
@@ -201,16 +201,11 @@
// TODO(b/267722622): Tracking Bug
@JvmField
val WALLPAPER_PICKER_UI_FOR_AIWP =
- releasedFlag(
+ unreleasedFlag(
229,
"wallpaper_picker_ui_for_aiwp"
)
- /** Whether to inflate the bouncer view on a background thread. */
- // TODO(b/273341787): Tracking Bug
- @JvmField
- val PREVENT_BYPASS_KEYGUARD = releasedFlag(230, "prevent_bypass_keyguard")
-
/** Whether to use a new data source for intents to run on keyguard dismissal. */
@JvmField
val REFACTOR_KEYGUARD_DISMISS_INTENT = unreleasedFlag(231, "refactor_keyguard_dismiss_intent")
@@ -421,12 +416,6 @@
// TODO(b/265045965): Tracking Bug
val SHOW_LOWLIGHT_ON_DIRECT_BOOT = releasedFlag(1003, "show_lowlight_on_direct_boot")
- @JvmField
- // TODO(b/271428141): Tracking Bug
- val ENABLE_LOW_LIGHT_CLOCK_UNDOCKED = releasedFlag(
- 1004,
- "enable_low_light_clock_undocked")
-
// TODO(b/273509374): Tracking Bug
@JvmField
val ALWAYS_SHOW_HOME_CONTROLS_ON_DREAMS = releasedFlag(1006,
@@ -608,6 +597,9 @@
@JvmField val CLIPBOARD_REMOTE_BEHAVIOR = releasedFlag(1701, "clipboard_remote_behavior")
// TODO(b/278714186) Tracking Bug
@JvmField val CLIPBOARD_IMAGE_TIMEOUT = unreleasedFlag(1702, "clipboard_image_timeout")
+ // TODO(b/279405451): Tracking Bug
+ @JvmField
+ val CLIPBOARD_SHARED_TRANSITIONS = unreleasedFlag(1703, "clipboard_shared_transitions")
// 1800 - shade container
// TODO(b/265944639): Tracking Bug
@@ -712,6 +704,5 @@
// TODO(b/278761837): Tracking Bug
@JvmField
- val USE_NEW_ACTIVITY_STARTER = unreleasedFlag(2801, name = "use_new_activity_starter",
- teamfood = true)
+ val USE_NEW_ACTIVITY_STARTER = releasedFlag(2801, name = "use_new_activity_starter")
}
diff --git a/packages/SystemUI/src/com/android/systemui/keyboard/backlight/ui/view/KeyboardBacklightDialog.kt b/packages/SystemUI/src/com/android/systemui/keyboard/backlight/ui/view/KeyboardBacklightDialog.kt
index 6bc763c..d3678b5 100644
--- a/packages/SystemUI/src/com/android/systemui/keyboard/backlight/ui/view/KeyboardBacklightDialog.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyboard/backlight/ui/view/KeyboardBacklightDialog.kt
@@ -87,7 +87,7 @@
override fun onCreate(savedInstanceState: Bundle?) {
setUpWindowProperties(this)
- setWindowTitle()
+ setWindowPosition()
updateResources()
rootView = buildRootView()
setContentView(rootView)
@@ -233,24 +233,29 @@
}
}
- private fun setWindowTitle() {
- val attrs = window.attributes
- attrs.title = "KeyboardBacklightDialog"
- attrs?.y = dialogBottomMargin
- window.attributes = attrs
+ private fun setWindowPosition() {
+ window?.apply {
+ setGravity(Gravity.BOTTOM or Gravity.CENTER_HORIZONTAL)
+ this.attributes =
+ WindowManager.LayoutParams().apply {
+ copyFrom(attributes)
+ y = dialogBottomMargin
+ }
+ }
}
private fun setUpWindowProperties(dialog: Dialog) {
- val window = dialog.window
- window.requestFeature(Window.FEATURE_NO_TITLE) // otherwise fails while creating actionBar
- window.setType(WindowManager.LayoutParams.TYPE_STATUS_BAR_SUB_PANEL)
- window.addFlags(
- WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM or
- WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
- )
- window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND)
- window.setBackgroundDrawableResource(android.R.color.transparent)
- window.setGravity(Gravity.BOTTOM or Gravity.CENTER_HORIZONTAL)
+ dialog.window?.apply {
+ requestFeature(Window.FEATURE_NO_TITLE) // otherwise fails while creating actionBar
+ setType(WindowManager.LayoutParams.TYPE_STATUS_BAR_SUB_PANEL)
+ addFlags(
+ WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM or
+ WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
+ )
+ clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND)
+ setBackgroundDrawableResource(android.R.color.transparent)
+ attributes.title = "KeyboardBacklightDialog"
+ }
setCanceledOnTouchOutside(true)
}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
index b5ddc2e..0a2d05e 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
@@ -16,6 +16,7 @@
package com.android.systemui.keyguard;
+import static android.app.StatusBarManager.SESSION_KEYGUARD;
import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT;
import static android.view.WindowManagerPolicyConstants.KEYGUARD_GOING_AWAY_FLAG_NO_WINDOW_ANIMATIONS;
import static android.view.WindowManagerPolicyConstants.KEYGUARD_GOING_AWAY_FLAG_TO_LAUNCHER_CLEAR_SNAPSHOT;
@@ -101,6 +102,7 @@
import com.android.app.animation.Interpolators;
import com.android.internal.jank.InteractionJankMonitor;
import com.android.internal.jank.InteractionJankMonitor.Configuration;
+import com.android.internal.logging.UiEventLogger;
import com.android.internal.policy.IKeyguardDismissCallback;
import com.android.internal.policy.IKeyguardExitCallback;
import com.android.internal.policy.IKeyguardStateCallback;
@@ -131,6 +133,7 @@
import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.flags.Flags;
import com.android.systemui.keyguard.dagger.KeyguardModule;
+import com.android.systemui.log.SessionTracker;
import com.android.systemui.navigationbar.NavigationModeController;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.settings.UserTracker;
@@ -723,6 +726,13 @@
}
}
}
+
+ @Override
+ public void onStrongAuthStateChanged(int userId) {
+ if (mLockPatternUtils.isUserInLockdown(KeyguardUpdateMonitor.getCurrentUser())) {
+ doKeyguardLocked(null);
+ }
+ }
};
ViewMediatorCallback mViewMediatorCallback = new ViewMediatorCallback() {
@@ -1181,12 +1191,16 @@
private Lazy<ScrimController> mScrimControllerLazy;
private FeatureFlags mFeatureFlags;
+ private final UiEventLogger mUiEventLogger;
+ private final SessionTracker mSessionTracker;
/**
* Injected constructor. See {@link KeyguardModule}.
*/
public KeyguardViewMediator(
Context context,
+ UiEventLogger uiEventLogger,
+ SessionTracker sessionTracker,
UserTracker userTracker,
FalsingCollector falsingCollector,
LockPatternUtils lockPatternUtils,
@@ -1270,6 +1284,8 @@
mDreamCloseAnimationDuration = (int) LOCKSCREEN_ANIMATION_DURATION_MS;
mFeatureFlags = featureFlags;
+ mUiEventLogger = uiEventLogger;
+ mSessionTracker = sessionTracker;
}
public void userActivity() {
@@ -1660,6 +1676,13 @@
if (DEBUG) Log.d(TAG, "onStartedWakingUp, seq = " + mDelayedShowingSequence);
notifyStartedWakingUp();
}
+ mUiEventLogger.logWithInstanceIdAndPosition(
+ BiometricUnlockController.BiometricUiEvent.STARTED_WAKING_UP,
+ 0,
+ null,
+ mSessionTracker.getSessionId(SESSION_KEYGUARD),
+ pmWakeReason
+ );
mUpdateMonitor.dispatchStartedWakingUp(pmWakeReason);
maybeSendUserPresentBroadcast();
Trace.endSection();
@@ -1933,8 +1956,9 @@
* Enable the keyguard if the settings are appropriate.
*/
private void doKeyguardLocked(Bundle options) {
- // if another app is disabling us, don't show
- if (!mExternallyEnabled) {
+ // if another app is disabling us, don't show unless we're in lockdown mode
+ if (!mExternallyEnabled
+ && !mLockPatternUtils.isUserInLockdown(KeyguardUpdateMonitor.getCurrentUser())) {
if (DEBUG) Log.d(TAG, "doKeyguard: not showing because externally disabled");
mNeedToReshowWhenReenabled = true;
@@ -2941,9 +2965,12 @@
if (mSurfaceBehindRemoteAnimationFinishedCallback != null) {
try {
mSurfaceBehindRemoteAnimationFinishedCallback.onAnimationFinished();
+ } catch (Throwable t) {
+ // The surface may no longer be available. Just capture the exception
+ Log.w(TAG, "Surface behind remote animation callback failed, and it's probably ok: "
+ + t.getMessage());
+ } finally {
mSurfaceBehindRemoteAnimationFinishedCallback = null;
- } catch (RemoteException e) {
- e.printStackTrace();
}
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/dagger/KeyguardModule.java b/packages/SystemUI/src/com/android/systemui/keyguard/dagger/KeyguardModule.java
index 5e71458..deb8f5d 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/dagger/KeyguardModule.java
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/dagger/KeyguardModule.java
@@ -21,6 +21,7 @@
import android.os.PowerManager;
import com.android.internal.jank.InteractionJankMonitor;
+import com.android.internal.logging.UiEventLogger;
import com.android.internal.widget.LockPatternUtils;
import com.android.keyguard.KeyguardDisplayManager;
import com.android.keyguard.KeyguardUpdateMonitor;
@@ -50,6 +51,7 @@
import com.android.systemui.keyguard.domain.quickaffordance.KeyguardQuickAffordanceModule;
import com.android.systemui.keyguard.shared.quickaffordance.KeyguardQuickAffordancesMetricsLogger;
import com.android.systemui.keyguard.shared.quickaffordance.KeyguardQuickAffordancesMetricsLoggerImpl;
+import com.android.systemui.log.SessionTracker;
import com.android.systemui.navigationbar.NavigationModeController;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.shade.ShadeController;
@@ -63,12 +65,12 @@
import com.android.systemui.statusbar.policy.UserSwitcherController;
import com.android.systemui.util.DeviceConfigProxy;
-import java.util.concurrent.Executor;
-
import dagger.Lazy;
import dagger.Module;
import dagger.Provides;
+import java.util.concurrent.Executor;
+
/**
* Dagger Module providing keyguard.
*/
@@ -93,6 +95,8 @@
@SysUISingleton
public static KeyguardViewMediator newKeyguardViewMediator(
Context context,
+ UiEventLogger uiEventLogger,
+ SessionTracker sessionTracker,
UserTracker userTracker,
FalsingCollector falsingCollector,
LockPatternUtils lockPatternUtils,
@@ -124,6 +128,8 @@
FeatureFlags featureFlags) {
return new KeyguardViewMediator(
context,
+ uiEventLogger,
+ sessionTracker,
userTracker,
falsingCollector,
lockPatternUtils,
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/DeviceEntryFaceAuthRepository.kt b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/DeviceEntryFaceAuthRepository.kt
index 5b71a2e..9621f03 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/DeviceEntryFaceAuthRepository.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/DeviceEntryFaceAuthRepository.kt
@@ -45,7 +45,6 @@
import com.android.systemui.keyguard.shared.model.HelpAuthenticationStatus
import com.android.systemui.keyguard.shared.model.SuccessAuthenticationStatus
import com.android.systemui.keyguard.shared.model.TransitionState
-import com.android.systemui.keyguard.shared.model.WakefulnessModel
import com.android.systemui.log.FaceAuthenticationLogger
import com.android.systemui.log.SessionTracker
import com.android.systemui.log.table.TableLogBuffer
@@ -239,9 +238,7 @@
// Clear auth status when keyguard is going away or when the user is switching or device
// starts going to sleep.
merge(
- keyguardRepository.wakefulness.map {
- WakefulnessModel.isSleepingOrStartingToSleep(it)
- },
+ keyguardRepository.wakefulness.map { it.isStartingToSleepOrAsleep() },
keyguardRepository.isKeyguardGoingAway,
userRepository.userSwitchingInProgress
)
@@ -315,9 +312,7 @@
tableLogBuffer
),
logAndObserve(
- keyguardRepository.wakefulness
- .map { WakefulnessModel.isSleepingOrStartingToSleep(it) }
- .isFalse(),
+ keyguardRepository.wakefulness.map { it.isStartingToSleepOrAsleep() }.isFalse(),
"deviceNotSleepingOrNotStartingToSleep",
tableLogBuffer
),
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardBouncerRepository.kt b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardBouncerRepository.kt
index 0b506cf..7c14280 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardBouncerRepository.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardBouncerRepository.kt
@@ -18,7 +18,6 @@
import android.os.Build
import android.util.Log
-import com.android.keyguard.ViewMediatorCallback
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.keyguard.shared.constants.KeyguardBouncerConstants.EXPANSION_HIDDEN
@@ -104,7 +103,6 @@
class KeyguardBouncerRepositoryImpl
@Inject
constructor(
- private val viewMediatorCallback: ViewMediatorCallback,
private val clock: SystemClock,
@Application private val applicationScope: CoroutineScope,
@BouncerLog private val buffer: TableLogBuffer,
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardRepository.kt b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardRepository.kt
index 3567d81..742e535 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardRepository.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardRepository.kt
@@ -26,7 +26,6 @@
import com.android.systemui.common.shared.model.Position
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Main
-import com.android.systemui.doze.DozeHost
import com.android.systemui.doze.DozeMachine
import com.android.systemui.doze.DozeTransitionCallback
import com.android.systemui.doze.DozeTransitionListener
@@ -105,7 +104,7 @@
* returns `false`. In order to account for that, observers should also use the
* [linearDozeAmount] flow to check if it's greater than `0`
*/
- val isDozing: Flow<Boolean>
+ val isDozing: StateFlow<Boolean>
/**
* Observable for whether the device is dreaming.
@@ -133,6 +132,8 @@
/** Doze state information, as it transitions */
val dozeTransitionModel: Flow<DozeTransitionModel>
+ val lastDozeTapToWakePosition: StateFlow<Point?>
+
/** Observable for the [StatusBarState] */
val statusBarState: Flow<StatusBarState>
@@ -181,6 +182,10 @@
/** Sets whether quick settings or quick-quick settings is visible. */
fun setQuickSettingsVisible(isVisible: Boolean)
+
+ fun setLastDozeTapToWakePosition(position: Point)
+
+ fun setIsDozing(isDozing: Boolean)
}
/** Encapsulates application state for the keyguard. */
@@ -189,7 +194,6 @@
@Inject
constructor(
statusBarStateController: StatusBarStateController,
- dozeHost: DozeHost,
wakefulnessLifecycle: WakefulnessLifecycle,
biometricUnlockController: BiometricUnlockController,
private val keyguardStateController: KeyguardStateController,
@@ -333,24 +337,19 @@
awaitClose { keyguardStateController.removeCallback(callback) }
}
- override val isDozing: Flow<Boolean> =
- conflatedCallbackFlow {
- val callback =
- object : DozeHost.Callback {
- override fun onDozingChanged(isDozing: Boolean) {
- trySendWithFailureLogging(isDozing, TAG, "updated isDozing")
- }
- }
- dozeHost.addCallback(callback)
- trySendWithFailureLogging(
- statusBarStateController.isDozing,
- TAG,
- "initial isDozing",
- )
+ private val _isDozing = MutableStateFlow(statusBarStateController.isDozing)
+ override val isDozing: StateFlow<Boolean> = _isDozing.asStateFlow()
- awaitClose { dozeHost.removeCallback(callback) }
- }
- .distinctUntilChanged()
+ override fun setIsDozing(isDozing: Boolean) {
+ _isDozing.value = isDozing
+ }
+
+ private val _lastDozeTapToWakePosition = MutableStateFlow<Point?>(null)
+ override val lastDozeTapToWakePosition = _lastDozeTapToWakePosition.asStateFlow()
+
+ override fun setLastDozeTapToWakePosition(position: Point) {
+ _lastDozeTapToWakePosition.value = position
+ }
override val isDreamingWithOverlay: Flow<Boolean> =
conflatedCallbackFlow {
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/LightRevealScrimRepository.kt b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/LightRevealScrimRepository.kt
index a17481a..482e9a3d 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/LightRevealScrimRepository.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/LightRevealScrimRepository.kt
@@ -24,7 +24,6 @@
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.keyguard.shared.model.BiometricUnlockModel
import com.android.systemui.keyguard.shared.model.BiometricUnlockSource
-import com.android.systemui.keyguard.shared.model.WakeSleepReason
import com.android.systemui.statusbar.CircleReveal
import com.android.systemui.statusbar.LiftReveal
import com.android.systemui.statusbar.LightRevealEffect
@@ -43,7 +42,7 @@
/**
* Encapsulates state relevant to the light reveal scrim, the view used to reveal/hide screen
- * contents during transitions between AOD and lockscreen/unlocked.
+ * contents during transitions between DOZE or AOD and lockscreen/unlocked.
*/
interface LightRevealScrimRepository {
@@ -64,13 +63,20 @@
) : LightRevealScrimRepository {
/** The reveal effect used if the device was locked/unlocked via the power button. */
- private val powerButtonReveal =
- PowerButtonReveal(
- context.resources
- .getDimensionPixelSize(R.dimen.physical_power_button_center_screen_location_y)
- .toFloat()
+ private val powerButtonRevealEffect: Flow<LightRevealEffect?> =
+ flowOf(
+ PowerButtonReveal(
+ context.resources
+ .getDimensionPixelSize(R.dimen.physical_power_button_center_screen_location_y)
+ .toFloat()
+ )
)
+ private val tapRevealEffect: Flow<LightRevealEffect?> =
+ keyguardRepository.lastDozeTapToWakePosition.map {
+ it?.let { constructCircleRevealFromPoint(it) }
+ }
+
/**
* Reveal effect to use for a fingerprint unlock. This is reconstructed if the fingerprint
* sensor location on the screen (in pixels) changes due to configuration changes.
@@ -102,18 +108,11 @@
/** The reveal effect we'll use for the next non-biometric unlock (tap, power button, etc). */
private val nonBiometricRevealEffect: Flow<LightRevealEffect?> =
- keyguardRepository.wakefulness.map { wakefulnessModel ->
- val wakingUpFromPowerButton =
- wakefulnessModel.isWakingUpOrAwake &&
- wakefulnessModel.lastWakeReason == WakeSleepReason.POWER_BUTTON
- val sleepingFromPowerButton =
- !wakefulnessModel.isWakingUpOrAwake &&
- wakefulnessModel.lastSleepReason == WakeSleepReason.POWER_BUTTON
-
- if (wakingUpFromPowerButton || sleepingFromPowerButton) {
- powerButtonReveal
- } else {
- LiftReveal
+ keyguardRepository.wakefulness.flatMapLatest { wakefulnessModel ->
+ when {
+ wakefulnessModel.isTransitioningFromPowerButton() -> powerButtonRevealEffect
+ wakefulnessModel.isAwakeFromTap() -> tapRevealEffect
+ else -> flowOf(LiftReveal)
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/TrustRepository.kt b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/TrustRepository.kt
index 1fa018b..e490669 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/TrustRepository.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/TrustRepository.kt
@@ -22,6 +22,7 @@
import com.android.systemui.common.coroutine.ConflatedCallbackFlow.conflatedCallbackFlow
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
+import com.android.systemui.keyguard.shared.model.TrustManagedModel
import com.android.systemui.keyguard.shared.model.TrustModel
import com.android.systemui.user.data.repository.UserRepository
import javax.inject.Inject
@@ -37,6 +38,7 @@
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.flow.onStart
import kotlinx.coroutines.flow.shareIn
+import kotlinx.coroutines.flow.stateIn
/** Encapsulates any state relevant to trust agents and trust grants. */
interface TrustRepository {
@@ -45,6 +47,9 @@
/** Flow representing whether active unlock is available for the current user. */
val isCurrentUserActiveUnlockAvailable: StateFlow<Boolean>
+
+ /** Reports that whether trust is managed has changed for the current user. */
+ val isCurrentUserTrustManaged: StateFlow<Boolean>
}
@SysUISingleton
@@ -57,6 +62,7 @@
private val logger: TrustRepositoryLogger,
) : TrustRepository {
private val latestTrustModelForUser = mutableMapOf<Int, TrustModel>()
+ private val trustManagedForUser = mutableMapOf<Int, TrustManagedModel>()
private val trust =
conflatedCallbackFlow {
@@ -79,9 +85,16 @@
override fun onTrustError(message: CharSequence?) = Unit
- override fun onTrustManagedChanged(enabled: Boolean, userId: Int) = Unit
-
override fun onEnabledTrustAgentsChanged(userId: Int) = Unit
+
+ override fun onTrustManagedChanged(isTrustManaged: Boolean, userId: Int) {
+ logger.onTrustManagedChanged(isTrustManaged, userId)
+ trySendWithFailureLogging(
+ TrustManagedModel(userId, isTrustManaged),
+ TrustRepositoryLogger.TAG,
+ "onTrustManagedChanged"
+ )
+ }
}
trustManager.registerTrustListener(callback)
logger.trustListenerRegistered()
@@ -91,18 +104,43 @@
}
}
.onEach {
- latestTrustModelForUser[it.userId] = it
- logger.trustModelEmitted(it)
+ when (it) {
+ is TrustModel -> {
+ latestTrustModelForUser[it.userId] = it
+ logger.trustModelEmitted(it)
+ }
+ is TrustManagedModel -> {
+ trustManagedForUser[it.userId] = it
+ logger.trustManagedModelEmitted(it)
+ }
+ }
}
.shareIn(applicationScope, started = SharingStarted.Eagerly, replay = 1)
- override val isCurrentUserTrusted: Flow<Boolean> =
- combine(trust, userRepository.selectedUserInfo, ::Pair)
- .map { latestTrustModelForUser[it.second.id]?.isTrusted ?: false }
- .distinctUntilChanged()
- .onEach { logger.isCurrentUserTrusted(it) }
- .onStart { emit(false) }
-
// TODO: Implement based on TrustManager callback b/267322286
override val isCurrentUserActiveUnlockAvailable: StateFlow<Boolean> = MutableStateFlow(true)
+
+ override val isCurrentUserTrustManaged: StateFlow<Boolean>
+ get() =
+ combine(trust, userRepository.selectedUserInfo, ::Pair)
+ .map { isUserTrustManaged(it.second.id) }
+ .distinctUntilChanged()
+ .onEach { logger.isCurrentUserTrustManaged(it) }
+ .onStart { emit(false) }
+ .stateIn(
+ scope = applicationScope,
+ started = SharingStarted.WhileSubscribed(),
+ initialValue = false
+ )
+
+ private fun isUserTrustManaged(userId: Int) =
+ trustManagedForUser[userId]?.isTrustManaged ?: false
+
+ override val isCurrentUserTrusted: Flow<Boolean>
+ get() =
+ combine(trust, userRepository.selectedUserInfo, ::Pair)
+ .map { latestTrustModelForUser[it.second.id]?.isTrusted ?: false }
+ .distinctUntilChanged()
+ .onEach { logger.isCurrentUserTrusted(it) }
+ .onStart { emit(false) }
}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/DozeInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/DozeInteractor.kt
new file mode 100644
index 0000000..2efcd0c
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/DozeInteractor.kt
@@ -0,0 +1,38 @@
+/*
+ * 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.keyguard.domain.interactor
+
+import android.graphics.Point
+import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.keyguard.data.repository.KeyguardRepository
+import javax.inject.Inject
+
+@SysUISingleton
+class DozeInteractor
+@Inject
+constructor(
+ private val keyguardRepository: KeyguardRepository,
+) {
+
+ fun setIsDozing(isDozing: Boolean) {
+ keyguardRepository.setIsDozing(isDozing)
+ }
+
+ fun setLastTapToWakePosition(position: Point) {
+ keyguardRepository.setLastDozeTapToWakePosition(position)
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromAlternateBouncerTransitionInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromAlternateBouncerTransitionInteractor.kt
index cde67f9..38eacce 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromAlternateBouncerTransitionInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromAlternateBouncerTransitionInteractor.kt
@@ -24,6 +24,8 @@
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.shared.model.TransitionInfo
import com.android.systemui.keyguard.shared.model.WakefulnessState
+import com.android.systemui.util.kotlin.Utils.Companion.toQuad
+import com.android.systemui.util.kotlin.Utils.Companion.toQuint
import com.android.systemui.util.kotlin.sample
import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromDozingTransitionInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromDozingTransitionInteractor.kt
index aca4019..323fc31 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromDozingTransitionInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromDozingTransitionInteractor.kt
@@ -24,13 +24,11 @@
import com.android.systemui.keyguard.shared.model.BiometricUnlockModel.Companion.isWakeAndUnlock
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.shared.model.TransitionInfo
-import com.android.systemui.keyguard.shared.model.WakefulnessModel.Companion.isWakingOrStartingToWake
import com.android.systemui.util.kotlin.sample
import javax.inject.Inject
import kotlin.time.Duration
import kotlin.time.Duration.Companion.milliseconds
import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.launch
@SysUISingleton
@@ -54,7 +52,7 @@
.sample(keyguardTransitionInteractor.startedKeyguardTransitionStep, ::Pair)
.collect { (wakefulnessModel, lastStartedTransition) ->
if (
- isWakingOrStartingToWake(wakefulnessModel) &&
+ wakefulnessModel.isStartingToWake() &&
lastStartedTransition.to == KeyguardState.DOZING
) {
keyguardTransitionRepository.startTransition(
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromDreamingTransitionInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromDreamingTransitionInteractor.kt
index fc7bfb4..36c8eb1 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromDreamingTransitionInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromDreamingTransitionInteractor.kt
@@ -26,13 +26,13 @@
import com.android.systemui.keyguard.shared.model.DozeStateModel.Companion.isDozeOff
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.shared.model.TransitionInfo
+import com.android.systemui.util.kotlin.Utils.Companion.toTriple
import com.android.systemui.util.kotlin.sample
import javax.inject.Inject
import kotlin.time.Duration
import kotlin.time.Duration.Companion.milliseconds
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.delay
-import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.launch
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromGoneTransitionInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromGoneTransitionInteractor.kt
index 39c630b..cfcb654 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromGoneTransitionInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromGoneTransitionInteractor.kt
@@ -24,6 +24,7 @@
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.shared.model.TransitionInfo
import com.android.systemui.keyguard.shared.model.WakefulnessState
+import com.android.systemui.util.kotlin.Utils.Companion.toTriple
import com.android.systemui.util.kotlin.sample
import javax.inject.Inject
import kotlin.time.Duration
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromLockscreenTransitionInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromLockscreenTransitionInteractor.kt
index 0505d37..b5e289f 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromLockscreenTransitionInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromLockscreenTransitionInteractor.kt
@@ -27,6 +27,8 @@
import com.android.systemui.keyguard.shared.model.TransitionState
import com.android.systemui.keyguard.shared.model.WakefulnessState
import com.android.systemui.shade.data.repository.ShadeRepository
+import com.android.systemui.util.kotlin.Utils.Companion.toQuad
+import com.android.systemui.util.kotlin.Utils.Companion.toTriple
import com.android.systemui.util.kotlin.sample
import java.util.UUID
import javax.inject.Inject
@@ -144,7 +146,7 @@
keyguardTransitionInteractor.startedKeyguardTransitionStep,
keyguardInteractor.statusBarState,
keyguardInteractor.isKeyguardUnlocked,
- ::toTriple
+ ::Triple
),
::toQuad
)
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromOccludedTransitionInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromOccludedTransitionInteractor.kt
index 47846d1..b0dbc59 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromOccludedTransitionInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromOccludedTransitionInteractor.kt
@@ -24,12 +24,12 @@
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.shared.model.TransitionInfo
import com.android.systemui.keyguard.shared.model.WakefulnessState
+import com.android.systemui.util.kotlin.Utils.Companion.toTriple
import com.android.systemui.util.kotlin.sample
import javax.inject.Inject
import kotlin.time.Duration
import kotlin.time.Duration.Companion.milliseconds
import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.launch
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromPrimaryBouncerTransitionInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromPrimaryBouncerTransitionInteractor.kt
index bc55bd4..da09e1f 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromPrimaryBouncerTransitionInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromPrimaryBouncerTransitionInteractor.kt
@@ -27,6 +27,7 @@
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.shared.model.TransitionInfo
import com.android.systemui.keyguard.shared.model.WakefulnessState
+import com.android.systemui.util.kotlin.Utils.Companion.toQuad
import com.android.systemui.util.kotlin.sample
import javax.inject.Inject
import kotlin.time.Duration
@@ -60,7 +61,7 @@
keyguardInteractor.wakefulnessModel,
keyguardTransitionInteractor.startedKeyguardTransitionStep,
keyguardInteractor.isKeyguardOccluded,
- ::toTriple
+ ::Triple
),
::toQuad
)
@@ -100,7 +101,7 @@
keyguardInteractor.wakefulnessModel,
keyguardTransitionInteractor.startedKeyguardTransitionStep,
keyguardInteractor.isAodAvailable,
- ::toTriple
+ ::Triple
),
::toQuad
)
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractor.kt
index 1ac0c52..3cf9a9e 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractor.kt
@@ -33,7 +33,6 @@
import com.android.systemui.keyguard.shared.model.DozeTransitionModel
import com.android.systemui.keyguard.shared.model.StatusBarState
import com.android.systemui.keyguard.shared.model.WakefulnessModel
-import com.android.systemui.keyguard.shared.model.WakefulnessModel.Companion.isWakingOrStartingToWake
import com.android.systemui.statusbar.CommandQueue
import com.android.systemui.util.kotlin.sample
import javax.inject.Inject
@@ -108,18 +107,12 @@
*/
val isAbleToDream: Flow<Boolean> =
merge(isDreaming, isDreamingWithOverlay)
- .combine(
- dozeTransitionModel,
- { isDreaming, dozeTransitionModel ->
- isDreaming && isDozeOff(dozeTransitionModel.to)
- }
- )
- .sample(
- wakefulnessModel,
- { isAbleToDream, wakefulnessModel ->
- isAbleToDream && isWakingOrStartingToWake(wakefulnessModel)
- }
- )
+ .combine(dozeTransitionModel) { isDreaming, dozeTransitionModel ->
+ isDreaming && isDozeOff(dozeTransitionModel.to)
+ }
+ .sample(wakefulnessModel) { isAbleToDream, wakefulnessModel ->
+ isAbleToDream && wakefulnessModel.isStartingToWake()
+ }
.flatMapLatest { isAbleToDream ->
flow {
delay(50)
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/TransitionInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/TransitionInteractor.kt
index e3e3527..b7dd1a5 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/TransitionInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/TransitionInteractor.kt
@@ -27,29 +27,5 @@
* 'when' clause of [KeyguardTransitionCoreStartable]
*/
sealed class TransitionInteractor(val name: String) {
-
abstract fun start()
-
- fun <A, B, C> toTriple(a: A, b: B, c: C) = Triple(a, b, c)
-
- fun <A, B, C> toTriple(a: A, bc: Pair<B, C>) = Triple(a, bc.first, bc.second)
-
- fun <A, B, C> toTriple(ab: Pair<A, B>, c: C) = Triple(ab.first, ab.second, c)
-
- fun <A, B, C, D> toQuad(a: A, b: B, c: C, d: D) = Quad(a, b, c, d)
-
- fun <A, B, C, D> toQuad(a: A, bcd: Triple<B, C, D>) = Quad(a, bcd.first, bcd.second, bcd.third)
-
- fun <A, B, C, D, E> toQuint(a: A, bcde: Quad<B, C, D, E>) =
- Quint(a, bcde.first, bcde.second, bcde.third, bcde.fourth)
}
-
-data class Quad<A, B, C, D>(val first: A, val second: B, val third: C, val fourth: D)
-
-data class Quint<A, B, C, D, E>(
- val first: A,
- val second: B,
- val third: C,
- val fourth: D,
- val fifth: E
-)
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/TrustModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/TrustModel.kt
index 4fd14b1..cdfab1a 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/TrustModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/TrustModel.kt
@@ -16,10 +16,18 @@
package com.android.systemui.keyguard.shared.model
+sealed class TrustMessage
+
/** Represents the trust state */
data class TrustModel(
/** If true, the system believes the environment to be trusted. */
val isTrusted: Boolean,
/** The user, for which the trust changed. */
val userId: Int,
-)
+) : TrustMessage()
+
+/** Represents where trust agents are enabled for a particular user. */
+data class TrustManagedModel(
+ val userId: Int,
+ val isTrustManaged: Boolean,
+) : TrustMessage()
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/WakeSleepReason.kt b/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/WakeSleepReason.kt
index b32597d..51ce7ff 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/WakeSleepReason.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/WakeSleepReason.kt
@@ -23,6 +23,9 @@
/** The physical power button was pressed to wake up or sleep the device. */
POWER_BUTTON,
+ /** The user has taped or double tapped to wake the screen */
+ TAP,
+
/** Something else happened to wake up or sleep the device. */
OTHER;
@@ -30,6 +33,7 @@
fun fromPowerManagerWakeReason(reason: Int): WakeSleepReason {
return when (reason) {
PowerManager.WAKE_REASON_POWER_BUTTON -> POWER_BUTTON
+ PowerManager.WAKE_REASON_TAP -> TAP
else -> OTHER
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/WakefulnessModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/WakefulnessModel.kt
index 03dee00..7ca90ba 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/WakefulnessModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/WakefulnessModel.kt
@@ -20,26 +20,31 @@
/** Model device wakefulness states. */
data class WakefulnessModel(
val state: WakefulnessState,
- val isWakingUpOrAwake: Boolean,
val lastWakeReason: WakeSleepReason,
val lastSleepReason: WakeSleepReason,
) {
+ fun isStartingToWake() = state == WakefulnessState.STARTING_TO_WAKE
+
+ fun isStartingToSleep() = state == WakefulnessState.STARTING_TO_SLEEP
+
+ fun isStartingToSleepOrAsleep() = isStartingToSleep() || state == WakefulnessState.ASLEEP
+
+ fun isStartingToSleepFromPowerButton() =
+ isStartingToSleep() && lastWakeReason == WakeSleepReason.POWER_BUTTON
+
+ fun isWakingFromPowerButton() =
+ isStartingToWake() && lastWakeReason == WakeSleepReason.POWER_BUTTON
+
+ fun isTransitioningFromPowerButton() =
+ isStartingToSleepFromPowerButton() || isWakingFromPowerButton()
+
+ fun isAwakeFromTap() =
+ state == WakefulnessState.STARTING_TO_WAKE && lastWakeReason == WakeSleepReason.TAP
+
companion object {
- fun isSleepingOrStartingToSleep(model: WakefulnessModel): Boolean {
- return model.state == WakefulnessState.ASLEEP ||
- model.state == WakefulnessState.STARTING_TO_SLEEP
- }
-
- fun isWakingOrStartingToWake(model: WakefulnessModel): Boolean {
- return model.state == WakefulnessState.AWAKE ||
- model.state == WakefulnessState.STARTING_TO_WAKE
- }
-
fun fromWakefulnessLifecycle(wakefulnessLifecycle: WakefulnessLifecycle): WakefulnessModel {
return WakefulnessModel(
WakefulnessState.fromWakefulnessLifecycleInt(wakefulnessLifecycle.wakefulness),
- wakefulnessLifecycle.wakefulness == WakefulnessLifecycle.WAKEFULNESS_WAKING ||
- wakefulnessLifecycle.wakefulness == WakefulnessLifecycle.WAKEFULNESS_AWAKE,
WakeSleepReason.fromPowerManagerWakeReason(wakefulnessLifecycle.lastWakeReason),
WakeSleepReason.fromPowerManagerSleepReason(wakefulnessLifecycle.lastSleepReason),
)
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardBottomAreaVibrations.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardBottomAreaVibrations.kt
index 568db2f..e7803c5 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardBottomAreaVibrations.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardBottomAreaVibrations.kt
@@ -31,7 +31,9 @@
VibrationEffect.startComposition()
.apply {
val vibrationDelayMs =
- (ShakeAnimationDuration.inWholeMilliseconds / ShakeAnimationCycles * 2).toInt()
+ (ShakeAnimationDuration.inWholeMilliseconds / (ShakeAnimationCycles * 2))
+ .toInt()
+
val vibrationCount = ShakeAnimationCycles.toInt() * 2
repeat(vibrationCount) {
addPrimitive(
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 ad11360..3aa57dd 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
@@ -273,7 +273,7 @@
val finger =
LayoutInflater.from(context)
.inflate(
- R.layout.udfps_keyguard_view_internal,
+ R.layout.udfps_keyguard_preview,
parentView,
false,
) as View
diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputAdapter.java b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputAdapter.java
index f50a7a8..d949cf56f 100644
--- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputAdapter.java
+++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputAdapter.java
@@ -37,11 +37,13 @@
import androidx.core.widget.CompoundButtonCompat;
import androidx.recyclerview.widget.RecyclerView;
+import com.android.internal.annotations.VisibleForTesting;
import com.android.settingslib.media.LocalMediaManager.MediaDeviceState;
import com.android.settingslib.media.MediaDevice;
import com.android.systemui.R;
import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
/**
* Adapter for media output dialog.
@@ -52,6 +54,7 @@
private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
private static final float DEVICE_DISCONNECTED_ALPHA = 0.5f;
private static final float DEVICE_CONNECTED_ALPHA = 1f;
+ protected List<MediaItem> mMediaItemList = new CopyOnWriteArrayList<>();
public MediaOutputAdapter(MediaOutputController controller) {
super(controller);
@@ -59,6 +62,13 @@
}
@Override
+ public void updateItems() {
+ mMediaItemList.clear();
+ mMediaItemList.addAll(mController.getMediaItemList());
+ notifyDataSetChanged();
+ }
+
+ @Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup,
int viewType) {
super.onCreateViewHolder(viewGroup, viewType);
@@ -79,14 +89,14 @@
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int position) {
if (mController.isAdvancedLayoutSupported()) {
- if (position >= mController.getMediaItemList().size()) {
+ if (position >= mMediaItemList.size()) {
if (DEBUG) {
Log.d(TAG, "Incorrect position: " + position + " list size: "
- + mController.getMediaItemList().size());
+ + mMediaItemList.size());
}
return;
}
- MediaItem currentMediaItem = mController.getMediaItemList().get(position);
+ MediaItem currentMediaItem = mMediaItemList.get(position);
switch (currentMediaItem.getMediaItemType()) {
case MediaItem.MediaItemType.TYPE_GROUP_DIVIDER:
((MediaGroupDividerViewHolder) viewHolder).onBind(currentMediaItem.getTitle());
@@ -119,11 +129,11 @@
@Override
public long getItemId(int position) {
if (mController.isAdvancedLayoutSupported()) {
- if (position >= mController.getMediaItemList().size()) {
+ if (position >= mMediaItemList.size()) {
Log.d(TAG, "Incorrect position for item id: " + position);
return position;
}
- MediaItem currentMediaItem = mController.getMediaItemList().get(position);
+ MediaItem currentMediaItem = mMediaItemList.get(position);
return currentMediaItem.getMediaDevice().isPresent()
? currentMediaItem.getMediaDevice().get().getId().hashCode()
: position;
@@ -143,12 +153,12 @@
@Override
public int getItemViewType(int position) {
if (mController.isAdvancedLayoutSupported()
- && position >= mController.getMediaItemList().size()) {
+ && position >= mMediaItemList.size()) {
Log.d(TAG, "Incorrect position for item type: " + position);
return MediaItem.MediaItemType.TYPE_GROUP_DIVIDER;
}
return mController.isAdvancedLayoutSupported()
- ? mController.getMediaItemList().get(position).getMediaItemType()
+ ? mMediaItemList.get(position).getMediaItemType()
: super.getItemViewType(position);
}
@@ -156,7 +166,7 @@
public int getItemCount() {
// Add extra one for "pair new"
return mController.isAdvancedLayoutSupported()
- ? mController.getMediaItemList().size()
+ ? mMediaItemList.size()
: mController.getMediaDevices().size() + 1;
}
@@ -482,6 +492,14 @@
}
private void onItemClick(View view, MediaDevice device) {
+ if (mController.isCurrentOutputDeviceHasSessionOngoing()) {
+ showCustomEndSessionDialog(device);
+ } else {
+ transferOutput(device);
+ }
+ }
+
+ private void transferOutput(MediaDevice device) {
if (mController.isAnyDeviceTransferring()) {
return;
}
@@ -496,6 +514,14 @@
notifyDataSetChanged();
}
+ @VisibleForTesting
+ void showCustomEndSessionDialog(MediaDevice device) {
+ MediaSessionReleaseDialog mediaSessionReleaseDialog = new MediaSessionReleaseDialog(
+ mContext, () -> transferOutput(device), mController.getColorButtonBackground(),
+ mController.getColorItemContent());
+ mediaSessionReleaseDialog.show();
+ }
+
private void cancelMuteAwaitConnection() {
mController.cancelMuteAwaitConnection();
notifyDataSetChanged();
diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseAdapter.java b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseAdapter.java
index 73ab5272..151dbb2 100644
--- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseAdapter.java
+++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseAdapter.java
@@ -81,6 +81,11 @@
mIsInitVolumeFirstTime = true;
}
+ /**
+ * Refresh current dataset
+ */
+ public abstract void updateItems();
+
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup,
int viewType) {
diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseDialog.java b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseDialog.java
index 08e47a0..770e4df 100644
--- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseDialog.java
+++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseDialog.java
@@ -382,7 +382,7 @@
&& currentActivePosition < mAdapter.getItemCount()) {
mAdapter.notifyItemChanged(currentActivePosition);
} else {
- mAdapter.notifyDataSetChanged();
+ mAdapter.updateItems();
}
} else {
mMediaOutputController.setRefreshing(false);
diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java
index 8e014c6..822644b 100644
--- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java
+++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java
@@ -783,6 +783,12 @@
currentConnectedMediaDevice);
}
+ boolean isCurrentOutputDeviceHasSessionOngoing() {
+ MediaDevice currentConnectedMediaDevice = getCurrentConnectedMediaDevice();
+ return currentConnectedMediaDevice != null
+ && (currentConnectedMediaDevice.isHostForOngoingSession());
+ }
+
public boolean isAdvancedLayoutSupported() {
return mFeatureFlags.isEnabled(Flags.OUTPUT_SWITCHER_ADVANCED_LAYOUT);
}
diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaSessionReleaseDialog.java b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaSessionReleaseDialog.java
new file mode 100644
index 0000000..2680a2f
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaSessionReleaseDialog.java
@@ -0,0 +1,89 @@
+/*
+ * 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.media.dialog;
+
+import android.content.Context;
+import android.content.res.ColorStateList;
+import android.graphics.ColorFilter;
+import android.graphics.PorterDuff;
+import android.graphics.PorterDuffColorFilter;
+import android.os.Bundle;
+import android.view.Gravity;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.Window;
+import android.view.WindowManager;
+import android.widget.Button;
+import android.widget.ImageView;
+
+import com.android.systemui.R;
+import com.android.systemui.statusbar.phone.SystemUIDialog;
+
+/**
+ * Confirmation dialog for releasing media session
+ */
+
+public class MediaSessionReleaseDialog extends SystemUIDialog {
+
+ private View mDialogView;
+
+ private final Context mContext;
+ private final View.OnClickListener mPositiveButtonListener;
+ private final ColorFilter mButtonColorFilter;
+ private final int mIconColor;
+
+ public MediaSessionReleaseDialog(Context context, Runnable runnable, int buttonColor,
+ int iconColor) {
+ super(context, R.style.Theme_SystemUI_Dialog_Media);
+ mContext = getContext();
+ mPositiveButtonListener = (v) -> {
+ runnable.run();
+ dismiss();
+ };
+ mButtonColorFilter = new PorterDuffColorFilter(
+ buttonColor,
+ PorterDuff.Mode.SRC_IN);
+ mIconColor = iconColor;
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ mDialogView = LayoutInflater.from(mContext).inflate(R.layout.media_session_end_dialog,
+ null);
+ final Window window = getWindow();
+ window.setType(WindowManager.LayoutParams.TYPE_STATUS_BAR_SUB_PANEL);
+ window.setContentView(mDialogView);
+
+ final WindowManager.LayoutParams lp = window.getAttributes();
+ lp.gravity = Gravity.CENTER;
+ lp.width = (int) (mContext.getResources().getDisplayMetrics().widthPixels * 0.90);
+
+ ImageView headerIcon = mDialogView.requireViewById(R.id.end_icon);
+ headerIcon.setImageDrawable(mContext.getDrawable(R.drawable.media_output_status_failed));
+ headerIcon.setImageTintList(
+ ColorStateList.valueOf(mIconColor));
+
+ Button stopButton = mDialogView.requireViewById(R.id.stop_button);
+ stopButton.setOnClickListener(mPositiveButtonListener);
+ stopButton.getBackground().setColorFilter(mButtonColorFilter);
+
+ Button cancelButton = mDialogView.requireViewById(R.id.cancel_button);
+ cancelButton.setOnClickListener((v) -> dismiss());
+ cancelButton.getBackground().setColorFilter(mButtonColorFilter);
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskController.kt b/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskController.kt
index 7e9b346..9eb3d2d 100644
--- a/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskController.kt
+++ b/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskController.kt
@@ -41,6 +41,7 @@
import com.android.systemui.log.DebugLogger.debugLog
import com.android.systemui.notetask.NoteTaskRoleManagerExt.createNoteShortcutInfoAsUser
import com.android.systemui.notetask.NoteTaskRoleManagerExt.getDefaultRoleHolderAsUser
+import com.android.systemui.notetask.shortcut.CreateNoteTaskShortcutActivity
import com.android.systemui.notetask.shortcut.LaunchNoteTaskManagedProfileProxyActivity
import com.android.systemui.settings.UserTracker
import com.android.systemui.shared.system.ActivityManagerKt.isInForeground
@@ -249,6 +250,8 @@
* Widget Picker to all users.
*/
fun setNoteTaskShortcutEnabled(value: Boolean, user: UserHandle) {
+ val componentName = ComponentName(context, CreateNoteTaskShortcutActivity::class.java)
+
val enabledState =
if (value) {
PackageManager.COMPONENT_ENABLED_STATE_ENABLED
@@ -267,7 +270,7 @@
}
userContext.packageManager.setComponentEnabledSetting(
- SETTINGS_CREATE_NOTE_TASK_SHORTCUT_COMPONENT,
+ componentName,
enabledState,
PackageManager.DONT_KILL_APP,
)
@@ -315,19 +318,6 @@
companion object {
val TAG = NoteTaskController::class.simpleName.orEmpty()
- /**
- * IMPORTANT! The shortcut package name and class should be synchronized with Settings:
- * [com.android.settings.notetask.shortcut.CreateNoteTaskShortcutActivity].
- *
- * Changing the package name or class is a breaking change.
- */
- @VisibleForTesting
- val SETTINGS_CREATE_NOTE_TASK_SHORTCUT_COMPONENT =
- ComponentName(
- "com.android.settings",
- "com.android.settings.notetask.shortcut.CreateNoteTaskShortcutActivity",
- )
-
const val SHORTCUT_ID = "note_task_shortcut_id"
/**
diff --git a/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskModule.kt b/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskModule.kt
index 4d5173a..109cfee 100644
--- a/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskModule.kt
+++ b/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskModule.kt
@@ -24,6 +24,7 @@
import com.android.systemui.flags.FeatureFlags
import com.android.systemui.flags.Flags
import com.android.systemui.notetask.quickaffordance.NoteTaskQuickAffordanceModule
+import com.android.systemui.notetask.shortcut.CreateNoteTaskShortcutActivity
import com.android.systemui.notetask.shortcut.LaunchNoteTaskActivity
import com.android.systemui.notetask.shortcut.LaunchNoteTaskManagedProfileProxyActivity
import dagger.Binds
@@ -49,6 +50,9 @@
fun LaunchNotesRoleSettingsTrampolineActivity.bindLaunchNotesRoleSettingsTrampolineActivity():
Activity
+ @[Binds IntoMap ClassKey(CreateNoteTaskShortcutActivity::class)]
+ fun CreateNoteTaskShortcutActivity.bindNoteTaskShortcutActivity(): Activity
+
companion object {
@[Provides NoteTaskEnabledKey]
diff --git a/packages/SystemUI/src/com/android/systemui/notetask/shortcut/CreateNoteTaskShortcutActivity.kt b/packages/SystemUI/src/com/android/systemui/notetask/shortcut/CreateNoteTaskShortcutActivity.kt
new file mode 100644
index 0000000..4da2896
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/notetask/shortcut/CreateNoteTaskShortcutActivity.kt
@@ -0,0 +1,55 @@
+/*
+ * 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.
+ */
+
+@file:OptIn(InternalNoteTaskApi::class)
+
+package com.android.systemui.notetask.shortcut
+
+import android.app.Activity
+import android.app.role.RoleManager
+import android.content.pm.ShortcutManager
+import android.os.Bundle
+import androidx.activity.ComponentActivity
+import com.android.systemui.notetask.InternalNoteTaskApi
+import com.android.systemui.notetask.NoteTaskRoleManagerExt.createNoteShortcutInfoAsUser
+import javax.inject.Inject
+
+/**
+ * Activity responsible for creating a shortcut for notes action. If the shortcut is enabled, a new
+ * shortcut will appear in the widget picker. If the shortcut is selected, the Activity here will be
+ * launched, creating a new shortcut for [CreateNoteTaskShortcutActivity], and will finish.
+ *
+ * @see <a
+ * href="https://developer.android.com/develop/ui/views/launch/shortcuts/creating-shortcuts#custom-pinned">Creating
+ * a custom shortcut activity</a>
+ */
+class CreateNoteTaskShortcutActivity
+@Inject
+constructor(
+ private val roleManager: RoleManager,
+ private val shortcutManager: ShortcutManager,
+) : ComponentActivity() {
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+
+ val shortcutInfo = roleManager.createNoteShortcutInfoAsUser(context = this, user)
+ val shortcutIntent = shortcutManager.createShortcutResultIntent(shortcutInfo)
+ setResult(Activity.RESULT_OK, shortcutIntent)
+
+ finish()
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/external/TileLifecycleManager.java b/packages/SystemUI/src/com/android/systemui/qs/external/TileLifecycleManager.java
index 385e720..2469a98 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/external/TileLifecycleManager.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/external/TileLifecycleManager.java
@@ -42,7 +42,9 @@
import androidx.annotation.WorkerThread;
import com.android.systemui.broadcast.BroadcastDispatcher;
+import com.android.systemui.dagger.qualifiers.Background;
import com.android.systemui.dagger.qualifiers.Main;
+import com.android.systemui.util.concurrency.DelayableExecutor;
import dagger.assisted.Assisted;
import dagger.assisted.AssistedFactory;
@@ -88,6 +90,7 @@
private final Handler mHandler;
private final Intent mIntent;
private final UserHandle mUser;
+ private final DelayableExecutor mExecutor;
private final IBinder mToken = new Binder();
private final PackageManagerAdapter mPackageManagerAdapter;
private final BroadcastDispatcher mBroadcastDispatcher;
@@ -100,25 +103,27 @@
private int mBindTryCount;
private int mBindRetryDelay = DEFAULT_BIND_RETRY_DELAY;
- private boolean mBound;
+ private AtomicBoolean mBound = new AtomicBoolean(false);
private AtomicBoolean mPackageReceiverRegistered = new AtomicBoolean(false);
private AtomicBoolean mUserReceiverRegistered = new AtomicBoolean(false);
- private boolean mUnbindImmediate;
+ private AtomicBoolean mUnbindImmediate = new AtomicBoolean(false);
@Nullable
private TileChangeListener mChangeListener;
// Return value from bindServiceAsUser, determines whether safe to call unbind.
- private boolean mIsBound;
+ private AtomicBoolean mIsBound = new AtomicBoolean(false);
@AssistedInject
TileLifecycleManager(@Main Handler handler, Context context, IQSService service,
PackageManagerAdapter packageManagerAdapter, BroadcastDispatcher broadcastDispatcher,
- @Assisted Intent intent, @Assisted UserHandle user) {
+ @Assisted Intent intent, @Assisted UserHandle user,
+ @Background DelayableExecutor executor) {
mContext = context;
mHandler = handler;
mIntent = intent;
mIntent.putExtra(TileService.EXTRA_SERVICE, service.asBinder());
mIntent.putExtra(TileService.EXTRA_TOKEN, mToken);
mUser = user;
+ mExecutor = executor;
mPackageManagerAdapter = packageManagerAdapter;
mBroadcastDispatcher = broadcastDispatcher;
if (DEBUG) Log.d(TAG, "Creating " + mIntent + " " + mUser);
@@ -184,22 +189,21 @@
* Binds just long enough to send any queued messages, then unbinds.
*/
public void flushMessagesAndUnbind() {
- mUnbindImmediate = true;
- setBindService(true);
+ mExecutor.execute(() -> {
+ mUnbindImmediate.set(true);
+ setBindService(true);
+ });
}
- /**
- * Binds or unbinds to IQSService
- */
@WorkerThread
- public void setBindService(boolean bind) {
- if (mBound && mUnbindImmediate) {
+ private void setBindService(boolean bind) {
+ if (mBound.get() && mUnbindImmediate.get()) {
// If we are already bound and expecting to unbind, this means we should stay bound
// because something else wants to hold the connection open.
- mUnbindImmediate = false;
+ mUnbindImmediate.set(false);
return;
}
- mBound = bind;
+ mBound.set(bind);
if (bind) {
if (mBindTryCount == MAX_BIND_RETRIES) {
// Too many failures, give up on this tile until an update.
@@ -212,31 +216,38 @@
if (DEBUG) Log.d(TAG, "Binding service " + mIntent + " " + mUser);
mBindTryCount++;
try {
- mIsBound = bindServices();
- if (!mIsBound) {
+ mIsBound.set(bindServices());
+ if (!mIsBound.get()) {
mContext.unbindService(this);
}
} catch (SecurityException e) {
Log.e(TAG, "Failed to bind to service", e);
- mIsBound = false;
+ mIsBound.set(false);
}
} else {
if (DEBUG) Log.d(TAG, "Unbinding service " + mIntent + " " + mUser);
// Give it another chance next time it needs to be bound, out of kindness.
mBindTryCount = 0;
freeWrapper();
- if (mIsBound) {
+ if (mIsBound.get()) {
try {
mContext.unbindService(this);
} catch (Exception e) {
Log.e(TAG, "Failed to unbind service "
+ mIntent.getComponent().flattenToShortString(), e);
}
- mIsBound = false;
+ mIsBound.set(false);
}
}
}
+ /**
+ * Binds or unbinds to IQSService
+ */
+ public void executeSetBindService(boolean bind) {
+ mExecutor.execute(() -> setBindService(bind));
+ }
+
private boolean bindServices() {
String packageName = mIntent.getComponent().getPackageName();
if (CompatChanges.isChangeEnabled(START_ACTIVITY_NEEDS_PENDING_INTENT, packageName,
@@ -317,10 +328,12 @@
}
onTileRemoved();
}
- if (mUnbindImmediate) {
- mUnbindImmediate = false;
- setBindService(false);
- }
+ mExecutor.execute(() -> {
+ if (mUnbindImmediate.get()) {
+ mUnbindImmediate.set(false);
+ setBindService(false);
+ }
+ });
}
public void handleDestroy() {
@@ -335,19 +348,11 @@
if (mWrapper == null) return;
freeWrapper();
// Clearly not bound anymore
- mIsBound = false;
- if (!mBound) return;
+ mIsBound.set(false);
+ if (!mBound.get()) return;
if (DEBUG) Log.d(TAG, "handleDeath");
if (checkComponentState()) {
- mHandler.postDelayed(new Runnable() {
- @Override
- public void run() {
- if (mBound) {
- // Retry binding.
- setBindService(true);
- }
- }
- }, mBindRetryDelay);
+ mExecutor.executeDelayed(() -> setBindService(true), mBindRetryDelay);
}
}
@@ -410,11 +415,15 @@
mChangeListener.onTileChanged(mIntent.getComponent());
}
stopPackageListening();
- if (mBound) {
- // Trying to bind again will check the state of the package before bothering to bind.
- if (DEBUG) Log.d(TAG, "Trying to rebind");
- setBindService(true);
- }
+ mExecutor.execute(() -> {
+ if (mBound.get()) {
+ // Trying to bind again will check the state of the package before bothering to
+ // bind.
+ if (DEBUG) Log.d(TAG, "Trying to rebind");
+ setBindService(true);
+ }
+
+ });
}
private boolean isComponentAvailable() {
diff --git a/packages/SystemUI/src/com/android/systemui/qs/external/TileServiceManager.java b/packages/SystemUI/src/com/android/systemui/qs/external/TileServiceManager.java
index 7a10a27..941a9d6 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/external/TileServiceManager.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/external/TileServiceManager.java
@@ -35,6 +35,7 @@
import com.android.systemui.qs.external.TileLifecycleManager.TileChangeListener;
import com.android.systemui.qs.pipeline.data.repository.CustomTileAddedRepository;
import com.android.systemui.settings.UserTracker;
+import com.android.systemui.util.concurrency.DelayableExecutor;
import java.util.List;
import java.util.Objects;
@@ -75,12 +76,12 @@
TileServiceManager(TileServices tileServices, Handler handler, ComponentName component,
BroadcastDispatcher broadcastDispatcher, UserTracker userTracker,
- CustomTileAddedRepository customTileAddedRepository) {
+ CustomTileAddedRepository customTileAddedRepository, DelayableExecutor executor) {
this(tileServices, handler, userTracker, customTileAddedRepository,
new TileLifecycleManager(handler, tileServices.getContext(), tileServices,
- new PackageManagerAdapter(tileServices.getContext()), broadcastDispatcher,
- new Intent(TileService.ACTION_QS_TILE).setComponent(component),
- userTracker.getUserHandle()));
+ new PackageManagerAdapter(tileServices.getContext()), broadcastDispatcher,
+ new Intent(TileService.ACTION_QS_TILE).setComponent(component),
+ userTracker.getUserHandle(), executor));
}
@VisibleForTesting
@@ -203,7 +204,7 @@
mBound = true;
mJustBound = true;
mHandler.postDelayed(mJustBoundOver, MIN_BIND_TIME);
- mStateManager.setBindService(true);
+ mStateManager.executeSetBindService(true);
}
private void unbindService() {
@@ -213,7 +214,7 @@
}
mBound = false;
mJustBound = false;
- mStateManager.setBindService(false);
+ mStateManager.executeSetBindService(false);
}
public void calculateBindPriority(long currentTime) {
diff --git a/packages/SystemUI/src/com/android/systemui/qs/external/TileServices.java b/packages/SystemUI/src/com/android/systemui/qs/external/TileServices.java
index 121955c..c8691ac 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/external/TileServices.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/external/TileServices.java
@@ -39,6 +39,7 @@
import com.android.internal.statusbar.StatusBarIcon;
import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.dagger.SysUISingleton;
+import com.android.systemui.dagger.qualifiers.Background;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.qs.QSHost;
import com.android.systemui.qs.pipeline.data.repository.CustomTileAddedRepository;
@@ -47,6 +48,7 @@
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.phone.StatusBarIconController;
import com.android.systemui.statusbar.policy.KeyguardStateController;
+import com.android.systemui.util.concurrency.DelayableExecutor;
import java.util.ArrayList;
import java.util.Collections;
@@ -79,6 +81,7 @@
private final StatusBarIconController mStatusBarIconController;
private final PanelInteractor mPanelInteractor;
private final CustomTileAddedRepository mCustomTileAddedRepository;
+ private final DelayableExecutor mBackgroundExecutor;
private int mMaxBound = DEFAULT_MAX_BOUND;
@@ -92,7 +95,8 @@
CommandQueue commandQueue,
StatusBarIconController statusBarIconController,
PanelInteractor panelInteractor,
- CustomTileAddedRepository customTileAddedRepository) {
+ CustomTileAddedRepository customTileAddedRepository,
+ @Background DelayableExecutor backgroundExecutor) {
mHost = host;
mKeyguardStateController = keyguardStateController;
mContext = mHost.getContext();
@@ -105,6 +109,7 @@
mCommandQueue.addCallback(mRequestListeningCallback);
mPanelInteractor = panelInteractor;
mCustomTileAddedRepository = customTileAddedRepository;
+ mBackgroundExecutor = backgroundExecutor;
}
public Context getContext() {
@@ -132,7 +137,7 @@
protected TileServiceManager onCreateTileService(ComponentName component,
BroadcastDispatcher broadcastDispatcher) {
return new TileServiceManager(this, mHandlerProvider.get(), component,
- broadcastDispatcher, mUserTracker, mCustomTileAddedRepository);
+ broadcastDispatcher, mUserTracker, mCustomTileAddedRepository, mBackgroundExecutor);
}
public void freeService(CustomTile tile, TileServiceManager service) {
@@ -339,9 +344,26 @@
verifyCaller(customTile);
return customTile.getQsTile();
}
+ Log.e(TAG, "Tile for token " + token + "not found. "
+ + "Tiles in map: " + availableTileComponents());
return null;
}
+ private String availableTileComponents() {
+ StringBuilder sb = new StringBuilder("[");
+ synchronized (mServices) {
+ mTokenMap.forEach((iBinder, customTile) ->
+ sb.append(iBinder.toString())
+ .append(":")
+ .append(customTile.getComponent().flattenToShortString())
+ .append(":")
+ .append(customTile.getUser())
+ .append(","));
+ }
+ sb.append("]");
+ return sb.toString();
+ }
+
@Override
public void startUnlockAndRun(IBinder token) {
CustomTile customTile = getTileForToken(token);
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/QuickAccessWalletTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/QuickAccessWalletTile.java
index e026bdb..544e6ad 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/QuickAccessWalletTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/QuickAccessWalletTile.java
@@ -16,6 +16,7 @@
package com.android.systemui.qs.tiles;
+import static android.graphics.drawable.Icon.TYPE_URI;
import static android.provider.Settings.Secure.NFC_PAYMENT_DEFAULT_COMPONENT;
import static com.android.systemui.wallet.controller.QuickAccessWalletController.WalletChangeEvent.DEFAULT_PAYMENT_APP_CHANGE;
@@ -225,7 +226,12 @@
return;
}
mSelectedCard = cards.get(selectedIndex);
- mCardViewDrawable = mSelectedCard.getCardImage().loadDrawable(mContext);
+ android.graphics.drawable.Icon cardImageIcon = mSelectedCard.getCardImage();
+ if (cardImageIcon.getType() == TYPE_URI) {
+ mCardViewDrawable = null;
+ } else {
+ mCardViewDrawable = mSelectedCard.getCardImage().loadDrawable(mContext);
+ }
refreshState();
}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java b/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java
index a43f520..07259c2 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java
@@ -205,8 +205,11 @@
// TODO move this logic to message queue
mCentralSurfacesOptionalLazy.get().ifPresent(centralSurfaces -> {
if (event.getActionMasked() == ACTION_DOWN) {
- centralSurfaces.getShadeViewController()
- .startExpandLatencyTracking();
+ ShadeViewController shadeViewController =
+ centralSurfaces.getShadeViewController();
+ if (shadeViewController != null) {
+ shadeViewController.startExpandLatencyTracking();
+ }
}
mHandler.post(() -> {
int action = event.getActionMasked();
diff --git a/packages/SystemUI/src/com/android/systemui/scene/data/model/SceneContainerConfig.kt b/packages/SystemUI/src/com/android/systemui/scene/data/model/SceneContainerConfig.kt
new file mode 100644
index 0000000..d0769eb
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/scene/data/model/SceneContainerConfig.kt
@@ -0,0 +1,46 @@
+/*
+ * 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.scene.data.model
+
+import com.android.systemui.scene.shared.model.SceneKey
+
+/** Models the configuration of a single scene container. */
+data class SceneContainerConfig(
+ /** Container name. Must be unique across all containers in System UI. */
+ val name: String,
+
+ /**
+ * The keys to all scenes in the container, sorted by z-order such that the last one renders on
+ * top of all previous ones. Scene keys within the same container must not repeat but it's okay
+ * to have the same scene keys in different containers.
+ */
+ val sceneKeys: List<SceneKey>,
+
+ /**
+ * The key of the scene that is the initial current scene when the container is first set up,
+ * before taking any application state in to account.
+ */
+ val initialSceneKey: SceneKey,
+) {
+ init {
+ check(sceneKeys.isNotEmpty()) { "A container must have at least one scene key." }
+
+ check(sceneKeys.contains(initialSceneKey)) {
+ "The initial key \"$initialSceneKey\" is not present in this container."
+ }
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/scene/data/repository/SceneContainerRepository.kt b/packages/SystemUI/src/com/android/systemui/scene/data/repository/SceneContainerRepository.kt
new file mode 100644
index 0000000..61b162b
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/scene/data/repository/SceneContainerRepository.kt
@@ -0,0 +1,136 @@
+/*
+ * 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.scene.data.repository
+
+import com.android.systemui.scene.data.model.SceneContainerConfig
+import com.android.systemui.scene.shared.model.SceneKey
+import com.android.systemui.scene.shared.model.SceneModel
+import javax.inject.Inject
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.StateFlow
+import kotlinx.coroutines.flow.asStateFlow
+
+/** Source of truth for scene framework application state. */
+class SceneContainerRepository
+@Inject
+constructor(
+ containerConfigurations: Set<SceneContainerConfig>,
+) {
+
+ private val containerConfigByName: Map<String, SceneContainerConfig> =
+ containerConfigurations.associateBy { config -> config.name }
+ private val containerVisibilityByName: Map<String, MutableStateFlow<Boolean>> =
+ containerConfigByName
+ .map { (containerName, _) -> containerName to MutableStateFlow(true) }
+ .toMap()
+ private val currentSceneByContainerName: Map<String, MutableStateFlow<SceneModel>> =
+ containerConfigByName
+ .map { (containerName, config) ->
+ containerName to MutableStateFlow(SceneModel(config.initialSceneKey))
+ }
+ .toMap()
+ private val sceneTransitionProgressByContainerName: Map<String, MutableStateFlow<Float>> =
+ containerConfigByName
+ .map { (containerName, _) -> containerName to MutableStateFlow(1f) }
+ .toMap()
+
+ init {
+ val repeatedContainerNames =
+ containerConfigurations
+ .groupingBy { config -> config.name }
+ .eachCount()
+ .filter { (_, count) -> count > 1 }
+ check(repeatedContainerNames.isEmpty()) {
+ "Container names must be unique. The following container names appear more than once: ${
+ repeatedContainerNames
+ .map { (name, count) -> "\"$name\" appears $count times" }
+ .joinToString(", ")
+ }"
+ }
+ }
+
+ /**
+ * Returns the keys to all scenes in the container with the given name.
+ *
+ * The scenes will be sorted in z-order such that the last one is the one that should be
+ * rendered on top of all previous ones.
+ */
+ fun allSceneKeys(containerName: String): List<SceneKey> {
+ return containerConfigByName[containerName]?.sceneKeys
+ ?: error(noSuchContainerErrorMessage(containerName))
+ }
+
+ /** Sets the current scene in the container with the given name. */
+ fun setCurrentScene(containerName: String, scene: SceneModel) {
+ check(allSceneKeys(containerName).contains(scene.key)) {
+ """
+ Cannot set current scene key to "${scene.key}". The container "$containerName" does
+ not contain a scene with that key.
+ """
+ .trimIndent()
+ }
+
+ currentSceneByContainerName.setValue(containerName, scene)
+ }
+
+ /** The current scene in the container with the given name. */
+ fun currentScene(containerName: String): StateFlow<SceneModel> {
+ return currentSceneByContainerName.mutableOrError(containerName).asStateFlow()
+ }
+
+ /** Sets whether the container with the given name is visible. */
+ fun setVisible(containerName: String, isVisible: Boolean) {
+ containerVisibilityByName.setValue(containerName, isVisible)
+ }
+
+ /** Whether the container with the given name should be visible. */
+ fun isVisible(containerName: String): StateFlow<Boolean> {
+ return containerVisibilityByName.mutableOrError(containerName).asStateFlow()
+ }
+
+ /** Sets scene transition progress to the current scene in the container with the given name. */
+ fun setSceneTransitionProgress(containerName: String, progress: Float) {
+ sceneTransitionProgressByContainerName.setValue(containerName, progress)
+ }
+
+ /** Progress of the transition into the current scene in the container with the given name. */
+ fun sceneTransitionProgress(containerName: String): StateFlow<Float> {
+ return sceneTransitionProgressByContainerName.mutableOrError(containerName).asStateFlow()
+ }
+
+ private fun <T> Map<String, MutableStateFlow<T>>.mutableOrError(
+ containerName: String,
+ ): MutableStateFlow<T> {
+ return this[containerName] ?: error(noSuchContainerErrorMessage(containerName))
+ }
+
+ private fun <T> Map<String, MutableStateFlow<T>>.setValue(
+ containerName: String,
+ value: T,
+ ) {
+ val mutable = mutableOrError(containerName)
+ mutable.value = value
+ }
+
+ private fun noSuchContainerErrorMessage(containerName: String): String {
+ return """
+ No container named "$containerName". Existing containers:
+ ${containerConfigByName.values.joinToString(", ") { it.name }}
+ """
+ .trimIndent()
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/scene/domain/interactor/SceneInteractor.kt b/packages/SystemUI/src/com/android/systemui/scene/domain/interactor/SceneInteractor.kt
new file mode 100644
index 0000000..1e55975
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/scene/domain/interactor/SceneInteractor.kt
@@ -0,0 +1,73 @@
+/*
+ * 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.scene.domain.interactor
+
+import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.scene.data.repository.SceneContainerRepository
+import com.android.systemui.scene.shared.model.SceneKey
+import com.android.systemui.scene.shared.model.SceneModel
+import javax.inject.Inject
+import kotlinx.coroutines.flow.StateFlow
+
+/** Business logic and app state accessors for the scene framework. */
+@SysUISingleton
+class SceneInteractor
+@Inject
+constructor(
+ private val repository: SceneContainerRepository,
+) {
+
+ /**
+ * Returns the keys of all scenes in the container with the given name.
+ *
+ * The scenes will be sorted in z-order such that the last one is the one that should be
+ * rendered on top of all previous ones.
+ */
+ fun allSceneKeys(containerName: String): List<SceneKey> {
+ return repository.allSceneKeys(containerName)
+ }
+
+ /** Sets the scene in the container with the given name. */
+ fun setCurrentScene(containerName: String, scene: SceneModel) {
+ repository.setCurrentScene(containerName, scene)
+ }
+
+ /** The current scene in the container with the given name. */
+ fun currentScene(containerName: String): StateFlow<SceneModel> {
+ return repository.currentScene(containerName)
+ }
+
+ /** Sets the visibility of the container with the given name. */
+ fun setVisible(containerName: String, isVisible: Boolean) {
+ return repository.setVisible(containerName, isVisible)
+ }
+
+ /** Whether the container with the given name is visible. */
+ fun isVisible(containerName: String): StateFlow<Boolean> {
+ return repository.isVisible(containerName)
+ }
+
+ /** Sets scene transition progress to the current scene in the container with the given name. */
+ fun setSceneTransitionProgress(containerName: String, progress: Float) {
+ repository.setSceneTransitionProgress(containerName, progress)
+ }
+
+ /** Progress of the transition into the current scene in the container with the given name. */
+ fun sceneTransitionProgress(containerName: String): StateFlow<Float> {
+ return repository.sceneTransitionProgress(containerName)
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/scene/shared/model/Scene.kt b/packages/SystemUI/src/com/android/systemui/scene/shared/model/Scene.kt
new file mode 100644
index 0000000..435ff4b
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/scene/shared/model/Scene.kt
@@ -0,0 +1,87 @@
+/*
+ * 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.scene.shared.model
+
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.StateFlow
+import kotlinx.coroutines.flow.asStateFlow
+
+/**
+ * Defines interface for classes that can describe a "scene".
+ *
+ * In the scene framework, there can be multiple scenes in a single scene "container". The container
+ * takes care of rendering the current scene and allowing scenes to be switched from one to another
+ * based on either user action (for example, swiping down while on the lock screen scene may switch
+ * to the shade scene).
+ *
+ * The framework also supports multiple containers, each one with its own configuration.
+ */
+interface Scene {
+
+ /** Uniquely-identifying key for this scene. The key must be unique within its container. */
+ val key: SceneKey
+
+ /**
+ * Returns a mapping between [UserAction] and flows that emit a [SceneModel].
+ *
+ * When the scene framework detects the user action, it starts a transition to the scene
+ * described by the latest value in the flow that's mapped from that user action.
+ *
+ * Once the [Scene] becomes the current one, the scene framework will invoke this method and set
+ * up collectors to watch for new values emitted to each of the flows. If a value is added to
+ * the map at a given [UserAction], the framework will set up user input handling for that
+ * [UserAction] and, if such a user action is detected, the framework will initiate a transition
+ * to that [SceneModel].
+ *
+ * Note that calling this method does _not_ mean that the given user action has occurred.
+ * Instead, the method is called before any user action/gesture is detected so that the
+ * framework can decide whether to set up gesture/input detectors/listeners for that type of
+ * user action.
+ *
+ * Note that a missing value for a specific [UserAction] means that the user action of the given
+ * type is not currently active in the scene and should be ignored by the framework, while the
+ * current scene is this one.
+ *
+ * The API is designed such that it's possible to emit ever-changing values for each
+ * [UserAction] to enable, disable, or change the destination scene of a given user action.
+ */
+ fun destinationScenes(): StateFlow<Map<UserAction, SceneModel>> =
+ MutableStateFlow(emptyMap<UserAction, SceneModel>()).asStateFlow()
+}
+
+/** Enumerates all scene framework supported user actions. */
+sealed interface UserAction {
+
+ /** The user is scrolling, dragging, swiping, or flinging. */
+ data class Swipe(
+ /** The direction of the swipe. */
+ val direction: Direction,
+ /** The number of pointers that were used (for example, one or two fingers). */
+ val pointerCount: Int = 1,
+ ) : UserAction
+
+ /** The user has hit the back button or performed the back navigation gesture. */
+ object Back : UserAction
+}
+
+/** Enumerates all known "cardinal" directions for user actions. */
+enum class Direction {
+ LEFT,
+ UP,
+ RIGHT,
+ DOWN,
+}
diff --git a/packages/SystemUI/src/com/android/systemui/scene/shared/model/SceneKey.kt b/packages/SystemUI/src/com/android/systemui/scene/shared/model/SceneKey.kt
new file mode 100644
index 0000000..9ef439d
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/scene/shared/model/SceneKey.kt
@@ -0,0 +1,49 @@
+/*
+ * 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.scene.shared.model
+
+/** Keys of all known scenes. */
+sealed class SceneKey(
+ private val loggingName: String,
+) {
+ /**
+ * The bouncer is the scene that displays authentication challenges like PIN, password, or
+ * pattern.
+ */
+ object Bouncer : SceneKey("bouncer")
+
+ /**
+ * "Gone" is not a real scene but rather the absence of scenes when we want to skip showing any
+ * content from the scene framework.
+ */
+ object Gone : SceneKey("gone")
+
+ /** The lock screen is the scene that shows when the device is locked. */
+ object LockScreen : SceneKey("lockscreen")
+
+ /**
+ * The shade is the scene whose primary purpose is to show a scrollable list of notifications.
+ */
+ object Shade : SceneKey("shade")
+
+ /** The quick settings scene shows the quick setting tiles. */
+ object QuickSettings : SceneKey("quick_settings")
+
+ override fun toString(): String {
+ return loggingName
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/scene/shared/model/SceneModel.kt b/packages/SystemUI/src/com/android/systemui/scene/shared/model/SceneModel.kt
new file mode 100644
index 0000000..f3d549f
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/scene/shared/model/SceneModel.kt
@@ -0,0 +1,27 @@
+/*
+ * 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.scene.shared.model
+
+/** Models a scene. */
+data class SceneModel(
+
+ /** The key of the scene. */
+ val key: SceneKey,
+
+ /** An optional name for the transition that led to this scene being the current scene. */
+ val transitionName: String? = null,
+)
diff --git a/packages/SystemUI/src/com/android/systemui/scene/ui/viewmodel/SceneContainerViewModel.kt b/packages/SystemUI/src/com/android/systemui/scene/ui/viewmodel/SceneContainerViewModel.kt
new file mode 100644
index 0000000..afc0531
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/scene/ui/viewmodel/SceneContainerViewModel.kt
@@ -0,0 +1,64 @@
+/*
+ * 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.scene.ui.viewmodel
+
+import com.android.systemui.scene.domain.interactor.SceneInteractor
+import com.android.systemui.scene.shared.model.SceneKey
+import com.android.systemui.scene.shared.model.SceneModel
+import dagger.assisted.Assisted
+import dagger.assisted.AssistedFactory
+import dagger.assisted.AssistedInject
+import kotlinx.coroutines.flow.StateFlow
+
+/** Models UI state for a single scene container. */
+class SceneContainerViewModel
+@AssistedInject
+constructor(
+ private val interactor: SceneInteractor,
+ @Assisted private val containerName: String,
+) {
+ /**
+ * Keys of all scenes in the container.
+ *
+ * The scenes will be sorted in z-order such that the last one is the one that should be
+ * rendered on top of all previous ones.
+ */
+ val allSceneKeys: List<SceneKey> = interactor.allSceneKeys(containerName)
+
+ /** The current scene. */
+ val currentScene: StateFlow<SceneModel> = interactor.currentScene(containerName)
+
+ /** Whether the container is visible. */
+ val isVisible: StateFlow<Boolean> = interactor.isVisible(containerName)
+
+ /** Requests a transition to the scene with the given key. */
+ fun setCurrentScene(scene: SceneModel) {
+ interactor.setCurrentScene(containerName, scene)
+ }
+
+ /** Notifies of the progress of a scene transition. */
+ fun setSceneTransitionProgress(progress: Float) {
+ interactor.setSceneTransitionProgress(containerName, progress)
+ }
+
+ @AssistedFactory
+ interface Factory {
+ fun create(
+ containerName: String,
+ ): SceneContainerViewModel
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/LongScreenshotActivity.java b/packages/SystemUI/src/com/android/systemui/screenshot/LongScreenshotActivity.java
index 2312c70..4bc7ec8 100644
--- a/packages/SystemUI/src/com/android/systemui/screenshot/LongScreenshotActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/screenshot/LongScreenshotActivity.java
@@ -343,22 +343,24 @@
} else {
String editorPackage = getString(R.string.config_screenshotEditor);
Intent intent = new Intent(Intent.ACTION_EDIT);
- if (!TextUtils.isEmpty(editorPackage)) {
- intent.setComponent(ComponentName.unflattenFromString(editorPackage));
- }
intent.setDataAndType(uri, "image/png");
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION
| Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
+ Bundle options = null;
- mTransitionView.setImageBitmap(mOutputBitmap);
- mTransitionView.setVisibility(View.VISIBLE);
- mTransitionView.setTransitionName(
- ChooserActivity.FIRST_IMAGE_PREVIEW_TRANSITION_NAME);
- // TODO: listen for transition completing instead of finishing onStop
- mTransitionStarted = true;
- startActivity(intent,
- ActivityOptions.makeSceneTransitionAnimation(this, mTransitionView,
- ChooserActivity.FIRST_IMAGE_PREVIEW_TRANSITION_NAME).toBundle());
+ // Skip shared element transition for implicit edit intents
+ if (!TextUtils.isEmpty(editorPackage)) {
+ intent.setComponent(ComponentName.unflattenFromString(editorPackage));
+ mTransitionView.setImageBitmap(mOutputBitmap);
+ mTransitionView.setVisibility(View.VISIBLE);
+ mTransitionView.setTransitionName(
+ ChooserActivity.FIRST_IMAGE_PREVIEW_TRANSITION_NAME);
+ options = ActivityOptions.makeSceneTransitionAnimation(this, mTransitionView,
+ ChooserActivity.FIRST_IMAGE_PREVIEW_TRANSITION_NAME).toBundle();
+ // TODO: listen for transition completing instead of finishing onStop
+ mTransitionStarted = true;
+ }
+ startActivity(intent, options);
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/OverlayActionChip.java b/packages/SystemUI/src/com/android/systemui/screenshot/OverlayActionChip.java
index 860bfe37..13678b0 100644
--- a/packages/SystemUI/src/com/android/systemui/screenshot/OverlayActionChip.java
+++ b/packages/SystemUI/src/com/android/systemui/screenshot/OverlayActionChip.java
@@ -121,13 +121,15 @@
LinearLayout.LayoutParams textParams =
(LinearLayout.LayoutParams) mTextView.getLayoutParams();
if (hasText) {
- int paddingHorizontal = mContext.getResources().getDimensionPixelSize(
- R.dimen.overlay_action_chip_padding_horizontal);
+ int paddingStart = mContext.getResources().getDimensionPixelSize(
+ R.dimen.overlay_action_chip_padding_start);
int spacing = mContext.getResources().getDimensionPixelSize(
R.dimen.overlay_action_chip_spacing);
- iconParams.setMarginStart(paddingHorizontal);
+ int paddingEnd = mContext.getResources().getDimensionPixelSize(
+ R.dimen.overlay_action_chip_padding_end);
+ iconParams.setMarginStart(paddingStart);
iconParams.setMarginEnd(spacing);
- textParams.setMarginEnd(paddingHorizontal);
+ textParams.setMarginEnd(paddingEnd);
} else {
int paddingHorizontal = mContext.getResources().getDimensionPixelSize(
R.dimen.overlay_action_chip_icon_only_padding_horizontal);
diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/appclips/AppClipsActivity.java b/packages/SystemUI/src/com/android/systemui/screenshot/appclips/AppClipsActivity.java
index 4756cc8..7261324 100644
--- a/packages/SystemUI/src/com/android/systemui/screenshot/appclips/AppClipsActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/screenshot/appclips/AppClipsActivity.java
@@ -53,7 +53,6 @@
import com.android.settingslib.Utils;
import com.android.systemui.R;
import com.android.systemui.screenshot.CropView;
-import com.android.systemui.screenshot.MagnifierView;
import com.android.systemui.settings.UserTracker;
import javax.inject.Inject;
@@ -93,7 +92,6 @@
private View mRoot;
private ImageView mPreview;
private CropView mCropView;
- private MagnifierView mMagnifierView;
private Button mSave;
private Button mCancel;
private AppClipsViewModel mViewModel;
@@ -156,9 +154,8 @@
mSave.setOnClickListener(this::onClick);
mCancel.setOnClickListener(this::onClick);
- mMagnifierView = mLayout.findViewById(R.id.magnifier);
+
mCropView = mLayout.findViewById(R.id.crop_view);
- mCropView.setCropInteractionListener(mMagnifierView);
mPreview = mLayout.findViewById(R.id.preview);
mPreview.addOnLayoutChangeListener(
@@ -218,8 +215,6 @@
mPreview.setImageDrawable(drawable);
mPreview.setAlpha(1f);
- mMagnifierView.setDrawable(drawable, screenshot.getWidth(), screenshot.getHeight());
-
// Screenshot is now available so set content view.
setContentView(mLayout);
}
diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java
index 926ede9..af12bc2 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java
+++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java
@@ -4373,7 +4373,8 @@
@Override
public boolean shouldHeadsUpBeVisible() {
- return mHeadsUpAppearanceController.shouldBeVisible();
+ return mHeadsUpAppearanceController != null &&
+ mHeadsUpAppearanceController.shouldBeVisible();
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowControllerImpl.java b/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowControllerImpl.java
index af74c27..46f1210 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowControllerImpl.java
@@ -423,12 +423,18 @@
}
private boolean isExpanded(NotificationShadeWindowState state) {
- return !state.forceWindowCollapsed && (state.isKeyguardShowingAndNotOccluded()
+ boolean isExpanded = !state.forceWindowCollapsed && (state.isKeyguardShowingAndNotOccluded()
|| state.panelVisible || state.keyguardFadingAway || state.bouncerShowing
|| state.headsUpNotificationShowing
|| state.scrimsVisibility != ScrimController.TRANSPARENT)
|| state.backgroundBlurRadius > 0
|| state.launchingActivityFromNotification;
+ mLogger.logIsExpanded(isExpanded, state.forceWindowCollapsed,
+ state.isKeyguardShowingAndNotOccluded(), state.panelVisible,
+ state.keyguardFadingAway, state.bouncerShowing, state.headsUpNotificationShowing,
+ state.scrimsVisibility != ScrimController.TRANSPARENT,
+ state.backgroundBlurRadius > 0, state.launchingActivityFromNotification);
+ return isExpanded;
}
private void applyFitsSystemWindows(NotificationShadeWindowState state) {
diff --git a/packages/SystemUI/src/com/android/systemui/shade/ShadeExpansionStateManager.kt b/packages/SystemUI/src/com/android/systemui/shade/ShadeExpansionStateManager.kt
index 20313c3..a048f54 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/ShadeExpansionStateManager.kt
+++ b/packages/SystemUI/src/com/android/systemui/shade/ShadeExpansionStateManager.kt
@@ -54,12 +54,20 @@
* Listener will also be immediately notified with the current values.
*/
fun addExpansionListener(listener: ShadeExpansionListener) {
- expansionListeners.add(listener)
+ addShadeExpansionListener(listener)
listener.onPanelExpansionChanged(
ShadeExpansionChangeEvent(fraction, expanded, tracking, dragDownPxAmount)
)
}
+ /**
+ * Adds a listener that will be notified when the panel expansion fraction has changed.
+ * @see #addExpansionListener
+ */
+ fun addShadeExpansionListener(listener: ShadeExpansionListener) {
+ expansionListeners.add(listener)
+ }
+
/** Removes an expansion listener. */
fun removeExpansionListener(listener: ShadeExpansionListener) {
expansionListeners.remove(listener)
diff --git a/packages/SystemUI/src/com/android/systemui/shade/ShadeWindowLogger.kt b/packages/SystemUI/src/com/android/systemui/shade/ShadeWindowLogger.kt
index d8d4279..d06634b 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/ShadeWindowLogger.kt
+++ b/packages/SystemUI/src/com/android/systemui/shade/ShadeWindowLogger.kt
@@ -65,6 +65,41 @@
{ "Updating visibility, should be visible : $bool1" })
}
+ fun logIsExpanded(
+ isExpanded: Boolean,
+ forceWindowCollapsed: Boolean,
+ isKeyguardShowingAndNotOccluded: Boolean,
+ panelVisible: Boolean,
+ keyguardFadingAway: Boolean,
+ bouncerShowing: Boolean,
+ headsUpNotificationShowing: Boolean,
+ scrimsVisibilityNotTransparent: Boolean,
+ backgroundBlurRadius: Boolean,
+ launchingActivityFromNotification: Boolean
+ ) {
+ buffer.log(
+ TAG,
+ DEBUG,
+ {
+ str1 = isExpanded.toString()
+ bool1 = forceWindowCollapsed
+ bool2 = isKeyguardShowingAndNotOccluded
+ bool3 = panelVisible
+ bool4 = keyguardFadingAway
+ int1 = if (bouncerShowing) 1 else 0
+ int2 = if (headsUpNotificationShowing) 1 else 0
+ long1 = if (scrimsVisibilityNotTransparent) 1 else 0
+ long2 = if (backgroundBlurRadius) 1 else 0
+ double1 = if (launchingActivityFromNotification) 1.0 else 0.0
+ },
+ { "Setting isExpanded to $str1: forceWindowCollapsed $bool1, " +
+ "isKeyguardShowingAndNotOccluded $bool2, panelVisible $bool3, " +
+ "keyguardFadingAway $bool4, bouncerShowing $int1," +
+ "headsUpNotificationShowing $int2, scrimsVisibilityNotTransparent $long1," +
+ "backgroundBlurRadius $long2, launchingActivityFromNotification $double1"}
+ )
+ }
+
fun logShadeVisibleAndFocusable(visible: Boolean) {
buffer.log(
TAG,
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/WifiSignalController.java b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/WifiSignalController.java
index 12f2c22..f84b96c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/WifiSignalController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/WifiSignalController.java
@@ -15,13 +15,14 @@
*/
package com.android.systemui.statusbar.connectivity;
+import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR;
+import static android.net.NetworkCapabilities.TRANSPORT_WIFI;
import static android.net.wifi.WifiManager.TrafficStateCallback.DATA_ACTIVITY_IN;
import static android.net.wifi.WifiManager.TrafficStateCallback.DATA_ACTIVITY_INOUT;
import static android.net.wifi.WifiManager.TrafficStateCallback.DATA_ACTIVITY_OUT;
import android.content.Context;
import android.content.Intent;
-import android.net.NetworkCapabilities;
import android.net.wifi.WifiManager;
import android.os.Handler;
import android.text.Html;
@@ -37,6 +38,7 @@
import com.android.systemui.dagger.qualifiers.Background;
import java.io.PrintWriter;
+import java.util.BitSet;
/** */
public class WifiSignalController extends SignalController<WifiState, IconGroup> {
@@ -56,8 +58,12 @@
WifiManager wifiManager,
WifiStatusTrackerFactory trackerFactory,
@Background Handler bgHandler) {
- super("WifiSignalController", context, NetworkCapabilities.TRANSPORT_WIFI,
- callbackHandler, networkController);
+ super(
+ "WifiSignalController",
+ context,
+ TRANSPORT_WIFI,
+ callbackHandler,
+ networkController);
mBgHandler = bgHandler;
mWifiManager = wifiManager;
mWifiTracker = trackerFactory.createTracker(this::handleStatusUpdated, bgHandler);
@@ -160,7 +166,10 @@
// The WiFi signal level returned by WifiManager#calculateSignalLevel start from 0, so
// WifiManager#getMaxSignalLevel + 1 represents the total level buckets count.
int totalLevel = mWifiManager.getMaxSignalLevel() + 1;
- boolean noInternet = mCurrentState.inetCondition == 0;
+ // A carrier merged connection could come from a WIFI *or* CELLULAR transport, so we can't
+ // use [mCurrentState.inetCondition], which only checks the WIFI status. Instead, check if
+ // the default connection is validated at all.
+ boolean noInternet = !mCurrentState.isDefaultConnectionValidated;
if (mCurrentState.connected) {
return SignalDrawable.getState(level, totalLevel, noInternet);
} else if (mCurrentState.enabled) {
@@ -236,6 +245,18 @@
&& mCurrentState.isCarrierMerged && (mCurrentState.subId == subId);
}
+ @Override
+ void updateConnectivity(BitSet connectedTransports, BitSet validatedTransports) {
+ mCurrentState.inetCondition = validatedTransports.get(mTransportType) ? 1 : 0;
+ // Because a carrier merged connection can come from either a CELLULAR *or* WIFI transport,
+ // we need to also store if either transport is validated to correctly display the carrier
+ // merged case.
+ mCurrentState.isDefaultConnectionValidated =
+ validatedTransports.get(TRANSPORT_CELLULAR)
+ || validatedTransports.get(TRANSPORT_WIFI);
+ notifyListenersIfNecessary();
+ }
+
@VisibleForTesting
void setActivity(int wifiActivity) {
mCurrentState.activityIn = wifiActivity == DATA_ACTIVITY_INOUT
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/WifiState.kt b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/WifiState.kt
index d32e349..63a63de 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/WifiState.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/WifiState.kt
@@ -24,6 +24,14 @@
@JvmField var isDefault: Boolean = false,
@JvmField var statusLabel: String? = null,
@JvmField var isCarrierMerged: Boolean = false,
+ /**
+ * True if the current default connection is validated for *any* transport, not just wifi.
+ * (Specifically TRANSPORT_CELLULAR *or* TRANSPORT_WIFI.)
+ *
+ * This should *only* be used when calculating information for the carrier merged connection and
+ * *not* for typical wifi connections. See b/225902574.
+ */
+ @JvmField var isDefaultConnectionValidated: Boolean = false,
@JvmField var subId: Int = 0
) : ConnectivityState() {
@@ -35,6 +43,7 @@
isDefault = state.isDefault
statusLabel = state.statusLabel
isCarrierMerged = state.isCarrierMerged
+ isDefaultConnectionValidated = state.isDefaultConnectionValidated
subId = state.subId
}
@@ -45,6 +54,7 @@
.append(",isDefault=").append(isDefault)
.append(",statusLabel=").append(statusLabel)
.append(",isCarrierMerged=").append(isCarrierMerged)
+ .append(",isDefaultConnectionValidated=").append(isDefaultConnectionValidated)
.append(",subId=").append(subId)
}
@@ -54,6 +64,7 @@
"isDefault",
"statusLabel",
"isCarrierMerged",
+ "isDefaultConnectionValidated",
"subId")
return super.tableColumns() + columns
@@ -65,6 +76,7 @@
isDefault,
statusLabel,
isCarrierMerged,
+ isDefaultConnectionValidated,
subId).map {
it.toString()
}
@@ -84,6 +96,7 @@
if (isDefault != other.isDefault) return false
if (statusLabel != other.statusLabel) return false
if (isCarrierMerged != other.isCarrierMerged) return false
+ if (isDefaultConnectionValidated != other.isDefaultConnectionValidated) return false
if (subId != other.subId) return false
return true
@@ -96,6 +109,7 @@
result = 31 * result + isDefault.hashCode()
result = 31 * result + (statusLabel?.hashCode() ?: 0)
result = 31 * result + isCarrierMerged.hashCode()
+ result = 31 * result + isDefaultConnectionValidated.hashCode()
result = 31 * result + subId
return result
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/gesture/GenericGestureDetector.kt b/packages/SystemUI/src/com/android/systemui/statusbar/gesture/GenericGestureDetector.kt
index 92a8356..1aeb6b3 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/gesture/GenericGestureDetector.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/gesture/GenericGestureDetector.kt
@@ -22,7 +22,6 @@
import android.view.Choreographer
import android.view.InputEvent
import android.view.MotionEvent
-import com.android.systemui.settings.DisplayTracker
import com.android.systemui.shared.system.InputChannelCompat
import com.android.systemui.shared.system.InputMonitorCompat
@@ -39,7 +38,7 @@
*/
abstract class GenericGestureDetector(
private val tag: String,
- private val displayTracker: DisplayTracker
+ private val displayId: Int,
) {
/**
* Active callbacks, each associated with a tag. Gestures will only be monitored if
@@ -87,7 +86,7 @@
internal open fun startGestureListening() {
stopGestureListening()
- inputMonitor = InputMonitorCompat(tag, displayTracker.defaultDisplayId).also {
+ inputMonitor = InputMonitorCompat(tag, displayId).also {
inputReceiver = it.getInputReceiver(
Looper.getMainLooper(),
Choreographer.getInstance(),
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/gesture/SwipeUpGestureHandler.kt b/packages/SystemUI/src/com/android/systemui/statusbar/gesture/SwipeUpGestureHandler.kt
index 6d60f4a9..2fd0a53 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/gesture/SwipeUpGestureHandler.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/gesture/SwipeUpGestureHandler.kt
@@ -36,7 +36,10 @@
displayTracker: DisplayTracker,
private val logger: SwipeUpGestureLogger,
private val loggerTag: String,
-) : GenericGestureDetector(SwipeUpGestureHandler::class.simpleName!!, displayTracker) {
+) : GenericGestureDetector(
+ SwipeUpGestureHandler::class.simpleName!!,
+ displayTracker.defaultDisplayId
+) {
private var startY: Float = 0f
private var startTime: Long = 0L
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/gesture/TapGestureDetector.kt b/packages/SystemUI/src/com/android/systemui/statusbar/gesture/TapGestureDetector.kt
index a901d597..ed30f2fc 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/gesture/TapGestureDetector.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/gesture/TapGestureDetector.kt
@@ -32,7 +32,10 @@
class TapGestureDetector @Inject constructor(
private val context: Context,
displayTracker: DisplayTracker
-) : GenericGestureDetector(TapGestureDetector::class.simpleName!!, displayTracker) {
+) : GenericGestureDetector(
+ TapGestureDetector::class.simpleName!!,
+ displayTracker.defaultDisplayId
+) {
private val gestureListener = object : GestureDetector.SimpleOnGestureListener() {
override fun onSingleTapUp(e: MotionEvent): Boolean {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/ShadeViewRefactor.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/ShadeViewRefactor.java
deleted file mode 100644
index 5ad2ba9..0000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/ShadeViewRefactor.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-
-package com.android.systemui.statusbar.notification;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-@Retention(RetentionPolicy.SOURCE)
-public @interface ShadeViewRefactor {
- /**
- * Returns the refactor component.
- * @return the refactor component.
- */
- RefactorComponent value();
-
- public enum RefactorComponent {
- ADAPTER,
- LAYOUT_ALGORITHM,
- STATE_RESOLVER,
- DECORATOR,
- INPUT,
- COORDINATOR,
- SHADE_VIEW
- }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationSection.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationSection.java
index 9a33a94..2d0395a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationSection.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationSection.java
@@ -27,7 +27,6 @@
import android.view.animation.Interpolator;
import com.android.app.animation.Interpolators;
-import com.android.systemui.statusbar.notification.ShadeViewRefactor;
import com.android.systemui.statusbar.notification.row.ExpandableView;
/**
@@ -90,7 +89,6 @@
}
- @ShadeViewRefactor(ShadeViewRefactor.RefactorComponent.STATE_RESOLVER)
private void startTopAnimation(boolean animate) {
int previousEndValue = mEndAnimationRect.top;
int newEndValue = mBounds.top;
@@ -139,7 +137,6 @@
mTopAnimator = animator;
}
- @ShadeViewRefactor(ShadeViewRefactor.RefactorComponent.STATE_RESOLVER)
private void startBottomAnimation(boolean animate) {
int previousStartValue = mStartAnimationRect.bottom;
int previousEndValue = mEndAnimationRect.bottom;
@@ -188,13 +185,11 @@
mBottomAnimator = animator;
}
- @ShadeViewRefactor(ShadeViewRefactor.RefactorComponent.SHADE_VIEW)
private void setBackgroundTop(int top) {
mCurrentBounds.top = top;
mOwningView.invalidate();
}
- @ShadeViewRefactor(ShadeViewRefactor.RefactorComponent.SHADE_VIEW)
private void setBackgroundBottom(int bottom) {
mCurrentBounds.bottom = bottom;
mOwningView.invalidate();
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 cf051fb..b81cb2b 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
@@ -101,8 +101,6 @@
import com.android.systemui.statusbar.notification.LaunchAnimationParameters;
import com.android.systemui.statusbar.notification.NotificationLaunchAnimatorController;
import com.android.systemui.statusbar.notification.NotificationUtils;
-import com.android.systemui.statusbar.notification.ShadeViewRefactor;
-import com.android.systemui.statusbar.notification.ShadeViewRefactor.RefactorComponent;
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;
@@ -679,7 +677,6 @@
}
@Override
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
protected void onFinishInflate() {
super.onFinishInflate();
@@ -740,7 +737,6 @@
}
@VisibleForTesting
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public void updateFooter() {
if (mFooterView == null) {
return;
@@ -773,12 +769,10 @@
/**
* Return whether there are any clearable notifications
*/
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
boolean hasActiveClearableNotifications(@SelectedRows int selection) {
return mController.hasActiveClearableNotifications(selection);
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public NotificationSwipeActionHelper getSwipeActionHelper() {
return mSwipeHelper;
}
@@ -795,7 +789,6 @@
}
}
- @ShadeViewRefactor(RefactorComponent.DECORATOR)
protected void onDraw(Canvas canvas) {
if (mShouldDrawNotificationBackground
&& (mSections[0].getCurrentBounds().top
@@ -892,7 +885,6 @@
return textY;
}
- @ShadeViewRefactor(RefactorComponent.DECORATOR)
private void drawBackground(Canvas canvas) {
int lockScreenLeft = mSidePaddings;
int lockScreenRight = getWidth() - mSidePaddings;
@@ -1020,7 +1012,6 @@
}
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
void updateBackgroundDimming() {
// No need to update the background color if it's not being drawn.
if (!mShouldDrawNotificationBackground) {
@@ -1043,7 +1034,6 @@
initView(getContext(), mSwipeHelper, mNotificationStackSizeCalculator);
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
void initView(Context context, NotificationSwipeHelper swipeHelper,
NotificationStackSizeCalculator notificationStackSizeCalculator) {
mScroller = new OverScroller(getContext());
@@ -1104,12 +1094,10 @@
}
}
- @ShadeViewRefactor(RefactorComponent.COORDINATOR)
private void notifyHeightChangeListener(ExpandableView view) {
notifyHeightChangeListener(view, false /* needsAnimation */);
}
- @ShadeViewRefactor(RefactorComponent.COORDINATOR)
private void notifyHeightChangeListener(ExpandableView view, boolean needsAnimation) {
if (mOnHeightChangedListener != null) {
mOnHeightChangedListener.onHeightChanged(view, needsAnimation);
@@ -1151,7 +1139,6 @@
}
@Override
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
Trace.beginSection("NotificationStackScrollLayout#onMeasure");
if (SPEW) {
@@ -1185,7 +1172,6 @@
}
@Override
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
protected void onLayout(boolean changed, int l, int t, int r, int b) {
// we layout all our children centered on the top
float centerX = getWidth() / 2.0f;
@@ -1216,7 +1202,6 @@
mAnimateStackYForContentHeightChange = false;
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
private void requestAnimationOnViewResize(ExpandableNotificationRow row) {
if (mAnimationsEnabled && (mIsExpanded || row != null && row.isPinned())) {
mNeedViewResizeAnimation = true;
@@ -1224,19 +1209,16 @@
}
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
public void setChildLocationsChangedListener(
NotificationLogger.OnChildLocationsChangedListener listener) {
mListener = listener;
}
- @ShadeViewRefactor(RefactorComponent.LAYOUT_ALGORITHM)
private void setMaxLayoutHeight(int maxLayoutHeight) {
mMaxLayoutHeight = maxLayoutHeight;
updateAlgorithmHeightAndPadding();
}
- @ShadeViewRefactor(RefactorComponent.LAYOUT_ALGORITHM)
private void updateAlgorithmHeightAndPadding() {
mAmbientState.setLayoutHeight(getLayoutHeight());
mAmbientState.setLayoutMaxHeight(mMaxLayoutHeight);
@@ -1244,7 +1226,6 @@
mAmbientState.setTopPadding(mTopPadding);
}
- @ShadeViewRefactor(RefactorComponent.LAYOUT_ALGORITHM)
private void updateAlgorithmLayoutMinHeight() {
mAmbientState.setLayoutMinHeight(mQsFullScreen || isHeadsUpTransition()
? getLayoutMinHeight() : 0);
@@ -1254,7 +1235,6 @@
* Updates the children views according to the stack scroll algorithm. Call this whenever
* modifications to {@link #mOwnScrollY} are performed to reflect it in the view layout.
*/
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
private void updateChildren() {
updateScrollStateForAddedChildren();
mAmbientState.setCurrentScrollVelocity(mScroller.isFinished()
@@ -1268,7 +1248,6 @@
}
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
private void onPreDrawDuringAnimation() {
mShelf.updateAppearance();
if (!mNeedsAnimation && !mChildrenUpdateRequested) {
@@ -1276,7 +1255,6 @@
}
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
private void updateScrollStateForAddedChildren() {
if (mChildrenToAddAnimated.isEmpty()) {
return;
@@ -1297,7 +1275,6 @@
clampScrollPosition();
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
private void updateForcedScroll() {
if (mForcedScroll != null && (!mForcedScroll.hasFocus()
|| !mForcedScroll.isAttachedToWindow())) {
@@ -1317,7 +1294,6 @@
}
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
void requestChildrenUpdate() {
if (!mChildrenUpdateRequested) {
getViewTreeObserver().addOnPreDrawListener(mChildrenUpdater);
@@ -1326,12 +1302,10 @@
}
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
private boolean isCurrentlyAnimating() {
return mStateAnimator.isRunning();
}
- @ShadeViewRefactor(RefactorComponent.COORDINATOR)
private void clampScrollPosition() {
int scrollRange = getScrollRange();
if (scrollRange < mOwnScrollY && !mAmbientState.isClearAllInProgress()) {
@@ -1342,12 +1316,10 @@
}
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public int getTopPadding() {
return mTopPadding;
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
private void setTopPadding(int topPadding, boolean animate) {
if (mTopPadding != topPadding) {
boolean shouldAnimate = animate || mAnimateNextTopPaddingChange;
@@ -1469,7 +1441,6 @@
*
* @param height the expanded height of the panel
*/
- @ShadeViewRefactor(RefactorComponent.COORDINATOR)
public void setExpandedHeight(float height) {
final boolean skipHeightUpdate = shouldSkipHeightUpdate();
updateStackPosition();
@@ -1563,7 +1534,6 @@
}
}
- @ShadeViewRefactor(RefactorComponent.COORDINATOR)
private void setRequestedClipBounds(Rect clipRect) {
mRequestedClipBounds = clipRect;
updateClipping();
@@ -1572,12 +1542,10 @@
/**
* Return the height of the content ignoring the footer.
*/
- @ShadeViewRefactor(RefactorComponent.COORDINATOR)
public int getIntrinsicContentHeight() {
return (int) mIntrinsicContentHeight;
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
public void updateClipping() {
boolean clipped = mRequestedClipBounds != null && !mInHeadsUpPinnedMode
&& !mHeadsUpAnimatingAway;
@@ -1603,7 +1571,6 @@
* @return The translation at the beginning when expanding.
* Measured relative to the resting position.
*/
- @ShadeViewRefactor(RefactorComponent.COORDINATOR)
private float getExpandTranslationStart() {
return -mTopPadding + getMinExpansionHeight() - mShelf.getIntrinsicHeight();
}
@@ -1612,7 +1579,6 @@
* @return the position from where the appear transition starts when expanding.
* Measured in absolute height.
*/
- @ShadeViewRefactor(RefactorComponent.COORDINATOR)
private float getAppearStartPosition() {
if (isHeadsUpTransition()) {
final NotificationSection firstVisibleSection = getFirstVisibleSection();
@@ -1629,7 +1595,6 @@
* intrinsic height, which also includes whether the notification is system expanded and
* is mainly used when dragging down from a heads up notification.
*/
- @ShadeViewRefactor(RefactorComponent.COORDINATOR)
private int getTopHeadsUpPinnedHeight() {
if (mTopHeadsUpEntry == null) {
return 0;
@@ -1649,7 +1614,6 @@
* @return the position from where the appear transition ends when expanding.
* Measured in absolute height.
*/
- @ShadeViewRefactor(RefactorComponent.COORDINATOR)
private float getAppearEndPosition() {
int appearPosition = mAmbientState.getStackTopMargin();
int visibleNotifCount = mController.getVisibleNotificationCount();
@@ -1670,13 +1634,11 @@
return appearPosition + (onKeyguard() ? mTopPadding : mIntrinsicPadding);
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
private boolean isHeadsUpTransition() {
return mAmbientState.getTrackedHeadsUpRow() != null;
}
// TODO(b/246353296): remove it when Flags.SIMPLIFIED_APPEAR_FRACTION is removed
- @ShadeViewRefactor(RefactorComponent.COORDINATOR)
public float calculateAppearFractionOld(float height) {
float appearEndPosition = getAppearEndPosition();
float appearStartPosition = getAppearStartPosition();
@@ -1718,12 +1680,10 @@
}
}
- @ShadeViewRefactor(RefactorComponent.COORDINATOR)
public float getStackTranslation() {
return mStackTranslation;
}
- @ShadeViewRefactor(RefactorComponent.COORDINATOR)
private void setStackTranslation(float stackTranslation) {
if (stackTranslation != mStackTranslation) {
mStackTranslation = stackTranslation;
@@ -1738,17 +1698,14 @@
*
* @return either the layout height or the externally defined height, whichever is smaller
*/
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
private int getLayoutHeight() {
return Math.min(mMaxLayoutHeight, mCurrentStackHeight);
}
- @ShadeViewRefactor(RefactorComponent.ADAPTER)
public void setQsHeader(ViewGroup qsHeader) {
mQsHeader = qsHeader;
}
- @ShadeViewRefactor(RefactorComponent.ADAPTER)
public static boolean isPinnedHeadsUp(View v) {
if (v instanceof ExpandableNotificationRow) {
ExpandableNotificationRow row = (ExpandableNotificationRow) v;
@@ -1757,7 +1714,6 @@
return false;
}
- @ShadeViewRefactor(RefactorComponent.ADAPTER)
private boolean isHeadsUp(View v) {
if (v instanceof ExpandableNotificationRow) {
ExpandableNotificationRow row = (ExpandableNotificationRow) v;
@@ -1766,7 +1722,6 @@
return false;
}
- @ShadeViewRefactor(RefactorComponent.COORDINATOR)
private ExpandableView getChildAtPosition(float touchX, float touchY) {
return getChildAtPosition(
touchX, touchY, true /* requireMinHeight */, true /* ignoreDecors */);
@@ -1781,7 +1736,6 @@
* @param ignoreDecors Whether decors can be returned
* @return the child at the given location.
*/
- @ShadeViewRefactor(RefactorComponent.COORDINATOR)
ExpandableView getChildAtPosition(float touchX, float touchY,
boolean requireMinHeight, boolean ignoreDecors) {
// find the view under the pointer, accounting for GONE views
@@ -1829,12 +1783,10 @@
return getChildAtPosition(touchX - mTempInt2[0], touchY - mTempInt2[1]);
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public void setScrollingEnabled(boolean enable) {
mScrollingEnabled = enable;
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public void lockScrollTo(View v) {
if (mForcedScroll == v) {
return;
@@ -1847,7 +1799,6 @@
}
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public boolean scrollTo(View v) {
ExpandableView expandableView = (ExpandableView) v;
int positionInLinearLayout = getPositionInLinearLayout(v);
@@ -1869,7 +1820,6 @@
* @return the scroll necessary to make the bottom edge of {@param v} align with the top of
* the IME.
*/
- @ShadeViewRefactor(RefactorComponent.COORDINATOR)
private int targetScrollForView(ExpandableView v, int positionInLinearLayout) {
return positionInLinearLayout + v.getIntrinsicHeight() +
getImeInset() - getHeight()
@@ -1890,7 +1840,6 @@
}
@Override
- @ShadeViewRefactor(RefactorComponent.COORDINATOR)
public WindowInsets onApplyWindowInsets(WindowInsets insets) {
if (!mAnimatedInsets) {
mBottomInset = insets.getInsets(WindowInsets.Type.ime()).bottom;
@@ -1920,7 +1869,6 @@
return insets;
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
private final Runnable mReclamp = new Runnable() {
@Override
public void run() {
@@ -1932,23 +1880,19 @@
}
};
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public void setExpandingEnabled(boolean enable) {
mExpandHelper.setEnabled(enable);
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
private boolean isScrollingEnabled() {
return mScrollingEnabled;
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
boolean onKeyguard() {
return mStatusBarState == StatusBarState.KEYGUARD;
}
@Override
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
protected void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
Resources res = getResources();
@@ -1961,7 +1905,6 @@
reinitView();
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
public void dismissViewAnimated(
View child, Consumer<Boolean> endRunnable, int delay, long duration) {
if (child instanceof SectionHeaderView) {
@@ -1979,7 +1922,6 @@
true /* isClearAll */);
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
private void snapViewIfNeeded(NotificationEntry entry) {
ExpandableNotificationRow child = entry.getRow();
boolean animate = mIsExpanded || isPinnedHeadsUp(child);
@@ -1990,7 +1932,6 @@
}
}
- @ShadeViewRefactor(RefactorComponent.ADAPTER)
public ViewGroup getViewParentForNotification(NotificationEntry entry) {
return this;
}
@@ -2002,7 +1943,6 @@
* @return The amount of scrolling to be performed by the scroller,
* not handled by the overScroll amount.
*/
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
private float overScrollUp(int deltaY, int range) {
deltaY = Math.max(deltaY, 0);
float currentTopAmount = getCurrentOverScrollAmount(true);
@@ -2036,7 +1976,6 @@
* @return The amount of scrolling to be performed by the scroller,
* not handled by the overScroll amount.
*/
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
private float overScrollDown(int deltaY) {
deltaY = Math.min(deltaY, 0);
float currentBottomAmount = getCurrentOverScrollAmount(false);
@@ -2061,14 +2000,12 @@
return scrollAmount;
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
private void initVelocityTrackerIfNotExists() {
if (mVelocityTracker == null) {
mVelocityTracker = VelocityTracker.obtain();
}
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
private void recycleVelocityTracker() {
if (mVelocityTracker != null) {
mVelocityTracker.recycle();
@@ -2076,7 +2013,6 @@
}
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
private void initOrResetVelocityTracker() {
if (mVelocityTracker == null) {
mVelocityTracker = VelocityTracker.obtain();
@@ -2085,12 +2021,10 @@
}
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public void setFinishScrollingCallback(Runnable runnable) {
mFinishScrollingCallback = runnable;
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
private void animateScroll() {
if (mScroller.computeScrollOffset()) {
int oldY = mOwnScrollY;
@@ -2139,7 +2073,6 @@
* @param scrollRangeY The maximum allowable scroll position (absolute scrolling only).
* @param maxOverScrollY The current (unsigned) limit on number of pixels to overscroll by.
*/
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
private void customOverScrollBy(int deltaY, int scrollY, int scrollRangeY, int maxOverScrollY) {
int newScrollY = scrollY + deltaY;
final int top = -maxOverScrollY;
@@ -2167,7 +2100,6 @@
* @param onTop Should the effect be applied on top of the scroller.
* @param animate Should an animation be performed.
*/
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
public void setOverScrolledPixels(float numPixels, boolean onTop, boolean animate) {
setOverScrollAmount(numPixels * getRubberBandFactor(onTop), onTop, animate, true);
}
@@ -2181,7 +2113,6 @@
* @param animate Should an animation be performed.
*/
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
public void setOverScrollAmount(float amount, boolean onTop, boolean animate) {
setOverScrollAmount(amount, onTop, animate, true);
}
@@ -2194,7 +2125,6 @@
* @param animate Should an animation be performed.
* @param cancelAnimators Should running animations be cancelled.
*/
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
public void setOverScrollAmount(float amount, boolean onTop, boolean animate,
boolean cancelAnimators) {
setOverScrollAmount(amount, onTop, animate, cancelAnimators, isRubberbanded(onTop));
@@ -2210,7 +2140,6 @@
* @param isRubberbanded The value which will be passed to
* {@link OnOverscrollTopChangedListener#onOverscrollTopChanged}
*/
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
public void setOverScrollAmount(float amount, boolean onTop, boolean animate,
boolean cancelAnimators, boolean isRubberbanded) {
if (cancelAnimators) {
@@ -2219,7 +2148,6 @@
setOverScrollAmountInternal(amount, onTop, animate, isRubberbanded);
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
private void setOverScrollAmountInternal(float amount, boolean onTop, boolean animate,
boolean isRubberbanded) {
amount = Math.max(0, amount);
@@ -2236,7 +2164,6 @@
}
}
- @ShadeViewRefactor(RefactorComponent.COORDINATOR)
private void notifyOverscrollTopListener(float amount, boolean isRubberbanded) {
mExpandHelper.onlyObserveMovements(amount > 1.0f);
if (mDontReportNextOverScroll) {
@@ -2248,23 +2175,19 @@
}
}
- @ShadeViewRefactor(RefactorComponent.COORDINATOR)
public void setOverscrollTopChangedListener(
OnOverscrollTopChangedListener overscrollTopChangedListener) {
mOverscrollTopChangedListener = overscrollTopChangedListener;
}
- @ShadeViewRefactor(RefactorComponent.COORDINATOR)
public float getCurrentOverScrollAmount(boolean top) {
return mAmbientState.getOverScrollAmount(top);
}
- @ShadeViewRefactor(RefactorComponent.COORDINATOR)
public float getCurrentOverScrolledPixels(boolean top) {
return top ? mOverScrolledTopPixels : mOverScrolledBottomPixels;
}
- @ShadeViewRefactor(RefactorComponent.COORDINATOR)
private void setOverScrolledPixels(float amount, boolean onTop) {
if (onTop) {
mOverScrolledTopPixels = amount;
@@ -2281,7 +2204,6 @@
* @param clampedY Whether this value was clamped by the calling method, meaning we've reached
* the overscroll limit.
*/
- @ShadeViewRefactor(RefactorComponent.COORDINATOR)
private void onCustomOverScrolled(int scrollY, boolean clampedY) {
// Treat animating scrolls differently; see #computeScroll() for why.
if (!mScroller.isFinished()) {
@@ -2305,7 +2227,6 @@
* Springs back from an overscroll by stopping the {@link #mScroller} and animating the
* overscroll amount back to zero.
*/
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
private void springBack() {
int scrollRange = getScrollRange();
boolean overScrolledTop = mOwnScrollY <= 0;
@@ -2329,7 +2250,6 @@
}
}
- @ShadeViewRefactor(RefactorComponent.COORDINATOR)
private int getScrollRange() {
// In current design, it only use the top HUN to treat all of HUNs
// although there are more than one HUNs
@@ -2346,7 +2266,6 @@
return scrollRange;
}
- @ShadeViewRefactor(RefactorComponent.COORDINATOR)
private int getImeInset() {
// The NotificationStackScrollLayout does not extend all the way to the bottom of the
// display. Therefore, subtract that space from the mBottomInset, in order to only include
@@ -2358,7 +2277,6 @@
/**
* @return the first child which has visibility unequal to GONE
*/
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public ExpandableView getFirstChildNotGone() {
int childCount = getChildCount();
for (int i = 0; i < childCount; i++) {
@@ -2374,7 +2292,6 @@
* @return The first child which has visibility unequal to GONE which is currently below the
* given translationY or equal to it.
*/
- @ShadeViewRefactor(RefactorComponent.COORDINATOR)
private View getFirstChildBelowTranlsationY(float translationY, boolean ignoreChildren) {
int childCount = getChildCount();
for (int i = 0; i < childCount; i++) {
@@ -2406,7 +2323,6 @@
/**
* @return the last child which has visibility unequal to GONE
*/
- @ShadeViewRefactor(RefactorComponent.COORDINATOR)
public ExpandableView getLastChildNotGone() {
int childCount = getChildCount();
for (int i = childCount - 1; i >= 0; i--) {
@@ -2432,7 +2348,6 @@
/**
* @return the number of children which have visibility unequal to GONE
*/
- @ShadeViewRefactor(RefactorComponent.COORDINATOR)
public int getNotGoneChildCount() {
int childCount = getChildCount();
int count = 0;
@@ -2445,7 +2360,6 @@
return count;
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
private void updateContentHeight() {
final float scrimTopPadding = mAmbientState.isOnKeyguard() ? 0 : mMinimumPaddings;
final int shelfIntrinsicHeight = mShelf != null ? mShelf.getIntrinsicHeight() : 0;
@@ -2481,12 +2395,10 @@
previous, mAmbientState.getFractionToShade(), mAmbientState.isOnKeyguard());
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public boolean hasPulsingNotifications() {
return mPulsing;
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
private void updateScrollability() {
boolean scrollable = !mQsFullScreen && getScrollRange() > 0;
if (scrollable != mScrollable) {
@@ -2496,7 +2408,6 @@
}
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
private void updateForwardAndBackwardScrollability() {
boolean forwardScrollable = mScrollable && !mScrollAdapter.isScrolledToBottom();
boolean backwardsScrollable = mScrollable && !mScrollAdapter.isScrolledToTop();
@@ -2509,7 +2420,6 @@
}
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
private void updateBackground() {
// No need to update the background color if it's not being drawn.
if (!mShouldDrawNotificationBackground) {
@@ -2540,7 +2450,6 @@
mAnimateNextSectionBoundsChange = false;
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
private void abortBackgroundAnimators() {
for (NotificationSection section : mSections) {
section.cancelAnimators();
@@ -2556,7 +2465,6 @@
return false;
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
private boolean areSectionBoundsAnimating() {
for (NotificationSection section : mSections) {
if (section.areBoundsAnimating()) {
@@ -2566,7 +2474,6 @@
return false;
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
private void startBackgroundAnimation() {
// TODO(kprevas): do we still need separate fields for top/bottom?
// or can each section manage its own animation state?
@@ -2586,7 +2493,6 @@
/**
* Update the background bounds to the new desired bounds
*/
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
private void updateBackgroundBounds() {
int left = mSidePaddings;
int right = getWidth() - mSidePaddings;
@@ -2652,7 +2558,6 @@
return null;
}
- @ShadeViewRefactor(RefactorComponent.COORDINATOR)
private ExpandableView getLastChildWithBackground() {
int childCount = getChildCount();
for (int i = childCount - 1; i >= 0; i--) {
@@ -2665,7 +2570,6 @@
return null;
}
- @ShadeViewRefactor(RefactorComponent.COORDINATOR)
private ExpandableView getFirstChildWithBackground() {
int childCount = getChildCount();
for (int i = 0; i < childCount; i++) {
@@ -2700,7 +2604,6 @@
* numbers mean that the finger/cursor is moving down the screen,
* which means we want to scroll towards the top.
*/
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
protected void fling(int velocityY) {
if (getChildCount() > 0) {
float topAmount = getCurrentOverScrollAmount(true);
@@ -2739,7 +2642,6 @@
* @return Whether a fling performed on the top overscroll edge lead to the expanded
* overScroll view (i.e QS).
*/
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
private boolean shouldOverScrollFling(int initialVelocity) {
float topOverScroll = getCurrentOverScrollAmount(true);
return mScrolledToTopOnFirstDown
@@ -2756,7 +2658,6 @@
* @param qsHeight the top padding imposed by the quick settings panel
* @param animate whether to animate the change
*/
- @ShadeViewRefactor(RefactorComponent.COORDINATOR)
public void updateTopPadding(float qsHeight, boolean animate) {
int topPadding = (int) qsHeight;
int minStackHeight = getLayoutMinHeight();
@@ -2769,12 +2670,10 @@
setExpandedHeight(mExpandedHeight);
}
- @ShadeViewRefactor(RefactorComponent.COORDINATOR)
public void setMaxTopPadding(int maxTopPadding) {
mMaxTopPadding = maxTopPadding;
}
- @ShadeViewRefactor(RefactorComponent.COORDINATOR)
public int getLayoutMinHeight() {
if (isHeadsUpTransition()) {
ExpandableNotificationRow trackedHeadsUpRow = mAmbientState.getTrackedHeadsUpRow();
@@ -2791,17 +2690,14 @@
return mShelf.getVisibility() == GONE ? 0 : mShelf.getIntrinsicHeight();
}
- @ShadeViewRefactor(RefactorComponent.COORDINATOR)
public float getTopPaddingOverflow() {
return mTopPaddingOverflow;
}
- @ShadeViewRefactor(RefactorComponent.COORDINATOR)
private int clampPadding(int desiredPadding) {
return Math.max(desiredPadding, mIntrinsicPadding);
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
private float getRubberBandFactor(boolean onTop) {
if (!onTop) {
return RUBBER_BAND_FACTOR_NORMAL;
@@ -2821,14 +2717,12 @@
* rubberbanded, false if it is technically an overscroll but rather a motion to expand the
* overscroll view (e.g. expand QS).
*/
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
private boolean isRubberbanded(boolean onTop) {
return !onTop || mExpandedInThisMotion || mIsExpansionChanging || mPanelTracking
|| !mScrolledToTopOnFirstDown;
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public void setChildTransferInProgress(boolean childTransferInProgress) {
Assert.isMainThread();
mChildTransferInProgress = childTransferInProgress;
@@ -2843,7 +2737,6 @@
mOnNotificationRemovedListener = listener;
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
@Override
public void onViewRemoved(View child) {
super.onViewRemoved(child);
@@ -2864,7 +2757,6 @@
}
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
public void cleanUpViewStateForEntry(NotificationEntry entry) {
View child = entry.getRow();
if (child == mSwipeHelper.getTranslatingParentView()) {
@@ -2872,7 +2764,6 @@
}
}
- @ShadeViewRefactor(RefactorComponent.COORDINATOR)
private void onViewRemovedInternal(ExpandableView child, ViewGroup container) {
if (mChangePositionInProgress) {
// This is only a position change, don't do anything special
@@ -2909,7 +2800,6 @@
return Math.abs(child.getTranslation()) >= Math.abs(getTotalTranslationLength(child));
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
private void focusNextViewIfFocused(View view) {
if (view instanceof ExpandableNotificationRow) {
ExpandableNotificationRow row = (ExpandableNotificationRow) view;
@@ -2929,7 +2819,6 @@
}
- @ShadeViewRefactor(RefactorComponent.ADAPTER)
private boolean isChildInGroup(View child) {
return child instanceof ExpandableNotificationRow
&& mGroupMembershipManager.isChildInGroup(
@@ -2942,7 +2831,6 @@
* @param child The view to generate the remove animation for.
* @return Whether an animation was generated.
*/
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
boolean generateRemoveAnimation(ExpandableView child) {
String key = "";
if (mDebugRemoveAnimation) {
@@ -2986,7 +2874,6 @@
return false;
}
- @ShadeViewRefactor(RefactorComponent.ADAPTER)
private boolean isClickedHeadsUp(View child) {
return HeadsUpUtil.isClickedHeadsUpNotification(child);
}
@@ -2996,7 +2883,6 @@
*
* @return whether any child was removed from the list to animate and the view was just added
*/
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
private boolean removeRemovedChildFromHeadsUpChangeAnimations(View child) {
boolean hasAddEvent = false;
for (Pair<ExpandableNotificationRow, Boolean> eventPair : mHeadsUpChangeAnimations) {
@@ -3021,7 +2907,6 @@
*
* @param removedChild the removed child
*/
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
private void updateScrollStateForRemovedChild(ExpandableView removedChild) {
final int startingPosition = getPositionInLinearLayout(removedChild);
final int childHeight = getIntrinsicHeight(removedChild) + mPaddingBetweenElements;
@@ -3050,7 +2935,6 @@
return mTopPadding - mQsScrollBoundaryPosition;
}
- @ShadeViewRefactor(RefactorComponent.COORDINATOR)
private int getIntrinsicHeight(View view) {
if (view instanceof ExpandableView) {
ExpandableView expandableView = (ExpandableView) view;
@@ -3059,7 +2943,6 @@
return view.getHeight();
}
- @ShadeViewRefactor(RefactorComponent.COORDINATOR)
public int getPositionInLinearLayout(View requestedView) {
ExpandableNotificationRow childInGroup = null;
ExpandableNotificationRow requestedRow = null;
@@ -3100,7 +2983,6 @@
}
@Override
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public void onViewAdded(View child) {
super.onViewAdded(child);
if (child instanceof ExpandableView) {
@@ -3108,7 +2990,6 @@
}
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
private void updateFirstAndLastBackgroundViews() {
NotificationSection firstSection = getFirstVisibleSection();
NotificationSection lastSection = getLastVisibleSection();
@@ -3136,7 +3017,6 @@
invalidate();
}
- @ShadeViewRefactor(RefactorComponent.COORDINATOR)
private void onViewAddedInternal(ExpandableView child) {
updateHideSensitiveForChild(child);
child.setOnHeightChangedListener(mOnChildHeightChangedListener);
@@ -3154,12 +3034,10 @@
}
}
- @ShadeViewRefactor(RefactorComponent.COORDINATOR)
private void updateHideSensitiveForChild(ExpandableView child) {
child.setHideSensitiveForIntrinsicHeight(mAmbientState.isHideSensitive());
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public void notifyGroupChildRemoved(ExpandableView row, ViewGroup childrenContainer) {
onViewRemovedInternal(row, childrenContainer);
}
@@ -3168,7 +3046,6 @@
onViewAddedInternal(row);
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
public void setAnimationsEnabled(boolean animationsEnabled) {
mAnimationsEnabled = animationsEnabled;
updateNotificationAnimationStates();
@@ -3179,7 +3056,6 @@
}
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
private void updateNotificationAnimationStates() {
boolean running = mAnimationsEnabled || hasPulsingNotifications();
mShelf.setAnimationsEnabled(running);
@@ -3191,13 +3067,11 @@
}
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
void updateAnimationState(View child) {
updateAnimationState((mAnimationsEnabled || hasPulsingNotifications())
&& (mIsExpanded || isPinnedHeadsUp(child)), child);
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
void setExpandingNotification(ExpandableNotificationRow row) {
if (mExpandingNotificationRow != null && row == null) {
// Let's unset the clip path being set during launch
@@ -3216,7 +3090,6 @@
return v.getParent() == this;
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
public void applyLaunchAnimationParams(LaunchAnimationParameters params) {
// Modify the clipping for launching notifications
mLaunchAnimationParams = params;
@@ -3225,7 +3098,6 @@
requestChildrenUpdate();
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
private void updateAnimationState(boolean running, View child) {
if (child instanceof ExpandableNotificationRow) {
ExpandableNotificationRow row = (ExpandableNotificationRow) child;
@@ -3233,13 +3105,11 @@
}
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
boolean isAddOrRemoveAnimationPending() {
return mNeedsAnimation
&& (!mChildrenToAddAnimated.isEmpty() || !mChildrenToRemoveAnimated.isEmpty());
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
public void generateAddAnimation(ExpandableView child, boolean fromMoreCard) {
if (mIsExpanded && mAnimationsEnabled && !mChangePositionInProgress && !isFullyHidden()) {
// Generate Animations
@@ -3256,7 +3126,6 @@
}
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
public void changeViewPosition(ExpandableView child, int newIndex) {
Assert.isMainThread();
if (mChangePositionInProgress) {
@@ -3290,7 +3159,6 @@
}
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
private void startAnimationToState() {
if (mNeedsAnimation) {
generateAllAnimationEvents();
@@ -3308,7 +3176,6 @@
mGoToFullShadeDelay = 0;
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
private void generateAllAnimationEvents() {
generateHeadsUpAnimationEvents();
generateChildRemovalEvents();
@@ -3324,7 +3191,6 @@
generateAnimateEverythingEvent();
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
private void generateHeadsUpAnimationEvents() {
for (Pair<ExpandableNotificationRow, Boolean> eventPair : mHeadsUpChangeAnimations) {
ExpandableNotificationRow row = eventPair.first;
@@ -3388,13 +3254,11 @@
mAddedHeadsUpChildren.clear();
}
- @ShadeViewRefactor(RefactorComponent.COORDINATOR)
private boolean shouldHunAppearFromBottom(ExpandableViewState viewState) {
return viewState.getYTranslation() + viewState.height
>= mAmbientState.getMaxHeadsUpTranslation();
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
private void generateGroupExpansionEvent() {
// Generate a group expansion/collapsing event if there is such a group at all
if (mExpandedGroupView != null) {
@@ -3404,7 +3268,6 @@
}
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
private void generateViewResizeEvent() {
if (mNeedViewResizeAnimation) {
boolean hasDisappearAnimation = false;
@@ -3425,7 +3288,6 @@
mNeedViewResizeAnimation = false;
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
private void generateChildRemovalEvents() {
for (ExpandableView child : mChildrenToRemoveAnimated) {
boolean childWasSwipedOut = mSwipedOutViews.contains(child);
@@ -3473,7 +3335,6 @@
mChildrenToRemoveAnimated.clear();
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
private void generatePositionChangeEvents() {
for (ExpandableView child : mChildrenChangingPositions) {
Integer duration = null;
@@ -3498,7 +3359,6 @@
}
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
private void generateChildAdditionEvents() {
for (ExpandableView child : mChildrenToAddAnimated) {
if (mFromMoreCardAdditions.contains(child)) {
@@ -3514,7 +3374,6 @@
mFromMoreCardAdditions.clear();
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
private void generateTopPaddingEvent() {
if (mTopPaddingNeedsAnimation) {
AnimationEvent event;
@@ -3531,7 +3390,6 @@
mTopPaddingNeedsAnimation = false;
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
private void generateActivateEvent() {
if (mActivateNeedsAnimation) {
mAnimationEvents.add(
@@ -3540,7 +3398,6 @@
mActivateNeedsAnimation = false;
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
private void generateAnimateEverythingEvent() {
if (mEverythingNeedsAnimation) {
mAnimationEvents.add(
@@ -3549,7 +3406,6 @@
mEverythingNeedsAnimation = false;
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
private void generateDimmedEvent() {
if (mDimmedNeedsAnimation) {
mAnimationEvents.add(
@@ -3558,7 +3414,6 @@
mDimmedNeedsAnimation = false;
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
private void generateHideSensitiveEvent() {
if (mHideSensitiveNeedsAnimation) {
mAnimationEvents.add(
@@ -3567,7 +3422,6 @@
mHideSensitiveNeedsAnimation = false;
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
private void generateGoToFullShadeEvent() {
if (mGoToFullShadeNeedsAnimation) {
mAnimationEvents.add(
@@ -3576,7 +3430,6 @@
mGoToFullShadeNeedsAnimation = false;
}
- @ShadeViewRefactor(RefactorComponent.LAYOUT_ALGORITHM)
protected StackScrollAlgorithm createStackScrollAlgorithm(Context context) {
return new StackScrollAlgorithm(context, this);
}
@@ -3584,7 +3437,6 @@
/**
* @return Whether a y coordinate is inside the content.
*/
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public boolean isInContentBounds(float y) {
return y < getHeight() - getEmptyBottomMargin();
}
@@ -3605,7 +3457,6 @@
return super.onTouchEvent(ev);
}
- @ShadeViewRefactor(RefactorComponent.INPUT)
void dispatchDownEventToScroller(MotionEvent ev) {
MotionEvent downEvent = MotionEvent.obtain(ev);
downEvent.setAction(MotionEvent.ACTION_DOWN);
@@ -3614,7 +3465,6 @@
}
@Override
- @ShadeViewRefactor(RefactorComponent.INPUT)
public boolean onGenericMotionEvent(MotionEvent event) {
if (!isScrollingEnabled()
|| !mIsExpanded
@@ -3650,7 +3500,6 @@
return super.onGenericMotionEvent(event);
}
- @ShadeViewRefactor(RefactorComponent.INPUT)
boolean onScrollTouch(MotionEvent ev) {
if (!isScrollingEnabled()) {
return false;
@@ -3807,7 +3656,6 @@
return mFlingAfterUpEvent;
}
- @ShadeViewRefactor(RefactorComponent.INPUT)
protected boolean isInsideQsHeader(MotionEvent ev) {
mQsHeader.getBoundsOnScreen(mQsHeaderBound);
/**
@@ -3825,7 +3673,6 @@
return mQsHeaderBound.contains((int) ev.getRawX(), (int) ev.getRawY());
}
- @ShadeViewRefactor(RefactorComponent.INPUT)
private void onOverScrollFling(boolean open, int initialVelocity) {
if (mOverscrollTopChangedListener != null) {
mOverscrollTopChangedListener.flingTopOverscroll(initialVelocity, open);
@@ -3835,7 +3682,6 @@
}
- @ShadeViewRefactor(RefactorComponent.INPUT)
private void onSecondaryPointerUp(MotionEvent ev) {
final int pointerIndex = (ev.getAction() & MotionEvent.ACTION_POINTER_INDEX_MASK) >>
MotionEvent.ACTION_POINTER_INDEX_SHIFT;
@@ -3853,7 +3699,6 @@
}
}
- @ShadeViewRefactor(RefactorComponent.INPUT)
private void endDrag() {
setIsBeingDragged(false);
@@ -3868,7 +3713,6 @@
}
@Override
- @ShadeViewRefactor(RefactorComponent.INPUT)
public boolean onInterceptTouchEvent(MotionEvent ev) {
if (mTouchHandler != null && mTouchHandler.onInterceptTouchEvent(ev)) {
return true;
@@ -3876,7 +3720,6 @@
return super.onInterceptTouchEvent(ev);
}
- @ShadeViewRefactor(RefactorComponent.INPUT)
void handleEmptySpaceClick(MotionEvent ev) {
logEmptySpaceClick(ev, isBelowLastNotification(mInitialTouchX, mInitialTouchY),
mStatusBarState, mTouchIsClick);
@@ -3919,7 +3762,6 @@
MotionEvent.actionToString(ev.getActionMasked()));
}
- @ShadeViewRefactor(RefactorComponent.INPUT)
void initDownStates(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
mExpandedInThisMotion = false;
@@ -3933,7 +3775,6 @@
}
@Override
- @ShadeViewRefactor(RefactorComponent.INPUT)
public void requestDisallowInterceptTouchEvent(boolean disallowIntercept) {
super.requestDisallowInterceptTouchEvent(disallowIntercept);
if (disallowIntercept) {
@@ -3941,7 +3782,6 @@
}
}
- @ShadeViewRefactor(RefactorComponent.INPUT)
boolean onInterceptTouchEventScroll(MotionEvent ev) {
if (!isScrollingEnabled()) {
return false;
@@ -4056,14 +3896,12 @@
/**
* @return Whether the specified motion event is actually happening over the content.
*/
- @ShadeViewRefactor(RefactorComponent.INPUT)
private boolean isInContentBounds(MotionEvent event) {
return isInContentBounds(event.getY());
}
@VisibleForTesting
- @ShadeViewRefactor(RefactorComponent.INPUT)
void setIsBeingDragged(boolean isDragged) {
mIsBeingDragged = isDragged;
if (isDragged) {
@@ -4073,22 +3911,18 @@
}
}
- @ShadeViewRefactor(RefactorComponent.INPUT)
public void requestDisallowLongPress() {
cancelLongPress();
}
- @ShadeViewRefactor(RefactorComponent.INPUT)
public void requestDisallowDismiss() {
mDisallowDismissInThisMotion = true;
}
- @ShadeViewRefactor(RefactorComponent.INPUT)
public void cancelLongPress() {
mSwipeHelper.cancelLongPress();
}
- @ShadeViewRefactor(RefactorComponent.INPUT)
public void setOnEmptySpaceClickListener(OnEmptySpaceClickListener listener) {
mOnEmptySpaceClickListener = listener;
}
@@ -4097,7 +3931,6 @@
* @hide
*/
@Override
- @ShadeViewRefactor(RefactorComponent.INPUT)
public boolean performAccessibilityActionInternal(int action, Bundle arguments) {
if (super.performAccessibilityActionInternal(action, arguments)) {
return true;
@@ -4132,7 +3965,6 @@
}
@Override
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public void onWindowFocusChanged(boolean hasWindowFocus) {
super.onWindowFocusChanged(hasWindowFocus);
if (!hasWindowFocus) {
@@ -4141,7 +3973,6 @@
}
@Override
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public void clearChildFocus(View child) {
super.clearChildFocus(child);
if (mForcedScroll == child) {
@@ -4153,7 +3984,6 @@
return mScrollAdapter.isScrolledToBottom();
}
- @ShadeViewRefactor(RefactorComponent.COORDINATOR)
int getEmptyBottomMargin() {
int contentHeight;
if (mShouldUseSplitNotificationShade) {
@@ -4168,13 +3998,11 @@
return Math.max(mMaxLayoutHeight - contentHeight, 0);
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
void onExpansionStarted() {
mIsExpansionChanging = true;
mAmbientState.setExpansionChanging(true);
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
void onExpansionStopped() {
mIsExpansionChanging = false;
mAmbientState.setExpansionChanging(false);
@@ -4187,7 +4015,6 @@
}
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
private void clearUserLockedViews() {
for (int i = 0; i < getChildCount(); i++) {
ExpandableView child = getChildAtIndex(i);
@@ -4198,7 +4025,6 @@
}
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
private void clearTemporaryViews() {
// lets make sure nothing is transient anymore
clearTemporaryViewsInGroup(this);
@@ -4211,7 +4037,6 @@
}
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
private void clearTemporaryViewsInGroup(ViewGroup viewGroup) {
while (viewGroup != null && viewGroup.getTransientViewCount() != 0) {
final View transientView = viewGroup.getTransientView(0);
@@ -4222,27 +4047,23 @@
}
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
void onPanelTrackingStarted() {
mPanelTracking = true;
mAmbientState.setPanelTracking(true);
resetExposedMenuView(true /* animate */, true /* force */);
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
void onPanelTrackingStopped() {
mPanelTracking = false;
mAmbientState.setPanelTracking(false);
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
void resetScrollPosition() {
mScroller.abortAnimation();
setOwnScrollY(0);
}
@VisibleForTesting
- @ShadeViewRefactor(RefactorComponent.COORDINATOR)
void setIsExpanded(boolean isExpanded) {
boolean changed = isExpanded != mIsExpanded;
mIsExpanded = isExpanded;
@@ -4267,7 +4088,6 @@
}
}
- @ShadeViewRefactor(RefactorComponent.COORDINATOR)
private void updateChronometers() {
int childCount = getChildCount();
for (int i = 0; i < childCount; i++) {
@@ -4275,7 +4095,6 @@
}
}
- @ShadeViewRefactor(RefactorComponent.COORDINATOR)
void updateChronometerForChild(View child) {
if (child instanceof ExpandableNotificationRow) {
ExpandableNotificationRow row = (ExpandableNotificationRow) child;
@@ -4316,7 +4135,6 @@
updateChronometerForChild(view);
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
private void updateScrollPositionOnExpandInBottom(ExpandableView view) {
if (view instanceof ExpandableNotificationRow && !onKeyguard()) {
ExpandableNotificationRow row = (ExpandableNotificationRow) view;
@@ -4345,13 +4163,11 @@
}
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
void setOnHeightChangedListener(
ExpandableView.OnHeightChangedListener onHeightChangedListener) {
this.mOnHeightChangedListener = onHeightChangedListener;
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
void onChildAnimationFinished() {
setAnimationRunning(false);
requestChildrenUpdate();
@@ -4372,7 +4188,6 @@
}
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
private void clearHeadsUpDisappearRunning() {
for (int i = 0; i < getChildCount(); i++) {
View view = getChildAt(i);
@@ -4388,7 +4203,6 @@
}
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
private void clearTransient() {
for (ExpandableView view : mClearTransientViewsWhenFinished) {
view.removeFromTransientContainer();
@@ -4396,7 +4210,6 @@
mClearTransientViewsWhenFinished.clear();
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
private void runAnimationFinishedRunnables() {
for (Runnable runnable : mAnimationFinishedRunnables) {
runnable.run();
@@ -4407,7 +4220,6 @@
/**
* See {@link AmbientState#setDimmed}.
*/
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
void setDimmed(boolean dimmed, boolean animate) {
dimmed &= onKeyguard();
mAmbientState.setDimmed(dimmed);
@@ -4422,18 +4234,15 @@
}
@VisibleForTesting
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
boolean isDimmed() {
return mAmbientState.isDimmed();
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
private void setDimAmount(float dimAmount) {
mDimAmount = dimAmount;
updateBackgroundDimming();
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
private void animateDimmed(boolean dimmed) {
if (mDimAnimator != null) {
mDimAnimator.cancel();
@@ -4450,7 +4259,6 @@
mDimAnimator.start();
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
void updateSensitiveness(boolean animate, boolean hideSensitive) {
if (hideSensitive != mAmbientState.isHideSensitive()) {
int childCount = getChildCount();
@@ -4468,7 +4276,6 @@
}
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
private void applyCurrentState() {
int numChildren = getChildCount();
for (int i = 0; i < numChildren; i++) {
@@ -4485,7 +4292,6 @@
updateViewShadows();
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
private void updateViewShadows() {
// we need to work around an issue where the shadow would not cast between siblings when
// their z difference is between 0 and 0.1
@@ -4526,7 +4332,6 @@
/**
* Update colors of "dismiss" and "empty shade" views.
*/
- @ShadeViewRefactor(RefactorComponent.DECORATOR)
void updateDecorViews() {
final @ColorInt int textColor =
Utils.getColorAttrDefaultColor(mContext, android.R.attr.textColorPrimary);
@@ -4535,7 +4340,6 @@
mEmptyShadeView.setTextColor(textColor);
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
void goToFullShade(long delay) {
mGoToFullShadeNeedsAnimation = true;
mGoToFullShadeDelay = delay;
@@ -4543,23 +4347,19 @@
requestChildrenUpdate();
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public void cancelExpandHelper() {
mExpandHelper.cancel();
}
- @ShadeViewRefactor(RefactorComponent.COORDINATOR)
void setIntrinsicPadding(int intrinsicPadding) {
mIntrinsicPadding = intrinsicPadding;
}
- @ShadeViewRefactor(RefactorComponent.COORDINATOR)
int getIntrinsicPadding() {
return mIntrinsicPadding;
}
@Override
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public boolean shouldDelayChildPressedState() {
return true;
}
@@ -4567,7 +4367,6 @@
/**
* See {@link AmbientState#setDozing}.
*/
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public void setDozing(boolean dozing, boolean animate) {
if (mAmbientState.isDozing() == dozing) {
return;
@@ -4586,7 +4385,6 @@
* @param interpolatedHideAmount The hide amount that follows the actual interpolation of the
* animation curve.
*/
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
void setHideAmount(float linearHideAmount, float interpolatedHideAmount) {
mLinearHideAmount = linearHideAmount;
mInterpolatedHideAmount = interpolatedHideAmount;
@@ -4627,7 +4425,6 @@
mController.updateVisibility(!mAmbientState.isFullyHidden() || !onKeyguard());
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
void notifyHideAnimationStart(boolean hide) {
// We only swap the scaling factor if we're fully hidden or fully awake to avoid
// interpolation issues when playing with the power button.
@@ -4639,7 +4436,6 @@
}
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
private int getNotGoneIndex(View child) {
int count = getChildCount();
int notGoneIndex = 0;
@@ -4663,7 +4459,6 @@
return mFooterView != null && mFooterView.isHistoryShown();
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
void setFooterView(@NonNull FooterView footerView) {
int index = -1;
if (mFooterView != null) {
@@ -4677,7 +4472,6 @@
}
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public void setEmptyShadeView(EmptyShadeView emptyShadeView) {
int index = -1;
if (mEmptyShadeView != null) {
@@ -4688,7 +4482,6 @@
addView(mEmptyShadeView, index);
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
void updateEmptyShadeView(boolean visible, boolean areNotificationsHiddenInShade) {
mEmptyShadeView.setVisible(visible, mIsExpanded && mAnimationsEnabled);
@@ -4731,7 +4524,6 @@
return mEmptyShadeView.isVisible();
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public void updateFooterView(boolean visible, boolean showDismissView, boolean showHistory) {
if (mFooterView == null || mNotificationStackSizeCalculator == null) {
return;
@@ -4743,7 +4535,6 @@
mFooterView.setFooterLabelVisible(mHasFilteredOutSeenNotifications);
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public void setClearAllInProgress(boolean clearAllInProgress) {
mClearAllInProgress = clearAllInProgress;
mAmbientState.setClearAllInProgress(clearAllInProgress);
@@ -4754,19 +4545,16 @@
return mClearAllInProgress;
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public boolean isFooterViewNotGone() {
return mFooterView != null
&& mFooterView.getVisibility() != View.GONE
&& !mFooterView.willBeGone();
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public boolean isFooterViewContentVisible() {
return mFooterView != null && mFooterView.isContentVisible();
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public int getFooterViewHeightWithPadding() {
return mFooterView == null ? 0 : mFooterView.getHeight()
+ mPaddingBetweenElements
@@ -4780,12 +4568,10 @@
return mGapHeight + mPaddingBetweenElements;
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public int getEmptyShadeViewHeight() {
return mEmptyShadeView.getHeight();
}
- @ShadeViewRefactor(RefactorComponent.COORDINATOR)
public float getBottomMostNotificationBottom() {
final int count = getChildCount();
float max = 0;
@@ -4803,7 +4589,6 @@
return max + getStackTranslation();
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public void setCentralSurfaces(CentralSurfaces centralSurfaces) {
this.mCentralSurfaces = centralSurfaces;
}
@@ -4812,7 +4597,6 @@
mActivityStarter = activityStarter;
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
void requestAnimateEverything() {
if (mIsExpanded && mAnimationsEnabled) {
mEverythingNeedsAnimation = true;
@@ -4821,7 +4605,6 @@
}
}
- @ShadeViewRefactor(RefactorComponent.COORDINATOR)
public boolean isBelowLastNotification(float touchX, float touchY) {
int childCount = getChildCount();
for (int i = childCount - 1; i >= 0; i--) {
@@ -4856,7 +4639,6 @@
* @hide
*/
@Override
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public void onInitializeAccessibilityEventInternal(AccessibilityEvent event) {
super.onInitializeAccessibilityEventInternal(event);
event.setScrollable(mScrollable);
@@ -4866,7 +4648,6 @@
}
@Override
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public void onInitializeAccessibilityNodeInfoInternal(AccessibilityNodeInfo info) {
super.onInitializeAccessibilityNodeInfoInternal(info);
if (mScrollable) {
@@ -4885,7 +4666,6 @@
info.setClassName(ScrollView.class.getName());
}
- @ShadeViewRefactor(RefactorComponent.COORDINATOR)
public void generateChildOrderChangedEvent() {
if (mIsExpanded && mAnimationsEnabled) {
mGenerateChildOrderChangedEvent = true;
@@ -4894,17 +4674,14 @@
}
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public int getContainerChildCount() {
return getChildCount();
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public View getContainerChildAt(int i) {
return getChildAt(i);
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public void removeContainerView(View v) {
Assert.isMainThread();
removeView(v);
@@ -4916,7 +4693,6 @@
updateSpeedBumpIndex();
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public void addContainerView(View v) {
Assert.isMainThread();
addView(v);
@@ -4950,7 +4726,6 @@
}
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public void runAfterAnimationFinished(Runnable runnable) {
mAnimationFinishedRunnables.add(runnable);
}
@@ -4960,7 +4735,6 @@
generateHeadsUpAnimation(row, isHeadsUp);
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
public void generateHeadsUpAnimation(ExpandableNotificationRow row, boolean isHeadsUp) {
final boolean add = mAnimationsEnabled && (isHeadsUp || mHeadsUpGoingAwayAnimationsAllowed);
if (SPEW) {
@@ -4995,7 +4769,6 @@
* @param height the height of the screen
* @param bottomBarHeight the height of the bar on the bottom
*/
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public void setHeadsUpBoundaries(int height, int bottomBarHeight) {
mAmbientState.setMaxHeadsUpTranslation(height - bottomBarHeight);
mStateAnimator.setHeadsUpAppearHeightBottom(height);
@@ -5006,23 +4779,19 @@
mWillExpand = willExpand;
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public void setTrackingHeadsUp(ExpandableNotificationRow row) {
mAmbientState.setTrackedHeadsUpRow(row);
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public void forceNoOverlappingRendering(boolean force) {
mForceNoOverlappingRendering = force;
}
@Override
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public boolean hasOverlappingRendering() {
return !mForceNoOverlappingRendering && super.hasOverlappingRendering();
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
public void setAnimationRunning(boolean animationRunning) {
if (animationRunning != mAnimationRunning) {
if (animationRunning) {
@@ -5035,12 +4804,10 @@
}
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public boolean isExpanded() {
return mIsExpanded;
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public void setPulsing(boolean pulsing, boolean animated) {
if (!mPulsing && !pulsing) {
return;
@@ -5055,7 +4822,6 @@
notifyHeightChangeListener(null, animated);
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public void setQsFullScreen(boolean qsFullScreen) {
mQsFullScreen = qsFullScreen;
updateAlgorithmLayoutMinHeight();
@@ -5066,7 +4832,6 @@
return mQsFullScreen;
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public void setQsExpansionFraction(float qsExpansionFraction) {
boolean footerAffected = mQsExpansionFraction != qsExpansionFraction
&& (mQsExpansionFraction == 1 || qsExpansionFraction == 1);
@@ -5084,12 +4849,10 @@
}
@VisibleForTesting
- @ShadeViewRefactor(RefactorComponent.COORDINATOR)
void setOwnScrollY(int ownScrollY) {
setOwnScrollY(ownScrollY, false /* animateScrollChangeListener */);
}
- @ShadeViewRefactor(RefactorComponent.COORDINATOR)
private void setOwnScrollY(int ownScrollY, boolean animateStackYChangeListener) {
// Avoid Flicking during clear all
// when the shade finishes closing, onExpansionStopped will call
@@ -5142,7 +4905,6 @@
shelf.bind(mAmbientState, this, mController.getNotificationRoundnessManager());
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public void setShelfController(NotificationShelfController notificationShelfController) {
NotificationShelfController.assertRefactorFlagDisabled(mAmbientState.getFeatureFlags());
int index = -1;
@@ -5157,7 +4919,6 @@
notificationShelfController.bind(mAmbientState, mController);
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public void setMaxDisplayedNotifications(int maxDisplayedNotifications) {
if (mMaxDisplayedNotifications != maxDisplayedNotifications) {
mMaxDisplayedNotifications = maxDisplayedNotifications;
@@ -5176,13 +4937,11 @@
mKeyguardBottomPadding = keyguardBottomPadding;
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public void setShouldShowShelfOnly(boolean shouldShowShelfOnly) {
mShouldShowShelfOnly = shouldShowShelfOnly;
updateAlgorithmLayoutMinHeight();
}
- @ShadeViewRefactor(RefactorComponent.COORDINATOR)
public int getMinExpansionHeight() {
// shelf height is defined in dp but status bar height can be defined in px, that makes
// relation between them variable - sometimes one might be bigger than the other when
@@ -5193,19 +4952,16 @@
+ mWaterfallTopInset;
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public void setInHeadsUpPinnedMode(boolean inHeadsUpPinnedMode) {
mInHeadsUpPinnedMode = inHeadsUpPinnedMode;
updateClipping();
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public void setHeadsUpAnimatingAway(boolean headsUpAnimatingAway) {
mHeadsUpAnimatingAway = headsUpAnimatingAway;
updateClipping();
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
@VisibleForTesting
public void setStatusBarState(int statusBarState) {
mStatusBarState = statusBarState;
@@ -5238,12 +4994,10 @@
updateVisibility();
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public void setExpandingVelocity(float expandingVelocity) {
mAmbientState.setExpandingVelocity(expandingVelocity);
}
- @ShadeViewRefactor(RefactorComponent.COORDINATOR)
public float getOpeningHeight() {
if (mEmptyShadeView.getVisibility() == GONE) {
return getMinExpansionHeight();
@@ -5252,12 +5006,10 @@
}
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public void setIsFullWidth(boolean isFullWidth) {
mAmbientState.setSmallScreen(isFullWidth);
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public void setUnlockHintRunning(boolean running) {
mAmbientState.setUnlockHintRunning(running);
if (!running) {
@@ -5266,7 +5018,6 @@
}
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public void setPanelFlinging(boolean flinging) {
mAmbientState.setFlinging(flinging);
if (!flinging) {
@@ -5275,12 +5026,10 @@
}
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public void setHeadsUpGoingAwayAnimationsAllowed(boolean headsUpGoingAwayAnimationsAllowed) {
mHeadsUpGoingAwayAnimationsAllowed = headsUpGoingAwayAnimationsAllowed;
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public void dump(PrintWriter pwOriginal, String[] args) {
IndentingPrintWriter pw = DumpUtilsKt.asIndenting(pwOriginal);
pw.println("Internal state:");
@@ -5376,7 +5125,6 @@
});
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public boolean isFullyHidden() {
return mAmbientState.isFullyHidden();
}
@@ -5387,7 +5135,6 @@
*
* @param listener the listener to notify.
*/
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public void addOnExpandedHeightChangedListener(BiConsumer<Float, Float> listener) {
mExpandedHeightListeners.add(listener);
}
@@ -5395,12 +5142,10 @@
/**
* Stop a listener from listening to the expandedHeight.
*/
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public void removeOnExpandedHeightChangedListener(BiConsumer<Float, Float> listener) {
mExpandedHeightListeners.remove(listener);
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
void setHeadsUpAppearanceController(
HeadsUpAppearanceController headsUpAppearanceController) {
mHeadsUpAppearanceController = headsUpAppearanceController;
@@ -5492,7 +5237,6 @@
* Collects a list of visible rows, and animates them away in a staggered fashion as if they
* were dismissed. Notifications are dismissed in the backend via onClearAllAnimationsEnd.
*/
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
@VisibleForTesting
void clearNotifications(@SelectedRows int selection, boolean closeShade) {
// Animate-swipe all dismissable notifications, then animate the shade closed
@@ -5553,7 +5297,6 @@
}
@VisibleForTesting
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
protected void inflateFooterView() {
FooterView footerView = (FooterView) LayoutInflater.from(mContext).inflate(
R.layout.status_bar_notification_footer, this, false);
@@ -5567,7 +5310,6 @@
setFooterView(footerView);
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
private void inflateEmptyShadeView() {
EmptyShadeView oldView = mEmptyShadeView;
EmptyShadeView view = (EmptyShadeView) LayoutInflater.from(mContext).inflate(
@@ -5589,7 +5331,6 @@
/**
* Updates expanded, dimmed and locked states of notification rows.
*/
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
public void onUpdateRowStates() {
// The following views will be moved to the end of mStackScroller. This counter represents
@@ -6061,7 +5802,6 @@
/**
* A listener that is notified when the empty space below the notifications is clicked on
*/
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public interface OnEmptySpaceClickListener {
void onEmptySpaceClicked(float x, float y);
}
@@ -6069,7 +5809,6 @@
/**
* A listener that gets notified when the overscroll at the top has changed.
*/
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public interface OnOverscrollTopChangedListener {
/**
@@ -6093,7 +5832,6 @@
void flingTopOverscroll(float velocity, boolean open);
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
private void updateSpeedBumpIndex() {
mSpeedBumpIndexDirty = true;
}
@@ -6129,7 +5867,6 @@
}
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
private void resetExposedMenuView(boolean animate, boolean force) {
mSwipeHelper.resetExposedMenuView(animate, force);
}
@@ -6149,7 +5886,6 @@
}
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
static class AnimationEvent {
static AnimationFilter[] FILTERS = new AnimationFilter[]{
@@ -6438,7 +6174,6 @@
setCheckForLeaveBehind(true);
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
private final HeadsUpTouchHelper.Callback mHeadsUpCallback = new HeadsUpTouchHelper.Callback() {
@Override
public ExpandableView getChildAtRawPosition(float touchX, float touchY) {
@@ -6477,7 +6212,6 @@
});
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
private final ExpandHelper.Callback mExpandHelperCallback = new ExpandHelper.Callback() {
@Override
public ExpandableView getChildAtPosition(float touchX, float touchY) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ActivityStarterImpl.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ActivityStarterImpl.kt
index d9dc887..bbb4f24 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ActivityStarterImpl.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ActivityStarterImpl.kt
@@ -236,7 +236,11 @@
override fun postStartActivityDismissingKeyguard(intent: Intent, delay: Int) {
postOnUiThread(delay) {
- activityStarterInternal.startActivityDismissingKeyguard(intent = intent)
+ activityStarterInternal.startActivityDismissingKeyguard(
+ intent = intent,
+ onlyProvisioned = true,
+ dismissShade = true,
+ )
}
}
@@ -248,6 +252,8 @@
postOnUiThread(delay) {
activityStarterInternal.startActivityDismissingKeyguard(
intent = intent,
+ onlyProvisioned = true,
+ dismissShade = true,
animationController = animationController,
)
}
@@ -262,6 +268,8 @@
postOnUiThread(delay) {
activityStarterInternal.startActivityDismissingKeyguard(
intent = intent,
+ onlyProvisioned = true,
+ dismissShade = true,
animationController = animationController,
customMessage = customMessage,
)
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java
index 6742e4f..bd7840d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java
@@ -190,7 +190,6 @@
}
}
- @VisibleForTesting
public enum BiometricUiEvent implements UiEventLogger.UiEventEnum {
@UiEvent(doc = "A biometric event of type fingerprint succeeded.")
@@ -221,7 +220,10 @@
BIOMETRIC_IRIS_ERROR(404),
@UiEvent(doc = "Bouncer was shown as a result of consecutive failed UDFPS attempts.")
- BIOMETRIC_BOUNCER_SHOWN(916);
+ BIOMETRIC_BOUNCER_SHOWN(916),
+
+ @UiEvent(doc = "Screen started waking up with the given PowerManager wake reason.")
+ STARTED_WAKING_UP(1378);
private final int mId;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeServiceHost.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeServiceHost.java
index 618120d..7312db6 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeServiceHost.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeServiceHost.java
@@ -20,6 +20,7 @@
import static com.android.systemui.keyguard.WakefulnessLifecycle.WAKEFULNESS_WAKING;
import android.annotation.NonNull;
+import android.graphics.Point;
import android.os.Bundle;
import android.os.PowerManager;
import android.os.SystemClock;
@@ -38,6 +39,7 @@
import com.android.systemui.doze.DozeReceiver;
import com.android.systemui.keyguard.WakefulnessLifecycle;
import com.android.systemui.keyguard.domain.interactor.BurnInInteractor;
+import com.android.systemui.keyguard.domain.interactor.DozeInteractor;
import com.android.systemui.shade.NotificationShadeWindowViewController;
import com.android.systemui.shade.ShadeViewController;
import com.android.systemui.statusbar.NotificationShadeWindowController;
@@ -99,6 +101,7 @@
private CentralSurfaces mCentralSurfaces;
private boolean mAlwaysOnSuppressed;
private boolean mPulsePending;
+ private DozeInteractor mDozeInteractor;
@Inject
public DozeServiceHost(DozeLog dozeLog, PowerManager powerManager,
@@ -115,6 +118,7 @@
NotificationWakeUpCoordinator notificationWakeUpCoordinator,
AuthController authController,
NotificationIconAreaController notificationIconAreaController,
+ DozeInteractor dozeInteractor,
BurnInInteractor burnInInteractor) {
super();
mDozeLog = dozeLog;
@@ -136,6 +140,7 @@
mNotificationIconAreaController = notificationIconAreaController;
mBurnInInteractor = burnInInteractor;
mHeadsUpManagerPhone.addListener(mOnHeadsUpChangedListener);
+ mDozeInteractor = dozeInteractor;
}
// TODO: we should try to not pass status bar in here if we can avoid it.
@@ -226,6 +231,7 @@
for (Callback callback : mCallbacks) {
callback.onDozingChanged(dozing);
}
+ mDozeInteractor.setIsDozing(dozing);
mStatusBarStateController.setIsDozing(dozing);
}
@@ -360,7 +366,14 @@
@Override
public void onSlpiTap(float screenX, float screenY) {
- if (screenX > 0 && screenY > 0 && mAmbientIndicationContainer != null
+ if (screenX < 0 || screenY < 0) return;
+ dispatchTouchEventToAmbientIndicationContainer(screenX, screenY);
+
+ mDozeInteractor.setLastTapToWakePosition(new Point((int) screenX, (int) screenY));
+ }
+
+ private void dispatchTouchEventToAmbientIndicationContainer(float screenX, float screenY) {
+ if (mAmbientIndicationContainer != null
&& mAmbientIndicationContainer.getVisibility() == View.VISIBLE) {
int[] locationOnScreen = new int[2];
mAmbientIndicationContainer.getLocationOnScreen(locationOnScreen);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarController.java
index a058bf8..a6b2bd8 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarController.java
@@ -103,6 +103,7 @@
private boolean mQsCustomizing;
private boolean mQsExpanded;
+ private boolean mBouncerVisible;
private boolean mGlobalActionsVisible;
private boolean mDirectReplying;
@@ -188,9 +189,10 @@
final boolean ignoreScrimForce = mDirectReplying && mNavbarColorManagedByIme;
final boolean darkForScrim = mForceDarkForScrim && !ignoreScrimForce;
final boolean lightForScrim = mForceLightForScrim && !ignoreScrimForce;
- final boolean darkForQs = mQsCustomizing || mQsExpanded || mGlobalActionsVisible;
+ final boolean darkForQs = (mQsCustomizing || mQsExpanded) && !mBouncerVisible;
+ final boolean darkForTop = darkForQs || mGlobalActionsVisible;
mNavigationLight =
- ((mHasLightNavigationBar && !darkForScrim) || lightForScrim) && !darkForQs;
+ ((mHasLightNavigationBar && !darkForScrim) || lightForScrim) && !darkForTop;
mLastNavigationBarAppearanceChangedLog = "onNavigationBarAppearanceChanged()"
+ " appearance=" + appearance
+ " nbModeChanged=" + nbModeChanged
@@ -201,6 +203,7 @@
+ " darkForScrim=" + darkForScrim
+ " lightForScrim=" + lightForScrim
+ " darkForQs=" + darkForQs
+ + " darkForTop=" + darkForTop
+ " mNavigationLight=" + mNavigationLight
+ " last=" + last
+ " timestamp=" + new Date();
@@ -298,15 +301,20 @@
public void setScrimState(ScrimState scrimState, float scrimBehindAlpha,
GradientColors scrimInFrontColor) {
if (mUseNewLightBarLogic) {
+ boolean bouncerVisibleLast = mBouncerVisible;
boolean forceDarkForScrimLast = mForceDarkForScrim;
boolean forceLightForScrimLast = mForceLightForScrim;
- final boolean forceForScrim =
- scrimBehindAlpha >= NAV_BAR_INVERSION_SCRIM_ALPHA_THRESHOLD;
+ mBouncerVisible =
+ scrimState == ScrimState.BOUNCER || scrimState == ScrimState.BOUNCER_SCRIMMED;
+ final boolean forceForScrim = mBouncerVisible
+ || scrimBehindAlpha >= NAV_BAR_INVERSION_SCRIM_ALPHA_THRESHOLD;
final boolean scrimColorIsLight = scrimInFrontColor.supportsDarkText();
mForceDarkForScrim = forceForScrim && !scrimColorIsLight;
mForceLightForScrim = forceForScrim && scrimColorIsLight;
- if (mHasLightNavigationBar) {
+ if (mBouncerVisible != bouncerVisibleLast) {
+ reevaluate();
+ } else if (mHasLightNavigationBar) {
if (mForceDarkForScrim != forceDarkForScrimLast) reevaluate();
} else {
if (mForceLightForScrim != forceLightForScrimLast) reevaluate();
@@ -318,6 +326,7 @@
+ " forceForScrim=" + forceForScrim
+ " scrimColorIsLight=" + scrimColorIsLight
+ " mHasLightNavigationBar=" + mHasLightNavigationBar
+ + " mBouncerVisible=" + mBouncerVisible
+ " mForceDarkForScrim=" + mForceDarkForScrim
+ " mForceLightForScrim=" + mForceLightForScrim
+ " timestamp=" + new Date();
@@ -428,6 +437,7 @@
pw.println();
pw.print(" mQsCustomizing="); pw.println(mQsCustomizing);
pw.print(" mQsExpanded="); pw.println(mQsExpanded);
+ pw.print(" mBouncerVisible="); pw.println(mBouncerVisible);
pw.print(" mGlobalActionsVisible="); pw.println(mGlobalActionsVisible);
pw.print(" mDirectReplying="); pw.println(mDirectReplying);
pw.print(" mNavbarColorManagedByIme="); pw.println(mNavbarColorManagedByIme);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaController.java
index 560ea8a..313410a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaController.java
@@ -604,6 +604,7 @@
}
updateAodIconsVisibility(animate, false /* force */);
updateAodNotificationIcons();
+ updateAodIconColors();
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarter.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarter.java
index bd5815aa..7bbb03b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarter.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarter.java
@@ -304,10 +304,11 @@
ActivityManager.getService().resumeAppSwitches();
} catch (RemoteException e) {
}
- // If we are launching a work activity and require to launch
- // separate work challenge, we defer the activity action and cancel
- // notification until work challenge is unlocked.
- if (isActivityIntent) {
+ // If the notification should be cancelled on click and we are launching a work activity in
+ // a locked profile with separate challenge, we defer the activity action and cancelling of
+ // the notification until work challenge is unlocked. If the notification shouldn't be
+ // cancelled, the work challenge will be shown by ActivityManager if necessary anyway.
+ if (isActivityIntent && shouldAutoCancel(entry.getSbn())) {
final int userId = intent.getCreatorUserHandle().getIdentifier();
if (mLockPatternUtils.isSeparateProfileChallengeEnabled(userId)
&& mKeyguardManager.isDeviceLocked(userId)) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarViewModule.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarViewModule.java
index 4ae2edc..4ccbc5a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarViewModule.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarViewModule.java
@@ -53,6 +53,7 @@
import com.android.systemui.statusbar.phone.fragment.CollapsedStatusBarFragmentLogger;
import com.android.systemui.statusbar.phone.fragment.dagger.StatusBarFragmentComponent;
import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallController;
+import com.android.systemui.statusbar.pipeline.shared.ui.binder.CollapsedStatusBarViewBinder;
import com.android.systemui.statusbar.pipeline.shared.ui.viewmodel.CollapsedStatusBarViewModel;
import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.statusbar.window.StatusBarWindowStateController;
@@ -158,6 +159,7 @@
StatusBarIconController statusBarIconController,
StatusBarIconController.DarkIconManager.Factory darkIconManagerFactory,
CollapsedStatusBarViewModel collapsedStatusBarViewModel,
+ CollapsedStatusBarViewBinder collapsedStatusBarViewBinder,
StatusBarHideIconsForBouncerManager statusBarHideIconsForBouncerManager,
KeyguardStateController keyguardStateController,
ShadeViewController shadeViewController,
@@ -182,6 +184,7 @@
statusBarIconController,
darkIconManagerFactory,
collapsedStatusBarViewModel,
+ collapsedStatusBarViewBinder,
statusBarHideIconsForBouncerManager,
keyguardStateController,
shadeViewController,
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragment.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragment.java
index 0651a7b..fcae23b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragment.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragment.java
@@ -14,8 +14,6 @@
package com.android.systemui.statusbar.phone.fragment;
-
-
import static com.android.systemui.statusbar.events.SystemStatusAnimationSchedulerKt.IDLE;
import static com.android.systemui.statusbar.events.SystemStatusAnimationSchedulerKt.SHOWING_PERSISTENT_DOT;
@@ -69,6 +67,7 @@
import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallController;
import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallListener;
import com.android.systemui.statusbar.pipeline.shared.ui.binder.CollapsedStatusBarViewBinder;
+import com.android.systemui.statusbar.pipeline.shared.ui.binder.StatusBarVisibilityChangeListener;
import com.android.systemui.statusbar.pipeline.shared.ui.viewmodel.CollapsedStatusBarViewModel;
import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.statusbar.window.StatusBarWindowStateController;
@@ -131,6 +130,7 @@
private final StatusBarIconController mStatusBarIconController;
private final CarrierConfigTracker mCarrierConfigTracker;
private final CollapsedStatusBarViewModel mCollapsedStatusBarViewModel;
+ private final CollapsedStatusBarViewBinder mCollapsedStatusBarViewBinder;
private final StatusBarHideIconsForBouncerManager mStatusBarHideIconsForBouncerManager;
private final StatusBarIconController.DarkIconManager.Factory mDarkIconManagerFactory;
private final SecureSettings mSecureSettings;
@@ -183,11 +183,21 @@
private boolean mWaitingForWindowStateChangeAfterCameraLaunch = false;
/**
+ * True when a transition from lockscreen to dream has started, but haven't yet received a
+ * status bar window state change afterward.
+ *
+ * Similar to [mWaitingForWindowStateChangeAfterCameraLaunch].
+ */
+ private boolean mTransitionFromLockscreenToDreamStarted = false;
+
+ /**
* Listener that updates {@link #mWaitingForWindowStateChangeAfterCameraLaunch} when it receives
* a new status bar window state.
*/
- private final StatusBarWindowStateListener mStatusBarWindowStateListener = state ->
- mWaitingForWindowStateChangeAfterCameraLaunch = false;
+ private final StatusBarWindowStateListener mStatusBarWindowStateListener = state -> {
+ mWaitingForWindowStateChangeAfterCameraLaunch = false;
+ mTransitionFromLockscreenToDreamStarted = false;
+ };
@SuppressLint("ValidFragment")
public CollapsedStatusBarFragment(
@@ -201,6 +211,7 @@
StatusBarIconController statusBarIconController,
StatusBarIconController.DarkIconManager.Factory darkIconManagerFactory,
CollapsedStatusBarViewModel collapsedStatusBarViewModel,
+ CollapsedStatusBarViewBinder collapsedStatusBarViewBinder,
StatusBarHideIconsForBouncerManager statusBarHideIconsForBouncerManager,
KeyguardStateController keyguardStateController,
ShadeViewController shadeViewController,
@@ -224,6 +235,7 @@
mFeatureFlags = featureFlags;
mStatusBarIconController = statusBarIconController;
mCollapsedStatusBarViewModel = collapsedStatusBarViewModel;
+ mCollapsedStatusBarViewBinder = collapsedStatusBarViewBinder;
mStatusBarHideIconsForBouncerManager = statusBarHideIconsForBouncerManager;
mDarkIconManagerFactory = darkIconManagerFactory;
mKeyguardStateController = keyguardStateController;
@@ -296,8 +308,8 @@
mCarrierConfigTracker.addCallback(mCarrierConfigCallback);
mCarrierConfigTracker.addDefaultDataSubscriptionChangedListener(mDefaultDataListener);
- CollapsedStatusBarViewBinder.bind(
- mStatusBar, mCollapsedStatusBarViewModel, this::updateStatusBarVisibilities);
+ mCollapsedStatusBarViewBinder.bind(
+ mStatusBar, mCollapsedStatusBarViewModel, mStatusBarVisibilityChangeListener);
}
@Override
@@ -411,6 +423,19 @@
return mStatusBarFragmentComponent;
}
+ private StatusBarVisibilityChangeListener mStatusBarVisibilityChangeListener =
+ new StatusBarVisibilityChangeListener() {
+ @Override
+ public void onStatusBarVisibilityMaybeChanged() {
+ updateStatusBarVisibilities(/* animate= */ true);
+ }
+
+ @Override
+ public void onTransitionFromLockscreenToDreamStarted() {
+ mTransitionFromLockscreenToDreamStarted = true;
+ }
+ };
+
@Override
public void disable(int displayId, int state1, int state2, boolean animate) {
if (displayId != getContext().getDisplayId()) {
@@ -423,10 +448,6 @@
updateStatusBarVisibilities(animate);
}
- private void updateStatusBarVisibilities() {
- updateStatusBarVisibilities(/* animate= */ true);
- }
-
private void updateStatusBarVisibilities(boolean animate) {
StatusBarVisibilityModel previousModel = mLastModifiedVisibility;
StatusBarVisibilityModel newModel = calculateInternalModel(mLastSystemVisibility);
@@ -546,6 +567,18 @@
return true;
}
+ // Similar to [hideIconsForSecureCamera]: When dream is launched over lockscreen, the icons
+ // are momentarily visible because the dream animation has finished, but SysUI has not been
+ // informed that the dream is full-screen. For extra safety, we double-check that we're
+ // still dreaming.
+ final boolean hideIconsForDream =
+ mTransitionFromLockscreenToDreamStarted
+ && mKeyguardUpdateMonitor.isDreaming()
+ && mKeyguardStateController.isOccluded();
+ if (hideIconsForDream) {
+ return true;
+ }
+
// While the status bar is transitioning from lockscreen to an occluded, we don't yet know
// if the occluding activity is fullscreen or not. If it *is* fullscreen, we don't want to
// briefly show the status bar just to immediately hide it again. So, we wait for the
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/StatusBarPipelineModule.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/StatusBarPipelineModule.kt
index 7aa9033..27cc64f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/StatusBarPipelineModule.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/StatusBarPipelineModule.kt
@@ -44,6 +44,8 @@
import com.android.systemui.statusbar.pipeline.mobile.util.SubscriptionManagerProxyImpl
import com.android.systemui.statusbar.pipeline.shared.data.repository.ConnectivityRepository
import com.android.systemui.statusbar.pipeline.shared.data.repository.ConnectivityRepositoryImpl
+import com.android.systemui.statusbar.pipeline.shared.ui.binder.CollapsedStatusBarViewBinder
+import com.android.systemui.statusbar.pipeline.shared.ui.binder.CollapsedStatusBarViewBinderImpl
import com.android.systemui.statusbar.pipeline.wifi.data.repository.RealWifiRepository
import com.android.systemui.statusbar.pipeline.wifi.data.repository.WifiRepository
import com.android.systemui.statusbar.pipeline.wifi.data.repository.WifiRepositorySwitcher
@@ -107,6 +109,11 @@
impl: CollapsedStatusBarViewModelImpl
): CollapsedStatusBarViewModel
+ @Binds
+ abstract fun collapsedStatusBarViewBinder(
+ impl: CollapsedStatusBarViewBinderImpl
+ ): CollapsedStatusBarViewBinder
+
companion object {
@Provides
@SysUISingleton
@@ -160,7 +167,7 @@
@SysUISingleton
@SharedConnectivityInputLog
fun provideSharedConnectivityTableLogBuffer(factory: LogBufferFactory): LogBuffer {
- return factory.create("SharedConnectivityInputLog", 30)
+ return factory.create("SharedConnectivityInputLog", 60)
}
@Provides
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionsRepositoryImpl.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionsRepositoryImpl.kt
index 0e9b6c5..a47f95d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionsRepositoryImpl.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionsRepositoryImpl.kt
@@ -38,6 +38,7 @@
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.log.table.TableLogBuffer
import com.android.systemui.log.table.logDiffsForTable
+import com.android.systemui.statusbar.pipeline.airplane.data.repository.AirplaneModeRepository
import com.android.systemui.statusbar.pipeline.dagger.MobileSummaryLog
import com.android.systemui.statusbar.pipeline.mobile.data.MobileInputLogger
import com.android.systemui.statusbar.pipeline.mobile.data.model.NetworkNameModel
@@ -88,6 +89,7 @@
private val context: Context,
@Background private val bgDispatcher: CoroutineDispatcher,
@Application private val scope: CoroutineScope,
+ airplaneModeRepository: AirplaneModeRepository,
// Some "wifi networks" should be rendered as a mobile connection, which is why the wifi
// repository is an input to the mobile repository.
// See [CarrierMergedConnectionRepository] for details.
@@ -106,10 +108,20 @@
context.getString(R.string.status_bar_network_name_separator)
private val carrierMergedSubId: StateFlow<Int?> =
- wifiRepository.wifiNetwork
- .mapLatest {
- if (it is WifiNetworkModel.CarrierMerged) {
- it.subscriptionId
+ combine(
+ wifiRepository.wifiNetwork,
+ connectivityRepository.defaultConnections,
+ airplaneModeRepository.isAirplaneMode,
+ ) { wifiNetwork, defaultConnections, isAirplaneMode ->
+ // The carrier merged connection should only be used if it's also the default
+ // connection or mobile connections aren't available because of airplane mode.
+ val defaultConnectionIsNonMobile =
+ defaultConnections.carrierMerged.isDefault ||
+ defaultConnections.wifi.isDefault ||
+ isAirplaneMode
+
+ if (wifiNetwork is WifiNetworkModel.CarrierMerged && defaultConnectionIsNonMobile) {
+ wifiNetwork.subscriptionId
} else {
null
}
@@ -221,6 +233,7 @@
override val defaultDataSubRatConfig: StateFlow<Config> =
merge(defaultDataSubIdChangeEvent, carrierConfigChangedEvent)
+ .onStart { emit(Unit) }
.mapLatest { Config.readConfig(context) }
.distinctUntilChanged()
.onEach { logger.logDefaultDataSubRatConfig(it) }
@@ -269,12 +282,8 @@
.stateIn(scope, SharingStarted.WhileSubscribed(), false)
override val hasCarrierMergedConnection: StateFlow<Boolean> =
- combine(
- connectivityRepository.defaultConnections,
- carrierMergedSubId,
- ) { defaultConnections, carrierMergedSubId ->
- defaultConnections.carrierMerged.isDefault || carrierMergedSubId != null
- }
+ carrierMergedSubId
+ .map { it != null }
.distinctUntilChanged()
.logDiffsForTable(
tableLogger,
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/MobileIconsInteractor.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/MobileIconsInteractor.kt
index eec91a0..e90f40c7 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/MobileIconsInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/MobileIconsInteractor.kt
@@ -155,7 +155,8 @@
combine(
unfilteredSubscriptions,
mobileConnectionsRepo.activeMobileDataSubscriptionId,
- ) { unfilteredSubs, activeId ->
+ connectivityRepository.vcnSubId,
+ ) { unfilteredSubs, activeId, vcnSubId ->
// Based on the old logic,
if (unfilteredSubs.size != 2) {
return@combine unfilteredSubs
@@ -182,7 +183,13 @@
// return the non-opportunistic info
return@combine if (info1.isOpportunistic) listOf(info2) else listOf(info1)
} else {
- return@combine if (info1.subscriptionId == activeId) {
+ // It's possible for the subId of the VCN to disagree with the active subId in
+ // cases where the system has tried to switch but found no connection. In these
+ // scenarios, VCN will always have the subId that we want to use, so use that
+ // value instead of the activeId reported by telephony
+ val subIdToKeep = vcnSubId ?: activeId
+
+ return@combine if (info1.subscriptionId == subIdToKeep) {
listOf(info1)
} else {
listOf(info2)
@@ -259,7 +266,7 @@
*/
override val isDefaultConnectionFailed: StateFlow<Boolean> =
combine(
- mobileConnectionsRepo.mobileIsDefault,
+ mobileIsDefault,
mobileConnectionsRepo.defaultConnectionIsValidated,
forcingCellularValidation,
) { mobileIsDefault, defaultConnectionIsValidated, forcingCellularValidation ->
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ConnectivityInputLogger.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ConnectivityInputLogger.kt
index 051f43f..cac0ae3 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ConnectivityInputLogger.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ConnectivityInputLogger.kt
@@ -61,6 +61,10 @@
model::messagePrinter,
)
}
+
+ fun logVcnSubscriptionId(subId: Int) {
+ buffer.log(TAG, LogLevel.DEBUG, { int1 = subId }, { "vcnSubId changed: $int1" })
+ }
}
private const val TAG = "ConnectivityInputLogger"
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/data/repository/ConnectivityRepository.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/data/repository/ConnectivityRepository.kt
index 731f1e0..7076f34 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/data/repository/ConnectivityRepository.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/data/repository/ConnectivityRepository.kt
@@ -27,6 +27,7 @@
import android.net.NetworkCapabilities.TRANSPORT_WIFI
import android.net.vcn.VcnTransportInfo
import android.net.wifi.WifiInfo
+import android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID
import androidx.annotation.ArrayRes
import androidx.annotation.VisibleForTesting
import com.android.systemui.Dumpable
@@ -50,10 +51,13 @@
import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.channels.awaitClose
+import kotlinx.coroutines.flow.SharedFlow
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.distinctUntilChanged
+import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.onEach
+import kotlinx.coroutines.flow.shareIn
import kotlinx.coroutines.flow.stateIn
/**
@@ -66,6 +70,16 @@
/** Observable for which connection(s) are currently default. */
val defaultConnections: StateFlow<DefaultConnectionModel>
+
+ /**
+ * Subscription ID of the [VcnTransportInfo] for the default connection.
+ *
+ * If the default network has a [VcnTransportInfo], then that transport info contains a subId of
+ * the VCN. When VCN is connected and default, this subId is what SystemUI will care about. In
+ * cases where telephony's activeDataSubscriptionId differs from this value, it is expected to
+ * eventually catch up and reflect what is represented here in the VcnTransportInfo.
+ */
+ val vcnSubId: StateFlow<Int?>
}
@SuppressLint("MissingPermission")
@@ -118,24 +132,13 @@
initialValue = defaultHiddenIcons
)
- @SuppressLint("MissingPermission")
- override val defaultConnections: StateFlow<DefaultConnectionModel> =
+ private val defaultNetworkCapabilities: SharedFlow<NetworkCapabilities?> =
conflatedCallbackFlow {
val callback =
object : ConnectivityManager.NetworkCallback(FLAG_INCLUDE_LOCATION_INFO) {
override fun onLost(network: Network) {
logger.logOnDefaultLost(network)
- // The system no longer has a default network, so everything is
- // non-default.
- trySend(
- DefaultConnectionModel(
- Wifi(isDefault = false),
- Mobile(isDefault = false),
- CarrierMerged(isDefault = false),
- Ethernet(isDefault = false),
- isValidated = false,
- )
- )
+ trySend(null)
}
override fun onCapabilitiesChanged(
@@ -143,30 +146,7 @@
networkCapabilities: NetworkCapabilities,
) {
logger.logOnDefaultCapabilitiesChanged(network, networkCapabilities)
-
- val wifiInfo =
- networkCapabilities.getMainOrUnderlyingWifiInfo(connectivityManager)
-
- val isWifiDefault =
- networkCapabilities.hasTransport(TRANSPORT_WIFI) || wifiInfo != null
- val isMobileDefault =
- networkCapabilities.hasTransport(TRANSPORT_CELLULAR)
- val isCarrierMergedDefault = wifiInfo?.isCarrierMerged == true
- val isEthernetDefault =
- networkCapabilities.hasTransport(TRANSPORT_ETHERNET)
-
- val isValidated =
- networkCapabilities.hasCapability(NET_CAPABILITY_VALIDATED)
-
- trySend(
- DefaultConnectionModel(
- Wifi(isWifiDefault),
- Mobile(isMobileDefault),
- CarrierMerged(isCarrierMergedDefault),
- Ethernet(isEthernetDefault),
- isValidated,
- )
- )
+ trySend(networkCapabilities)
}
}
@@ -174,6 +154,61 @@
awaitClose { connectivityManager.unregisterNetworkCallback(callback) }
}
+ .shareIn(scope, SharingStarted.WhileSubscribed())
+
+ override val vcnSubId: StateFlow<Int?> =
+ defaultNetworkCapabilities
+ .map { networkCapabilities ->
+ networkCapabilities?.run {
+ val subId = (transportInfo as? VcnTransportInfo)?.subId
+ // Never return an INVALID_SUBSCRIPTION_ID (-1)
+ if (subId != INVALID_SUBSCRIPTION_ID) {
+ subId
+ } else {
+ null
+ }
+ }
+ }
+ .distinctUntilChanged()
+ /* A note for logging: we use -2 here since -1 == INVALID_SUBSCRIPTION_ID */
+ .onEach { logger.logVcnSubscriptionId(it ?: -2) }
+ .stateIn(scope, SharingStarted.Eagerly, null)
+
+ @SuppressLint("MissingPermission")
+ override val defaultConnections: StateFlow<DefaultConnectionModel> =
+ defaultNetworkCapabilities
+ .map { networkCapabilities ->
+ if (networkCapabilities == null) {
+ // The system no longer has a default network, so everything is
+ // non-default.
+ DefaultConnectionModel(
+ Wifi(isDefault = false),
+ Mobile(isDefault = false),
+ CarrierMerged(isDefault = false),
+ Ethernet(isDefault = false),
+ isValidated = false,
+ )
+ } else {
+ val wifiInfo =
+ networkCapabilities.getMainOrUnderlyingWifiInfo(connectivityManager)
+
+ val isWifiDefault =
+ networkCapabilities.hasTransport(TRANSPORT_WIFI) || wifiInfo != null
+ val isMobileDefault = networkCapabilities.hasTransport(TRANSPORT_CELLULAR)
+ val isCarrierMergedDefault = wifiInfo?.isCarrierMerged == true
+ val isEthernetDefault = networkCapabilities.hasTransport(TRANSPORT_ETHERNET)
+
+ val isValidated = networkCapabilities.hasCapability(NET_CAPABILITY_VALIDATED)
+
+ DefaultConnectionModel(
+ Wifi(isWifiDefault),
+ Mobile(isMobileDefault),
+ CarrierMerged(isCarrierMergedDefault),
+ Ethernet(isEthernetDefault),
+ isValidated,
+ )
+ }
+ }
.distinctUntilChanged()
.onEach { logger.logDefaultConnectionsChanged(it) }
.stateIn(scope, SharingStarted.Eagerly, DefaultConnectionModel())
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/binder/CollapsedStatusBarViewBinder.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/binder/CollapsedStatusBarViewBinder.kt
index 9a59851..b9b88f4 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/binder/CollapsedStatusBarViewBinder.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/binder/CollapsedStatusBarViewBinder.kt
@@ -19,34 +19,61 @@
import android.view.View
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.repeatOnLifecycle
+import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.lifecycle.repeatWhenAttached
import com.android.systemui.statusbar.pipeline.shared.ui.viewmodel.CollapsedStatusBarViewModel
+import javax.inject.Inject
+import kotlinx.coroutines.launch
-object CollapsedStatusBarViewBinder {
+/**
+ * Interface to assist with binding the [CollapsedStatusBarFragment] to
+ * [CollapsedStatusBarViewModel]. Used only to enable easy testing of [CollapsedStatusBarFragment].
+ */
+interface CollapsedStatusBarViewBinder {
/**
* Binds the view to the view-model. [listener] will be notified whenever an event that may
* change the status bar visibility occurs.
*/
- @JvmStatic
fun bind(
view: View,
viewModel: CollapsedStatusBarViewModel,
listener: StatusBarVisibilityChangeListener,
+ )
+}
+
+@SysUISingleton
+class CollapsedStatusBarViewBinderImpl @Inject constructor() : CollapsedStatusBarViewBinder {
+ override fun bind(
+ view: View,
+ viewModel: CollapsedStatusBarViewModel,
+ listener: StatusBarVisibilityChangeListener,
) {
view.repeatWhenAttached {
repeatOnLifecycle(Lifecycle.State.CREATED) {
- viewModel.isTransitioningFromLockscreenToOccluded.collect {
- listener.onStatusBarVisibilityMaybeChanged()
+ launch {
+ viewModel.isTransitioningFromLockscreenToOccluded.collect {
+ listener.onStatusBarVisibilityMaybeChanged()
+ }
+ }
+
+ launch {
+ viewModel.transitionFromLockscreenToDreamStartedEvent.collect {
+ listener.onTransitionFromLockscreenToDreamStarted()
+ }
}
}
}
}
}
-/**
- * Listener to be notified when the status bar visibility might have changed due to the device
- * moving to a different state.
- */
-fun interface StatusBarVisibilityChangeListener {
+/** Listener for various events that may affect the status bar's visibility. */
+interface StatusBarVisibilityChangeListener {
+ /**
+ * Called when the status bar visibility might have changed due to the device moving to a
+ * different state.
+ */
fun onStatusBarVisibilityMaybeChanged()
+
+ /** Called when a transition from lockscreen to dream has started. */
+ fun onTransitionFromLockscreenToDreamStarted()
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/CollapsedStatusBarViewModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/CollapsedStatusBarViewModel.kt
index edb7e4d..15ab143 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/CollapsedStatusBarViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/CollapsedStatusBarViewModel.kt
@@ -22,8 +22,10 @@
import com.android.systemui.keyguard.shared.model.TransitionState
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.filter
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.stateIn
@@ -43,6 +45,9 @@
* otherwise.
*/
val isTransitioningFromLockscreenToOccluded: StateFlow<Boolean>
+
+ /** Emits whenever a transition from lockscreen to dream has started. */
+ val transitionFromLockscreenToDreamStartedEvent: Flow<Unit>
}
@SysUISingleton
@@ -59,4 +64,9 @@
it.transitionState == TransitionState.RUNNING
}
.stateIn(coroutineScope, SharingStarted.WhileSubscribed(), initialValue = false)
+
+ override val transitionFromLockscreenToDreamStartedEvent: Flow<Unit> =
+ keyguardTransitionInteractor.lockscreenToDreamingTransition
+ .filter { it.transitionState == TransitionState.STARTED }
+ .map {}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothControllerImpl.java
index 5208064..5cc3d52 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothControllerImpl.java
@@ -38,7 +38,11 @@
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.dump.DumpManager;
+import com.android.systemui.flags.FeatureFlags;
+import com.android.systemui.flags.Flags;
import com.android.systemui.settings.UserTracker;
+import com.android.systemui.statusbar.policy.bluetooth.BluetoothRepository;
+import com.android.systemui.statusbar.policy.bluetooth.ConnectionStatusModel;
import java.io.PrintWriter;
import java.util.ArrayList;
@@ -50,14 +54,20 @@
import javax.inject.Inject;
/**
+ * Controller for information about bluetooth connections.
+ *
+ * Note: Right now, this class and {@link BluetoothRepository} co-exist. Any new code should go in
+ * {@link BluetoothRepository}, but external clients should query this file for now.
*/
@SysUISingleton
public class BluetoothControllerImpl implements BluetoothController, BluetoothCallback,
CachedBluetoothDevice.Callback, LocalBluetoothProfileManager.ServiceListener {
private static final String TAG = "BluetoothController";
+ private final FeatureFlags mFeatureFlags;
private final DumpManager mDumpManager;
private final BluetoothLogger mLogger;
+ private final BluetoothRepository mBluetoothRepository;
private final LocalBluetoothManager mLocalBluetoothManager;
private final UserManager mUserManager;
private final int mCurrentUser;
@@ -79,14 +89,18 @@
@Inject
public BluetoothControllerImpl(
Context context,
+ FeatureFlags featureFlags,
UserTracker userTracker,
DumpManager dumpManager,
BluetoothLogger logger,
+ BluetoothRepository bluetoothRepository,
@Main Looper mainLooper,
@Nullable LocalBluetoothManager localBluetoothManager,
@Nullable BluetoothAdapter bluetoothAdapter) {
+ mFeatureFlags = featureFlags;
mDumpManager = dumpManager;
mLogger = logger;
+ mBluetoothRepository = bluetoothRepository;
mLocalBluetoothManager = localBluetoothManager;
mHandler = new H(mainLooper);
if (mLocalBluetoothManager != null) {
@@ -229,6 +243,16 @@
}
private void updateConnected() {
+ if (mFeatureFlags.isEnabled(Flags.NEW_BLUETOOTH_REPOSITORY)) {
+ mBluetoothRepository.fetchConnectionStatusInBackground(
+ getDevices(), this::onConnectionStatusFetched);
+ } else {
+ updateConnectedOld();
+ }
+ }
+
+ /** Used only if {@link Flags.NEW_BLUETOOTH_REPOSITORY} is *not* enabled. */
+ private void updateConnectedOld() {
// Make sure our connection state is up to date.
int state = mLocalBluetoothManager.getBluetoothAdapter().getConnectionState();
List<CachedBluetoothDevice> newList = new ArrayList<>();
@@ -249,6 +273,12 @@
// connected.
state = BluetoothAdapter.STATE_DISCONNECTED;
}
+ onConnectionStatusFetched(new ConnectionStatusModel(state, newList));
+ }
+
+ private void onConnectionStatusFetched(ConnectionStatusModel status) {
+ List<CachedBluetoothDevice> newList = status.getConnectedDevices();
+ int state = status.getMaxConnectionState();
synchronized (mConnectedDevices) {
mConnectedDevices.clear();
mConnectedDevices.addAll(newList);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/bluetooth/BluetoothRepository.kt b/packages/SystemUI/src/com/android/systemui/statusbar/policy/bluetooth/BluetoothRepository.kt
new file mode 100644
index 0000000..80f3d76
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/bluetooth/BluetoothRepository.kt
@@ -0,0 +1,109 @@
+/*
+ * 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.statusbar.policy.bluetooth
+
+import android.bluetooth.BluetoothAdapter
+import android.bluetooth.BluetoothProfile
+import com.android.settingslib.bluetooth.CachedBluetoothDevice
+import com.android.settingslib.bluetooth.LocalBluetoothManager
+import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.dagger.qualifiers.Application
+import com.android.systemui.dagger.qualifiers.Background
+import javax.inject.Inject
+import kotlinx.coroutines.CoroutineDispatcher
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.withContext
+
+/**
+ * Repository for information about bluetooth connections.
+ *
+ * Note: Right now, this class and [BluetoothController] co-exist. Any new code should go in this
+ * implementation, but external clients should query [BluetoothController] instead of this class for
+ * now.
+ */
+interface BluetoothRepository {
+ /**
+ * Fetches the connection statuses for the given [currentDevices] and invokes [callback] once
+ * those statuses have been fetched. The fetching occurs on a background thread because IPCs may
+ * be required to fetch the statuses (see b/271058380).
+ */
+ fun fetchConnectionStatusInBackground(
+ currentDevices: Collection<CachedBluetoothDevice>,
+ callback: ConnectionStatusFetchedCallback,
+ )
+}
+
+/** Implementation of [BluetoothRepository]. */
+@SysUISingleton
+class BluetoothRepositoryImpl
+@Inject
+constructor(
+ @Application private val scope: CoroutineScope,
+ @Background private val bgDispatcher: CoroutineDispatcher,
+ private val localBluetoothManager: LocalBluetoothManager?,
+) : BluetoothRepository {
+ override fun fetchConnectionStatusInBackground(
+ currentDevices: Collection<CachedBluetoothDevice>,
+ callback: ConnectionStatusFetchedCallback,
+ ) {
+ scope.launch {
+ val result = fetchConnectionStatus(currentDevices)
+ callback.onConnectionStatusFetched(result)
+ }
+ }
+
+ private suspend fun fetchConnectionStatus(
+ currentDevices: Collection<CachedBluetoothDevice>,
+ ): ConnectionStatusModel {
+ return withContext(bgDispatcher) {
+ val minimumMaxConnectionState =
+ localBluetoothManager?.bluetoothAdapter?.connectionState
+ ?: BluetoothProfile.STATE_DISCONNECTED
+ var maxConnectionState =
+ if (currentDevices.isEmpty()) {
+ minimumMaxConnectionState
+ } else {
+ currentDevices
+ .maxOf { it.maxConnectionState }
+ .coerceAtLeast(minimumMaxConnectionState)
+ }
+
+ val connectedDevices = currentDevices.filter { it.isConnected }
+
+ if (
+ connectedDevices.isEmpty() && maxConnectionState == BluetoothAdapter.STATE_CONNECTED
+ ) {
+ // If somehow we think we are connected, but have no connected devices, we aren't
+ // connected.
+ maxConnectionState = BluetoothAdapter.STATE_DISCONNECTED
+ }
+
+ ConnectionStatusModel(maxConnectionState, connectedDevices)
+ }
+ }
+}
+
+data class ConnectionStatusModel(
+ /** The maximum connection state out of all current devices. */
+ val maxConnectionState: Int,
+ /** A list of devices that are currently connected. */
+ val connectedDevices: List<CachedBluetoothDevice>,
+)
+
+/** Callback notified when the new status has been fetched. */
+fun interface ConnectionStatusFetchedCallback {
+ fun onConnectionStatusFetched(status: ConnectionStatusModel)
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/dagger/StatusBarPolicyModule.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/dagger/StatusBarPolicyModule.java
index 1b73539..e1a7b6d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/dagger/StatusBarPolicyModule.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/dagger/StatusBarPolicyModule.java
@@ -62,15 +62,16 @@
import com.android.systemui.statusbar.policy.WalletControllerImpl;
import com.android.systemui.statusbar.policy.ZenModeController;
import com.android.systemui.statusbar.policy.ZenModeControllerImpl;
-
-import java.util.concurrent.Executor;
-
-import javax.inject.Named;
+import com.android.systemui.statusbar.policy.bluetooth.BluetoothRepository;
+import com.android.systemui.statusbar.policy.bluetooth.BluetoothRepositoryImpl;
import dagger.Binds;
import dagger.Module;
import dagger.Provides;
+import java.util.concurrent.Executor;
+
+import javax.inject.Named;
/** Dagger Module for code in the statusbar.policy package. */
@Module
@@ -84,6 +85,10 @@
/** */
@Binds
+ BluetoothRepository provideBluetoothRepository(BluetoothRepositoryImpl impl);
+
+ /** */
+ @Binds
CastController provideCastController(CastControllerImpl controllerImpl);
/** */
diff --git a/packages/SystemUI/src/com/android/systemui/stylus/StylusUsiPowerStartable.kt b/packages/SystemUI/src/com/android/systemui/stylus/StylusUsiPowerStartable.kt
index 3667392..c1b86ab 100644
--- a/packages/SystemUI/src/com/android/systemui/stylus/StylusUsiPowerStartable.kt
+++ b/packages/SystemUI/src/com/android/systemui/stylus/StylusUsiPowerStartable.kt
@@ -50,14 +50,6 @@
}
}
- override fun onStylusBluetoothConnected(deviceId: Int, btAddress: String) {
- stylusUsiPowerUi.refresh()
- }
-
- override fun onStylusBluetoothDisconnected(deviceId: Int, btAddress: String) {
- stylusUsiPowerUi.refresh()
- }
-
override fun onStylusUsiBatteryStateChanged(
deviceId: Int,
eventTimeMillis: Long,
diff --git a/packages/SystemUI/src/com/android/systemui/stylus/StylusUsiPowerUI.kt b/packages/SystemUI/src/com/android/systemui/stylus/StylusUsiPowerUI.kt
index 6eddd9e..3e1c13c 100644
--- a/packages/SystemUI/src/com/android/systemui/stylus/StylusUsiPowerUI.kt
+++ b/packages/SystemUI/src/com/android/systemui/stylus/StylusUsiPowerUI.kt
@@ -94,12 +94,17 @@
return@refreshNotification
}
+ // Only hide notification in two cases: battery has been recharged above the
+ // threshold, or user has dismissed or clicked notification ("suppression").
+ if (suppressed || !batteryBelowThreshold) {
+ hideNotification()
+ }
+
if (!batteryBelowThreshold) {
// Reset suppression when stylus battery is recharged, so that the next time
// it reaches a low battery, the notification will show again.
suppressed = false
}
- hideNotification()
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/theme/DynamicColors.kt b/packages/SystemUI/src/com/android/systemui/theme/DynamicColors.kt
index 58f2246..57b9f91 100644
--- a/packages/SystemUI/src/com/android/systemui/theme/DynamicColors.kt
+++ b/packages/SystemUI/src/com/android/systemui/theme/DynamicColors.kt
@@ -56,18 +56,6 @@
Pair.create("on_error", MDC.onError()),
Pair.create("error_container", MDC.errorContainer()),
Pair.create("on_error_container", MDC.onErrorContainer()),
- Pair.create("primary_fixed", MDC.primaryFixed()),
- Pair.create("primary_fixed_dim", MDC.primaryFixedDim()),
- Pair.create("on_primary_fixed", MDC.onPrimaryFixed()),
- Pair.create("on_primary_fixed_variant", MDC.onPrimaryFixedVariant()),
- Pair.create("secondary_fixed", MDC.secondaryFixed()),
- Pair.create("secondary_fixed_dim", MDC.secondaryFixedDim()),
- Pair.create("on_secondary_fixed", MDC.onSecondaryFixed()),
- Pair.create("on_secondary_fixed_variant", MDC.onSecondaryFixedVariant()),
- Pair.create("tertiary_fixed", MDC.tertiaryFixed()),
- Pair.create("tertiary_fixed_dim", MDC.tertiaryFixedDim()),
- Pair.create("on_tertiary_fixed", MDC.onTertiaryFixed()),
- Pair.create("on_tertiary_fixed_variant", MDC.onTertiaryFixedVariant()),
Pair.create("control_activated", MDC.controlActivated()),
Pair.create("control_normal", MDC.controlNormal()),
Pair.create("control_highlight", MDC.controlHighlight()),
@@ -92,7 +80,24 @@
Pair.create(
"palette_key_color_neutral_variant",
MDC.neutralVariantPaletteKeyColor()
- )
+ ),
+ )
+
+ @JvmField
+ val FIXED_COLORS_MAPPED: List<Pair<String, DynamicColor>> =
+ arrayListOf(
+ Pair.create("primary_fixed", MDC.primaryFixed()),
+ Pair.create("primary_fixed_dim", MDC.primaryFixedDim()),
+ Pair.create("on_primary_fixed", MDC.onPrimaryFixed()),
+ Pair.create("on_primary_fixed_variant", MDC.onPrimaryFixedVariant()),
+ Pair.create("secondary_fixed", MDC.secondaryFixed()),
+ Pair.create("secondary_fixed_dim", MDC.secondaryFixedDim()),
+ Pair.create("on_secondary_fixed", MDC.onSecondaryFixed()),
+ Pair.create("on_secondary_fixed_variant", MDC.onSecondaryFixedVariant()),
+ Pair.create("tertiary_fixed", MDC.tertiaryFixed()),
+ Pair.create("tertiary_fixed_dim", MDC.tertiaryFixedDim()),
+ Pair.create("on_tertiary_fixed", MDC.onTertiaryFixed()),
+ Pair.create("on_tertiary_fixed_variant", MDC.onTertiaryFixedVariant()),
)
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java b/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java
index 4b73d61..c1999b2 100644
--- a/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java
+++ b/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java
@@ -624,6 +624,7 @@
FabricatedOverlay overlay = newFabricatedOverlay("dynamic");
assignDynamicPaletteToOverlay(overlay, true /* isDark */);
assignDynamicPaletteToOverlay(overlay, false /* isDark */);
+ assignFixedColorsToOverlay(overlay);
return overlay;
}
@@ -638,6 +639,15 @@
});
}
+ private void assignFixedColorsToOverlay(FabricatedOverlay overlay) {
+ DynamicColors.FIXED_COLORS_MAPPED.forEach(p -> {
+ String resourceName = "android:color/system_" + p.first;
+ int colorValue = p.second.getArgb(mDynamicSchemeLight);
+ overlay.setResourceValue(resourceName, TYPE_INT_COLOR_ARGB8, colorValue,
+ null /* configuration */);
+ });
+ }
+
/**
* Checks if the color scheme in mColorScheme matches the current system palettes.
* @param managedProfiles List of managed profiles for this user.
@@ -666,7 +676,9 @@
&& res.getColor(android.R.color.system_primary_container_dark, theme)
== MaterialDynamicColors.primaryContainer().getArgb(mDynamicSchemeDark)
&& res.getColor(android.R.color.system_primary_container_light, theme)
- == MaterialDynamicColors.primaryContainer().getArgb(mDynamicSchemeLight))) {
+ == MaterialDynamicColors.primaryContainer().getArgb(mDynamicSchemeLight)
+ && res.getColor(android.R.color.system_primary_fixed, theme)
+ == MaterialDynamicColors.primaryFixed().getArgb(mDynamicSchemeLight))) {
return false;
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/tv/TvSystemUIModule.java b/packages/SystemUI/src/com/android/systemui/tv/TvSystemUIModule.java
index 0a78d896..d9a8e0c 100644
--- a/packages/SystemUI/src/com/android/systemui/tv/TvSystemUIModule.java
+++ b/packages/SystemUI/src/com/android/systemui/tv/TvSystemUIModule.java
@@ -23,8 +23,6 @@
import android.hardware.SensorPrivacyManager;
import android.os.Handler;
-import androidx.annotation.Nullable;
-
import com.android.internal.logging.UiEventLogger;
import com.android.keyguard.KeyguardViewController;
import com.android.systemui.dagger.ReferenceSystemUIModule;
@@ -75,13 +73,13 @@
import com.android.systemui.statusbar.tv.notifications.TvNotificationHandler;
import com.android.systemui.volume.dagger.VolumeModule;
-import javax.inject.Named;
-
import dagger.Binds;
import dagger.Module;
import dagger.Provides;
import dagger.multibindings.IntoSet;
+import javax.inject.Named;
+
/**
* A TV specific version of {@link ReferenceSystemUIModule}.
*
@@ -105,9 +103,8 @@
@SysUISingleton
@Provides
@Named(LEAK_REPORT_EMAIL_NAME)
- @Nullable
static String provideLeakReportEmail() {
- return null;
+ return "";
}
@Binds
diff --git a/packages/SystemUI/src/com/android/systemui/unfold/FoldAodAnimationController.kt b/packages/SystemUI/src/com/android/systemui/unfold/FoldAodAnimationController.kt
index d74906a..eed7950 100644
--- a/packages/SystemUI/src/com/android/systemui/unfold/FoldAodAnimationController.kt
+++ b/packages/SystemUI/src/com/android/systemui/unfold/FoldAodAnimationController.kt
@@ -154,10 +154,6 @@
pendingScrimReadyCallback = onReady
}
} else if (isFolded && !isFoldHandled && alwaysOnEnabled && isDozing) {
- // Screen turning on for the first time after folding and we are already dozing
- // We should play the folding to AOD animation
- isFoldHandled = true
-
setAnimationState(playing = true)
getShadeFoldAnimator().prepareFoldToAodAnimation()
@@ -173,6 +169,13 @@
// No animation, call ready callback immediately
onReady.run()
}
+
+ if (isFolded) {
+ // Any time the screen turns on, this state needs to be reset if the device has been
+ // folded. Reaching this line implies AOD has been shown in one way or another,
+ // if enabled
+ isFoldHandled = true
+ }
}
/** Called when keyguard scrim opaque changed */
diff --git a/packages/SystemUI/src/com/android/systemui/util/kotlin/Utils.kt b/packages/SystemUI/src/com/android/systemui/util/kotlin/Utils.kt
new file mode 100644
index 0000000..73e2f97
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/util/kotlin/Utils.kt
@@ -0,0 +1,40 @@
+/*
+ * 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.util.kotlin
+
+class Utils {
+ companion object {
+ fun <A, B, C> toTriple(a: A, bc: Pair<B, C>) = Triple(a, bc.first, bc.second)
+
+ fun <A, B, C, D> toQuad(a: A, b: B, c: C, d: D) = Quad(a, b, c, d)
+ fun <A, B, C, D> toQuad(a: A, bcd: Triple<B, C, D>) =
+ Quad(a, bcd.first, bcd.second, bcd.third)
+
+ fun <A, B, C, D, E> toQuint(a: A, bcde: Quad<B, C, D, E>) =
+ Quint(a, bcde.first, bcde.second, bcde.third, bcde.fourth)
+ }
+}
+
+data class Quad<A, B, C, D>(val first: A, val second: B, val third: C, val fourth: D)
+
+data class Quint<A, B, C, D, E>(
+ val first: A,
+ val second: B,
+ val third: C,
+ val fourth: D,
+ val fifth: E
+)
diff --git a/packages/SystemUI/src/com/android/systemui/util/leak/LeakReporter.java b/packages/SystemUI/src/com/android/systemui/util/leak/LeakReporter.java
index a0d22f3..c1b7d7a 100644
--- a/packages/SystemUI/src/com/android/systemui/util/leak/LeakReporter.java
+++ b/packages/SystemUI/src/com/android/systemui/util/leak/LeakReporter.java
@@ -18,7 +18,6 @@
import static com.android.systemui.Dependency.LEAK_REPORT_EMAIL_NAME;
-import android.annotation.Nullable;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
@@ -29,6 +28,7 @@
import android.net.Uri;
import android.os.Debug;
import android.os.SystemProperties;
+import android.text.TextUtils;
import android.util.Log;
import androidx.core.content.FileProvider;
@@ -68,7 +68,7 @@
@Inject
public LeakReporter(Context context, UserTracker userTracker, LeakDetector leakDetector,
- @Nullable @Named(LEAK_REPORT_EMAIL_NAME) String leakReportEmail) {
+ @Named(LEAK_REPORT_EMAIL_NAME) String leakReportEmail) {
mContext = context;
mUserTracker = userTracker;
mLeakDetector = leakDetector;
@@ -150,9 +150,8 @@
intent.setClipData(clipData);
intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, attachments);
- String leakReportEmail = mLeakReportEmail;
- if (leakReportEmail != null) {
- intent.putExtra(Intent.EXTRA_EMAIL, new String[] { leakReportEmail });
+ if (!TextUtils.isEmpty(mLeakReportEmail)) {
+ intent.putExtra(Intent.EXTRA_EMAIL, new String[] { mLeakReportEmail });
}
return intent;
diff --git a/packages/SystemUI/src/com/android/systemui/volume/CsdWarningDialog.java b/packages/SystemUI/src/com/android/systemui/volume/CsdWarningDialog.java
index db7fa14..fb5a71c 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/CsdWarningDialog.java
+++ b/packages/SystemUI/src/com/android/systemui/volume/CsdWarningDialog.java
@@ -50,7 +50,6 @@
* <ul>
* <li>{@link AudioManager#CSD_WARNING_DOSE_REACHED_1X}</li>
* <li>{@link AudioManager#CSD_WARNING_DOSE_REPEATED_5X}</li>
- * <li>{@link AudioManager#CSD_WARNING_ACCUMULATION_START}</li>
* <li>{@link AudioManager#CSD_WARNING_MOMENTARY_EXPOSURE}</li>
* </ul>
* Rather than basing volume safety messages on a fixed volume index, the CSD feature derives its
@@ -123,9 +122,9 @@
setShowForAllUsers(true);
setMessage(mContext.getString(getStringForWarning(csdWarning)));
setButton(DialogInterface.BUTTON_POSITIVE,
- mContext.getString(com.android.internal.R.string.yes), this);
+ mContext.getString(R.string.csd_button_keep_listening), this);
setButton(DialogInterface.BUTTON_NEGATIVE,
- mContext.getString(com.android.internal.R.string.no), this);
+ mContext.getString(R.string.csd_button_lower_volume), this);
setOnDismissListener(this);
final IntentFilter filter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
@@ -138,7 +137,7 @@
// unlike on the 5x dose repeat, level is only reduced to RS1 when the warning
// is not acknowledged quickly enough
mAudioManager.lowerVolumeToRs1();
- sendNotification();
+ sendNotification(/*for5XCsd=*/false);
}
};
} else {
@@ -152,6 +151,16 @@
}
}
+ @Override
+ public void show() {
+ if (mCsdWarning == AudioManager.CSD_WARNING_DOSE_REPEATED_5X) {
+ // only show a notification in case we reached 500% of dose
+ show5XNotification();
+ return;
+ }
+ super.show();
+ }
+
// NOT overriding onKeyDown as we're not allowing a dismissal on any key other than
// VOLUME_DOWN, and for this, we don't need to track if it's the start of a new
// key down -> up sequence
@@ -177,8 +186,8 @@
@Override
public void onClick(DialogInterface dialog, int which) {
- if (which == DialogInterface.BUTTON_POSITIVE) {
- Log.d(TAG, "OK pressed for CSD warning " + mCsdWarning);
+ if (which == DialogInterface.BUTTON_NEGATIVE) {
+ Log.d(TAG, "Lower volume pressed for CSD warning " + mCsdWarning);
dismiss();
}
@@ -235,27 +244,34 @@
switch (csdWarning) {
case AudioManager.CSD_WARNING_DOSE_REACHED_1X:
return com.android.internal.R.string.csd_dose_reached_warning;
- case AudioManager.CSD_WARNING_DOSE_REPEATED_5X:
- return com.android.internal.R.string.csd_dose_repeat_warning;
case AudioManager.CSD_WARNING_MOMENTARY_EXPOSURE:
return com.android.internal.R.string.csd_momentary_exposure_warning;
- case AudioManager.CSD_WARNING_ACCUMULATION_START:
- return com.android.internal.R.string.csd_entering_RS2_warning;
}
Log.e(TAG, "Invalid CSD warning event " + csdWarning, new Exception());
return com.android.internal.R.string.csd_dose_reached_warning;
}
+ /** When 5X CSD is reached we lower the volume and show a notification. **/
+ private void show5XNotification() {
+ if (mCsdWarning != AudioManager.CSD_WARNING_DOSE_REPEATED_5X) {
+ Log.w(TAG, "Notification dose repeat 5x is not shown for " + mCsdWarning);
+ return;
+ }
+
+ mAudioManager.lowerVolumeToRs1();
+ sendNotification(/*for5XCsd=*/true);
+ }
/**
* In case user did not respond to the dialog, they still need to know volume was lowered.
*/
- private void sendNotification() {
+ private void sendNotification(boolean for5XCsd) {
Intent intent = new Intent(Settings.ACTION_SOUND_SETTINGS);
PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 0, intent,
FLAG_IMMUTABLE);
- String text = mContext.getString(R.string.csd_system_lowered_text);
+ String text = for5XCsd ? mContext.getString(R.string.csd_500_system_lowered_text)
+ : mContext.getString(R.string.csd_system_lowered_text);
String title = mContext.getString(R.string.csd_lowered_title);
Notification.Builder builder =
diff --git a/packages/SystemUI/src/com/android/systemui/volume/Events.java b/packages/SystemUI/src/com/android/systemui/volume/Events.java
index fc0033d..2d1e622 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/Events.java
+++ b/packages/SystemUI/src/com/android/systemui/volume/Events.java
@@ -98,6 +98,8 @@
public static final int DISMISS_REASON_OUTPUT_CHOOSER = 8;
public static final int DISMISS_REASON_USB_OVERHEAD_ALARM_CHANGED = 9;
public static final int DISMISS_REASON_CSD_WARNING_TIMEOUT = 10;
+ public static final int DISMISS_REASON_POSTURE_CHANGED = 11;
+
public static final String[] DISMISS_REASONS = {
"unknown",
"touch_outside",
@@ -109,7 +111,8 @@
"a11y_stream_changed",
"output_chooser",
"usb_temperature_below_threshold",
- "csd_warning_timeout"
+ "csd_warning_timeout",
+ "posture_changed"
};
public static final int SHOW_REASON_UNKNOWN = 0;
diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java
index 91078dc..f893cf4 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java
@@ -34,6 +34,7 @@
import static com.android.internal.jank.InteractionJankMonitor.CUJ_VOLUME_CONTROL;
import static com.android.internal.jank.InteractionJankMonitor.Configuration.Builder;
+import static com.android.systemui.volume.Events.DISMISS_REASON_POSTURE_CHANGED;
import static com.android.systemui.volume.Events.DISMISS_REASON_SETTINGS_CLICKED;
import android.animation.Animator;
@@ -129,6 +130,7 @@
import com.android.systemui.plugins.VolumeDialogController.StreamState;
import com.android.systemui.statusbar.policy.AccessibilityManagerWrapper;
import com.android.systemui.statusbar.policy.ConfigurationController;
+import com.android.systemui.statusbar.policy.DevicePostureController;
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
import com.android.systemui.util.AlphaTintDrawableWrapper;
import com.android.systemui.util.DeviceConfigProxy;
@@ -184,7 +186,7 @@
private final boolean mChangeVolumeRowTintWhenInactive;
private final Context mContext;
- private final H mHandler = new H();
+ private final H mHandler;
private final VolumeDialogController mController;
private final DeviceProvisionedController mDeviceProvisionedController;
private final Region mTouchableRegion = new Region();
@@ -259,16 +261,13 @@
private final AccessibilityManagerWrapper mAccessibilityMgr;
private final Object mSafetyWarningLock = new Object();
private final Accessibility mAccessibility = new Accessibility();
-
private final ConfigurationController mConfigurationController;
private final MediaOutputDialogFactory mMediaOutputDialogFactory;
private final VolumePanelFactory mVolumePanelFactory;
private final CsdWarningDialog.Factory mCsdWarningDialogFactory;
private final ActivityStarter mActivityStarter;
-
private boolean mShowing;
private boolean mShowA11yStream;
-
private int mActiveStream;
private int mPrevActiveStream;
private boolean mAutomute = VolumePrefs.DEFAULT_ENABLE_AUTOMUTE;
@@ -300,6 +299,12 @@
@VisibleForTesting
int mVolumeRingerMuteIconDrawableId;
+ private int mOriginalGravity;
+ private final DevicePostureController.Callback mDevicePostureControllerCallback;
+ private final DevicePostureController mDevicePostureController;
+ private @DevicePostureController.DevicePostureInt int mDevicePosture;
+ private int mOrientation;
+
public VolumeDialogImpl(
Context context,
VolumeDialogController volumeDialogController,
@@ -313,9 +318,12 @@
DeviceConfigProxy deviceConfigProxy,
Executor executor,
CsdWarningDialog.Factory csdWarningDialogFactory,
+ DevicePostureController devicePostureController,
+ Looper looper,
DumpManager dumpManager) {
mContext =
new ContextThemeWrapper(context, R.style.volume_dialog_theme);
+ mHandler = new H(looper);
mController = volumeDialogController;
mKeyguard = (KeyguardManager) mContext.getSystemService(Context.KEYGUARD_SERVICE);
mActivityManager = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
@@ -357,6 +365,16 @@
initDimens();
+ mOrientation = mContext.getResources().getConfiguration().orientation;
+ mDevicePostureController = devicePostureController;
+ if (mDevicePostureController != null) {
+ int initialPosture = mDevicePostureController.getDevicePosture();
+ mDevicePosture = initialPosture;
+ mDevicePostureControllerCallback = this::onPostureChanged;
+ } else {
+ mDevicePostureControllerCallback = null;
+ }
+
mDeviceConfigProxy = deviceConfigProxy;
mExecutor = executor;
mSeparateNotification = mDeviceConfigProxy.getBoolean(DeviceConfig.NAMESPACE_SYSTEMUI,
@@ -365,6 +383,25 @@
}
/**
+ * Adjust the dialog location on the screen in order to avoid drawing on the hinge.
+ */
+ private void adjustPositionOnScreen() {
+ final boolean isPortrait = mOrientation == Configuration.ORIENTATION_PORTRAIT;
+ final boolean isHalfOpen =
+ mDevicePosture == DevicePostureController.DEVICE_POSTURE_HALF_OPENED;
+ final boolean isTabletop = isPortrait && isHalfOpen;
+ WindowManager.LayoutParams lp = mWindow.getAttributes();
+ int gravity = isTabletop ? (mOriginalGravity | Gravity.TOP) : mOriginalGravity;
+ mWindowGravity = Gravity.getAbsoluteGravity(gravity,
+ mContext.getResources().getConfiguration().getLayoutDirection());
+ lp.gravity = mWindowGravity;
+ }
+
+ @VisibleForTesting int getWindowGravity() {
+ return mWindowGravity;
+ }
+
+ /**
* If ringer and notification are the same stream (T and earlier), use notification-like bell
* icon set.
* If ringer and notification are separated, then use generic speaker icons.
@@ -419,6 +456,10 @@
mDeviceConfigProxy.addOnPropertiesChangedListener(DeviceConfig.NAMESPACE_SYSTEMUI,
mExecutor, this::onDeviceConfigChange);
+
+ if (mDevicePostureController != null) {
+ mDevicePostureController.addCallback(mDevicePostureControllerCallback);
+ }
}
@Override
@@ -427,6 +468,9 @@
mHandler.removeCallbacksAndMessages(null);
mConfigurationController.removeCallback(this);
mDeviceConfigProxy.removeOnPropertiesChangedListener(this::onDeviceConfigChange);
+ if (mDevicePostureController != null) {
+ mDevicePostureController.removeCallback(mDevicePostureControllerCallback);
+ }
}
/**
@@ -441,7 +485,6 @@
mSeparateNotification = newVal;
updateRingerModeIconSet();
updateRingRowIcon();
-
}
}
}
@@ -500,7 +543,6 @@
private void initDialog(int lockTaskModeState) {
mDialog = new CustomDialog(mContext);
-
initDimens();
mConfigurableTexts = new ConfigurableTexts(mContext);
@@ -524,14 +566,13 @@
lp.setTitle(VolumeDialogImpl.class.getSimpleName());
lp.windowAnimations = -1;
- mWindowGravity = Gravity.getAbsoluteGravity(
- mContext.getResources().getInteger(R.integer.volume_dialog_gravity),
+ mOriginalGravity = mContext.getResources().getInteger(R.integer.volume_dialog_gravity);
+ mWindowGravity = Gravity.getAbsoluteGravity(mOriginalGravity,
mContext.getResources().getConfiguration().getLayoutDirection());
lp.gravity = mWindowGravity;
mWindow.setAttributes(lp);
mWindow.setLayout(WRAP_CONTENT, WRAP_CONTENT);
-
mDialog.setContentView(R.layout.volume_dialog);
mDialogView = mDialog.findViewById(R.id.volume_dialog);
mDialogView.setAlpha(0);
@@ -1539,8 +1580,10 @@
animator.translationX(
(isWindowGravityLeft() ? -1 : 1) * mDialogView.getWidth() / 2.0f);
}
+
animator.setListener(getJankListener(getDialogView(), TYPE_DISMISS,
mDialogHideAnimationDurationMs)).start();
+
checkODICaptionsTooltip(true);
synchronized (mSafetyWarningLock) {
if (mSafetyWarning != null) {
@@ -2237,6 +2280,11 @@
mTopContainer.setBackground(background);
}
+ @Override
+ public void onConfigChanged(Configuration config) {
+ mOrientation = config.orientation;
+ }
+
private final VolumeDialogController.Callbacks mControllerCallbackH
= new VolumeDialogController.Callbacks() {
@Override
@@ -2313,6 +2361,11 @@
}
};
+ @VisibleForTesting void onPostureChanged(int posture) {
+ dismiss(DISMISS_REASON_POSTURE_CHANGED);
+ mDevicePosture = posture;
+ }
+
private final class H extends Handler {
private static final int SHOW = 1;
private static final int DISMISS = 2;
@@ -2323,8 +2376,8 @@
private static final int STATE_CHANGED = 7;
private static final int CSD_TIMEOUT = 8;
- public H() {
- super(Looper.getMainLooper());
+ H(Looper looper) {
+ super(looper);
}
@Override
@@ -2370,6 +2423,7 @@
protected void onStart() {
super.setCanceledOnTouchOutside(true);
super.onStart();
+ adjustPositionOnScreen();
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/volume/dagger/VolumeModule.java b/packages/SystemUI/src/com/android/systemui/volume/dagger/VolumeModule.java
index 14d3ca3..bb04f82 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/dagger/VolumeModule.java
+++ b/packages/SystemUI/src/com/android/systemui/volume/dagger/VolumeModule.java
@@ -18,6 +18,7 @@
import android.content.Context;
import android.media.AudioManager;
+import android.os.Looper;
import com.android.internal.jank.InteractionJankMonitor;
import com.android.systemui.dagger.qualifiers.Main;
@@ -28,6 +29,7 @@
import com.android.systemui.plugins.VolumeDialogController;
import com.android.systemui.statusbar.policy.AccessibilityManagerWrapper;
import com.android.systemui.statusbar.policy.ConfigurationController;
+import com.android.systemui.statusbar.policy.DevicePostureController;
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
import com.android.systemui.util.DeviceConfigProxy;
import com.android.systemui.volume.CsdWarningDialog;
@@ -42,7 +44,6 @@
import java.util.concurrent.Executor;
-
/** Dagger Module for code in the volume package. */
@Module
public interface VolumeModule {
@@ -65,6 +66,7 @@
DeviceConfigProxy deviceConfigProxy,
@Main Executor executor,
CsdWarningDialog.Factory csdFactory,
+ DevicePostureController devicePostureController,
DumpManager dumpManager) {
VolumeDialogImpl impl = new VolumeDialogImpl(
context,
@@ -79,6 +81,8 @@
deviceConfigProxy,
executor,
csdFactory,
+ devicePostureController,
+ Looper.getMainLooper(),
dumpManager);
impl.setStreamImportant(AudioManager.STREAM_SYSTEM, false);
impl.setAutomute(true);
diff --git a/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletScreenController.java b/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletScreenController.java
index 492f231..81d04d4 100644
--- a/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletScreenController.java
+++ b/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletScreenController.java
@@ -338,7 +338,12 @@
*/
QAWalletCardViewInfo(Context context, WalletCard walletCard) {
mWalletCard = walletCard;
- mCardDrawable = mWalletCard.getCardImage().loadDrawable(context);
+ Icon cardImageIcon = mWalletCard.getCardImage();
+ if (cardImageIcon.getType() == Icon.TYPE_URI) {
+ mCardDrawable = null;
+ } else {
+ mCardDrawable = mWalletCard.getCardImage().loadDrawable(context);
+ }
Icon icon = mWalletCard.getCardIcon();
mIconDrawable = icon == null ? null : icon.loadDrawable(context);
}
diff --git a/packages/SystemUI/src/com/android/systemui/wallpapers/ImageWallpaper.java b/packages/SystemUI/src/com/android/systemui/wallpapers/ImageWallpaper.java
index cd1ad1b..316b54e 100644
--- a/packages/SystemUI/src/com/android/systemui/wallpapers/ImageWallpaper.java
+++ b/packages/SystemUI/src/com/android/systemui/wallpapers/ImageWallpaper.java
@@ -173,7 +173,7 @@
.isLockscreenLiveWallpaperEnabled();
mSurfaceHolder = surfaceHolder;
Rect dimensions = mIsLockscreenLiveWallpaperEnabled
- ? mWallpaperManager.peekBitmapDimensions(getSourceFlag())
+ ? mWallpaperManager.peekBitmapDimensions(getSourceFlag(), true)
: mWallpaperManager.peekBitmapDimensions();
int width = Math.max(MIN_SURFACE_WIDTH, dimensions.width());
int height = Math.max(MIN_SURFACE_HEIGHT, dimensions.height());
@@ -325,7 +325,7 @@
try {
bitmap = mIsLockscreenLiveWallpaperEnabled
? mWallpaperManager.getBitmapAsUser(
- mUserTracker.getUserId(), false, getSourceFlag())
+ mUserTracker.getUserId(), false, getSourceFlag(), true)
: mWallpaperManager.getBitmapAsUser(mUserTracker.getUserId(), false);
if (bitmap != null
&& bitmap.getByteCount() > RecordingCanvas.MAX_BITMAP_SIZE) {
@@ -347,7 +347,7 @@
try {
bitmap = mIsLockscreenLiveWallpaperEnabled
? mWallpaperManager.getBitmapAsUser(
- mUserTracker.getUserId(), false, getSourceFlag())
+ mUserTracker.getUserId(), false, getSourceFlag(), true)
: mWallpaperManager.getBitmapAsUser(mUserTracker.getUserId(), false);
} catch (RuntimeException | OutOfMemoryError e) {
Log.w(TAG, "Unable to load default wallpaper!", e);
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/ClockEventControllerTest.kt b/packages/SystemUI/tests/src/com/android/keyguard/ClockEventControllerTest.kt
index 19d5278..3f1560b 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/ClockEventControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/keyguard/ClockEventControllerTest.kt
@@ -136,7 +136,7 @@
runBlocking(IMMEDIATE) {
underTest.registerListeners(parentView)
- repository.setDozing(true)
+ repository.setIsDozing(true)
repository.setDozeAmount(1f)
}
}
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockSwitchControllerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockSwitchControllerTest.java
index fb73845..d8e2a38 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockSwitchControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockSwitchControllerTest.java
@@ -134,6 +134,7 @@
private KeyguardClockSwitchController mController;
private View mSliceView;
+ private LinearLayout mStatusArea;
private FakeExecutor mExecutor;
@Before
@@ -195,8 +196,8 @@
mSliceView = new View(getContext());
when(mView.findViewById(R.id.keyguard_slice_view)).thenReturn(mSliceView);
- when(mView.findViewById(R.id.keyguard_status_area)).thenReturn(
- new LinearLayout(getContext()));
+ mStatusArea = new LinearLayout(getContext());
+ when(mView.findViewById(R.id.keyguard_status_area)).thenReturn(mStatusArea);
}
@Test
@@ -401,6 +402,15 @@
assertNull(mController.getClock());
}
+ @Test
+ public void testSetAlpha_setClockAlphaForCLockFace() {
+ mController.onViewAttached();
+ mController.setAlpha(0.5f);
+ verify(mLargeClockView).setAlpha(0.5f);
+ verify(mSmallClockView).setAlpha(0.5f);
+ assertEquals(0.5f, mStatusArea.getAlpha(), 0.0f);
+ }
+
private void verifyAttachment(VerificationMode times) {
verify(mClockRegistry, times).registerClockChangeListener(
any(ClockRegistry.ClockChangeListener.class));
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.java
index 8a05a37..65ddb53 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.java
@@ -64,7 +64,6 @@
import com.android.systemui.classifier.FalsingA11yDelegate;
import com.android.systemui.classifier.FalsingCollector;
import com.android.systemui.flags.FeatureFlags;
-import com.android.systemui.flags.Flags;
import com.android.systemui.keyguard.domain.interactor.KeyguardFaceAuthInteractor;
import com.android.systemui.log.SessionTracker;
import com.android.systemui.plugins.ActivityStarter;
@@ -398,26 +397,6 @@
}
@Test
- public void showNextSecurityScreenOrFinish_DeviceNotSecure_prevent_bypass_on() {
- when(mFeatureFlags.isEnabled(Flags.PREVENT_BYPASS_KEYGUARD)).thenReturn(true);
- // GIVEN the current security method is SimPin
- when(mKeyguardUpdateMonitor.getUserHasTrust(anyInt())).thenReturn(false);
- when(mKeyguardUpdateMonitor.getUserUnlockedWithBiometric(TARGET_USER_ID)).thenReturn(false);
- mKeyguardSecurityContainerController.showSecurityScreen(SecurityMode.SimPin);
-
- // WHEN a request is made from the SimPin screens to show the next security method
- when(mKeyguardSecurityModel.getSecurityMode(TARGET_USER_ID)).thenReturn(SecurityMode.None);
- mKeyguardSecurityContainerController.showNextSecurityScreenOrFinish(
- /* authenticated= */true,
- TARGET_USER_ID,
- /* bypassSecondaryLockScreen= */true,
- SecurityMode.SimPin);
-
- // THEN the next security method of None will dismiss keyguard.
- verify(mViewMediatorCallback).keyguardDone(anyBoolean(), anyInt());
- }
-
- @Test
public void showNextSecurityScreenOrFinish_ignoresCallWhenSecurityMethodHasChanged() {
//GIVEN current security mode has been set to PIN
mKeyguardSecurityContainerController.showSecurityScreen(SecurityMode.PIN);
@@ -608,7 +587,6 @@
@Test
public void testSecurityCallbackFinish_cannotDismissLockScreenAndNotStrongAuth() {
- when(mFeatureFlags.isEnabled(Flags.PREVENT_BYPASS_KEYGUARD)).thenReturn(true);
when(mKeyguardStateController.canDismissLockScreen()).thenReturn(false);
mKeyguardSecurityContainerController.finish(false, 0);
verify(mViewMediatorCallback, never()).keyguardDone(anyBoolean(), anyInt());
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardStatusViewTest.kt b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardStatusViewTest.kt
index 508aea5..a8c281c 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardStatusViewTest.kt
+++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardStatusViewTest.kt
@@ -24,6 +24,8 @@
get() = keyguardStatusView.findViewById(R.id.status_view_media_container)
private val statusViewContainer: ViewGroup
get() = keyguardStatusView.findViewById(R.id.status_view_container)
+ private val clockView: ViewGroup
+ get() = keyguardStatusView.findViewById(R.id.keyguard_clock_container)
private val childrenExcludingMedia
get() = statusViewContainer.children.filter { it != mediaView }
@@ -56,4 +58,12 @@
assertThat(it.translationY).isEqualTo(translationY)
}
}
+
+ @Test
+ fun setAlphaExcludeClock() {
+ keyguardStatusView.setAlpha(0.5f, /* excludeClock= */true)
+ assertThat(statusViewContainer.alpha).isNotEqualTo(0.5f)
+ assertThat(mediaView.alpha).isEqualTo(0.5f)
+ assertThat(clockView.alpha).isNotEqualTo(0.5f)
+ }
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthBiometricFingerprintIconControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthBiometricFingerprintIconControllerTest.kt
new file mode 100644
index 0000000..cac618b
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthBiometricFingerprintIconControllerTest.kt
@@ -0,0 +1,100 @@
+/*
+ * 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.biometrics
+
+import android.content.Context
+import android.hardware.biometrics.SensorProperties
+import android.hardware.fingerprint.FingerprintManager
+import android.hardware.fingerprint.FingerprintSensorProperties
+import android.hardware.fingerprint.FingerprintSensorPropertiesInternal
+import android.view.ViewGroup.LayoutParams
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SmallTest
+import com.airbnb.lottie.LottieAnimationView
+import com.android.systemui.R
+import com.android.systemui.SysuiTestCase
+import com.google.common.truth.Truth.assertThat
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mock
+import org.mockito.Mockito.`when` as whenEver
+import org.mockito.junit.MockitoJUnit
+
+private const val SENSOR_ID = 1
+
+@SmallTest
+@RunWith(AndroidJUnit4::class)
+class AuthBiometricFingerprintIconControllerTest : SysuiTestCase() {
+
+ @JvmField @Rule var mockitoRule = MockitoJUnit.rule()
+
+ @Mock private lateinit var iconView: LottieAnimationView
+ @Mock private lateinit var iconViewOverlay: LottieAnimationView
+ @Mock private lateinit var layoutParam: LayoutParams
+ @Mock private lateinit var fingerprintManager: FingerprintManager
+
+ private lateinit var controller: AuthBiometricFingerprintIconController
+
+ @Before
+ fun setUp() {
+ context.addMockSystemService(Context.FINGERPRINT_SERVICE, fingerprintManager)
+ whenEver(iconView.layoutParams).thenReturn(layoutParam)
+ whenEver(iconViewOverlay.layoutParams).thenReturn(layoutParam)
+ }
+
+ @Test
+ fun testIconContentDescription_SfpsDevice() {
+ setupFingerprintSensorProperties(FingerprintSensorProperties.TYPE_POWER_BUTTON)
+ controller = AuthBiometricFingerprintIconController(context, iconView, iconViewOverlay)
+
+ assertThat(controller.getIconContentDescription(AuthBiometricView.STATE_AUTHENTICATING))
+ .isEqualTo(
+ context.resources.getString(
+ R.string.security_settings_sfps_enroll_find_sensor_message
+ )
+ )
+ }
+
+ @Test
+ fun testIconContentDescription_NonSfpsDevice() {
+ setupFingerprintSensorProperties(FingerprintSensorProperties.TYPE_UDFPS_OPTICAL)
+ controller = AuthBiometricFingerprintIconController(context, iconView, iconViewOverlay)
+
+ assertThat(controller.getIconContentDescription(AuthBiometricView.STATE_AUTHENTICATING))
+ .isEqualTo(context.resources.getString(R.string.fingerprint_dialog_touch_sensor))
+ }
+
+ private fun setupFingerprintSensorProperties(sensorType: Int) {
+ whenEver(fingerprintManager.sensorPropertiesInternal)
+ .thenReturn(
+ listOf(
+ FingerprintSensorPropertiesInternal(
+ SENSOR_ID,
+ SensorProperties.STRENGTH_STRONG,
+ 5 /* maxEnrollmentsPerUser */,
+ listOf() /* componentInfo */,
+ sensorType,
+ true /* halControlsIllumination */,
+ true /* resetLockoutRequiresHardwareAuthToken */,
+ listOf() /* sensorLocations */
+ )
+ )
+ )
+ }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewLegacyControllerWithCoroutinesTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewLegacyControllerWithCoroutinesTest.kt
index 9e600f5..7531cb4 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewLegacyControllerWithCoroutinesTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewLegacyControllerWithCoroutinesTest.kt
@@ -75,7 +75,6 @@
MockitoAnnotations.initMocks(this)
keyguardBouncerRepository =
KeyguardBouncerRepositoryImpl(
- mock(com.android.keyguard.ViewMediatorCallback::class.java),
FakeSystemClock(),
testScope.backgroundScope,
bouncerLogger,
diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/data/repository/FingerprintRepositoryImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/data/repository/FingerprintRepositoryImplTest.kt
index f3a100b..239e317 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/data/repository/FingerprintRepositoryImplTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/data/repository/FingerprintRepositoryImplTest.kt
@@ -102,6 +102,12 @@
540 /* sensorLocationX */,
1636 /* sensorLocationY */,
130 /* sensorRadius */
+ ),
+ SensorLocationInternal(
+ "display_id_1" /* displayId */,
+ 100 /* sensorLocationX */,
+ 300 /* sensorLocationY */,
+ 20 /* sensorRadius */
)
)
)
@@ -112,7 +118,17 @@
assertThat(repository.sensorId.value).isEqualTo(1)
assertThat(repository.strength.value).isEqualTo(SensorStrength.STRONG)
assertThat(repository.sensorType.value).isEqualTo(FingerprintSensorType.REAR)
- with(repository.sensorLocation.value) {
+
+ assertThat(repository.sensorLocations.value.size).isEqualTo(2)
+ assertThat(repository.sensorLocations.value).containsKey("display_id_1")
+ with(repository.sensorLocations.value["display_id_1"]!!) {
+ assertThat(displayId).isEqualTo("display_id_1")
+ assertThat(sensorLocationX).isEqualTo(100)
+ assertThat(sensorLocationY).isEqualTo(300)
+ assertThat(sensorRadius).isEqualTo(20)
+ }
+ assertThat(repository.sensorLocations.value).containsKey("")
+ with(repository.sensorLocations.value[""]!!) {
assertThat(displayId).isEqualTo("")
assertThat(sensorLocationX).isEqualTo(540)
assertThat(sensorLocationY).isEqualTo(1636)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/domain/interactor/SideFpsOverlayInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/domain/interactor/SideFpsOverlayInteractorTest.kt
new file mode 100644
index 0000000..fd96cf4
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/domain/interactor/SideFpsOverlayInteractorTest.kt
@@ -0,0 +1,91 @@
+/*
+ * 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.biometrics.domain.interactor
+
+import android.hardware.biometrics.SensorLocationInternal
+import androidx.test.filters.SmallTest
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.biometrics.data.repository.FakeFingerprintPropertyRepository
+import com.android.systemui.biometrics.shared.model.FingerprintSensorType
+import com.android.systemui.biometrics.shared.model.SensorStrength
+import com.google.common.truth.Truth.assertThat
+import kotlinx.coroutines.test.StandardTestDispatcher
+import kotlinx.coroutines.test.TestScope
+import kotlinx.coroutines.test.runTest
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+import org.mockito.junit.MockitoJUnit
+
+@SmallTest
+@RunWith(JUnit4::class)
+class SideFpsOverlayInteractorTest : SysuiTestCase() {
+
+ @JvmField @Rule var mockitoRule = MockitoJUnit.rule()
+ private lateinit var testScope: TestScope
+
+ private val fingerprintRepository = FakeFingerprintPropertyRepository()
+
+ private lateinit var interactor: SideFpsOverlayInteractor
+
+ @Before
+ fun setup() {
+ testScope = TestScope(StandardTestDispatcher())
+ interactor = SideFpsOverlayInteractorImpl(fingerprintRepository)
+ }
+
+ @Test
+ fun testGetOverlayOffsets() =
+ testScope.runTest {
+ fingerprintRepository.setProperties(
+ sensorId = 1,
+ strength = SensorStrength.STRONG,
+ sensorType = FingerprintSensorType.REAR,
+ sensorLocations =
+ mapOf(
+ "" to
+ SensorLocationInternal(
+ "" /* displayId */,
+ 540 /* sensorLocationX */,
+ 1636 /* sensorLocationY */,
+ 130 /* sensorRadius */
+ ),
+ "display_id_1" to
+ SensorLocationInternal(
+ "display_id_1" /* displayId */,
+ 100 /* sensorLocationX */,
+ 300 /* sensorLocationY */,
+ 20 /* sensorRadius */
+ )
+ )
+ )
+
+ var offsets = interactor.getOverlayOffsets("display_id_1")
+ assertThat(offsets.displayId).isEqualTo("display_id_1")
+ assertThat(offsets.sensorLocationX).isEqualTo(100)
+ assertThat(offsets.sensorLocationY).isEqualTo(300)
+ assertThat(offsets.sensorRadius).isEqualTo(20)
+
+ offsets = interactor.getOverlayOffsets("invalid_display_id")
+ assertThat(offsets.displayId).isEqualTo("")
+ assertThat(offsets.sensorLocationX).isEqualTo(540)
+ assertThat(offsets.sensorLocationY).isEqualTo(1636)
+ assertThat(offsets.sensorRadius).isEqualTo(130)
+ }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/complication/ComplicationLayoutEngineTest.java b/packages/SystemUI/tests/src/com/android/systemui/complication/ComplicationLayoutEngineTest.java
index a1d4fb4..69d8d0b 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/complication/ComplicationLayoutEngineTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/complication/ComplicationLayoutEngineTest.java
@@ -30,6 +30,7 @@
import com.android.systemui.R;
import com.android.systemui.SysuiTestCase;
+import com.android.systemui.complication.ComplicationLayoutEngine.Margins;
import com.android.systemui.touch.TouchInsetManager;
import org.junit.Before;
@@ -42,6 +43,7 @@
import java.util.Arrays;
import java.util.List;
+import java.util.Random;
import java.util.function.Consumer;
import java.util.stream.Collectors;
@@ -54,6 +56,14 @@
@Mock
TouchInsetManager.TouchInsetSession mTouchSession;
+ ComplicationLayoutEngine createComplicationLayoutEngine() {
+ return createComplicationLayoutEngine(0);
+ }
+
+ ComplicationLayoutEngine createComplicationLayoutEngine(int spacing) {
+ return new ComplicationLayoutEngine(mLayout, spacing, 0, 0, 0, 0, mTouchSession, 0, 0);
+ }
+
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
@@ -104,6 +114,73 @@
engine.addComplication(info.id, info.view, info.lp, info.category);
}
+ @Test
+ public void testCombineMargins() {
+ final Random rand = new Random();
+ final Margins margins1 = new Margins(rand.nextInt(), rand.nextInt(), rand.nextInt(),
+ rand.nextInt());
+ final Margins margins2 = new Margins(rand.nextInt(), rand.nextInt(), rand.nextInt(),
+ rand.nextInt());
+ final Margins combined = Margins.combine(margins1, margins2);
+ assertThat(margins1.start + margins2.start).isEqualTo(combined.start);
+ assertThat(margins1.top + margins2.top).isEqualTo(combined.top);
+ assertThat(margins1.end + margins2.end).isEqualTo(combined.end);
+ assertThat(margins1.bottom + margins2.bottom).isEqualTo(combined.bottom);
+ }
+
+ @Test
+ public void testComplicationMarginPosition() {
+ final Random rand = new Random();
+ final int startMargin = rand.nextInt();
+ final int topMargin = rand.nextInt();
+ final int endMargin = rand.nextInt();
+ final int bottomMargin = rand.nextInt();
+ final int spacing = rand.nextInt();
+
+ final ComplicationLayoutEngine engine = new ComplicationLayoutEngine(mLayout, spacing,
+ startMargin, topMargin, endMargin, bottomMargin, mTouchSession, 0, 0);
+
+ final ViewInfo firstViewInfo = new ViewInfo(
+ new ComplicationLayoutParams(
+ 100,
+ 100,
+ ComplicationLayoutParams.POSITION_TOP
+ | ComplicationLayoutParams.POSITION_END,
+ ComplicationLayoutParams.DIRECTION_DOWN,
+ 0),
+ Complication.CATEGORY_SYSTEM,
+ mLayout);
+
+ addComplication(engine, firstViewInfo);
+ firstViewInfo.clearInvocations();
+
+ final ViewInfo secondViewInfo = new ViewInfo(
+ new ComplicationLayoutParams(
+ 100,
+ 100,
+ ComplicationLayoutParams.POSITION_TOP
+ | ComplicationLayoutParams.POSITION_END,
+ ComplicationLayoutParams.DIRECTION_DOWN,
+ 0),
+ Complication.CATEGORY_STANDARD,
+ mLayout);
+
+ addComplication(engine, secondViewInfo);
+
+
+ // The first added view should have margins from both directions from the corner position.
+ verifyChange(firstViewInfo, false, lp -> {
+ assertThat(lp.topMargin).isEqualTo(topMargin);
+ assertThat(lp.getMarginEnd()).isEqualTo(endMargin);
+ });
+
+ // The second view should be spaced below the first view and have the side end margin.
+ verifyChange(secondViewInfo, false, lp -> {
+ assertThat(lp.topMargin).isEqualTo(spacing);
+ assertThat(lp.getMarginEnd()).isEqualTo(endMargin);
+ });
+ }
+
/**
* Makes sure the engine properly places a view within the {@link ConstraintLayout}.
*/
@@ -120,8 +197,7 @@
Complication.CATEGORY_STANDARD,
mLayout);
- final ComplicationLayoutEngine engine =
- new ComplicationLayoutEngine(mLayout, 0, mTouchSession, 0, 0);
+ final ComplicationLayoutEngine engine = createComplicationLayoutEngine();
addComplication(engine, firstViewInfo);
// Ensure the view is added to the top end corner
@@ -148,8 +224,7 @@
Complication.CATEGORY_STANDARD,
mLayout);
- final ComplicationLayoutEngine engine =
- new ComplicationLayoutEngine(mLayout, 0, mTouchSession, 0, 0);
+ final ComplicationLayoutEngine engine = createComplicationLayoutEngine();
addComplication(engine, firstViewInfo);
// Ensure the view is added to the top end corner
@@ -165,8 +240,7 @@
*/
@Test
public void testDirectionLayout() {
- final ComplicationLayoutEngine engine =
- new ComplicationLayoutEngine(mLayout, 0, mTouchSession, 0, 0);
+ final ComplicationLayoutEngine engine = createComplicationLayoutEngine();
final ViewInfo firstViewInfo = new ViewInfo(
new ComplicationLayoutParams(
@@ -214,8 +288,7 @@
*/
@Test
public void testPositionLayout() {
- final ComplicationLayoutEngine engine =
- new ComplicationLayoutEngine(mLayout, 0, mTouchSession, 0, 0);
+ final ComplicationLayoutEngine engine = createComplicationLayoutEngine();
final ViewInfo firstViewInfo = new ViewInfo(
new ComplicationLayoutParams(
@@ -302,8 +375,7 @@
@Test
public void testDefaultMargin() {
final int margin = 5;
- final ComplicationLayoutEngine engine =
- new ComplicationLayoutEngine(mLayout, margin, mTouchSession, 0, 0);
+ final ComplicationLayoutEngine engine = createComplicationLayoutEngine(margin);
final ViewInfo firstViewInfo = new ViewInfo(
new ComplicationLayoutParams(
@@ -379,8 +451,7 @@
public void testComplicationMargin() {
final int defaultMargin = 5;
final int complicationMargin = 10;
- final ComplicationLayoutEngine engine =
- new ComplicationLayoutEngine(mLayout, defaultMargin, mTouchSession, 0, 0);
+ final ComplicationLayoutEngine engine = createComplicationLayoutEngine(defaultMargin);
final ViewInfo firstViewInfo = new ViewInfo(
new ComplicationLayoutParams(
@@ -446,8 +517,7 @@
@Test
public void testWidthConstraint() {
final int maxWidth = 20;
- final ComplicationLayoutEngine engine =
- new ComplicationLayoutEngine(mLayout, 0, mTouchSession, 0, 0);
+ final ComplicationLayoutEngine engine = createComplicationLayoutEngine();
final ViewInfo viewStartDirection = new ViewInfo(
new ComplicationLayoutParams(
@@ -495,8 +565,7 @@
@Test
public void testHeightConstraint() {
final int maxHeight = 20;
- final ComplicationLayoutEngine engine =
- new ComplicationLayoutEngine(mLayout, 0, mTouchSession, 0, 0);
+ final ComplicationLayoutEngine engine = createComplicationLayoutEngine();
final ViewInfo viewUpDirection = new ViewInfo(
new ComplicationLayoutParams(
@@ -543,8 +612,7 @@
*/
@Test
public void testConstraintNotSetWhenNotSpecified() {
- final ComplicationLayoutEngine engine =
- new ComplicationLayoutEngine(mLayout, 0, mTouchSession, 0, 0);
+ final ComplicationLayoutEngine engine = createComplicationLayoutEngine();
final ViewInfo view = new ViewInfo(
new ComplicationLayoutParams(
@@ -572,8 +640,7 @@
*/
@Test
public void testRemoval() {
- final ComplicationLayoutEngine engine =
- new ComplicationLayoutEngine(mLayout, 0, mTouchSession, 0, 0);
+ final ComplicationLayoutEngine engine = createComplicationLayoutEngine();
final ViewInfo firstViewInfo = new ViewInfo(
new ComplicationLayoutParams(
@@ -619,8 +686,7 @@
*/
@Test
public void testDoubleRemoval() {
- final ComplicationLayoutEngine engine =
- new ComplicationLayoutEngine(mLayout, 0, mTouchSession, 0, 0);
+ final ComplicationLayoutEngine engine = createComplicationLayoutEngine();
final ViewInfo firstViewInfo = new ViewInfo(
new ComplicationLayoutParams(
@@ -649,8 +715,7 @@
@Test
public void testGetViews() {
- final ComplicationLayoutEngine engine =
- new ComplicationLayoutEngine(mLayout, 0, mTouchSession, 0, 0);
+ final ComplicationLayoutEngine engine = createComplicationLayoutEngine();
final ViewInfo topEndView = new ViewInfo(
new ComplicationLayoutParams(
diff --git a/packages/SystemUI/tests/src/com/android/systemui/complication/ComplicationLayoutParamsTest.java b/packages/SystemUI/tests/src/com/android/systemui/complication/ComplicationLayoutParamsTest.java
index 286972d..a23e9e4 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/complication/ComplicationLayoutParamsTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/complication/ComplicationLayoutParamsTest.java
@@ -112,7 +112,7 @@
ComplicationLayoutParams.POSITION_TOP,
ComplicationLayoutParams.DIRECTION_DOWN,
3);
- assertThat(params.getMargin(10) == 10).isTrue();
+ assertThat(params.getDirectionalSpacing(10) == 10).isTrue();
}
/**
@@ -127,7 +127,7 @@
ComplicationLayoutParams.DIRECTION_DOWN,
3,
10);
- assertThat(params.getMargin(5) == 10).isTrue();
+ assertThat(params.getDirectionalSpacing(5) == 10).isTrue();
}
/**
@@ -148,7 +148,7 @@
assertThat(copy.getDirection() == params.getDirection()).isTrue();
assertThat(copy.getPosition() == params.getPosition()).isTrue();
assertThat(copy.getWeight() == params.getWeight()).isTrue();
- assertThat(copy.getMargin(0) == params.getMargin(1)).isTrue();
+ assertThat(copy.getDirectionalSpacing(0) == params.getDirectionalSpacing(1)).isTrue();
assertThat(copy.getConstraint() == params.getConstraint()).isTrue();
assertThat(copy.height == params.height).isTrue();
assertThat(copy.width == params.width).isTrue();
@@ -171,7 +171,7 @@
assertThat(copy.getDirection() == params.getDirection()).isTrue();
assertThat(copy.getPosition() == params.getPosition()).isTrue();
assertThat(copy.getWeight() == params.getWeight()).isTrue();
- assertThat(copy.getMargin(1) == params.getMargin(1)).isTrue();
+ assertThat(copy.getDirectionalSpacing(1) == params.getDirectionalSpacing(1)).isTrue();
assertThat(copy.height == params.height).isTrue();
assertThat(copy.width == params.width).isTrue();
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/controls/management/ControlsProviderSelectorActivityTest.kt b/packages/SystemUI/tests/src/com/android/systemui/controls/management/ControlsProviderSelectorActivityTest.kt
index 8dfd223..b2e37cc 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/controls/management/ControlsProviderSelectorActivityTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/controls/management/ControlsProviderSelectorActivityTest.kt
@@ -34,6 +34,7 @@
import com.android.systemui.controls.ControlsServiceInfo
import com.android.systemui.controls.controller.ControlsController
import com.android.systemui.controls.panels.AuthorizedPanelsRepository
+import com.android.systemui.controls.ui.SelectedItem
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.settings.UserTracker
@@ -190,6 +191,9 @@
val setCaptor: ArgumentCaptor<Set<String>> = argumentCaptor()
verify(authorizedPanelsRepository).addAuthorizedPanels(capture(setCaptor))
assertThat(setCaptor.value).containsExactly(info.componentName.packageName)
+ val selectedComponentCaptor: ArgumentCaptor<SelectedItem> = argumentCaptor()
+ verify(controlsController).setPreferredSelection(capture(selectedComponentCaptor))
+ assertThat(selectedComponentCaptor.value.componentName).isEqualTo(info.componentName)
assertThat(activityRule.activity.triedToFinish).isTrue()
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeTriggersTest.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeTriggersTest.java
index 3552399..494e230 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeTriggersTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeTriggersTest.java
@@ -301,6 +301,22 @@
}
@Test
+ public void test_onSensor_tap() {
+ mTriggers.onSensor(DozeLog.REASON_SENSOR_TAP, 100, 200, null);
+
+ verify(mHost).onSlpiTap(100, 200);
+ verify(mMachine).wakeUp(DozeLog.REASON_SENSOR_TAP);
+ }
+
+ @Test
+ public void test_onSensor_double_tap() {
+ mTriggers.onSensor(DozeLog.REASON_SENSOR_DOUBLE_TAP, 100, 200, null);
+
+ verify(mHost).onSlpiTap(100, 200);
+ verify(mMachine).wakeUp(DozeLog.REASON_SENSOR_DOUBLE_TAP);
+ }
+
+ @Test
public void testPickupGestureDroppedKeyguardOccluded() {
// GIVEN device is in doze (screen blank, but running doze sensors)
when(mMachine.getState()).thenReturn(DozeMachine.State.DOZE);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java b/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java
index 8f58140..83c89f1 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java
@@ -52,10 +52,13 @@
import androidx.test.filters.SmallTest;
import com.android.internal.jank.InteractionJankMonitor;
+import com.android.internal.logging.InstanceId;
+import com.android.internal.logging.UiEventLogger;
import com.android.internal.widget.LockPatternUtils;
import com.android.keyguard.KeyguardDisplayManager;
import com.android.keyguard.KeyguardSecurityView;
import com.android.keyguard.KeyguardUpdateMonitor;
+import com.android.keyguard.KeyguardUpdateMonitorCallback;
import com.android.keyguard.mediator.ScreenOnCoordinator;
import com.android.systemui.DejankUtils;
import com.android.systemui.SysuiTestCase;
@@ -68,6 +71,7 @@
import com.android.systemui.dump.DumpManager;
import com.android.systemui.flags.FakeFeatureFlags;
import com.android.systemui.flags.Flags;
+import com.android.systemui.log.SessionTracker;
import com.android.systemui.navigationbar.NavigationModeController;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.shade.NotificationShadeWindowControllerImpl;
@@ -77,6 +81,7 @@
import com.android.systemui.statusbar.NotificationShadeDepthController;
import com.android.systemui.statusbar.NotificationShadeWindowController;
import com.android.systemui.statusbar.SysuiStatusBarStateController;
+import com.android.systemui.statusbar.phone.BiometricUnlockController;
import com.android.systemui.statusbar.phone.CentralSurfaces;
import com.android.systemui.statusbar.phone.DozeParameters;
import com.android.systemui.statusbar.phone.KeyguardBypassController;
@@ -94,6 +99,8 @@
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;
@@ -137,12 +144,16 @@
private @Mock AuthController mAuthController;
private @Mock ShadeExpansionStateManager mShadeExpansionStateManager;
private @Mock ShadeWindowLogger mShadeWindowLogger;
+ private @Captor ArgumentCaptor<KeyguardUpdateMonitorCallback>
+ mKeyguardUpdateMonitorCallbackCaptor;
private DeviceConfigProxy mDeviceConfig = new DeviceConfigProxyFake();
private FakeExecutor mUiBgExecutor = new FakeExecutor(new FakeSystemClock());
private FalsingCollectorFake mFalsingCollector;
private @Mock CentralSurfaces mCentralSurfaces;
+ private @Mock UiEventLogger mUiEventLogger;
+ private @Mock SessionTracker mSessionTracker;
private FakeFeatureFlags mFeatureFlags;
@@ -173,6 +184,24 @@
}
@Test
+ public void onLockdown_showKeyguard_evenIfKeyguardIsNotEnabledExternally() {
+ // GIVEN keyguard is not enabled and isn't showing
+ mViewMediator.onSystemReady();
+ mViewMediator.setKeyguardEnabled(false);
+ TestableLooper.get(this).processAllMessages();
+ captureKeyguardUpdateMonitorCallback();
+ assertFalse(mViewMediator.isShowingAndNotOccluded());
+
+ // WHEN lockdown occurs
+ when(mLockPatternUtils.isUserInLockdown(anyInt())).thenReturn(true);
+ mKeyguardUpdateMonitorCallbackCaptor.getValue().onStrongAuthStateChanged(0);
+
+ // THEN keyguard is shown
+ TestableLooper.get(this).processAllMessages();
+ assertTrue(mViewMediator.isShowingAndNotOccluded());
+ }
+
+ @Test
public void testOnGoingToSleep_UpdatesKeyguardGoingAway() {
mViewMediator.onStartedGoingToSleep(OFF_BECAUSE_OF_USER);
verify(mUpdateMonitor).dispatchKeyguardGoingAway(false);
@@ -543,9 +572,26 @@
assertTrue(mViewMediator.isShowingAndNotOccluded());
}
+ @Test
+ public void testOnStartedWakingUp_logsUiEvent() {
+ final InstanceId instanceId = InstanceId.fakeInstanceId(8);
+ when(mSessionTracker.getSessionId((anyInt()))).thenReturn(instanceId);
+ mViewMediator.onStartedWakingUp(PowerManager.WAKE_REASON_LIFT, false);
+
+ verify(mUiEventLogger).logWithInstanceIdAndPosition(
+ eq(BiometricUnlockController.BiometricUiEvent.STARTED_WAKING_UP),
+ anyInt(),
+ any(),
+ eq(instanceId),
+ eq(PowerManager.WAKE_REASON_LIFT)
+ );
+ }
+
private void createAndStartViewMediator() {
mViewMediator = new KeyguardViewMediator(
mContext,
+ mUiEventLogger,
+ mSessionTracker,
mUserTracker,
mFalsingCollector,
mLockPatternUtils,
@@ -579,4 +625,8 @@
mViewMediator.registerCentralSurfaces(mCentralSurfaces, null, null, null, null, null);
}
+
+ private void captureKeyguardUpdateMonitorCallback() {
+ verify(mUpdateMonitor).registerCallback(mKeyguardUpdateMonitorCallbackCaptor.capture());
+ }
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/DeviceEntryFaceAuthRepositoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/DeviceEntryFaceAuthRepositoryTest.kt
index d73c2c7..e61620b 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/DeviceEntryFaceAuthRepositoryTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/DeviceEntryFaceAuthRepositoryTest.kt
@@ -530,7 +530,6 @@
keyguardRepository.setWakefulnessModel(
WakefulnessModel(
state = WakefulnessState.STARTING_TO_SLEEP,
- isWakingUpOrAwake = false,
lastWakeReason = WakeSleepReason.OTHER,
lastSleepReason = WakeSleepReason.OTHER,
)
@@ -545,7 +544,6 @@
keyguardRepository.setWakefulnessModel(
WakefulnessModel(
state = WakefulnessState.ASLEEP,
- isWakingUpOrAwake = false,
lastWakeReason = WakeSleepReason.OTHER,
lastSleepReason = WakeSleepReason.OTHER,
)
@@ -682,7 +680,6 @@
keyguardRepository.setWakefulnessModel(
WakefulnessModel(
WakefulnessState.STARTING_TO_SLEEP,
- isWakingUpOrAwake = false,
lastWakeReason = WakeSleepReason.POWER_BUTTON,
lastSleepReason = WakeSleepReason.POWER_BUTTON
)
@@ -708,7 +705,6 @@
keyguardRepository.setWakefulnessModel(
WakefulnessModel(
WakefulnessState.ASLEEP,
- isWakingUpOrAwake = false,
lastWakeReason = WakeSleepReason.POWER_BUTTON,
lastSleepReason = WakeSleepReason.POWER_BUTTON
)
@@ -765,7 +761,6 @@
keyguardRepository.setWakefulnessModel(
WakefulnessModel(
state = WakefulnessState.STARTING_TO_SLEEP,
- isWakingUpOrAwake = false,
lastWakeReason = WakeSleepReason.OTHER,
lastSleepReason = WakeSleepReason.OTHER,
)
@@ -1006,7 +1001,6 @@
keyguardRepository.setWakefulnessModel(
WakefulnessModel(
WakefulnessState.STARTING_TO_WAKE,
- true,
WakeSleepReason.OTHER,
WakeSleepReason.OTHER
)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/KeyguardBouncerRepositoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/KeyguardBouncerRepositoryTest.kt
index 657ee20..b3104b7 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/KeyguardBouncerRepositoryTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/KeyguardBouncerRepositoryTest.kt
@@ -50,7 +50,6 @@
val testCoroutineScope = TestCoroutineScope()
underTest =
KeyguardBouncerRepositoryImpl(
- viewMediatorCallback,
systemClock,
testCoroutineScope,
bouncerLogger,
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/KeyguardRepositoryImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/KeyguardRepositoryImplTest.kt
index 4b4c7e9..4b797cb 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/KeyguardRepositoryImplTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/KeyguardRepositoryImplTest.kt
@@ -27,7 +27,6 @@
import com.android.systemui.biometrics.AuthController
import com.android.systemui.common.shared.model.Position
import com.android.systemui.coroutines.collectLastValue
-import com.android.systemui.doze.DozeHost
import com.android.systemui.doze.DozeMachine
import com.android.systemui.doze.DozeTransitionCallback
import com.android.systemui.doze.DozeTransitionListener
@@ -69,7 +68,6 @@
class KeyguardRepositoryImplTest : SysuiTestCase() {
@Mock private lateinit var statusBarStateController: StatusBarStateController
- @Mock private lateinit var dozeHost: DozeHost
@Mock private lateinit var keyguardStateController: KeyguardStateController
@Mock private lateinit var wakefulnessLifecycle: WakefulnessLifecycle
@Mock private lateinit var biometricUnlockController: BiometricUnlockController
@@ -91,7 +89,6 @@
underTest =
KeyguardRepositoryImpl(
statusBarStateController,
- dozeHost,
wakefulnessLifecycle,
biometricUnlockController,
keyguardStateController,
@@ -262,42 +259,21 @@
@Test
fun isDozing() =
testScope.runTest {
- var latest: Boolean? = null
- val job = underTest.isDozing.onEach { latest = it }.launchIn(this)
+ underTest.setIsDozing(true)
+ assertThat(underTest.isDozing.value).isEqualTo(true)
- runCurrent()
- val captor = argumentCaptor<DozeHost.Callback>()
- verify(dozeHost).addCallback(captor.capture())
-
- captor.value.onDozingChanged(true)
- runCurrent()
- assertThat(latest).isTrue()
-
- captor.value.onDozingChanged(false)
- runCurrent()
- assertThat(latest).isFalse()
-
- job.cancel()
- runCurrent()
- verify(dozeHost).removeCallback(captor.value)
+ underTest.setIsDozing(false)
+ assertThat(underTest.isDozing.value).isEqualTo(false)
}
@Test
fun isDozing_startsWithCorrectInitialValueForIsDozing() =
testScope.runTest {
- var latest: Boolean? = null
+ assertThat(underTest.lastDozeTapToWakePosition.value).isEqualTo(null)
- whenever(statusBarStateController.isDozing).thenReturn(true)
- var job = underTest.isDozing.onEach { latest = it }.launchIn(this)
- runCurrent()
- assertThat(latest).isTrue()
- job.cancel()
-
- whenever(statusBarStateController.isDozing).thenReturn(false)
- job = underTest.isDozing.onEach { latest = it }.launchIn(this)
- runCurrent()
- assertThat(latest).isFalse()
- job.cancel()
+ val expectedPoint = Point(100, 200)
+ underTest.setLastDozeTapToWakePosition(expectedPoint)
+ assertThat(underTest.lastDozeTapToWakePosition.value).isEqualTo(expectedPoint)
}
@Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/TrustRepositoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/TrustRepositoryTest.kt
index c2195c7..8611359 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/TrustRepositoryTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/TrustRepositoryTest.kt
@@ -23,6 +23,7 @@
import com.android.keyguard.logging.TrustRepositoryLogger
import com.android.systemui.RoboPilotTest
import com.android.systemui.SysuiTestCase
+import com.android.systemui.coroutines.FlowValue
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.log.LogBuffer
import com.android.systemui.log.LogcatEchoTracker
@@ -48,12 +49,14 @@
@RunWith(AndroidJUnit4::class)
class TrustRepositoryTest : SysuiTestCase() {
@Mock private lateinit var trustManager: TrustManager
- @Captor private lateinit var listenerCaptor: ArgumentCaptor<TrustManager.TrustListener>
+ @Captor private lateinit var listener: ArgumentCaptor<TrustManager.TrustListener>
private lateinit var userRepository: FakeUserRepository
private lateinit var testScope: TestScope
private val users = listOf(UserInfo(1, "user 1", 0), UserInfo(2, "user 1", 0))
private lateinit var underTest: TrustRepository
+ private lateinit var isCurrentUserTrusted: FlowValue<Boolean?>
+ private lateinit var isCurrentUserTrustManaged: FlowValue<Boolean?>
@Before
fun setUp() {
@@ -70,21 +73,90 @@
TrustRepositoryImpl(testScope.backgroundScope, userRepository, trustManager, logger)
}
+ fun TestScope.init() {
+ runCurrent()
+ verify(trustManager).registerTrustListener(listener.capture())
+ isCurrentUserTrustManaged = collectLastValue(underTest.isCurrentUserTrustManaged)
+ isCurrentUserTrusted = collectLastValue(underTest.isCurrentUserTrusted)
+ }
+
@Test
- fun isCurrentUserTrusted_whenTrustChanges_emitsLatestValue() =
+ fun isCurrentUserTrustManaged_whenItChanges_emitsLatestValue() =
testScope.runTest {
- runCurrent()
- verify(trustManager).registerTrustListener(listenerCaptor.capture())
- val listener = listenerCaptor.value
+ init()
val currentUserId = users[0].id
userRepository.setSelectedUserInfo(users[0])
- val isCurrentUserTrusted = collectLastValue(underTest.isCurrentUserTrusted)
- listener.onTrustChanged(true, false, currentUserId, 0, emptyList())
+ listener.value.onTrustManagedChanged(true, currentUserId)
+ assertThat(isCurrentUserTrustManaged()).isTrue()
+
+ listener.value.onTrustManagedChanged(false, currentUserId)
+
+ assertThat(isCurrentUserTrustManaged()).isFalse()
+ }
+
+ @Test
+ fun isCurrentUserTrustManaged_isFalse_byDefault() =
+ testScope.runTest {
+ runCurrent()
+
+ assertThat(collectLastValue(underTest.isCurrentUserTrustManaged)()).isFalse()
+ }
+
+ @Test
+ fun isCurrentUserTrustManaged_whenItChangesForDifferentUser_noops() =
+ testScope.runTest {
+ init()
+ userRepository.setSelectedUserInfo(users[0])
+
+ // current user's trust is managed.
+ listener.value.onTrustManagedChanged(true, users[0].id)
+ // some other user's trust is not managed.
+ listener.value.onTrustManagedChanged(false, users[1].id)
+
+ assertThat(isCurrentUserTrustManaged()).isTrue()
+ }
+
+ @Test
+ fun isCurrentUserTrustManaged_whenUserChangesWithoutRecentTrustChange_defaultsToFalse() =
+ testScope.runTest {
+ init()
+
+ userRepository.setSelectedUserInfo(users[0])
+ listener.value.onTrustManagedChanged(true, users[0].id)
+
+ userRepository.setSelectedUserInfo(users[1])
+
+ assertThat(isCurrentUserTrustManaged()).isFalse()
+ }
+
+ @Test
+ fun isCurrentUserTrustManaged_itChangesFirstBeforeUserInfoChanges_emitsCorrectValue() =
+ testScope.runTest {
+ init()
+ userRepository.setSelectedUserInfo(users[1])
+
+ listener.value.onTrustManagedChanged(true, users[0].id)
+ assertThat(isCurrentUserTrustManaged()).isFalse()
+
+ userRepository.setSelectedUserInfo(users[0])
+
+ assertThat(isCurrentUserTrustManaged()).isTrue()
+ }
+
+ @Test
+ fun isCurrentUserTrusted_whenTrustChanges_emitsLatestValue() =
+ testScope.runTest {
+ init()
+
+ val currentUserId = users[0].id
+ userRepository.setSelectedUserInfo(users[0])
+
+ listener.value.onTrustChanged(true, false, currentUserId, 0, emptyList())
assertThat(isCurrentUserTrusted()).isTrue()
- listener.onTrustChanged(false, false, currentUserId, 0, emptyList())
+ listener.value.onTrustChanged(false, false, currentUserId, 0, emptyList())
assertThat(isCurrentUserTrusted()).isFalse()
}
@@ -102,16 +174,14 @@
@Test
fun isCurrentUserTrusted_whenTrustChangesForDifferentUser_noop() =
testScope.runTest {
- runCurrent()
- verify(trustManager).registerTrustListener(listenerCaptor.capture())
- userRepository.setSelectedUserInfo(users[0])
- val listener = listenerCaptor.value
+ init()
- val isCurrentUserTrusted = collectLastValue(underTest.isCurrentUserTrusted)
+ userRepository.setSelectedUserInfo(users[0])
+
// current user is trusted.
- listener.onTrustChanged(true, true, users[0].id, 0, emptyList())
+ listener.value.onTrustChanged(true, true, users[0].id, 0, emptyList())
// some other user is not trusted.
- listener.onTrustChanged(false, false, users[1].id, 0, emptyList())
+ listener.value.onTrustChanged(false, false, users[1].id, 0, emptyList())
assertThat(isCurrentUserTrusted()).isTrue()
}
@@ -119,29 +189,24 @@
@Test
fun isCurrentUserTrusted_whenTrustChangesForCurrentUser_emitsNewValue() =
testScope.runTest {
- runCurrent()
- verify(trustManager).registerTrustListener(listenerCaptor.capture())
- val listener = listenerCaptor.value
+ init()
userRepository.setSelectedUserInfo(users[0])
- val isCurrentUserTrusted = collectLastValue(underTest.isCurrentUserTrusted)
- listener.onTrustChanged(true, true, users[0].id, 0, emptyList())
+ listener.value.onTrustChanged(true, true, users[0].id, 0, emptyList())
assertThat(isCurrentUserTrusted()).isTrue()
- listener.onTrustChanged(false, true, users[0].id, 0, emptyList())
+ listener.value.onTrustChanged(false, true, users[0].id, 0, emptyList())
assertThat(isCurrentUserTrusted()).isFalse()
}
@Test
fun isCurrentUserTrusted_whenUserChangesWithoutRecentTrustChange_defaultsToFalse() =
testScope.runTest {
- runCurrent()
- verify(trustManager).registerTrustListener(listenerCaptor.capture())
- val listener = listenerCaptor.value
- userRepository.setSelectedUserInfo(users[0])
- listener.onTrustChanged(true, true, users[0].id, 0, emptyList())
+ init()
- val isCurrentUserTrusted = collectLastValue(underTest.isCurrentUserTrusted)
+ userRepository.setSelectedUserInfo(users[0])
+ listener.value.onTrustChanged(true, true, users[0].id, 0, emptyList())
+
userRepository.setSelectedUserInfo(users[1])
assertThat(isCurrentUserTrusted()).isFalse()
@@ -150,12 +215,9 @@
@Test
fun isCurrentUserTrusted_trustChangesFirstBeforeUserInfoChanges_emitsCorrectValue() =
testScope.runTest {
- runCurrent()
- verify(trustManager).registerTrustListener(listenerCaptor.capture())
- val listener = listenerCaptor.value
- val isCurrentUserTrusted = collectLastValue(underTest.isCurrentUserTrusted)
+ init()
- listener.onTrustChanged(true, true, users[0].id, 0, emptyList())
+ listener.value.onTrustChanged(true, true, users[0].id, 0, emptyList())
assertThat(isCurrentUserTrusted()).isFalse()
userRepository.setSelectedUserInfo(users[0])
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/AlternateBouncerInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/AlternateBouncerInteractorTest.kt
index 2180a8f..ca6b8d5 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/AlternateBouncerInteractorTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/AlternateBouncerInteractorTest.kt
@@ -18,7 +18,6 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
-import com.android.keyguard.ViewMediatorCallback
import com.android.systemui.RoboPilotTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.keyguard.data.repository.FakeBiometricSettingsRepository
@@ -39,7 +38,6 @@
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mock
-import org.mockito.Mockito.mock
import org.mockito.MockitoAnnotations
@OptIn(ExperimentalCoroutinesApi::class)
@@ -62,7 +60,6 @@
MockitoAnnotations.initMocks(this)
bouncerRepository =
KeyguardBouncerRepositoryImpl(
- mock(ViewMediatorCallback::class.java),
FakeSystemClock(),
TestCoroutineScope(),
bouncerLogger,
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractorTest.kt
index 4b7c641..3336e3b 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractorTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractorTest.kt
@@ -313,7 +313,7 @@
@Test
fun quickAffordance_bottomStartAffordanceHiddenWhileDozing() =
testScope.runTest {
- repository.setDozing(true)
+ repository.setIsDozing(true)
homeControls.setState(
KeyguardQuickAffordanceConfig.LockScreenState.Visible(
icon = ICON,
@@ -348,7 +348,7 @@
fun quickAffordanceAlwaysVisible_evenWhenLockScreenNotShowingAndDozing() =
testScope.runTest {
repository.setKeyguardShowing(false)
- repository.setDozing(true)
+ repository.setIsDozing(true)
val configKey = BuiltInKeyguardQuickAffordanceKeys.HOME_CONTROLS
homeControls.setState(
KeyguardQuickAffordanceConfig.LockScreenState.Visible(
@@ -623,7 +623,7 @@
testScope.runTest {
featureFlags.set(Flags.CUSTOMIZABLE_LOCK_SCREEN_QUICK_AFFORDANCES, true)
dockManager.setIsDocked(false)
- val firstUseLongPress by collectLastValue (underTest.useLongPress())
+ val firstUseLongPress by collectLastValue(underTest.useLongPress())
runCurrent()
assertThat(firstUseLongPress).isTrue()
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionScenariosTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionScenariosTest.kt
index 344df0ac..603f199 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionScenariosTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionScenariosTest.kt
@@ -871,7 +871,6 @@
private fun startingToWake() =
WakefulnessModel(
WakefulnessState.STARTING_TO_WAKE,
- true,
WakeSleepReason.OTHER,
WakeSleepReason.OTHER
)
@@ -879,7 +878,6 @@
private fun startingToSleep() =
WakefulnessModel(
WakefulnessState.STARTING_TO_SLEEP,
- true,
WakeSleepReason.OTHER,
WakeSleepReason.OTHER
)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBottomAreaViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBottomAreaViewModelTest.kt
index 5eec8a8..69d43af 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBottomAreaViewModelTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBottomAreaViewModelTest.kt
@@ -505,9 +505,9 @@
val value = collectLastValue(underTest.isOverlayContainerVisible)
assertThat(value()).isTrue()
- repository.setDozing(true)
+ repository.setIsDozing(true)
assertThat(value()).isFalse()
- repository.setDozing(false)
+ repository.setIsDozing(false)
assertThat(value()).isTrue()
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputAdapterTest.java b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputAdapterTest.java
index 7f7952f..faca8a91d 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputAdapterTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputAdapterTest.java
@@ -26,6 +26,7 @@
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -34,6 +35,7 @@
import android.graphics.Bitmap;
import android.graphics.drawable.Icon;
import android.testing.AndroidTestingRunner;
+import android.testing.TestableLooper;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.SeekBar;
@@ -60,6 +62,7 @@
@SmallTest
@RunWith(AndroidTestingRunner.class)
+@TestableLooper.RunWithLooper(setAsMainLooper = true)
public class MediaOutputAdapterTest extends SysuiTestCase {
private static final String TEST_DEVICE_NAME_1 = "test_device_name_1";
@@ -116,6 +119,7 @@
mMediaItems.add(new MediaItem(mMediaDevice2));
mMediaOutputAdapter = new MediaOutputAdapter(mMediaOutputController);
+ mMediaOutputAdapter.updateItems();
mViewHolder = (MediaOutputAdapter.MediaDeviceViewHolder) mMediaOutputAdapter
.onCreateViewHolder(new LinearLayout(mContext), 0);
mSpyMediaOutputSeekbar = spy(mViewHolder.mSeekBar);
@@ -202,9 +206,11 @@
public void advanced_onBindViewHolder_bindPairNew_verifyView() {
when(mMediaOutputController.isAdvancedLayoutSupported()).thenReturn(true);
mMediaOutputAdapter = new MediaOutputAdapter(mMediaOutputController);
+ mMediaOutputAdapter.updateItems();
mViewHolder = (MediaOutputAdapter.MediaDeviceViewHolder) mMediaOutputAdapter
.onCreateViewHolder(new LinearLayout(mContext), 0);
mMediaItems.add(new MediaItem());
+ mMediaOutputAdapter.updateItems();
mMediaOutputAdapter.onBindViewHolder(mViewHolder, 2);
assertThat(mViewHolder.mTitleText.getVisibility()).isEqualTo(View.VISIBLE);
@@ -223,6 +229,7 @@
Collectors.toList()));
when(mMediaOutputController.getSessionName()).thenReturn(TEST_SESSION_NAME);
mMediaOutputAdapter = new MediaOutputAdapter(mMediaOutputController);
+ mMediaOutputAdapter.updateItems();
mViewHolder = (MediaOutputAdapter.MediaDeviceViewHolder) mMediaOutputAdapter
.onCreateViewHolder(new LinearLayout(mContext), 0);
mMediaOutputAdapter.getItemCount();
@@ -243,6 +250,7 @@
Collectors.toList()));
when(mMediaOutputController.getSessionName()).thenReturn(null);
mMediaOutputAdapter = new MediaOutputAdapter(mMediaOutputController);
+ mMediaOutputAdapter.updateItems();
mViewHolder = (MediaOutputAdapter.MediaDeviceViewHolder) mMediaOutputAdapter
.onCreateViewHolder(new LinearLayout(mContext), 0);
mMediaOutputAdapter.getItemCount();
@@ -602,9 +610,11 @@
public void advanced_onItemClick_clickPairNew_verifyLaunchBluetoothPairing() {
when(mMediaOutputController.isAdvancedLayoutSupported()).thenReturn(true);
mMediaOutputAdapter = new MediaOutputAdapter(mMediaOutputController);
+ mMediaOutputAdapter.updateItems();
mViewHolder = (MediaOutputAdapter.MediaDeviceViewHolder) mMediaOutputAdapter
.onCreateViewHolder(new LinearLayout(mContext), 0);
mMediaItems.add(new MediaItem());
+ mMediaOutputAdapter.updateItems();
mMediaOutputAdapter.onBindViewHolder(mViewHolder, 2);
mViewHolder.mContainerLayout.performClick();
@@ -613,6 +623,7 @@
@Test
public void onItemClick_clickDevice_verifyConnectDevice() {
+ when(mMediaOutputController.isCurrentOutputDeviceHasSessionOngoing()).thenReturn(false);
assertThat(mMediaDevice2.getState()).isEqualTo(
LocalMediaManager.MediaDeviceState.STATE_DISCONNECTED);
mMediaOutputAdapter.onBindViewHolder(mViewHolder, 0);
@@ -623,6 +634,21 @@
}
@Test
+ public void onItemClick_clickDeviceWithSessionOngoing_verifyShowsDialog() {
+ when(mMediaOutputController.isCurrentOutputDeviceHasSessionOngoing()).thenReturn(true);
+ assertThat(mMediaDevice2.getState()).isEqualTo(
+ LocalMediaManager.MediaDeviceState.STATE_DISCONNECTED);
+ MediaOutputAdapter.MediaDeviceViewHolder spyMediaDeviceViewHolder = spy(mViewHolder);
+
+ mMediaOutputAdapter.onBindViewHolder(spyMediaDeviceViewHolder, 0);
+ mMediaOutputAdapter.onBindViewHolder(spyMediaDeviceViewHolder, 1);
+ spyMediaDeviceViewHolder.mContainerLayout.performClick();
+
+ verify(mMediaOutputController, never()).connectDevice(mMediaDevice2);
+ verify(spyMediaDeviceViewHolder).showCustomEndSessionDialog(mMediaDevice2);
+ }
+
+ @Test
public void onItemClick_clicksWithMutingExpectedDeviceExist_cancelsMuteAwaitConnection() {
when(mMediaOutputController.isAnyDeviceTransferring()).thenReturn(false);
when(mMediaOutputController.hasMutingExpectedDevice()).thenReturn(true);
@@ -700,6 +726,7 @@
mMediaItems.stream().map((item) -> item.getMediaDevice().get()).collect(
Collectors.toList()));
mMediaOutputAdapter = new MediaOutputAdapter(mMediaOutputController);
+ mMediaOutputAdapter.updateItems();
mViewHolder = (MediaOutputAdapter.MediaDeviceViewHolder) mMediaOutputAdapter
.onCreateViewHolder(new LinearLayout(mContext), 0);
List<MediaDevice> selectableDevices = new ArrayList<>();
@@ -734,4 +761,18 @@
verify(mMediaOutputController).setCurrentColorScheme(wallpaperColors, true);
}
+
+ @Test
+ public void updateItems_controllerItemsUpdated_notUpdatesInAdapterUntilUpdateItems() {
+ when(mMediaOutputController.isAdvancedLayoutSupported()).thenReturn(true);
+ mMediaOutputAdapter.updateItems();
+ List<MediaItem> updatedList = new ArrayList<>();
+ updatedList.add(new MediaItem());
+ when(mMediaOutputController.getMediaItemList()).thenReturn(updatedList);
+ assertThat(mMediaOutputAdapter.getItemCount()).isEqualTo(mMediaItems.size());
+
+ mMediaOutputAdapter.updateItems();
+
+ assertThat(mMediaOutputAdapter.getItemCount()).isEqualTo(updatedList.size());
+ }
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputBaseDialogTest.java b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputBaseDialogTest.java
index f206409..480d59c 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputBaseDialogTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputBaseDialogTest.java
@@ -239,7 +239,7 @@
when(mMediaOutputBaseAdapter.isDragging()).thenReturn(false);
mMediaOutputBaseDialogImpl.refresh();
- verify(mMediaOutputBaseAdapter).notifyDataSetChanged();
+ verify(mMediaOutputBaseAdapter).updateItems();
}
@Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputDialogTest.java b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputDialogTest.java
index 21a7a34..425d0bc 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputDialogTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputDialogTest.java
@@ -39,6 +39,7 @@
import android.util.FeatureFlagUtils;
import android.view.View;
+import androidx.annotation.NonNull;
import androidx.test.filters.MediumTest;
import com.android.internal.logging.UiEventLogger;
@@ -64,6 +65,7 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
+import java.util.function.Consumer;
@MediumTest
@RunWith(AndroidTestingRunner.class)
@@ -89,7 +91,7 @@
private final UiEventLogger mUiEventLogger = mock(UiEventLogger.class);
private final DialogLaunchAnimator mDialogLaunchAnimator = mock(DialogLaunchAnimator.class);
private final MediaMetadata mMediaMetadata = mock(MediaMetadata.class);
- private final MediaDescription mMediaDescription = mock(MediaDescription.class);
+ private final MediaDescription mMediaDescription = mock(MediaDescription.class);
private final NearbyMediaDevicesManager mNearbyMediaDevicesManager = mock(
NearbyMediaDevicesManager.class);
private final AudioManager mAudioManager = mock(AudioManager.class);
@@ -102,6 +104,11 @@
private MediaOutputController mMediaOutputController;
private final List<String> mFeatures = new ArrayList<>();
+ @Override
+ protected boolean shouldFailOnLeakedReceiver() {
+ return true;
+ }
+
@Before
public void setUp() {
when(mLocalBluetoothManager.getProfileManager()).thenReturn(mLocalBluetoothProfileManager);
@@ -120,8 +127,7 @@
Optional.of(mNearbyMediaDevicesManager), mAudioManager, mPowerExemptionManager,
mKeyguardManager, mFlags);
mMediaOutputController.mLocalMediaManager = mLocalMediaManager;
- mMediaOutputDialog = new MediaOutputDialog(mContext, false, mBroadcastSender,
- mMediaOutputController, mUiEventLogger);
+ mMediaOutputDialog = makeTestDialog(mMediaOutputController);
mMediaOutputDialog.show();
when(mLocalMediaManager.getCurrentConnectedDevice()).thenReturn(mMediaDevice);
@@ -130,7 +136,7 @@
@After
public void tearDown() {
- mMediaOutputDialog.dismissDialog();
+ mMediaOutputDialog.dismiss();
}
@Test
@@ -311,11 +317,9 @@
MediaOutputController mockMediaOutputController = mock(MediaOutputController.class);
when(mockMediaOutputController.isBroadcastSupported()).thenReturn(false);
- MediaOutputDialog testDialog = new MediaOutputDialog(mContext, false, mBroadcastSender,
- mockMediaOutputController, mUiEventLogger);
- testDialog.show();
-
- assertThat(testDialog.getStopButtonText().toString()).isEqualTo(stopText);
+ withTestDialog(mockMediaOutputController, testDialog -> {
+ assertThat(testDialog.getStopButtonText().toString()).isEqualTo(stopText);
+ });
}
@Test
@@ -328,11 +332,9 @@
when(mockMediaOutputController.isBluetoothLeDevice(any())).thenReturn(true);
when(mockMediaOutputController.isPlaying()).thenReturn(true);
when(mockMediaOutputController.isBluetoothLeBroadcastEnabled()).thenReturn(false);
- MediaOutputDialog testDialog = new MediaOutputDialog(mContext, false, mBroadcastSender,
- mockMediaOutputController, mUiEventLogger);
- testDialog.show();
-
- assertThat(testDialog.getStopButtonText().toString()).isEqualTo(stopText);
+ withTestDialog(mockMediaOutputController, testDialog -> {
+ assertThat(testDialog.getStopButtonText().toString()).isEqualTo(stopText);
+ });
}
@Test
@@ -341,11 +343,9 @@
when(mockMediaOutputController.isBroadcastSupported()).thenReturn(false);
when(mockMediaOutputController.getCurrentConnectedMediaDevice()).thenReturn(null);
when(mockMediaOutputController.isPlaying()).thenReturn(false);
- MediaOutputDialog testDialog = new MediaOutputDialog(mContext, false, mBroadcastSender,
- mockMediaOutputController, mUiEventLogger);
- testDialog.show();
-
- testDialog.onStopButtonClick();
+ withTestDialog(mockMediaOutputController, testDialog -> {
+ testDialog.onStopButtonClick();
+ });
verify(mockMediaOutputController).releaseSession();
}
@@ -354,13 +354,22 @@
// Check the visibility metric logging by creating a new MediaOutput dialog,
// and verify if the calling times increases.
public void onCreate_ShouldLogVisibility() {
- MediaOutputDialog testDialog = new MediaOutputDialog(mContext, false, mBroadcastSender,
- mMediaOutputController, mUiEventLogger);
- testDialog.show();
-
- testDialog.dismissDialog();
+ withTestDialog(mMediaOutputController, testDialog -> {});
verify(mUiEventLogger, times(2))
.log(MediaOutputDialog.MediaOutputEvent.MEDIA_OUTPUT_DIALOG_SHOW);
}
+
+ @NonNull
+ private MediaOutputDialog makeTestDialog(MediaOutputController controller) {
+ return new MediaOutputDialog(mContext, false, mBroadcastSender,
+ controller, mUiEventLogger);
+ }
+
+ private void withTestDialog(MediaOutputController controller, Consumer<MediaOutputDialog> c) {
+ MediaOutputDialog testDialog = makeTestDialog(controller);
+ testDialog.show();
+ c.accept(testDialog);
+ testDialog.dismiss();
+ }
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/notetask/NoteTaskControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/notetask/NoteTaskControllerTest.kt
index 5f89705..bd7898a 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/notetask/NoteTaskControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/notetask/NoteTaskControllerTest.kt
@@ -45,11 +45,11 @@
import com.android.systemui.R
import com.android.systemui.SysuiTestCase
import com.android.systemui.notetask.NoteTaskController.Companion.EXTRA_SHORTCUT_BADGE_OVERRIDE_PACKAGE
-import com.android.systemui.notetask.NoteTaskController.Companion.SETTINGS_CREATE_NOTE_TASK_SHORTCUT_COMPONENT
import com.android.systemui.notetask.NoteTaskController.Companion.SHORTCUT_ID
import com.android.systemui.notetask.NoteTaskEntryPoint.APP_CLIPS
import com.android.systemui.notetask.NoteTaskEntryPoint.QUICK_AFFORDANCE
import com.android.systemui.notetask.NoteTaskEntryPoint.TAIL_BUTTON
+import com.android.systemui.notetask.shortcut.CreateNoteTaskShortcutActivity
import com.android.systemui.notetask.shortcut.LaunchNoteTaskActivity
import com.android.systemui.notetask.shortcut.LaunchNoteTaskManagedProfileProxyActivity
import com.android.systemui.settings.FakeUserTracker
@@ -427,7 +427,8 @@
eq(PackageManager.DONT_KILL_APP),
)
- assertThat(argument.value).isEqualTo(SETTINGS_CREATE_NOTE_TASK_SHORTCUT_COMPONENT)
+ assertThat(argument.value.className)
+ .isEqualTo(CreateNoteTaskShortcutActivity::class.java.name)
}
@Test
@@ -441,7 +442,9 @@
eq(COMPONENT_ENABLED_STATE_DISABLED),
eq(PackageManager.DONT_KILL_APP),
)
- assertThat(argument.value).isEqualTo(SETTINGS_CREATE_NOTE_TASK_SHORTCUT_COMPONENT)
+
+ assertThat(argument.value.className)
+ .isEqualTo(CreateNoteTaskShortcutActivity::class.java.name)
}
@Test
@@ -460,7 +463,9 @@
eq(COMPONENT_ENABLED_STATE_ENABLED),
eq(PackageManager.DONT_KILL_APP),
)
- assertThat(argument.value).isEqualTo(SETTINGS_CREATE_NOTE_TASK_SHORTCUT_COMPONENT)
+
+ assertThat(argument.value.className)
+ .isEqualTo(CreateNoteTaskShortcutActivity::class.java.name)
}
@Test
@@ -480,7 +485,9 @@
eq(COMPONENT_ENABLED_STATE_DISABLED),
eq(PackageManager.DONT_KILL_APP),
)
- assertThat(argument.value).isEqualTo(SETTINGS_CREATE_NOTE_TASK_SHORTCUT_COMPONENT)
+
+ assertThat(argument.value.className)
+ .isEqualTo(CreateNoteTaskShortcutActivity::class.java.name)
}
// endregion
@@ -664,7 +671,8 @@
eq(COMPONENT_ENABLED_STATE_ENABLED),
eq(PackageManager.DONT_KILL_APP),
)
- assertThat(actualComponent.value).isEqualTo(SETTINGS_CREATE_NOTE_TASK_SHORTCUT_COMPONENT)
+ assertThat(actualComponent.value.className)
+ .isEqualTo(CreateNoteTaskShortcutActivity::class.java.name)
verify(shortcutManager, never()).disableShortcuts(any())
verify(shortcutManager).enableShortcuts(listOf(SHORTCUT_ID))
val actualShortcuts = argumentCaptor<List<ShortcutInfo>>()
@@ -695,7 +703,8 @@
eq(COMPONENT_ENABLED_STATE_DISABLED),
eq(PackageManager.DONT_KILL_APP),
)
- assertThat(argument.value).isEqualTo(SETTINGS_CREATE_NOTE_TASK_SHORTCUT_COMPONENT)
+ assertThat(argument.value.className)
+ .isEqualTo(CreateNoteTaskShortcutActivity::class.java.name)
verify(shortcutManager).disableShortcuts(listOf(SHORTCUT_ID))
verify(shortcutManager, never()).enableShortcuts(any())
verify(shortcutManager, never()).updateShortcuts(any())
@@ -712,7 +721,8 @@
eq(COMPONENT_ENABLED_STATE_DISABLED),
eq(PackageManager.DONT_KILL_APP),
)
- assertThat(argument.value).isEqualTo(SETTINGS_CREATE_NOTE_TASK_SHORTCUT_COMPONENT)
+ assertThat(argument.value.className)
+ .isEqualTo(CreateNoteTaskShortcutActivity::class.java.name)
verify(shortcutManager).disableShortcuts(listOf(SHORTCUT_ID))
verify(shortcutManager, never()).enableShortcuts(any())
verify(shortcutManager, never()).updateShortcuts(any())
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSTileHostTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSTileHostTest.java
index e4d8b25..810ab34 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSTileHostTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSTileHostTest.java
@@ -145,7 +145,8 @@
mMainExecutor = new FakeExecutor(new FakeSystemClock());
mSharedPreferencesByUser = new SparseArray<>();
- when(mTileLifecycleManagerFactory.create(any(Intent.class), any(UserHandle.class)))
+ when(mTileLifecycleManagerFactory
+ .create(any(Intent.class), any(UserHandle.class)))
.thenReturn(mTileLifecycleManager);
when(mUserFileManager.getSharedPreferences(anyString(), anyInt(), anyInt()))
.thenAnswer((Answer<SharedPreferences>) invocation -> {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileLifecycleManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileLifecycleManagerTest.java
index 2e6b0cf..67587e3 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileLifecycleManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileLifecycleManagerTest.java
@@ -60,6 +60,8 @@
import com.android.systemui.SysuiTestCase;
import com.android.systemui.broadcast.BroadcastDispatcher;
+import com.android.systemui.util.concurrency.FakeExecutor;
+import com.android.systemui.util.time.FakeSystemClock;
import org.junit.After;
import org.junit.Before;
@@ -81,6 +83,7 @@
private ComponentName mTileServiceComponentName;
private Intent mTileServiceIntent;
private UserHandle mUser;
+ private FakeExecutor mExecutor;
private HandlerThread mThread;
private Handler mHandler;
private TileLifecycleManager mStateManager;
@@ -109,12 +112,14 @@
mThread = new HandlerThread("TestThread");
mThread.start();
mHandler = Handler.createAsync(mThread.getLooper());
+ mExecutor = new FakeExecutor(new FakeSystemClock());
mStateManager = new TileLifecycleManager(mHandler, mWrappedContext,
mock(IQSService.class),
mMockPackageManagerAdapter,
mMockBroadcastDispatcher,
mTileServiceIntent,
- mUser);
+ mUser,
+ mExecutor);
}
@After
@@ -152,7 +157,8 @@
@Test
public void testBind() {
- mStateManager.setBindService(true);
+ mStateManager.executeSetBindService(true);
+ mExecutor.runAllReady();
verifyBind(1);
}
@@ -160,7 +166,8 @@
public void testPackageReceiverExported() throws Exception {
// Make sure that we register a receiver
setPackageEnabled(false);
- mStateManager.setBindService(true);
+ mStateManager.executeSetBindService(true);
+ mExecutor.runAllReady();
IntentFilter filter = mWrappedContext.mLastIntentFilter;
assertTrue(filter.hasAction(Intent.ACTION_PACKAGE_ADDED));
assertTrue(filter.hasAction(Intent.ACTION_PACKAGE_CHANGED));
@@ -170,14 +177,17 @@
@Test
public void testUnbind() {
- mStateManager.setBindService(true);
- mStateManager.setBindService(false);
+ mStateManager.executeSetBindService(true);
+ mExecutor.runAllReady();
+ mStateManager.executeSetBindService(false);
+ mExecutor.runAllReady();
assertFalse(mContext.isBound(mTileServiceComponentName));
}
@Test
public void testTileServiceCallbacks() throws Exception {
- mStateManager.setBindService(true);
+ mStateManager.executeSetBindService(true);
+ mExecutor.runAllReady();
mStateManager.onTileAdded();
verify(mMockTileService).onTileAdded();
mStateManager.onStartListening();
@@ -193,7 +203,8 @@
@Test
public void testAddedBeforeBind() throws Exception {
mStateManager.onTileAdded();
- mStateManager.setBindService(true);
+ mStateManager.executeSetBindService(true);
+ mExecutor.runAllReady();
verifyBind(1);
verify(mMockTileService).onTileAdded();
@@ -203,7 +214,8 @@
public void testListeningBeforeBind() throws Exception {
mStateManager.onTileAdded();
mStateManager.onStartListening();
- mStateManager.setBindService(true);
+ mStateManager.executeSetBindService(true);
+ mExecutor.runAllReady();
verifyBind(1);
verify(mMockTileService).onTileAdded();
@@ -215,7 +227,8 @@
mStateManager.onTileAdded();
mStateManager.onStartListening();
mStateManager.onClick(null);
- mStateManager.setBindService(true);
+ mStateManager.executeSetBindService(true);
+ mExecutor.runAllReady();
verifyBind(1);
verify(mMockTileService).onTileAdded();
@@ -228,10 +241,12 @@
mStateManager.onTileAdded();
mStateManager.onStartListening();
mStateManager.onStopListening();
- mStateManager.setBindService(true);
+ mStateManager.executeSetBindService(true);
+ mExecutor.runAllReady();
verifyBind(1);
- mStateManager.setBindService(false);
+ mStateManager.executeSetBindService(false);
+ mExecutor.runAllReady();
assertFalse(mContext.isBound(mTileServiceComponentName));
verify(mMockTileService, never()).onStartListening();
}
@@ -242,10 +257,12 @@
mStateManager.onStartListening();
mStateManager.onClick(null);
mStateManager.onStopListening();
- mStateManager.setBindService(true);
+ mStateManager.executeSetBindService(true);
+ mExecutor.runAllReady();
verifyBind(1);
- mStateManager.setBindService(false);
+ mStateManager.executeSetBindService(false);
+ mExecutor.runAllReady();
assertFalse(mContext.isBound(mTileServiceComponentName));
verify(mMockTileService, never()).onClick(null);
}
@@ -255,7 +272,8 @@
mStateManager.onTileAdded();
mStateManager.onStartListening();
setPackageEnabled(false);
- mStateManager.setBindService(true);
+ mStateManager.executeSetBindService(true);
+ mExecutor.runAllReady();
// Package not available, not yet created.
verifyBind(0);
@@ -267,18 +285,19 @@
Intent.ACTION_PACKAGE_CHANGED,
Uri.fromParts(
"package", mTileServiceComponentName.getPackageName(), null)));
+ mExecutor.runAllReady();
verifyBind(1);
}
@Test
public void testKillProcess() throws Exception {
mStateManager.onStartListening();
- mStateManager.setBindService(true);
+ mStateManager.executeSetBindService(true);
+ mExecutor.runAllReady();
mStateManager.setBindRetryDelay(0);
+ mExecutor.runAllReady();
mStateManager.onServiceDisconnected(mTileServiceComponentName);
-
- // Guarantees mHandler has processed all messages.
- assertTrue(mHandler.runWithScissors(()->{}, TEST_FAIL_TIMEOUT));
+ mExecutor.runAllReady();
// Two calls: one for the first bind, one for the restart.
verifyBind(2);
@@ -299,9 +318,11 @@
mMockPackageManagerAdapter,
mMockBroadcastDispatcher,
mTileServiceIntent,
- mUser);
+ mUser,
+ mExecutor);
- manager.setBindService(true);
+ manager.executeSetBindService(true);
+ mExecutor.runAllReady();
ArgumentCaptor<ServiceConnection> captor = ArgumentCaptor.forClass(ServiceConnection.class);
verify(falseContext).bindServiceAsUser(any(), captor.capture(), anyInt(), any());
@@ -318,9 +339,11 @@
mMockPackageManagerAdapter,
mMockBroadcastDispatcher,
mTileServiceIntent,
- mUser);
+ mUser,
+ mExecutor);
- manager.setBindService(true);
+ manager.executeSetBindService(true);
+ mExecutor.runAllReady();
int flags = Context.BIND_AUTO_CREATE
| Context.BIND_FOREGROUND_SERVICE_WHILE_AWAKE
| Context.BIND_WAIVE_PRIORITY;
@@ -337,9 +360,11 @@
mMockPackageManagerAdapter,
mMockBroadcastDispatcher,
mTileServiceIntent,
- mUser);
+ mUser,
+ mExecutor);
- manager.setBindService(true);
+ manager.executeSetBindService(true);
+ mExecutor.runAllReady();
int flags = Context.BIND_AUTO_CREATE
| Context.BIND_FOREGROUND_SERVICE_WHILE_AWAKE
| Context.BIND_ALLOW_BACKGROUND_ACTIVITY_STARTS
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServiceManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServiceManagerTest.java
index 9ca7a85..28331bb 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServiceManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServiceManagerTest.java
@@ -187,7 +187,7 @@
mTileServiceManager.setBindAllowed(true);
ArgumentCaptor<Boolean> captor = ArgumentCaptor.forClass(Boolean.class);
- verify(mTileLifecycle, times(1)).setBindService(captor.capture());
+ verify(mTileLifecycle, times(1)).executeSetBindService(captor.capture());
assertTrue((boolean) captor.getValue());
mTileServiceManager.setBindRequested(false);
@@ -198,7 +198,7 @@
mTileServiceManager.setBindAllowed(false);
captor = ArgumentCaptor.forClass(Boolean.class);
- verify(mTileLifecycle, times(2)).setBindService(captor.capture());
+ verify(mTileLifecycle, times(2)).executeSetBindService(captor.capture());
assertFalse((boolean) captor.getValue());
}
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServicesTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServicesTest.java
index 12b5656..4bc16a5 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServicesTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServicesTest.java
@@ -48,6 +48,9 @@
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.phone.StatusBarIconController;
import com.android.systemui.statusbar.policy.KeyguardStateController;
+import com.android.systemui.util.concurrency.DelayableExecutor;
+import com.android.systemui.util.concurrency.FakeExecutor;
+import com.android.systemui.util.time.FakeSystemClock;
import org.junit.After;
import org.junit.Assert;
@@ -118,7 +121,8 @@
mTileService = new TestTileServices(mQSHost, provider, mBroadcastDispatcher,
mUserTracker, mKeyguardStateController, mCommandQueue, mStatusBarIconController,
- mPanelInteractor, mCustomTileAddedRepository);
+ mPanelInteractor, mCustomTileAddedRepository,
+ new FakeExecutor(new FakeSystemClock()));
}
@After
@@ -297,10 +301,10 @@
BroadcastDispatcher broadcastDispatcher, UserTracker userTracker,
KeyguardStateController keyguardStateController, CommandQueue commandQueue,
StatusBarIconController statusBarIconController, PanelInteractor panelInteractor,
- CustomTileAddedRepository customTileAddedRepository) {
+ CustomTileAddedRepository customTileAddedRepository, DelayableExecutor executor) {
super(host, handlerProvider, broadcastDispatcher, userTracker, keyguardStateController,
commandQueue, statusBarIconController, panelInteractor,
- customTileAddedRepository);
+ customTileAddedRepository, executor);
}
@Override
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/QuickAccessWalletTileTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/QuickAccessWalletTileTest.java
index b089e38..b00ae39 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/QuickAccessWalletTileTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/QuickAccessWalletTileTest.java
@@ -93,6 +93,8 @@
private static final String CARD_DESCRIPTION = "•••• 1234";
private static final Icon CARD_IMAGE =
Icon.createWithBitmap(Bitmap.createBitmap(70, 50, Bitmap.Config.ARGB_8888));
+ private static final int PRIMARY_USER_ID = 0;
+ private static final int SECONDARY_USER_ID = 10;
private final Drawable mTileIcon = mContext.getDrawable(R.drawable.ic_qs_wallet);
private final Intent mWalletIntent = new Intent(QuickAccessWalletService.ACTION_VIEW_WALLET)
@@ -120,6 +122,8 @@
private SecureSettings mSecureSettings;
@Mock
private QuickAccessWalletController mController;
+ @Mock
+ private Icon mCardImage;
@Captor
ArgumentCaptor<QuickAccessWalletClient.OnWalletCardsRetrievedCallback> mCallbackCaptor;
@@ -142,6 +146,8 @@
when(mQuickAccessWalletClient.isWalletServiceAvailable()).thenReturn(true);
when(mQuickAccessWalletClient.isWalletFeatureAvailableWhenDeviceLocked()).thenReturn(true);
when(mController.getWalletClient()).thenReturn(mQuickAccessWalletClient);
+ when(mCardImage.getType()).thenReturn(Icon.TYPE_URI);
+ when(mCardImage.loadDrawableAsUser(any(), eq(SECONDARY_USER_ID))).thenReturn(null);
mTile = new QuickAccessWalletTile(
mHost,
@@ -382,6 +388,28 @@
}
@Test
+ public void testQueryCards_notCurrentUser_hasCards_noSideViewDrawable() {
+ when(mKeyguardStateController.isUnlocked()).thenReturn(true);
+
+ PendingIntent pendingIntent =
+ PendingIntent.getActivity(mContext, 0, mWalletIntent, PendingIntent.FLAG_IMMUTABLE);
+ WalletCard walletCard =
+ new WalletCard.Builder(
+ CARD_ID, mCardImage, CARD_DESCRIPTION, pendingIntent).build();
+ GetWalletCardsResponse response =
+ new GetWalletCardsResponse(Collections.singletonList(walletCard), 0);
+
+ mTile.handleSetListening(true);
+
+ verify(mController).queryWalletCards(mCallbackCaptor.capture());
+
+ mCallbackCaptor.getValue().onWalletCardsRetrieved(response);
+ mTestableLooper.processAllMessages();
+
+ assertNull(mTile.getState().sideViewCustomDrawable);
+ }
+
+ @Test
public void testQueryCards_noCards_notUpdateSideViewDrawable() {
setUpWalletCard(/* hasCard= */ false);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/scene/data/repository/Fakes.kt b/packages/SystemUI/tests/src/com/android/systemui/scene/data/repository/Fakes.kt
new file mode 100644
index 0000000..1cdaec0
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/scene/data/repository/Fakes.kt
@@ -0,0 +1,51 @@
+/*
+ * 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.scene.data.repository
+
+import com.android.systemui.scene.data.model.SceneContainerConfig
+import com.android.systemui.scene.shared.model.SceneKey
+
+fun fakeSceneContainerRepository(
+ containerConfigurations: Set<SceneContainerConfig> =
+ setOf(
+ fakeSceneContainerConfig("container1"),
+ fakeSceneContainerConfig("container2"),
+ )
+): SceneContainerRepository {
+ return SceneContainerRepository(containerConfigurations)
+}
+
+fun fakeSceneKeys(): List<SceneKey> {
+ return listOf(
+ SceneKey.QuickSettings,
+ SceneKey.Shade,
+ SceneKey.LockScreen,
+ SceneKey.Bouncer,
+ SceneKey.Gone,
+ )
+}
+
+fun fakeSceneContainerConfig(
+ name: String,
+ sceneKeys: List<SceneKey> = fakeSceneKeys(),
+): SceneContainerConfig {
+ return SceneContainerConfig(
+ name = name,
+ sceneKeys = sceneKeys,
+ initialSceneKey = SceneKey.LockScreen,
+ )
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/scene/data/repository/SceneContainerRepositoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/scene/data/repository/SceneContainerRepositoryTest.kt
new file mode 100644
index 0000000..9e264db8
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/scene/data/repository/SceneContainerRepositoryTest.kt
@@ -0,0 +1,139 @@
+/*
+ * 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.
+ */
+
+@file:OptIn(ExperimentalCoroutinesApi::class)
+
+package com.android.systemui.scene.data.repository
+
+import androidx.test.filters.SmallTest
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.coroutines.collectLastValue
+import com.android.systemui.scene.shared.model.SceneKey
+import com.android.systemui.scene.shared.model.SceneModel
+import com.google.common.truth.Truth.assertThat
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.test.runTest
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+@SmallTest
+@RunWith(JUnit4::class)
+class SceneContainerRepositoryTest : SysuiTestCase() {
+
+ @Test
+ fun allSceneKeys() {
+ val underTest = fakeSceneContainerRepository()
+ assertThat(underTest.allSceneKeys("container1"))
+ .isEqualTo(
+ listOf(
+ SceneKey.QuickSettings,
+ SceneKey.Shade,
+ SceneKey.LockScreen,
+ SceneKey.Bouncer,
+ SceneKey.Gone,
+ )
+ )
+ }
+
+ @Test(expected = IllegalStateException::class)
+ fun allSceneKeys_noSuchContainer_throws() {
+ val underTest = fakeSceneContainerRepository()
+ underTest.allSceneKeys("nonExistingContainer")
+ }
+
+ @Test
+ fun currentScene() = runTest {
+ val underTest = fakeSceneContainerRepository()
+ val currentScene by collectLastValue(underTest.currentScene("container1"))
+ assertThat(currentScene).isEqualTo(SceneModel(SceneKey.LockScreen))
+
+ underTest.setCurrentScene("container1", SceneModel(SceneKey.Shade))
+ assertThat(currentScene).isEqualTo(SceneModel(SceneKey.Shade))
+ }
+
+ @Test(expected = IllegalStateException::class)
+ fun currentScene_noSuchContainer_throws() {
+ val underTest = fakeSceneContainerRepository()
+ underTest.currentScene("nonExistingContainer")
+ }
+
+ @Test(expected = IllegalStateException::class)
+ fun setCurrentScene_noSuchContainer_throws() {
+ val underTest = fakeSceneContainerRepository()
+ underTest.setCurrentScene("nonExistingContainer", SceneModel(SceneKey.Shade))
+ }
+
+ @Test(expected = IllegalStateException::class)
+ fun setCurrentScene_noSuchSceneInContainer_throws() {
+ val underTest =
+ fakeSceneContainerRepository(
+ setOf(
+ fakeSceneContainerConfig("container1"),
+ fakeSceneContainerConfig(
+ "container2",
+ listOf(SceneKey.QuickSettings, SceneKey.LockScreen)
+ ),
+ )
+ )
+ underTest.setCurrentScene("container2", SceneModel(SceneKey.Shade))
+ }
+
+ @Test
+ fun isVisible() = runTest {
+ val underTest = fakeSceneContainerRepository()
+ val isVisible by collectLastValue(underTest.isVisible("container1"))
+ assertThat(isVisible).isTrue()
+
+ underTest.setVisible("container1", false)
+ assertThat(isVisible).isFalse()
+
+ underTest.setVisible("container1", true)
+ assertThat(isVisible).isTrue()
+ }
+
+ @Test(expected = IllegalStateException::class)
+ fun isVisible_noSuchContainer_throws() {
+ val underTest = fakeSceneContainerRepository()
+ underTest.isVisible("nonExistingContainer")
+ }
+
+ @Test(expected = IllegalStateException::class)
+ fun setVisible_noSuchContainer_throws() {
+ val underTest = fakeSceneContainerRepository()
+ underTest.setVisible("nonExistingContainer", false)
+ }
+
+ @Test
+ fun sceneTransitionProgress() = runTest {
+ val underTest = fakeSceneContainerRepository()
+ val sceneTransitionProgress by
+ collectLastValue(underTest.sceneTransitionProgress("container1"))
+ assertThat(sceneTransitionProgress).isEqualTo(1f)
+
+ underTest.setSceneTransitionProgress("container1", 0.1f)
+ assertThat(sceneTransitionProgress).isEqualTo(0.1f)
+
+ underTest.setSceneTransitionProgress("container1", 0.9f)
+ assertThat(sceneTransitionProgress).isEqualTo(0.9f)
+ }
+
+ @Test(expected = IllegalStateException::class)
+ fun sceneTransitionProgress_noSuchContainer_throws() {
+ val underTest = fakeSceneContainerRepository()
+ underTest.sceneTransitionProgress("nonExistingContainer")
+ }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/scene/domain/interactor/SceneInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/scene/domain/interactor/SceneInteractorTest.kt
new file mode 100644
index 0000000..c5ce092
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/scene/domain/interactor/SceneInteractorTest.kt
@@ -0,0 +1,78 @@
+/*
+ * 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.
+ */
+
+@file:OptIn(ExperimentalCoroutinesApi::class, ExperimentalCoroutinesApi::class)
+
+package com.android.systemui.scene.domain.interactor
+
+import androidx.test.filters.SmallTest
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.coroutines.collectLastValue
+import com.android.systemui.scene.data.repository.fakeSceneContainerRepository
+import com.android.systemui.scene.data.repository.fakeSceneKeys
+import com.android.systemui.scene.shared.model.SceneKey
+import com.android.systemui.scene.shared.model.SceneModel
+import com.google.common.truth.Truth.assertThat
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.test.runTest
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+@SmallTest
+@RunWith(JUnit4::class)
+class SceneInteractorTest : SysuiTestCase() {
+
+ private val underTest =
+ SceneInteractor(
+ repository = fakeSceneContainerRepository(),
+ )
+
+ @Test
+ fun allSceneKeys() {
+ assertThat(underTest.allSceneKeys("container1")).isEqualTo(fakeSceneKeys())
+ }
+
+ @Test
+ fun sceneTransitions() = runTest {
+ val currentScene by collectLastValue(underTest.currentScene("container1"))
+ assertThat(currentScene).isEqualTo(SceneModel(SceneKey.LockScreen))
+
+ underTest.setCurrentScene("container1", SceneModel(SceneKey.Shade))
+ assertThat(currentScene).isEqualTo(SceneModel(SceneKey.Shade))
+ }
+
+ @Test
+ fun sceneTransitionProgress() = runTest {
+ val progress by collectLastValue(underTest.sceneTransitionProgress("container1"))
+ assertThat(progress).isEqualTo(1f)
+
+ underTest.setSceneTransitionProgress("container1", 0.55f)
+ assertThat(progress).isEqualTo(0.55f)
+ }
+
+ @Test
+ fun isVisible() = runTest {
+ val isVisible by collectLastValue(underTest.isVisible("container1"))
+ assertThat(isVisible).isTrue()
+
+ underTest.setVisible("container1", false)
+ assertThat(isVisible).isFalse()
+
+ underTest.setVisible("container1", true)
+ assertThat(isVisible).isTrue()
+ }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/scene/ui/viewmodel/SceneContainerViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/scene/ui/viewmodel/SceneContainerViewModelTest.kt
new file mode 100644
index 0000000..ab61ddd
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/scene/ui/viewmodel/SceneContainerViewModelTest.kt
@@ -0,0 +1,74 @@
+/*
+ * 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.
+ */
+
+@file:OptIn(ExperimentalCoroutinesApi::class)
+
+package com.android.systemui.scene.ui.viewmodel
+
+import androidx.test.filters.SmallTest
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.coroutines.collectLastValue
+import com.android.systemui.scene.data.repository.fakeSceneContainerRepository
+import com.android.systemui.scene.data.repository.fakeSceneKeys
+import com.android.systemui.scene.domain.interactor.SceneInteractor
+import com.android.systemui.scene.shared.model.SceneKey
+import com.android.systemui.scene.shared.model.SceneModel
+import com.google.common.truth.Truth.assertThat
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.test.runTest
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+@SmallTest
+@RunWith(JUnit4::class)
+class SceneContainerViewModelTest : SysuiTestCase() {
+ private val interactor =
+ SceneInteractor(
+ repository = fakeSceneContainerRepository(),
+ )
+ private val underTest =
+ SceneContainerViewModel(
+ interactor = interactor,
+ containerName = "container1",
+ )
+
+ @Test
+ fun isVisible() = runTest {
+ val isVisible by collectLastValue(underTest.isVisible)
+ assertThat(isVisible).isTrue()
+
+ interactor.setVisible("container1", false)
+ assertThat(isVisible).isFalse()
+
+ interactor.setVisible("container1", true)
+ assertThat(isVisible).isTrue()
+ }
+
+ @Test
+ fun allSceneKeys() {
+ assertThat(underTest.allSceneKeys).isEqualTo(fakeSceneKeys())
+ }
+
+ @Test
+ fun sceneTransition() = runTest {
+ val currentScene by collectLastValue(underTest.currentScene)
+ assertThat(currentScene).isEqualTo(SceneModel(SceneKey.LockScreen))
+
+ underTest.setCurrentScene(SceneModel(SceneKey.Shade))
+ assertThat(currentScene).isEqualTo(SceneModel(SceneKey.Shade))
+ }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/shared/system/RemoteTransitionTest.java b/packages/SystemUI/tests/src/com/android/systemui/shared/system/RemoteTransitionTest.java
index 0e2a3ac..190ee81 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/shared/system/RemoteTransitionTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/shared/system/RemoteTransitionTest.java
@@ -24,13 +24,13 @@
import static android.view.WindowManager.TRANSIT_CHANGE;
import static android.view.WindowManager.TRANSIT_CLOSE;
import static android.view.WindowManager.TRANSIT_OPEN;
-import static android.window.TransitionInfo.FLAG_FIRST_CUSTOM;
import static android.window.TransitionInfo.FLAG_IN_TASK_WITH_EMBEDDED_ACTIVITY;
import static android.window.TransitionInfo.FLAG_IS_WALLPAPER;
import static android.window.TransitionInfo.FLAG_SHOW_WALLPAPER;
import static android.window.TransitionInfo.FLAG_TRANSLUCENT;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
+import static com.android.wm.shell.common.split.SplitScreenConstants.FLAG_IS_DIVIDER_BAR;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
@@ -76,7 +76,7 @@
.addChange(TRANSIT_CLOSE, 0 /* flags */,
createTaskInfo(2 /* taskId */, ACTIVITY_TYPE_STANDARD))
.addChange(TRANSIT_OPEN, FLAG_IS_WALLPAPER, null /* taskInfo */)
- .addChange(TRANSIT_CHANGE, FLAG_FIRST_CUSTOM, null /* taskInfo */)
+ .addChange(TRANSIT_CHANGE, FLAG_IS_DIVIDER_BAR, null /* taskInfo */)
.build();
// Check apps extraction
RemoteAnimationTarget[] wrapped = RemoteAnimationTargetCompat.wrapApps(combined,
@@ -107,7 +107,7 @@
RemoteAnimationTarget[] nonApps = RemoteAnimationTargetCompat.wrapNonApps(combined,
false /* wallpapers */, mock(SurfaceControl.Transaction.class), null /* leashes */);
assertEquals(1, nonApps.length);
- assertTrue(nonApps[0].prefixOrderIndex < closeLayer);
+ assertTrue(nonApps[0].prefixOrderIndex == Integer.MAX_VALUE);
assertEquals(MODE_CHANGING, nonApps[0].mode);
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerBaseTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerBaseTest.java
index c7ea09c..2e5afa4 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerBaseTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerBaseTest.java
@@ -340,6 +340,11 @@
}
public void setConnectivityViaCallbackInNetworkController(
+ Network network, NetworkCapabilities networkCapabilities) {
+ mDefaultCallbackInNetworkController.onCapabilitiesChanged(network, networkCapabilities);
+ }
+
+ public void setConnectivityViaCallbackInNetworkController(
int networkType, boolean validated, boolean isConnected, WifiInfo wifiInfo) {
final NetworkCapabilities.Builder builder =
new NetworkCapabilities.Builder(mNetCapabilities);
@@ -351,6 +356,13 @@
mock(Network.class), builder.build());
}
+ public void setConnectivityViaDefaultAndNormalCallbackInWifiTracker(
+ Network network, NetworkCapabilities networkCapabilities) {
+ mNetworkCallback.onAvailable(network);
+ mNetworkCallback.onCapabilitiesChanged(network, networkCapabilities);
+ mDefaultCallbackInWifiTracker.onCapabilitiesChanged(network, networkCapabilities);
+ }
+
public void setConnectivityViaCallbackInWifiTracker(
int networkType, boolean validated, boolean isConnected, WifiInfo wifiInfo) {
final NetworkCapabilities.Builder builder =
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerWifiTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerWifiTest.java
index 68170ea..44a1c50 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerWifiTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerWifiTest.java
@@ -16,6 +16,9 @@
package com.android.systemui.statusbar.connectivity;
+import static android.net.NetworkCapabilities.NET_CAPABILITY_VALIDATED;
+import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR;
+
import static junit.framework.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
@@ -25,6 +28,7 @@
import android.content.Intent;
import android.net.ConnectivityManager;
+import android.net.Network;
import android.net.NetworkCapabilities;
import android.net.NetworkInfo;
import android.net.vcn.VcnTransportInfo;
@@ -43,6 +47,8 @@
import org.mockito.ArgumentCaptor;
import org.mockito.Mockito;
+import java.util.Collections;
+
@SmallTest
@RunWith(AndroidTestingRunner.class)
@RunWithLooper
@@ -269,6 +275,83 @@
}
}
+ /** Test for b/225902574. */
+ @Test
+ public void vcnOnlyOnUnderlyingNetwork() {
+ setWifiEnabled(true);
+
+ // Set up a carrier merged network...
+ WifiInfo underlyingCarrierMergedInfo = Mockito.mock(WifiInfo.class);
+ when(underlyingCarrierMergedInfo.isCarrierMerged()).thenReturn(true);
+ when(underlyingCarrierMergedInfo.isPrimary()).thenReturn(true);
+ int zeroLevel = 0;
+ when(underlyingCarrierMergedInfo.getRssi()).thenReturn(calculateRssiForLevel(zeroLevel));
+
+ NetworkCapabilities underlyingNetworkCapabilities = Mockito.mock(NetworkCapabilities.class);
+ when(underlyingNetworkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR))
+ .thenReturn(true);
+ when(underlyingNetworkCapabilities.getTransportInfo())
+ .thenReturn(underlyingCarrierMergedInfo);
+
+ Network underlyingNetwork = Mockito.mock(Network.class);
+ when(mMockCm.getNetworkCapabilities(underlyingNetwork))
+ .thenReturn(underlyingNetworkCapabilities);
+
+ NetworkCapabilities.Builder mainCapabilitiesBuilder = new NetworkCapabilities.Builder();
+ mainCapabilitiesBuilder.addTransportType(TRANSPORT_CELLULAR);
+ mainCapabilitiesBuilder.setTransportInfo(null);
+ // And make the carrier merged network the underlying network, *not* the main network.
+ mainCapabilitiesBuilder.setUnderlyingNetworks(Collections.singletonList(underlyingNetwork));
+
+ Network primaryNetwork = Mockito.mock(Network.class);
+ int primaryNetworkId = 1;
+ when(primaryNetwork.getNetId()).thenReturn(primaryNetworkId);
+
+ // WHEN this primary network with underlying carrier merged information is sent
+ setConnectivityViaDefaultAndNormalCallbackInWifiTracker(
+ primaryNetwork, mainCapabilitiesBuilder.build());
+
+ // THEN we see the mobile data indicators for carrier merged
+ verifyLastMobileDataIndicatorsForVcn(
+ /* visible= */ true,
+ /* level= */ zeroLevel,
+ TelephonyIcons.ICON_CWF,
+ /* inet= */ false);
+
+ // For each level...
+ for (int testLevel = 0; testLevel < WifiIcons.WIFI_LEVEL_COUNT; testLevel++) {
+ int rssi = calculateRssiForLevel(testLevel);
+ when(underlyingCarrierMergedInfo.getRssi()).thenReturn(rssi);
+ // WHEN the new level is sent to the callbacks
+ setConnectivityViaDefaultAndNormalCallbackInWifiTracker(
+ primaryNetwork, mainCapabilitiesBuilder.build());
+
+ // WHEN the network is validated
+ mainCapabilitiesBuilder.addCapability(NET_CAPABILITY_VALIDATED);
+ setConnectivityViaCallbackInNetworkController(
+ primaryNetwork, mainCapabilitiesBuilder.build());
+
+ // THEN we see the mobile data indicators with inet=true (no exclamation mark)
+ verifyLastMobileDataIndicatorsForVcn(
+ /* visible= */ true,
+ testLevel,
+ TelephonyIcons.ICON_CWF,
+ /* inet= */ true);
+
+ // WHEN the network is not validated
+ mainCapabilitiesBuilder.removeCapability(NET_CAPABILITY_VALIDATED);
+ setConnectivityViaCallbackInNetworkController(
+ primaryNetwork, mainCapabilitiesBuilder.build());
+
+ // THEN we see the mobile data indicators with inet=false (exclamation mark)
+ verifyLastMobileDataIndicatorsForVcn(
+ /* visible= */ true,
+ testLevel,
+ TelephonyIcons.ICON_CWF,
+ /* inet= */ false);
+ }
+ }
+
@Test
public void testDisableWiFiWithVcnWithUnderlyingWifi() {
String testSsid = "Test VCN SSID";
@@ -290,11 +373,7 @@
}
protected void setWifiLevel(int level) {
- float amountPerLevel = (MAX_RSSI - MIN_RSSI) / (WifiIcons.WIFI_LEVEL_COUNT - 1);
- int rssi = (int) (MIN_RSSI + level * amountPerLevel);
- // Put RSSI in the middle of the range.
- rssi += amountPerLevel / 2;
- when(mWifiInfo.getRssi()).thenReturn(rssi);
+ when(mWifiInfo.getRssi()).thenReturn(calculateRssiForLevel(level));
setConnectivityViaCallbackInWifiTracker(
NetworkCapabilities.TRANSPORT_WIFI, false, true, mWifiInfo);
}
@@ -312,19 +391,23 @@
}
protected void setWifiLevelForVcn(int level) {
- float amountPerLevel = (MAX_RSSI - MIN_RSSI) / (WifiIcons.WIFI_LEVEL_COUNT - 1);
- int rssi = (int) (MIN_RSSI + level * amountPerLevel);
- // Put RSSI in the middle of the range.
- rssi += amountPerLevel / 2;
when(mVcnTransportInfo.getWifiInfo()).thenReturn(mWifiInfo);
when(mVcnTransportInfo.makeCopy(anyLong())).thenReturn(mVcnTransportInfo);
- when(mWifiInfo.getRssi()).thenReturn(rssi);
+ when(mWifiInfo.getRssi()).thenReturn(calculateRssiForLevel(level));
when(mWifiInfo.isCarrierMerged()).thenReturn(true);
when(mWifiInfo.getSubscriptionId()).thenReturn(1);
setConnectivityViaCallbackInWifiTrackerForVcn(
NetworkCapabilities.TRANSPORT_CELLULAR, false, true, mVcnTransportInfo);
}
+ private int calculateRssiForLevel(int level) {
+ float amountPerLevel = (MAX_RSSI - MIN_RSSI) / (WifiIcons.WIFI_LEVEL_COUNT - 1);
+ int rssi = (int) (MIN_RSSI + level * amountPerLevel);
+ // Put RSSI in the middle of the range.
+ rssi += amountPerLevel / 2;
+ return rssi;
+ }
+
protected void setWifiStateForVcn(boolean connected, String ssid) {
when(mVcnTransportInfo.getWifiInfo()).thenReturn(mWifiInfo);
when(mVcnTransportInfo.makeCopy(anyLong())).thenReturn(mVcnTransportInfo);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/gesture/GenericGestureDetectorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/gesture/GenericGestureDetectorTest.kt
index 746544a..d3f5ade 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/gesture/GenericGestureDetectorTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/gesture/GenericGestureDetectorTest.kt
@@ -118,7 +118,10 @@
assertThat(oldCallbackNotified).isFalse()
}
- inner class TestGestureDetector : GenericGestureDetector("fakeTag", displayTracker) {
+ inner class TestGestureDetector : GenericGestureDetector(
+ "fakeTag",
+ displayTracker.defaultDisplayId
+ ) {
var isGestureListening = false
override fun onInputEvent(ev: InputEvent) {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/KeyguardCoordinatorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/KeyguardCoordinatorTest.kt
index c3f5123..2fbe871 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/KeyguardCoordinatorTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/KeyguardCoordinatorTest.kt
@@ -327,7 +327,7 @@
fun unseenNotificationIsMarkedAsSeenWhenKeyguardGoesAway() {
// GIVEN: Keyguard is showing, not dozing, unseen notification is present
keyguardRepository.setKeyguardShowing(true)
- keyguardRepository.setDozing(false)
+ keyguardRepository.setIsDozing(false)
runKeyguardCoordinatorTest {
val fakeEntry = NotificationEntryBuilder().build()
collectionListener.onEntryAdded(fakeEntry)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ActivityStarterImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ActivityStarterImplTest.kt
index b6b28c9..4a30800 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ActivityStarterImplTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ActivityStarterImplTest.kt
@@ -17,6 +17,7 @@
import android.app.PendingIntent
import android.content.Intent
import android.os.RemoteException
+import android.os.UserHandle
import android.testing.AndroidTestingRunner
import androidx.test.filters.SmallTest
import com.android.keyguard.KeyguardUpdateMonitor
@@ -102,6 +103,7 @@
activityIntentHelper,
mainExecutor,
)
+ whenever(userTracker.userHandle).thenReturn(UserHandle.OWNER)
}
@Test
@@ -150,11 +152,28 @@
@Test
fun postStartActivityDismissingKeyguard_intent_postsOnMain() {
+ whenever(deviceProvisionedController.isDeviceProvisioned).thenReturn(true)
val intent = mock(Intent::class.java)
underTest.postStartActivityDismissingKeyguard(intent, 0)
assertThat(mainExecutor.numPending()).isEqualTo(1)
+ mainExecutor.runAllReady()
+
+ verify(deviceProvisionedController).isDeviceProvisioned
+ verify(shadeController).runPostCollapseRunnables()
+ }
+
+ @Test
+ fun postStartActivityDismissingKeyguard_intent_notDeviceProvisioned_doesNotProceed() {
+ whenever(deviceProvisionedController.isDeviceProvisioned).thenReturn(false)
+ val intent = mock(Intent::class.java)
+
+ underTest.postStartActivityDismissingKeyguard(intent, 0)
+ mainExecutor.runAllReady()
+
+ verify(deviceProvisionedController).isDeviceProvisioned
+ verify(shadeController, never()).runPostCollapseRunnables()
}
@Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/DozeServiceHostTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/DozeServiceHostTest.java
index 163369f..57037e0 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/DozeServiceHostTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/DozeServiceHostTest.java
@@ -25,8 +25,10 @@
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyZeroInteractions;
import static org.mockito.Mockito.when;
+import android.graphics.Point;
import android.os.PowerManager;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper.RunWithLooper;
@@ -42,6 +44,7 @@
import com.android.systemui.doze.DozeLog;
import com.android.systemui.keyguard.WakefulnessLifecycle;
import com.android.systemui.keyguard.domain.interactor.BurnInInteractor;
+import com.android.systemui.keyguard.domain.interactor.DozeInteractor;
import com.android.systemui.shade.NotificationShadeWindowViewController;
import com.android.systemui.shade.ShadeViewController;
import com.android.systemui.statusbar.NotificationShadeWindowController;
@@ -95,6 +98,7 @@
@Mock private DozeHost.Callback mCallback;
@Mock private BurnInInteractor mBurnInInteractor;
+ @Mock private DozeInteractor mDozeInteractor;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
@@ -104,7 +108,7 @@
() -> mAssistManager, mDozeScrimController,
mKeyguardUpdateMonitor, mPulseExpansionHandler,
mNotificationShadeWindowController, mNotificationWakeUpCoordinator,
- mAuthController, mNotificationIconAreaController,
+ mAuthController, mNotificationIconAreaController, mDozeInteractor,
mBurnInInteractor);
mDozeServiceHost.initialize(
@@ -216,6 +220,19 @@
assertFalse(mDozeServiceHost.isPulsePending());
verify(mDozeScrimController).pulseOutNow();
}
+
+ @Test
+ public void onSlpiTap_calls_DozeInteractor() {
+ mDozeServiceHost.onSlpiTap(100, 200);
+ verify(mDozeInteractor).setLastTapToWakePosition(new Point(100, 200));
+ }
+
+ @Test
+ public void onSlpiTap_doesnt_pass_negative_values() {
+ mDozeServiceHost.onSlpiTap(-1, 200);
+ mDozeServiceHost.onSlpiTap(100, -2);
+ verifyZeroInteractions(mDozeInteractor);
+ }
@Test
public void dozeTimeTickSentTBurnInInteractor() {
// WHEN dozeTimeTick
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/LightBarControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/LightBarControllerTest.java
index a501556..6a4b3c5 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/LightBarControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/LightBarControllerTest.java
@@ -222,31 +222,103 @@
// Initial state is set when controller is set
mLightBarController.setNavigationBar(mNavBarController);
- verifyNavBarIconsDarkSetTo(false);
+ verifyNavBarIconsDark(false, /* didFireEvent= */ true);
// Changing the color of the transparent scrim has no effect
mLightBarController.setScrimState(ScrimState.UNLOCKED, 0f, COLORS_LIGHT);
- verifyNavBarIconsUnchanged(); // still light
+ verifyNavBarIconsDark(false, /* didFireEvent= */ false);
// Showing the notification shade with white scrim requires dark icons
mLightBarController.setScrimState(ScrimState.UNLOCKED, 1f, COLORS_LIGHT);
- verifyNavBarIconsDarkSetTo(true);
+ verifyNavBarIconsDark(true, /* didFireEvent= */ true);
// Expanded QS always provides a black background, so icons become light again
mLightBarController.setQsExpanded(true);
- verifyNavBarIconsDarkSetTo(false);
+ verifyNavBarIconsDark(false, /* didFireEvent= */ true);
// Tapping the QS tile to change to dark theme has no effect in this state
mLightBarController.setScrimState(ScrimState.UNLOCKED, 1f, COLORS_DARK);
- verifyNavBarIconsUnchanged(); // still light
+ verifyNavBarIconsDark(false, /* didFireEvent= */ false);
// collapsing QS in dark mode doesn't affect button color
mLightBarController.setQsExpanded(false);
- verifyNavBarIconsUnchanged(); // still light
+ verifyNavBarIconsDark(false, /* didFireEvent= */ false);
// Closing the shade has no affect
mLightBarController.setScrimState(ScrimState.UNLOCKED, 0f, COLORS_DARK);
- verifyNavBarIconsUnchanged(); // still light
+ verifyNavBarIconsDark(false, /* didFireEvent= */ false);
+ }
+
+ @Test
+ public void navBarHasDarkIconsInLockedShade_lightMode() {
+ assumeTrue(testNewLightBarLogic()); // Only run in the new suite
+
+ // On the locked shade QS in light mode buttons are light
+ mLightBarController.setScrimState(ScrimState.SHADE_LOCKED, 1f, COLORS_LIGHT);
+ mLightBarController.onNavigationBarAppearanceChanged(
+ 0, /* nbModeChanged = */ true,
+ MODE_TRANSPARENT, /* navbarColorManagedByIme = */ false);
+ verifyNavBarIconsUnchanged(); // no changes yet; not attached
+
+ // Initial state is set when controller is set
+ mLightBarController.setNavigationBar(mNavBarController);
+ verifyNavBarIconsDark(true, /* didFireEvent= */ true);
+ }
+
+ @Test
+ public void navBarHasLightIconsInLockedQs_lightMode() {
+ // GIVEN dark icons in locked shade in light mdoe
+ navBarHasDarkIconsInLockedShade_lightMode();
+ // WHEN expanding QS
+ mLightBarController.setQsExpanded(true);
+ // THEN icons become light
+ verifyNavBarIconsDark(false, /* didFireEvent= */ true);
+ }
+
+ @Test
+ public void navBarHasDarkIconsInBouncerOverQs_lightMode() {
+ // GIVEN that light icons in locked expanded QS
+ navBarHasLightIconsInLockedQs_lightMode();
+ // WHEN device changes to bouncer
+ mLightBarController.setScrimState(ScrimState.BOUNCER, 1f, COLORS_LIGHT);
+ // THEN icons change to dark
+ verifyNavBarIconsDark(true, /* didFireEvent= */ true);
+ }
+
+ @Test
+ public void navBarHasLightIconsInLockedShade_darkMode() {
+ assumeTrue(testNewLightBarLogic()); // Only run in the new suite
+
+ // On the locked shade QS in light mode buttons are light
+ mLightBarController.setScrimState(ScrimState.SHADE_LOCKED, 1f, COLORS_DARK);
+ mLightBarController.onNavigationBarAppearanceChanged(
+ 0, /* nbModeChanged = */ true,
+ MODE_TRANSPARENT, /* navbarColorManagedByIme = */ false);
+ verifyNavBarIconsUnchanged(); // no changes yet; not attached
+
+ // Initial state is set when controller is set
+ mLightBarController.setNavigationBar(mNavBarController);
+ verifyNavBarIconsDark(false, /* didFireEvent= */ true);
+ }
+
+ @Test
+ public void navBarHasLightIconsInLockedQs_darkMode() {
+ // GIVEN light icons in the locked shade
+ navBarHasLightIconsInLockedShade_darkMode();
+ // WHEN QS expands
+ mLightBarController.setQsExpanded(true);
+ // THEN icons stay light
+ verifyNavBarIconsDark(false, /* didFireEvent= */ false);
+ }
+
+ @Test
+ public void navBarHasLightIconsInBouncerOverQs_darkMode() {
+ // GIVEN that light icons in locked expanded QS
+ navBarHasLightIconsInLockedQs_darkMode();
+ // WHEN device changes to bouncer
+ mLightBarController.setScrimState(ScrimState.BOUNCER, 1f, COLORS_DARK);
+ // THEN icons stay light
+ verifyNavBarIconsDark(false, /* didFireEvent= */ false);
}
private void verifyNavBarIconsUnchanged() {
@@ -258,4 +330,14 @@
verify(mNavBarController, never()).setIconsDark(eq(!iconsDark), anyBoolean());
clearInvocations(mNavBarController);
}
+
+ private void verifyNavBarIconsDark(boolean iconsDark, boolean didFireEvent) {
+ if (didFireEvent) {
+ verifyNavBarIconsDarkSetTo(iconsDark);
+ } else {
+ verifyNavBarIconsUnchanged();
+ mLightBarController.setNavigationBar(mNavBarController);
+ verifyNavBarIconsDarkSetTo(iconsDark);
+ }
+ }
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragmentTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragmentTest.java
index 10efcd4..9b1d93b 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragmentTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragmentTest.java
@@ -74,6 +74,7 @@
import com.android.systemui.statusbar.phone.StatusBarLocationPublisher;
import com.android.systemui.statusbar.phone.fragment.dagger.StatusBarFragmentComponent;
import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallController;
+import com.android.systemui.statusbar.pipeline.shared.ui.viewmodel.FakeCollapsedStatusBarViewBinder;
import com.android.systemui.statusbar.pipeline.shared.ui.viewmodel.FakeCollapsedStatusBarViewModel;
import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.statusbar.window.StatusBarWindowStateController;
@@ -129,6 +130,7 @@
@Mock
private StatusBarIconController.DarkIconManager mIconManager;
private FakeCollapsedStatusBarViewModel mCollapsedStatusBarViewModel;
+ private FakeCollapsedStatusBarViewBinder mCollapsedStatusBarViewBinder;
@Mock
private StatusBarHideIconsForBouncerManager mStatusBarHideIconsForBouncerManager;
@Mock
@@ -612,6 +614,55 @@
assertEquals(View.VISIBLE, getClockView().getVisibility());
}
+ @Test
+ public void testStatusBarIcons_hiddenThroughoutLockscreenToDreamTransition() {
+ final CollapsedStatusBarFragment fragment = resumeAndGetFragment();
+
+ // WHEN a transition to dream has started
+ mCollapsedStatusBarViewBinder.getListener().onTransitionFromLockscreenToDreamStarted();
+ when(mKeyguardUpdateMonitor.isDreaming()).thenReturn(true);
+ when(mKeyguardStateController.isOccluded()).thenReturn(true);
+ fragment.disable(DEFAULT_DISPLAY, 0, 0, false);
+
+ // THEN status icons should be invisible or gone, but certainly not VISIBLE.
+ assertNotEquals(View.VISIBLE, getEndSideContentView().getVisibility());
+ assertNotEquals(View.VISIBLE, getClockView().getVisibility());
+
+ // WHEN the transition has finished and dream is displaying
+ mockLockscreenToDreamTransitionFinished();
+ // (This approximates "dream is displaying")
+ when(mStatusBarHideIconsForBouncerManager.getShouldHideStatusBarIconsForBouncer())
+ .thenReturn(true);
+ fragment.disable(DEFAULT_DISPLAY, 0, 0, false);
+
+ // THEN the views still aren't visible because dream is hiding them
+ assertNotEquals(View.VISIBLE, getEndSideContentView().getVisibility());
+ assertNotEquals(View.VISIBLE, getClockView().getVisibility());
+
+ // WHEN dream has ended
+ when(mStatusBarHideIconsForBouncerManager.getShouldHideStatusBarIconsForBouncer())
+ .thenReturn(false);
+ fragment.disable(DEFAULT_DISPLAY, 0, 0, false);
+
+ // THEN the views can be visible again
+ assertEquals(View.VISIBLE, getEndSideContentView().getVisibility());
+ assertEquals(View.VISIBLE, getClockView().getVisibility());
+ }
+
+ @Test
+ public void testStatusBarIcons_lockscreenToDreamTransitionButNotDreaming_iconsVisible() {
+ final CollapsedStatusBarFragment fragment = resumeAndGetFragment();
+
+ // WHEN a transition to dream has started but we're *not* dreaming
+ mCollapsedStatusBarViewBinder.getListener().onTransitionFromLockscreenToDreamStarted();
+ when(mKeyguardUpdateMonitor.isDreaming()).thenReturn(false);
+ fragment.disable(DEFAULT_DISPLAY, 0, 0, false);
+
+ // THEN the views are still visible
+ assertEquals(View.VISIBLE, getEndSideContentView().getVisibility());
+ assertEquals(View.VISIBLE, getClockView().getVisibility());
+ }
+
@Override
protected Fragment instantiate(Context context, String className, Bundle arguments) {
MockitoAnnotations.initMocks(this);
@@ -631,6 +682,7 @@
mShadeExpansionStateManager = new ShadeExpansionStateManager();
mCollapsedStatusBarViewModel = new FakeCollapsedStatusBarViewModel();
+ mCollapsedStatusBarViewBinder = new FakeCollapsedStatusBarViewBinder();
setUpNotificationIconAreaController();
return new CollapsedStatusBarFragment(
@@ -644,6 +696,7 @@
mStatusBarIconController,
mIconManagerFactory,
mCollapsedStatusBarViewModel,
+ mCollapsedStatusBarViewBinder,
mStatusBarHideIconsForBouncerManager,
mKeyguardStateController,
mShadeViewController,
@@ -718,6 +771,12 @@
}
}
+ private void mockLockscreenToDreamTransitionFinished() {
+ for (StatusBarWindowStateListener listener : mStatusBarWindowStateListeners) {
+ listener.onStatusBarWindowStateChanged(StatusBarManager.WINDOW_STATE_HIDDEN);
+ }
+ }
+
private CollapsedStatusBarFragment resumeAndGetFragment() {
mFragments.dispatchResume();
processAllMessages();
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/MobileRepositorySwitcherTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/MobileRepositorySwitcherTest.kt
index bde05b9..5a887eb 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/MobileRepositorySwitcherTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/MobileRepositorySwitcherTest.kt
@@ -26,6 +26,7 @@
import com.android.systemui.dump.DumpManager
import com.android.systemui.log.table.TableLogBuffer
import com.android.systemui.log.table.TableLogBufferFactory
+import com.android.systemui.statusbar.pipeline.airplane.data.repository.FakeAirplaneModeRepository
import com.android.systemui.statusbar.pipeline.mobile.data.MobileInputLogger
import com.android.systemui.statusbar.pipeline.mobile.data.model.SubscriptionModel
import com.android.systemui.statusbar.pipeline.mobile.data.repository.demo.DemoMobileConnectionsRepository
@@ -131,6 +132,7 @@
context,
IMMEDIATE,
scope,
+ FakeAirplaneModeRepository(),
wifiRepository,
mock(),
)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionsRepositoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionsRepositoryTest.kt
index 7cc59b6..fd156d8 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionsRepositoryTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionsRepositoryTest.kt
@@ -34,13 +34,16 @@
import android.telephony.TelephonyCallback
import android.telephony.TelephonyCallback.ActiveDataSubscriptionIdListener
import android.telephony.TelephonyManager
+import android.testing.TestableLooper
import androidx.test.filters.SmallTest
import com.android.internal.telephony.PhoneConstants
import com.android.settingslib.R
import com.android.settingslib.mobile.MobileMappings
import com.android.systemui.SysuiTestCase
+import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.log.table.TableLogBuffer
import com.android.systemui.log.table.TableLogBufferFactory
+import com.android.systemui.statusbar.pipeline.airplane.data.repository.FakeAirplaneModeRepository
import com.android.systemui.statusbar.pipeline.mobile.data.MobileInputLogger
import com.android.systemui.statusbar.pipeline.mobile.data.model.SubscriptionModel
import com.android.systemui.statusbar.pipeline.mobile.data.repository.CarrierConfigRepository
@@ -51,25 +54,25 @@
import com.android.systemui.statusbar.pipeline.shared.data.model.ConnectivitySlots
import com.android.systemui.statusbar.pipeline.shared.data.repository.ConnectivityRepository
import com.android.systemui.statusbar.pipeline.shared.data.repository.ConnectivityRepositoryImpl
-import com.android.systemui.statusbar.pipeline.wifi.data.repository.FakeWifiRepository
-import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiNetworkModel
+import com.android.systemui.statusbar.pipeline.wifi.data.repository.WifiRepository
+import com.android.systemui.statusbar.pipeline.wifi.data.repository.prod.WifiRepositoryImpl
+import com.android.systemui.util.concurrency.FakeExecutor
import com.android.systemui.util.mockito.any
import com.android.systemui.util.mockito.argumentCaptor
import com.android.systemui.util.mockito.eq
import com.android.systemui.util.mockito.mock
import com.android.systemui.util.mockito.whenever
+import com.android.systemui.util.time.FakeSystemClock
import com.google.common.truth.Truth.assertThat
import java.util.UUID
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.ExperimentalCoroutinesApi
-import kotlinx.coroutines.cancel
import kotlinx.coroutines.flow.filterNotNull
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
-import kotlinx.coroutines.runBlocking
-import kotlinx.coroutines.yield
-import org.junit.After
+import kotlinx.coroutines.test.StandardTestDispatcher
+import kotlinx.coroutines.test.TestScope
+import kotlinx.coroutines.test.runCurrent
+import kotlinx.coroutines.test.runTest
import org.junit.Assert.assertThrows
import org.junit.Assert.assertTrue
import org.junit.Before
@@ -83,6 +86,9 @@
@Suppress("EXPERIMENTAL_IS_NOT_ENABLED")
@OptIn(ExperimentalCoroutinesApi::class)
@SmallTest
+// This is required because our [SubscriptionManager.OnSubscriptionsChangedListener] uses a looper
+// to run the callback and this makes the looper place nicely with TestScope etc.
+@TestableLooper.RunWithLooper
class MobileConnectionsRepositoryTest : SysuiTestCase() {
private lateinit var underTest: MobileConnectionsRepositoryImpl
@@ -90,7 +96,8 @@
private lateinit var carrierMergedFactory: CarrierMergedConnectionRepository.Factory
private lateinit var fullConnectionFactory: FullMobileConnectionRepository.Factory
private lateinit var connectivityRepository: ConnectivityRepository
- private lateinit var wifiRepository: FakeWifiRepository
+ private lateinit var airplaneModeRepository: FakeAirplaneModeRepository
+ private lateinit var wifiRepository: WifiRepository
private lateinit var carrierConfigRepository: CarrierConfigRepository
@Mock private lateinit var connectivityManager: ConnectivityManager
@Mock private lateinit var subscriptionManager: SubscriptionManager
@@ -102,7 +109,8 @@
private val mobileMappings = FakeMobileMappingsProxy()
private val subscriptionManagerProxy = FakeSubscriptionManagerProxy()
- private val scope = CoroutineScope(IMMEDIATE)
+ private val dispatcher = StandardTestDispatcher()
+ private val testScope = TestScope(dispatcher)
@Before
fun setUp() {
@@ -138,11 +146,23 @@
context,
mock(),
mock(),
- scope,
+ testScope.backgroundScope,
mock(),
)
- wifiRepository = FakeWifiRepository()
+ airplaneModeRepository = FakeAirplaneModeRepository()
+
+ wifiRepository =
+ WifiRepositoryImpl(
+ fakeBroadcastDispatcher,
+ connectivityManager,
+ connectivityRepository,
+ mock(),
+ mock(),
+ FakeExecutor(FakeSystemClock()),
+ testScope.backgroundScope,
+ mock(),
+ )
carrierConfigRepository =
CarrierConfigRepository(
@@ -150,28 +170,28 @@
mock(),
mock(),
logger,
- scope,
+ testScope.backgroundScope,
)
connectionFactory =
MobileConnectionRepositoryImpl.Factory(
fakeBroadcastDispatcher,
telephonyManager = telephonyManager,
- bgDispatcher = IMMEDIATE,
+ bgDispatcher = dispatcher,
logger = logger,
mobileMappingsProxy = mobileMappings,
- scope = scope,
+ scope = testScope.backgroundScope,
carrierConfigRepository = carrierConfigRepository,
)
carrierMergedFactory =
CarrierMergedConnectionRepository.Factory(
telephonyManager,
- scope,
+ testScope.backgroundScope,
wifiRepository,
)
fullConnectionFactory =
FullMobileConnectionRepository.Factory(
- scope = scope,
+ scope = testScope.backgroundScope,
logFactory = logBufferFactory,
mobileRepoFactory = connectionFactory,
carrierMergedRepoFactory = carrierMergedFactory,
@@ -188,46 +208,38 @@
mobileMappings,
fakeBroadcastDispatcher,
context,
- IMMEDIATE,
- scope,
+ dispatcher,
+ testScope.backgroundScope,
+ airplaneModeRepository,
wifiRepository,
fullConnectionFactory,
)
- }
- @After
- fun tearDown() {
- scope.cancel()
+ testScope.runCurrent()
}
@Test
fun testSubscriptions_initiallyEmpty() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
assertThat(underTest.subscriptions.value).isEqualTo(listOf<SubscriptionModel>())
}
@Test
fun testSubscriptions_listUpdates() =
- runBlocking(IMMEDIATE) {
- var latest: List<SubscriptionModel>? = null
-
- val job = underTest.subscriptions.onEach { latest = it }.launchIn(this)
+ testScope.runTest {
+ val latest by collectLastValue(underTest.subscriptions)
whenever(subscriptionManager.completeActiveSubscriptionInfoList)
.thenReturn(listOf(SUB_1, SUB_2))
getSubscriptionCallback().onSubscriptionsChanged()
assertThat(latest).isEqualTo(listOf(MODEL_1, MODEL_2))
-
- job.cancel()
}
@Test
fun testSubscriptions_removingSub_updatesList() =
- runBlocking(IMMEDIATE) {
- var latest: List<SubscriptionModel>? = null
-
- val job = underTest.subscriptions.onEach { latest = it }.launchIn(this)
+ testScope.runTest {
+ val latest by collectLastValue(underTest.subscriptions)
// WHEN 2 networks show up
whenever(subscriptionManager.completeActiveSubscriptionInfoList)
@@ -241,71 +253,55 @@
// THEN the subscriptions list represents the newest change
assertThat(latest).isEqualTo(listOf(MODEL_2))
-
- job.cancel()
}
@Test
fun testSubscriptions_carrierMergedOnly_listHasCarrierMerged() =
- runBlocking(IMMEDIATE) {
- var latest: List<SubscriptionModel>? = null
+ testScope.runTest {
+ val latest by collectLastValue(underTest.subscriptions)
- val job = underTest.subscriptions.onEach { latest = it }.launchIn(this)
-
- wifiRepository.setWifiNetwork(WIFI_NETWORK_CM)
+ getNormalNetworkCallback().onCapabilitiesChanged(NETWORK, WIFI_NETWORK_CAPS_CM)
whenever(subscriptionManager.completeActiveSubscriptionInfoList)
.thenReturn(listOf(SUB_CM))
getSubscriptionCallback().onSubscriptionsChanged()
assertThat(latest).isEqualTo(listOf(MODEL_CM))
-
- job.cancel()
}
@Test
fun testSubscriptions_carrierMergedAndOther_listHasBothWithCarrierMergedLast() =
- runBlocking(IMMEDIATE) {
- var latest: List<SubscriptionModel>? = null
+ testScope.runTest {
+ val latest by collectLastValue(underTest.subscriptions)
- val job = underTest.subscriptions.onEach { latest = it }.launchIn(this)
-
- wifiRepository.setWifiNetwork(WIFI_NETWORK_CM)
+ getNormalNetworkCallback().onCapabilitiesChanged(NETWORK, WIFI_NETWORK_CAPS_CM)
whenever(subscriptionManager.completeActiveSubscriptionInfoList)
.thenReturn(listOf(SUB_1, SUB_2, SUB_CM))
getSubscriptionCallback().onSubscriptionsChanged()
assertThat(latest).isEqualTo(listOf(MODEL_1, MODEL_2, MODEL_CM))
-
- job.cancel()
}
@Test
fun testActiveDataSubscriptionId_initialValueIsNull() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
assertThat(underTest.activeMobileDataSubscriptionId.value).isEqualTo(null)
}
@Test
fun testActiveDataSubscriptionId_updates() =
- runBlocking(IMMEDIATE) {
- var active: Int? = null
-
- val job = underTest.activeMobileDataSubscriptionId.onEach { active = it }.launchIn(this)
+ testScope.runTest {
+ val active by collectLastValue(underTest.activeMobileDataSubscriptionId)
getTelephonyCallbackForType<ActiveDataSubscriptionIdListener>()
.onActiveDataSubscriptionIdChanged(SUB_2_ID)
assertThat(active).isEqualTo(SUB_2_ID)
-
- job.cancel()
}
@Test
fun activeSubId_nullIfInvalidSubIdIsReceived() =
- runBlocking(IMMEDIATE) {
- var latest: Int? = null
-
- val job = underTest.activeMobileDataSubscriptionId.onEach { latest = it }.launchIn(this)
+ testScope.runTest {
+ val latest by collectLastValue(underTest.activeMobileDataSubscriptionId)
getTelephonyCallbackForType<ActiveDataSubscriptionIdListener>()
.onActiveDataSubscriptionIdChanged(SUB_2_ID)
@@ -316,8 +312,6 @@
.onActiveDataSubscriptionIdChanged(INVALID_SUBSCRIPTION_ID)
assertThat(latest).isNull()
-
- job.cancel()
}
@Test
@@ -327,23 +321,19 @@
@Test
fun activeRepo_updatesWithActiveDataId() =
- runBlocking(IMMEDIATE) {
- var latest: MobileConnectionRepository? = null
- val job = underTest.activeMobileDataRepository.onEach { latest = it }.launchIn(this)
+ testScope.runTest {
+ val latest by collectLastValue(underTest.activeMobileDataRepository)
getTelephonyCallbackForType<ActiveDataSubscriptionIdListener>()
.onActiveDataSubscriptionIdChanged(SUB_2_ID)
assertThat(latest?.subId).isEqualTo(SUB_2_ID)
-
- job.cancel()
}
@Test
fun activeRepo_nullIfActiveDataSubIdBecomesInvalid() =
- runBlocking(IMMEDIATE) {
- var latest: MobileConnectionRepository? = null
- val job = underTest.activeMobileDataRepository.onEach { latest = it }.launchIn(this)
+ testScope.runTest {
+ val latest by collectLastValue(underTest.activeMobileDataRepository)
getTelephonyCallbackForType<ActiveDataSubscriptionIdListener>()
.onActiveDataSubscriptionIdChanged(SUB_2_ID)
@@ -354,64 +344,49 @@
.onActiveDataSubscriptionIdChanged(INVALID_SUBSCRIPTION_ID)
assertThat(latest).isNull()
-
- job.cancel()
}
@Test
/** Regression test for b/268146648. */
fun activeSubIdIsSetBeforeSubscriptionsAreUpdated_doesNotThrow() =
- runBlocking(IMMEDIATE) {
- var activeRepo: MobileConnectionRepository? = null
- var subscriptions: List<SubscriptionModel>? = null
-
- val activeRepoJob =
- underTest.activeMobileDataRepository.onEach { activeRepo = it }.launchIn(this)
- val subscriptionsJob =
- underTest.subscriptions.onEach { subscriptions = it }.launchIn(this)
+ testScope.runTest {
+ val activeRepo by collectLastValue(underTest.activeMobileDataRepository)
+ val subscriptions by collectLastValue(underTest.subscriptions)
getTelephonyCallbackForType<ActiveDataSubscriptionIdListener>()
.onActiveDataSubscriptionIdChanged(SUB_2_ID)
assertThat(subscriptions).isEmpty()
assertThat(activeRepo).isNotNull()
-
- activeRepoJob.cancel()
- subscriptionsJob.cancel()
}
@Test
fun getRepoForSubId_activeDataSubIdIsRequestedBeforeSubscriptionsUpdate() =
- runBlocking(IMMEDIATE) {
- var latest: MobileConnectionRepository? = null
- var subscriptions: List<SubscriptionModel>? = null
- val activeSubIdJob =
- underTest.activeMobileDataSubscriptionId
- .filterNotNull()
- .onEach { latest = underTest.getRepoForSubId(it) }
- .launchIn(this)
- val subscriptionsJob =
- underTest.subscriptions.onEach { subscriptions = it }.launchIn(this)
+ testScope.runTest {
+ var latestActiveRepo: MobileConnectionRepository? = null
+ collectLastValue(
+ underTest.activeMobileDataSubscriptionId.filterNotNull().onEach {
+ latestActiveRepo = underTest.getRepoForSubId(it)
+ }
+ )
+
+ val latestSubscriptions by collectLastValue(underTest.subscriptions)
// Active data subscription id is sent, but no subscription change has been posted yet
getTelephonyCallbackForType<ActiveDataSubscriptionIdListener>()
.onActiveDataSubscriptionIdChanged(SUB_2_ID)
// Subscriptions list is empty
- assertThat(subscriptions).isEmpty()
+ assertThat(latestSubscriptions).isEmpty()
// getRepoForSubId does not throw
- assertThat(latest).isNotNull()
-
- activeSubIdJob.cancel()
- subscriptionsJob.cancel()
+ assertThat(latestActiveRepo).isNotNull()
}
@Test
fun activeDataSentBeforeSubscriptionList_subscriptionReusesActiveDataRepo() =
- runBlocking(IMMEDIATE) {
- var activeRepo: MobileConnectionRepository? = null
- val job = underTest.activeMobileDataRepository.onEach { activeRepo = it }.launchIn(this)
- val subscriptionsJob = underTest.subscriptions.launchIn(this)
+ testScope.runTest {
+ val activeRepo by collectLastValue(underTest.activeMobileDataRepository)
+ collectLastValue(underTest.subscriptions)
// GIVEN active repo is updated before the subscription list updates
getTelephonyCallbackForType<ActiveDataSubscriptionIdListener>()
@@ -429,15 +404,12 @@
// THEN the newly request repo has been cached and reused
assertThat(activeRepo).isSameInstanceAs(newRepo)
-
- job.cancel()
- subscriptionsJob.cancel()
}
@Test
fun testConnectionRepository_validSubId_isCached() =
- runBlocking(IMMEDIATE) {
- val job = underTest.subscriptions.launchIn(this)
+ testScope.runTest {
+ collectLastValue(underTest.subscriptions)
whenever(subscriptionManager.completeActiveSubscriptionInfoList)
.thenReturn(listOf(SUB_1))
@@ -447,16 +419,15 @@
val repo2 = underTest.getRepoForSubId(SUB_1_ID)
assertThat(repo1).isSameInstanceAs(repo2)
-
- job.cancel()
}
@Test
fun testConnectionRepository_carrierMergedSubId_isCached() =
- runBlocking(IMMEDIATE) {
- val job = underTest.subscriptions.launchIn(this)
+ testScope.runTest {
+ collectLastValue(underTest.subscriptions)
- wifiRepository.setWifiNetwork(WIFI_NETWORK_CM)
+ getDefaultNetworkCallback().onCapabilitiesChanged(NETWORK, WIFI_NETWORK_CAPS_CM)
+ getNormalNetworkCallback().onCapabilitiesChanged(NETWORK, WIFI_NETWORK_CAPS_CM)
whenever(subscriptionManager.completeActiveSubscriptionInfoList)
.thenReturn(listOf(SUB_CM))
getSubscriptionCallback().onSubscriptionsChanged()
@@ -465,16 +436,15 @@
val repo2 = underTest.getRepoForSubId(SUB_CM_ID)
assertThat(repo1).isSameInstanceAs(repo2)
-
- job.cancel()
}
@Test
fun testConnectionRepository_carrierMergedAndMobileSubs_usesCorrectRepos() =
- runBlocking(IMMEDIATE) {
- val job = underTest.subscriptions.launchIn(this)
+ testScope.runTest {
+ collectLastValue(underTest.subscriptions)
- wifiRepository.setWifiNetwork(WIFI_NETWORK_CM)
+ getDefaultNetworkCallback().onCapabilitiesChanged(NETWORK, WIFI_NETWORK_CAPS_CM)
+ getNormalNetworkCallback().onCapabilitiesChanged(NETWORK, WIFI_NETWORK_CAPS_CM)
whenever(subscriptionManager.completeActiveSubscriptionInfoList)
.thenReturn(listOf(SUB_1, SUB_CM))
getSubscriptionCallback().onSubscriptionsChanged()
@@ -483,16 +453,15 @@
val mobileRepo = underTest.getRepoForSubId(SUB_1_ID)
assertThat(carrierMergedRepo.getIsCarrierMerged()).isTrue()
assertThat(mobileRepo.getIsCarrierMerged()).isFalse()
-
- job.cancel()
}
@Test
fun testSubscriptions_subNoLongerCarrierMerged_repoUpdates() =
- runBlocking(IMMEDIATE) {
- val job = underTest.subscriptions.launchIn(this)
+ testScope.runTest {
+ collectLastValue(underTest.subscriptions)
- wifiRepository.setWifiNetwork(WIFI_NETWORK_CM)
+ getDefaultNetworkCallback().onCapabilitiesChanged(NETWORK, WIFI_NETWORK_CAPS_CM)
+ getNormalNetworkCallback().onCapabilitiesChanged(NETWORK, WIFI_NETWORK_CAPS_CM)
whenever(subscriptionManager.completeActiveSubscriptionInfoList)
.thenReturn(listOf(SUB_1, SUB_CM))
getSubscriptionCallback().onSubscriptionsChanged()
@@ -503,26 +472,28 @@
assertThat(mobileRepo.getIsCarrierMerged()).isFalse()
// WHEN the wifi network updates to be not carrier merged
- wifiRepository.setWifiNetwork(WifiNetworkModel.Active(networkId = 4, level = 1))
+ getDefaultNetworkCallback().onCapabilitiesChanged(NETWORK, WIFI_NETWORK_CAPS_ACTIVE)
+ getNormalNetworkCallback().onCapabilitiesChanged(NETWORK, WIFI_NETWORK_CAPS_ACTIVE)
+ runCurrent()
// THEN the repos update
val noLongerCarrierMergedRepo = underTest.getRepoForSubId(SUB_CM_ID)
mobileRepo = underTest.getRepoForSubId(SUB_1_ID)
assertThat(noLongerCarrierMergedRepo.getIsCarrierMerged()).isFalse()
assertThat(mobileRepo.getIsCarrierMerged()).isFalse()
-
- job.cancel()
}
@Test
fun testSubscriptions_subBecomesCarrierMerged_repoUpdates() =
- runBlocking(IMMEDIATE) {
- val job = underTest.subscriptions.launchIn(this)
+ testScope.runTest {
+ collectLastValue(underTest.subscriptions)
- wifiRepository.setWifiNetwork(WifiNetworkModel.Inactive)
+ getDefaultNetworkCallback().onCapabilitiesChanged(NETWORK, WIFI_NETWORK_CAPS_ACTIVE)
+ getNormalNetworkCallback().onCapabilitiesChanged(NETWORK, WIFI_NETWORK_CAPS_ACTIVE)
whenever(subscriptionManager.completeActiveSubscriptionInfoList)
.thenReturn(listOf(SUB_1, SUB_CM))
getSubscriptionCallback().onSubscriptionsChanged()
+ runCurrent()
val notYetCarrierMergedRepo = underTest.getRepoForSubId(SUB_CM_ID)
var mobileRepo = underTest.getRepoForSubId(SUB_1_ID)
@@ -530,21 +501,21 @@
assertThat(mobileRepo.getIsCarrierMerged()).isFalse()
// WHEN the wifi network updates to be carrier merged
- wifiRepository.setWifiNetwork(WIFI_NETWORK_CM)
+ getDefaultNetworkCallback().onCapabilitiesChanged(NETWORK, WIFI_NETWORK_CAPS_CM)
+ getNormalNetworkCallback().onCapabilitiesChanged(NETWORK, WIFI_NETWORK_CAPS_CM)
+ runCurrent()
// THEN the repos update
val carrierMergedRepo = underTest.getRepoForSubId(SUB_CM_ID)
mobileRepo = underTest.getRepoForSubId(SUB_1_ID)
assertThat(carrierMergedRepo.getIsCarrierMerged()).isTrue()
assertThat(mobileRepo.getIsCarrierMerged()).isFalse()
-
- job.cancel()
}
@Test
fun testConnectionCache_clearsInvalidSubscriptions() =
- runBlocking(IMMEDIATE) {
- val job = underTest.subscriptions.launchIn(this)
+ testScope.runTest {
+ collectLastValue(underTest.subscriptions)
whenever(subscriptionManager.completeActiveSubscriptionInfoList)
.thenReturn(listOf(SUB_1, SUB_2))
@@ -563,16 +534,15 @@
getSubscriptionCallback().onSubscriptionsChanged()
assertThat(underTest.getSubIdRepoCache()).containsExactly(SUB_1_ID, repo1)
-
- job.cancel()
}
@Test
fun testConnectionCache_clearsInvalidSubscriptions_includingCarrierMerged() =
- runBlocking(IMMEDIATE) {
- val job = underTest.subscriptions.launchIn(this)
+ testScope.runTest {
+ collectLastValue(underTest.subscriptions)
- wifiRepository.setWifiNetwork(WIFI_NETWORK_CM)
+ getDefaultNetworkCallback().onCapabilitiesChanged(NETWORK, WIFI_NETWORK_CAPS_CM)
+ getNormalNetworkCallback().onCapabilitiesChanged(NETWORK, WIFI_NETWORK_CAPS_CM)
whenever(subscriptionManager.completeActiveSubscriptionInfoList)
.thenReturn(listOf(SUB_1, SUB_2, SUB_CM))
getSubscriptionCallback().onSubscriptionsChanged()
@@ -591,15 +561,13 @@
getSubscriptionCallback().onSubscriptionsChanged()
assertThat(underTest.getSubIdRepoCache()).containsExactly(SUB_1_ID, repo1)
-
- job.cancel()
}
/** Regression test for b/261706421 */
@Test
fun testConnectionsCache_clearMultipleSubscriptionsAtOnce_doesNotThrow() =
- runBlocking(IMMEDIATE) {
- val job = underTest.subscriptions.launchIn(this)
+ testScope.runTest {
+ collectLastValue(underTest.subscriptions)
whenever(subscriptionManager.completeActiveSubscriptionInfoList)
.thenReturn(listOf(SUB_1, SUB_2))
@@ -617,26 +585,20 @@
getSubscriptionCallback().onSubscriptionsChanged()
assertThat(underTest.getSubIdRepoCache()).isEmpty()
-
- job.cancel()
}
@Test
fun testConnectionRepository_invalidSubId_throws() =
- runBlocking(IMMEDIATE) {
- val job = underTest.subscriptions.launchIn(this)
-
+ testScope.runTest {
assertThrows(IllegalArgumentException::class.java) {
underTest.getRepoForSubId(SUB_1_ID)
}
-
- job.cancel()
}
@Test
fun connectionRepository_logBufferContainsSubIdInItsName() =
- runBlocking(IMMEDIATE) {
- val job = underTest.subscriptions.launchIn(this)
+ testScope.runTest {
+ collectLastValue(underTest.subscriptions)
whenever(subscriptionManager.completeActiveSubscriptionInfoList)
.thenReturn(listOf(SUB_1, SUB_2))
@@ -655,15 +617,12 @@
eq(tableBufferLogName(SUB_2_ID)),
anyInt(),
)
-
- job.cancel()
}
@Test
fun testDefaultDataSubId_updatesOnBroadcast() =
- runBlocking(IMMEDIATE) {
- var latest: Int? = null
- val job = underTest.defaultDataSubId.onEach { latest = it }.launchIn(this)
+ testScope.runTest {
+ val latest by collectLastValue(underTest.defaultDataSubId)
assertThat(latest).isEqualTo(INVALID_SUBSCRIPTION_ID)
@@ -686,28 +645,24 @@
}
assertThat(latest).isEqualTo(SUB_1_ID)
-
- job.cancel()
}
@Test
fun defaultDataSubId_fetchesInitialValueOnStart() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
subscriptionManagerProxy.defaultDataSubId = 2
- var latest: Int? = null
- val job = underTest.defaultDataSubId.onEach { latest = it }.launchIn(this)
+ val latest by collectLastValue(underTest.defaultDataSubId)
assertThat(latest).isEqualTo(2)
-
- job.cancel()
}
@Test
fun defaultDataSubId_fetchesCurrentOnRestart() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
subscriptionManagerProxy.defaultDataSubId = 2
var latest: Int? = null
var job = underTest.defaultDataSubId.onEach { latest = it }.launchIn(this)
+ runCurrent()
assertThat(latest).isEqualTo(2)
@@ -720,6 +675,7 @@
subscriptionManagerProxy.defaultDataSubId = 1
job = underTest.defaultDataSubId.onEach { latest = it }.launchIn(this)
+ runCurrent()
assertThat(latest).isEqualTo(1)
@@ -733,43 +689,37 @@
@Test
fun mobileIsDefault_capsHaveCellular_isDefault() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
val caps =
mock<NetworkCapabilities>().also {
whenever(it.hasTransport(TRANSPORT_CELLULAR)).thenReturn(true)
}
- var latest: Boolean? = null
- val job = underTest.mobileIsDefault.onEach { latest = it }.launchIn(this)
+ val latest by collectLastValue(underTest.mobileIsDefault)
getDefaultNetworkCallback().onCapabilitiesChanged(NETWORK, caps)
assertThat(latest).isTrue()
-
- job.cancel()
}
@Test
fun mobileIsDefault_capsDoNotHaveCellular_isNotDefault() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
val caps =
mock<NetworkCapabilities>().also {
whenever(it.hasTransport(TRANSPORT_CELLULAR)).thenReturn(false)
}
- var latest: Boolean? = null
- val job = underTest.mobileIsDefault.onEach { latest = it }.launchIn(this)
+ val latest by collectLastValue(underTest.mobileIsDefault)
getDefaultNetworkCallback().onCapabilitiesChanged(NETWORK, caps)
assertThat(latest).isFalse()
-
- job.cancel()
}
@Test
fun mobileIsDefault_carrierMergedViaMobile_isDefault() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
val carrierMergedInfo =
mock<WifiInfo>().apply { whenever(this.isCarrierMerged).thenReturn(true) }
val caps =
@@ -778,151 +728,144 @@
whenever(it.transportInfo).thenReturn(carrierMergedInfo)
}
- var latest: Boolean? = null
- val job = underTest.mobileIsDefault.onEach { latest = it }.launchIn(this)
+ val latest by collectLastValue(underTest.mobileIsDefault)
getDefaultNetworkCallback().onCapabilitiesChanged(NETWORK, caps)
assertThat(latest).isTrue()
-
- job.cancel()
}
@Test
fun mobileIsDefault_wifiDefault_mobileNotDefault() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
val caps =
mock<NetworkCapabilities>().also {
whenever(it.hasTransport(TRANSPORT_WIFI)).thenReturn(true)
}
- var latest: Boolean? = null
- val job = underTest.mobileIsDefault.onEach { latest = it }.launchIn(this)
+ val latest by collectLastValue(underTest.mobileIsDefault)
getDefaultNetworkCallback().onCapabilitiesChanged(NETWORK, caps)
assertThat(latest).isFalse()
-
- job.cancel()
}
@Test
fun mobileIsDefault_ethernetDefault_mobileNotDefault() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
val caps =
mock<NetworkCapabilities>().also {
whenever(it.hasTransport(TRANSPORT_ETHERNET)).thenReturn(true)
}
- var latest: Boolean? = null
- val job = underTest.mobileIsDefault.onEach { latest = it }.launchIn(this)
+ val latest by collectLastValue(underTest.mobileIsDefault)
getDefaultNetworkCallback().onCapabilitiesChanged(NETWORK, caps)
assertThat(latest).isFalse()
-
- job.cancel()
}
/** Regression test for b/272586234. */
@Test
fun hasCarrierMergedConnection_carrierMergedViaWifi_isTrue() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
val carrierMergedInfo =
- mock<WifiInfo>().apply { whenever(this.isCarrierMerged).thenReturn(true) }
+ mock<WifiInfo>().apply {
+ whenever(this.isCarrierMerged).thenReturn(true)
+ whenever(this.isPrimary).thenReturn(true)
+ }
val caps =
mock<NetworkCapabilities>().also {
whenever(it.hasTransport(TRANSPORT_WIFI)).thenReturn(true)
whenever(it.transportInfo).thenReturn(carrierMergedInfo)
}
- var latest: Boolean? = null
- val job = underTest.hasCarrierMergedConnection.onEach { latest = it }.launchIn(this)
+ val latest by collectLastValue(underTest.hasCarrierMergedConnection)
getDefaultNetworkCallback().onCapabilitiesChanged(NETWORK, caps)
- yield()
+ getNormalNetworkCallback().onCapabilitiesChanged(NETWORK, caps)
assertThat(latest).isTrue()
-
- job.cancel()
}
@Test
fun hasCarrierMergedConnection_carrierMergedViaMobile_isTrue() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
val carrierMergedInfo =
- mock<WifiInfo>().apply { whenever(this.isCarrierMerged).thenReturn(true) }
+ mock<WifiInfo>().apply {
+ whenever(this.isCarrierMerged).thenReturn(true)
+ whenever(this.isPrimary).thenReturn(true)
+ }
val caps =
mock<NetworkCapabilities>().also {
whenever(it.hasTransport(TRANSPORT_CELLULAR)).thenReturn(true)
whenever(it.transportInfo).thenReturn(carrierMergedInfo)
}
- var latest: Boolean? = null
- val job = underTest.hasCarrierMergedConnection.onEach { latest = it }.launchIn(this)
+ val latest by collectLastValue(underTest.hasCarrierMergedConnection)
getDefaultNetworkCallback().onCapabilitiesChanged(NETWORK, caps)
- yield()
+ getNormalNetworkCallback().onCapabilitiesChanged(NETWORK, caps)
assertThat(latest).isTrue()
-
- job.cancel()
}
/** Regression test for b/272586234. */
@Test
fun hasCarrierMergedConnection_carrierMergedViaWifiWithVcnTransport_isTrue() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
val carrierMergedInfo =
- mock<WifiInfo>().apply { whenever(this.isCarrierMerged).thenReturn(true) }
+ mock<WifiInfo>().apply {
+ whenever(this.isCarrierMerged).thenReturn(true)
+ whenever(this.isPrimary).thenReturn(true)
+ }
val caps =
mock<NetworkCapabilities>().also {
whenever(it.hasTransport(TRANSPORT_WIFI)).thenReturn(true)
whenever(it.transportInfo).thenReturn(VcnTransportInfo(carrierMergedInfo))
}
- var latest: Boolean? = null
- val job = underTest.hasCarrierMergedConnection.onEach { latest = it }.launchIn(this)
+ val latest by collectLastValue(underTest.hasCarrierMergedConnection)
getDefaultNetworkCallback().onCapabilitiesChanged(NETWORK, caps)
- yield()
+ getNormalNetworkCallback().onCapabilitiesChanged(NETWORK, caps)
assertThat(latest).isTrue()
-
- job.cancel()
}
@Test
fun hasCarrierMergedConnection_carrierMergedViaMobileWithVcnTransport_isTrue() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
val carrierMergedInfo =
- mock<WifiInfo>().apply { whenever(this.isCarrierMerged).thenReturn(true) }
+ mock<WifiInfo>().apply {
+ whenever(this.isCarrierMerged).thenReturn(true)
+ whenever(this.isPrimary).thenReturn(true)
+ }
val caps =
mock<NetworkCapabilities>().also {
whenever(it.hasTransport(TRANSPORT_CELLULAR)).thenReturn(true)
whenever(it.transportInfo).thenReturn(VcnTransportInfo(carrierMergedInfo))
}
- var latest: Boolean? = null
- val job = underTest.hasCarrierMergedConnection.onEach { latest = it }.launchIn(this)
+ val latest by collectLastValue(underTest.hasCarrierMergedConnection)
getDefaultNetworkCallback().onCapabilitiesChanged(NETWORK, caps)
- yield()
+ getNormalNetworkCallback().onCapabilitiesChanged(NETWORK, caps)
assertThat(latest).isTrue()
-
- job.cancel()
}
@Test
fun hasCarrierMergedConnection_isCarrierMergedViaUnderlyingWifi_isTrue() =
- runBlocking(IMMEDIATE) {
- var latest: Boolean? = null
- val job = underTest.hasCarrierMergedConnection.onEach { latest = it }.launchIn(this)
+ testScope.runTest {
+ val latest by collectLastValue(underTest.hasCarrierMergedConnection)
val underlyingNetwork = mock<Network>()
val carrierMergedInfo =
- mock<WifiInfo>().apply { whenever(this.isCarrierMerged).thenReturn(true) }
+ mock<WifiInfo>().apply {
+ whenever(this.isCarrierMerged).thenReturn(true)
+ whenever(this.isPrimary).thenReturn(true)
+ }
val underlyingWifiCapabilities =
mock<NetworkCapabilities>().also {
whenever(it.hasTransport(TRANSPORT_WIFI)).thenReturn(true)
@@ -941,23 +884,23 @@
}
getDefaultNetworkCallback().onCapabilitiesChanged(NETWORK, mainCapabilities)
- yield()
+ getNormalNetworkCallback().onCapabilitiesChanged(NETWORK, mainCapabilities)
// THEN there's a carrier merged connection
assertThat(latest).isTrue()
-
- job.cancel()
}
@Test
fun hasCarrierMergedConnection_isCarrierMergedViaUnderlyingCellular_isTrue() =
- runBlocking(IMMEDIATE) {
- var latest: Boolean? = null
- val job = underTest.hasCarrierMergedConnection.onEach { latest = it }.launchIn(this)
+ testScope.runTest {
+ val latest by collectLastValue(underTest.hasCarrierMergedConnection)
val underlyingCarrierMergedNetwork = mock<Network>()
val carrierMergedInfo =
- mock<WifiInfo>().apply { whenever(this.isCarrierMerged).thenReturn(true) }
+ mock<WifiInfo>().apply {
+ whenever(this.isCarrierMerged).thenReturn(true)
+ whenever(this.isPrimary).thenReturn(true)
+ }
val underlyingCapabilities =
mock<NetworkCapabilities>().also {
whenever(it.hasTransport(TRANSPORT_CELLULAR)).thenReturn(true)
@@ -977,22 +920,19 @@
}
getDefaultNetworkCallback().onCapabilitiesChanged(NETWORK, mainCapabilities)
- yield()
+ getNormalNetworkCallback().onCapabilitiesChanged(NETWORK, mainCapabilities)
// THEN there's a carrier merged connection
assertThat(latest).isTrue()
-
- job.cancel()
}
/** Regression test for b/272586234. */
@Test
- fun hasCarrierMergedConnection_defaultNotCarrierMerged_butWifiRepoHasCarrierMerged_isTrue() =
- runBlocking(IMMEDIATE) {
- var latest: Boolean? = null
- val job = underTest.hasCarrierMergedConnection.onEach { latest = it }.launchIn(this)
+ fun hasCarrierMergedConnection_defaultIsWifiNotCarrierMerged_wifiRepoIsCarrierMerged_isTrue() =
+ testScope.runTest {
+ val latest by collectLastValue(underTest.hasCarrierMergedConnection)
- // WHEN the default callback isn't carrier merged
+ // WHEN the default callback is TRANSPORT_WIFI but not carrier merged
val carrierMergedInfo =
mock<WifiInfo>().apply { whenever(this.isCarrierMerged).thenReturn(false) }
val caps =
@@ -1001,16 +941,57 @@
whenever(it.transportInfo).thenReturn(carrierMergedInfo)
}
getDefaultNetworkCallback().onCapabilitiesChanged(NETWORK, caps)
- yield()
// BUT the wifi repo has gotten updates that it *is* carrier merged
- wifiRepository.setWifiNetwork(WIFI_NETWORK_CM)
- yield()
+ getNormalNetworkCallback().onCapabilitiesChanged(NETWORK, WIFI_NETWORK_CAPS_CM)
// THEN hasCarrierMergedConnection is true
assertThat(latest).isTrue()
+ }
- job.cancel()
+ /** Regression test for b/278618530. */
+ @Test
+ fun hasCarrierMergedConnection_defaultIsCellular_wifiRepoIsCarrierMerged_isFalse() =
+ testScope.runTest {
+ val latest by collectLastValue(underTest.hasCarrierMergedConnection)
+
+ // WHEN the default callback is TRANSPORT_CELLULAR and not carrier merged
+ val caps =
+ mock<NetworkCapabilities>().also {
+ whenever(it.hasTransport(TRANSPORT_CELLULAR)).thenReturn(true)
+ whenever(it.transportInfo).thenReturn(null)
+ }
+ getDefaultNetworkCallback().onCapabilitiesChanged(NETWORK, caps)
+
+ // BUT the wifi repo has gotten updates that it *is* carrier merged
+ getNormalNetworkCallback().onCapabilitiesChanged(NETWORK, WIFI_NETWORK_CAPS_CM)
+
+ // THEN hasCarrierMergedConnection is **false** (The default network being CELLULAR
+ // takes precedence over the wifi network being carrier merged.)
+ assertThat(latest).isFalse()
+ }
+
+ /** Regression test for b/278618530. */
+ @Test
+ fun hasCarrierMergedConnection_defaultCellular_wifiIsCarrierMerged_airplaneMode_isTrue() =
+ testScope.runTest {
+ val latest by collectLastValue(underTest.hasCarrierMergedConnection)
+
+ // WHEN the default callback is TRANSPORT_CELLULAR and not carrier merged
+ val caps =
+ mock<NetworkCapabilities>().also {
+ whenever(it.hasTransport(TRANSPORT_CELLULAR)).thenReturn(true)
+ whenever(it.transportInfo).thenReturn(null)
+ }
+ getDefaultNetworkCallback().onCapabilitiesChanged(NETWORK, caps)
+
+ // BUT the wifi repo has gotten updates that it *is* carrier merged
+ getNormalNetworkCallback().onCapabilitiesChanged(NETWORK, WIFI_NETWORK_CAPS_CM)
+ // AND we're in airplane mode
+ airplaneModeRepository.setIsAirplaneMode(true)
+
+ // THEN hasCarrierMergedConnection is true.
+ assertThat(latest).isTrue()
}
@Test
@@ -1020,43 +1001,37 @@
@Test
fun defaultConnectionIsValidated_capsHaveValidated_isValidated() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
val caps =
mock<NetworkCapabilities>().also {
whenever(it.hasCapability(NET_CAPABILITY_VALIDATED)).thenReturn(true)
}
- var latest: Boolean? = null
- val job = underTest.defaultConnectionIsValidated.onEach { latest = it }.launchIn(this)
+ val latest by collectLastValue(underTest.defaultConnectionIsValidated)
getDefaultNetworkCallback().onCapabilitiesChanged(NETWORK, caps)
assertThat(latest).isTrue()
-
- job.cancel()
}
@Test
fun defaultConnectionIsValidated_capsHaveNotValidated_isNotValidated() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
val caps =
mock<NetworkCapabilities>().also {
whenever(it.hasCapability(NET_CAPABILITY_VALIDATED)).thenReturn(false)
}
- var latest: Boolean? = null
- val job = underTest.defaultConnectionIsValidated.onEach { latest = it }.launchIn(this)
+ val latest by collectLastValue(underTest.defaultConnectionIsValidated)
getDefaultNetworkCallback().onCapabilitiesChanged(NETWORK, caps)
assertThat(latest).isFalse()
-
- job.cancel()
}
@Test
fun config_initiallyFromContext() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
overrideResource(R.bool.config_showMin3G, true)
val configFromContext = MobileMappings.Config.readConfig(context)
assertThat(configFromContext.showAtLeast3G).isTrue()
@@ -1074,26 +1049,24 @@
mobileMappings,
fakeBroadcastDispatcher,
context,
- IMMEDIATE,
- scope,
+ dispatcher,
+ testScope.backgroundScope,
+ airplaneModeRepository,
wifiRepository,
fullConnectionFactory,
)
- var latest: MobileMappings.Config? = null
- val job = underTest.defaultDataSubRatConfig.onEach { latest = it }.launchIn(this)
+ val latest by collectLastValue(underTest.defaultDataSubRatConfig)
assertTrue(latest!!.areEqual(configFromContext))
assertTrue(latest!!.showAtLeast3G)
-
- job.cancel()
}
@Test
fun config_subIdChangeEvent_updated() =
- runBlocking(IMMEDIATE) {
- var latest: MobileMappings.Config? = null
- val job = underTest.defaultDataSubRatConfig.onEach { latest = it }.launchIn(this)
+ testScope.runTest {
+ val latest by collectLastValue(underTest.defaultDataSubRatConfig)
+
assertThat(latest!!.showAtLeast3G).isFalse()
overrideResource(R.bool.config_showMin3G, true)
@@ -1112,15 +1085,13 @@
// THEN the config is updated
assertTrue(latest!!.areEqual(configFromContext))
assertTrue(latest!!.showAtLeast3G)
-
- job.cancel()
}
@Test
fun config_carrierConfigChangeEvent_updated() =
- runBlocking(IMMEDIATE) {
- var latest: MobileMappings.Config? = null
- val job = underTest.defaultDataSubRatConfig.onEach { latest = it }.launchIn(this)
+ testScope.runTest {
+ val latest by collectLastValue(underTest.defaultDataSubRatConfig)
+
assertThat(latest!!.showAtLeast3G).isFalse()
overrideResource(R.bool.config_showMin3G, true)
@@ -1138,15 +1109,39 @@
// THEN the config is updated
assertThat(latest!!.areEqual(configFromContext)).isTrue()
assertThat(latest!!.showAtLeast3G).isTrue()
+ }
- job.cancel()
+ @Test
+ fun carrierConfig_initialValueIsFetched() =
+ testScope.runTest {
+
+ // Value starts out false
+ assertThat(underTest.defaultDataSubRatConfig.value.showAtLeast3G).isFalse()
+
+ overrideResource(R.bool.config_showMin3G, true)
+ val configFromContext = MobileMappings.Config.readConfig(context)
+ assertThat(configFromContext.showAtLeast3G).isTrue()
+
+ // WHEN the change event is fired
+ fakeBroadcastDispatcher.registeredReceivers.forEach { receiver ->
+ receiver.onReceive(
+ context,
+ Intent(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED)
+ )
+ }
+
+ // WHEN collection starts AFTER the broadcast is sent out
+ val latest by collectLastValue(underTest.defaultDataSubRatConfig)
+
+ // THEN the config has the updated value
+ assertThat(latest!!.areEqual(configFromContext)).isTrue()
+ assertThat(latest!!.showAtLeast3G).isTrue()
}
@Test
fun activeDataChange_inSameGroup_emitsUnit() =
- runBlocking(IMMEDIATE) {
- var latest: Unit? = null
- val job = underTest.activeSubChangedInGroupEvent.onEach { latest = it }.launchIn(this)
+ testScope.runTest {
+ val latest by collectLastValue(underTest.activeSubChangedInGroupEvent)
getTelephonyCallbackForType<ActiveDataSubscriptionIdListener>()
.onActiveDataSubscriptionIdChanged(SUB_3_ID_GROUPED)
@@ -1154,15 +1149,12 @@
.onActiveDataSubscriptionIdChanged(SUB_4_ID_GROUPED)
assertThat(latest).isEqualTo(Unit)
-
- job.cancel()
}
@Test
fun activeDataChange_notInSameGroup_doesNotEmit() =
- runBlocking(IMMEDIATE) {
- var latest: Unit? = null
- val job = underTest.activeSubChangedInGroupEvent.onEach { latest = it }.launchIn(this)
+ testScope.runTest {
+ val latest by collectLastValue(underTest.activeSubChangedInGroupEvent)
getTelephonyCallbackForType<ActiveDataSubscriptionIdListener>()
.onActiveDataSubscriptionIdChanged(SUB_3_ID_GROUPED)
@@ -1170,38 +1162,46 @@
.onActiveDataSubscriptionIdChanged(SUB_1_ID)
assertThat(latest).isEqualTo(null)
-
- job.cancel()
}
- private fun getDefaultNetworkCallback(): ConnectivityManager.NetworkCallback {
+ private fun TestScope.getDefaultNetworkCallback(): ConnectivityManager.NetworkCallback {
+ runCurrent()
val callbackCaptor = argumentCaptor<ConnectivityManager.NetworkCallback>()
verify(connectivityManager).registerDefaultNetworkCallback(callbackCaptor.capture())
return callbackCaptor.value!!
}
- private fun getSubscriptionCallback(): SubscriptionManager.OnSubscriptionsChangedListener {
+ // Note: This is used to update the [WifiRepository].
+ private fun TestScope.getNormalNetworkCallback(): ConnectivityManager.NetworkCallback {
+ runCurrent()
+ val callbackCaptor = argumentCaptor<ConnectivityManager.NetworkCallback>()
+ verify(connectivityManager).registerNetworkCallback(any(), callbackCaptor.capture())
+ return callbackCaptor.value!!
+ }
+
+ private fun TestScope.getSubscriptionCallback():
+ SubscriptionManager.OnSubscriptionsChangedListener {
+ runCurrent()
val callbackCaptor = argumentCaptor<SubscriptionManager.OnSubscriptionsChangedListener>()
verify(subscriptionManager)
.addOnSubscriptionsChangedListener(any(), callbackCaptor.capture())
return callbackCaptor.value!!
}
- private fun getTelephonyCallbacks(): List<TelephonyCallback> {
+ private fun TestScope.getTelephonyCallbacks(): List<TelephonyCallback> {
+ runCurrent()
val callbackCaptor = argumentCaptor<TelephonyCallback>()
verify(telephonyManager).registerTelephonyCallback(any(), callbackCaptor.capture())
return callbackCaptor.allValues
}
- private inline fun <reified T> getTelephonyCallbackForType(): T {
- val cbs = getTelephonyCallbacks().filterIsInstance<T>()
+ private inline fun <reified T> TestScope.getTelephonyCallbackForType(): T {
+ val cbs = this.getTelephonyCallbacks().filterIsInstance<T>()
assertThat(cbs.size).isEqualTo(1)
return cbs[0]
}
companion object {
- private val IMMEDIATE = Dispatchers.Main.immediate
-
// Subscription 1
private const val SUB_1_ID = 1
private val GROUP_1 = ParcelUuid(UUID.randomUUID())
@@ -1259,11 +1259,30 @@
private val SUB_CM =
mock<SubscriptionInfo>().also { whenever(it.subscriptionId).thenReturn(SUB_CM_ID) }
private val MODEL_CM = SubscriptionModel(subscriptionId = SUB_CM_ID)
- private val WIFI_NETWORK_CM =
- WifiNetworkModel.CarrierMerged(
- networkId = 3,
- subscriptionId = SUB_CM_ID,
- level = 1,
- )
+
+ private val WIFI_INFO_CM =
+ mock<WifiInfo>().apply {
+ whenever(this.isPrimary).thenReturn(true)
+ whenever(this.isCarrierMerged).thenReturn(true)
+ whenever(this.subscriptionId).thenReturn(SUB_CM_ID)
+ }
+ private val WIFI_NETWORK_CAPS_CM =
+ mock<NetworkCapabilities>().also {
+ whenever(it.hasTransport(TRANSPORT_WIFI)).thenReturn(true)
+ whenever(it.transportInfo).thenReturn(WIFI_INFO_CM)
+ whenever(it.hasCapability(NET_CAPABILITY_VALIDATED)).thenReturn(true)
+ }
+
+ private val WIFI_INFO_ACTIVE =
+ mock<WifiInfo>().apply {
+ whenever(this.isPrimary).thenReturn(true)
+ whenever(this.isCarrierMerged).thenReturn(false)
+ }
+ private val WIFI_NETWORK_CAPS_ACTIVE =
+ mock<NetworkCapabilities>().also {
+ whenever(it.hasTransport(TRANSPORT_WIFI)).thenReturn(true)
+ whenever(it.transportInfo).thenReturn(WIFI_INFO_ACTIVE)
+ whenever(it.hasCapability(NET_CAPABILITY_VALIDATED)).thenReturn(true)
+ }
}
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/MobileIconsInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/MobileIconsInteractorTest.kt
index 6e1ab58..1fb76b0 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/MobileIconsInteractorTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/MobileIconsInteractorTest.kt
@@ -272,6 +272,52 @@
}
@Test
+ fun filteredSubscriptions_vcnSubId_agreesWithActiveSubId_usesActiveAkaVcnSub() =
+ testScope.runTest {
+ val (sub1, sub3) =
+ createSubscriptionPair(
+ subscriptionIds = Pair(SUB_1_ID, SUB_3_ID),
+ opportunistic = Pair(true, true),
+ grouped = true,
+ )
+ connectionsRepository.setSubscriptions(listOf(sub1, sub3))
+ connectionsRepository.setActiveMobileDataSubscriptionId(SUB_3_ID)
+ connectivityRepository.vcnSubId.value = SUB_3_ID
+ whenever(carrierConfigTracker.alwaysShowPrimarySignalBarInOpportunisticNetworkDefault)
+ .thenReturn(false)
+
+ var latest: List<SubscriptionModel>? = null
+ val job = underTest.filteredSubscriptions.onEach { latest = it }.launchIn(this)
+
+ assertThat(latest).isEqualTo(listOf(sub3))
+
+ job.cancel()
+ }
+
+ @Test
+ fun filteredSubscriptions_vcnSubId_disagreesWithActiveSubId_usesVcnSub() =
+ testScope.runTest {
+ val (sub1, sub3) =
+ createSubscriptionPair(
+ subscriptionIds = Pair(SUB_1_ID, SUB_3_ID),
+ opportunistic = Pair(true, true),
+ grouped = true,
+ )
+ connectionsRepository.setSubscriptions(listOf(sub1, sub3))
+ connectionsRepository.setActiveMobileDataSubscriptionId(SUB_3_ID)
+ connectivityRepository.vcnSubId.value = SUB_1_ID
+ whenever(carrierConfigTracker.alwaysShowPrimarySignalBarInOpportunisticNetworkDefault)
+ .thenReturn(false)
+
+ var latest: List<SubscriptionModel>? = null
+ val job = underTest.filteredSubscriptions.onEach { latest = it }.launchIn(this)
+
+ assertThat(latest).isEqualTo(listOf(sub1))
+
+ job.cancel()
+ }
+
+ @Test
fun activeDataConnection_turnedOn() =
testScope.runTest {
CONNECTION_1.setDataEnabled(true)
@@ -361,6 +407,21 @@
job.cancel()
}
+ @Test
+ fun failedConnection_carrierMergedDefault_notValidated_failed() =
+ testScope.runTest {
+ var latest: Boolean? = null
+ val job = underTest.isDefaultConnectionFailed.onEach { latest = it }.launchIn(this)
+
+ connectionsRepository.hasCarrierMergedConnection.value = true
+ connectionsRepository.defaultConnectionIsValidated.value = false
+ yield()
+
+ assertThat(latest).isTrue()
+
+ job.cancel()
+ }
+
/** Regression test for b/275076959. */
@Test
fun failedConnection_dataSwitchInSameGroup_notFailed() =
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/shared/data/repository/ConnectivityRepositoryImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/shared/data/repository/ConnectivityRepositoryImplTest.kt
index 661002d..fa4e91b 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/shared/data/repository/ConnectivityRepositoryImplTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/shared/data/repository/ConnectivityRepositoryImplTest.kt
@@ -24,6 +24,7 @@
import android.net.NetworkCapabilities.TRANSPORT_WIFI
import android.net.vcn.VcnTransportInfo
import android.net.wifi.WifiInfo
+import android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.dump.DumpManager
@@ -37,6 +38,7 @@
import com.android.systemui.tuner.TunerService
import com.android.systemui.util.mockito.any
import com.android.systemui.util.mockito.argumentCaptor
+import com.android.systemui.util.mockito.eq
import com.android.systemui.util.mockito.mock
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.ExperimentalCoroutinesApi
@@ -655,6 +657,139 @@
}
@Test
+ fun vcnSubId_initiallyNull() {
+ assertThat(underTest.vcnSubId.value).isNull()
+ }
+
+ @Test
+ fun vcnSubId_tracksVcnTransportInfo() =
+ testScope.runTest {
+ val vcnInfo = VcnTransportInfo(SUB_1_ID)
+
+ var latest: Int? = null
+ val job = underTest.vcnSubId.onEach { latest = it }.launchIn(this)
+
+ val capabilities =
+ mock<NetworkCapabilities>().also {
+ whenever(it.hasTransport(TRANSPORT_CELLULAR)).thenReturn(true)
+ whenever(it.transportInfo).thenReturn(vcnInfo)
+ }
+
+ getDefaultNetworkCallback().onCapabilitiesChanged(NETWORK, capabilities)
+
+ assertThat(latest).isEqualTo(SUB_1_ID)
+ job.cancel()
+ }
+
+ @Test
+ fun vcnSubId_filersOutInvalid() =
+ testScope.runTest {
+ val vcnInfo = VcnTransportInfo(INVALID_SUBSCRIPTION_ID)
+
+ var latest: Int? = null
+ val job = underTest.vcnSubId.onEach { latest = it }.launchIn(this)
+
+ val capabilities =
+ mock<NetworkCapabilities>().also {
+ whenever(it.hasTransport(TRANSPORT_CELLULAR)).thenReturn(true)
+ whenever(it.transportInfo).thenReturn(vcnInfo)
+ }
+
+ getDefaultNetworkCallback().onCapabilitiesChanged(NETWORK, capabilities)
+
+ assertThat(latest).isNull()
+ job.cancel()
+ }
+
+ @Test
+ fun vcnSubId_nullIfNoTransportInfo() =
+ testScope.runTest {
+ var latest: Int? = null
+ val job = underTest.vcnSubId.onEach { latest = it }.launchIn(this)
+
+ val capabilities =
+ mock<NetworkCapabilities>().also {
+ whenever(it.hasTransport(TRANSPORT_CELLULAR)).thenReturn(true)
+ whenever(it.transportInfo).thenReturn(null)
+ }
+
+ getDefaultNetworkCallback().onCapabilitiesChanged(NETWORK, capabilities)
+
+ assertThat(latest).isNull()
+ job.cancel()
+ }
+
+ @Test
+ fun vcnSubId_nullIfVcnInfoIsNotCellular() =
+ testScope.runTest {
+ // If the underlying network of the VCN is a WiFi network, then there is no subId that
+ // could disagree with telephony's active data subscription id.
+
+ var latest: Int? = null
+ val job = underTest.vcnSubId.onEach { latest = it }.launchIn(this)
+
+ val wifiInfo = mock<WifiInfo>()
+ val vcnInfo = VcnTransportInfo(wifiInfo)
+ val capabilities =
+ mock<NetworkCapabilities>().also {
+ whenever(it.hasTransport(TRANSPORT_CELLULAR)).thenReturn(true)
+ whenever(it.transportInfo).thenReturn(vcnInfo)
+ }
+
+ getDefaultNetworkCallback().onCapabilitiesChanged(NETWORK, capabilities)
+
+ assertThat(latest).isNull()
+ job.cancel()
+ }
+
+ @Test
+ fun vcnSubId_changingVcnInfoIsTracked() =
+ testScope.runTest {
+ var latest: Int? = null
+ val job = underTest.vcnSubId.onEach { latest = it }.launchIn(this)
+
+ val wifiInfo = mock<WifiInfo>()
+ val wifiVcnInfo = VcnTransportInfo(wifiInfo)
+ val sub1VcnInfo = VcnTransportInfo(SUB_1_ID)
+ val sub2VcnInfo = VcnTransportInfo(SUB_2_ID)
+
+ val capabilities =
+ mock<NetworkCapabilities>().also {
+ whenever(it.hasTransport(TRANSPORT_WIFI)).thenReturn(true)
+ whenever(it.transportInfo).thenReturn(wifiVcnInfo)
+ }
+
+ // WIFI VCN info
+ getDefaultNetworkCallback().onCapabilitiesChanged(NETWORK, capabilities)
+
+ assertThat(latest).isNull()
+
+ // Cellular VCN info with subId 1
+ whenever(capabilities.hasTransport(eq(TRANSPORT_CELLULAR))).thenReturn(true)
+ whenever(capabilities.transportInfo).thenReturn(sub1VcnInfo)
+
+ getDefaultNetworkCallback().onCapabilitiesChanged(NETWORK, capabilities)
+
+ assertThat(latest).isEqualTo(SUB_1_ID)
+
+ // Cellular VCN info with subId 2
+ whenever(capabilities.transportInfo).thenReturn(sub2VcnInfo)
+
+ getDefaultNetworkCallback().onCapabilitiesChanged(NETWORK, capabilities)
+
+ assertThat(latest).isEqualTo(SUB_2_ID)
+
+ // No VCN anymore
+ whenever(capabilities.transportInfo).thenReturn(null)
+
+ getDefaultNetworkCallback().onCapabilitiesChanged(NETWORK, capabilities)
+
+ assertThat(latest).isNull()
+
+ job.cancel()
+ }
+
+ @Test
fun getMainOrUnderlyingWifiInfo_wifi_hasInfo() {
val wifiInfo = mock<WifiInfo>()
val capabilities =
@@ -964,6 +1099,9 @@
private const val SLOT_WIFI = "wifi"
private const val SLOT_MOBILE = "mobile"
+ private const val SUB_1_ID = 1
+ private const val SUB_2_ID = 2
+
const val NETWORK_ID = 45
val NETWORK = mock<Network>().apply { whenever(this.getNetId()).thenReturn(NETWORK_ID) }
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/shared/data/repository/FakeConnectivityRepository.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/shared/data/repository/FakeConnectivityRepository.kt
index 9e825b70..8f28cc0 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/shared/data/repository/FakeConnectivityRepository.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/shared/data/repository/FakeConnectivityRepository.kt
@@ -30,6 +30,8 @@
override val defaultConnections: StateFlow<DefaultConnectionModel> =
MutableStateFlow(DefaultConnectionModel())
+ override val vcnSubId: MutableStateFlow<Int?> = MutableStateFlow(null)
+
fun setForceHiddenIcons(hiddenIcons: Set<ConnectivitySlot>) {
_forceHiddenIcons.value = hiddenIcons
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/CollapsedStatusBarViewModelImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/CollapsedStatusBarViewModelImplTest.kt
index 5faed9d..c8c24a7 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/CollapsedStatusBarViewModelImplTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/CollapsedStatusBarViewModelImplTest.kt
@@ -18,6 +18,7 @@
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
+import com.android.systemui.coroutines.collectValues
import com.android.systemui.keyguard.data.repository.FakeKeyguardTransitionRepository
import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor
import com.android.systemui.keyguard.shared.model.KeyguardState
@@ -176,4 +177,139 @@
job.cancel()
}
+
+ @Test
+ fun transitionFromLockscreenToDreamStartedEvent_started_emitted() =
+ testScope.runTest {
+ val emissions by collectValues(underTest.transitionFromLockscreenToDreamStartedEvent)
+
+ keyguardTransitionRepository.sendTransitionStep(
+ TransitionStep(
+ KeyguardState.LOCKSCREEN,
+ KeyguardState.DREAMING,
+ value = 0f,
+ TransitionState.STARTED,
+ )
+ )
+
+ assertThat(emissions.size).isEqualTo(1)
+ }
+
+ @Test
+ fun transitionFromLockscreenToDreamStartedEvent_startedMultiple_emittedMultiple() =
+ testScope.runTest {
+ val emissions by collectValues(underTest.transitionFromLockscreenToDreamStartedEvent)
+
+ keyguardTransitionRepository.sendTransitionStep(
+ TransitionStep(
+ KeyguardState.LOCKSCREEN,
+ KeyguardState.DREAMING,
+ value = 0f,
+ TransitionState.STARTED,
+ )
+ )
+
+ keyguardTransitionRepository.sendTransitionStep(
+ TransitionStep(
+ KeyguardState.LOCKSCREEN,
+ KeyguardState.DREAMING,
+ value = 0f,
+ TransitionState.STARTED,
+ )
+ )
+
+ keyguardTransitionRepository.sendTransitionStep(
+ TransitionStep(
+ KeyguardState.LOCKSCREEN,
+ KeyguardState.DREAMING,
+ value = 0f,
+ TransitionState.STARTED,
+ )
+ )
+
+ assertThat(emissions.size).isEqualTo(3)
+ }
+
+ @Test
+ fun transitionFromLockscreenToDreamStartedEvent_startedThenRunning_emittedOnlyOne() =
+ testScope.runTest {
+ val emissions by collectValues(underTest.transitionFromLockscreenToDreamStartedEvent)
+
+ keyguardTransitionRepository.sendTransitionStep(
+ TransitionStep(
+ KeyguardState.LOCKSCREEN,
+ KeyguardState.DREAMING,
+ value = 0f,
+ TransitionState.STARTED,
+ )
+ )
+ assertThat(emissions.size).isEqualTo(1)
+
+ // WHEN the transition progresses through its animation by going through the RUNNING
+ // step with increasing fractions
+ keyguardTransitionRepository.sendTransitionStep(
+ TransitionStep(
+ KeyguardState.LOCKSCREEN,
+ KeyguardState.DREAMING,
+ value = .1f,
+ TransitionState.RUNNING,
+ )
+ )
+
+ keyguardTransitionRepository.sendTransitionStep(
+ TransitionStep(
+ KeyguardState.LOCKSCREEN,
+ KeyguardState.DREAMING,
+ value = .2f,
+ TransitionState.RUNNING,
+ )
+ )
+
+ keyguardTransitionRepository.sendTransitionStep(
+ TransitionStep(
+ KeyguardState.LOCKSCREEN,
+ KeyguardState.DREAMING,
+ value = .3f,
+ TransitionState.RUNNING,
+ )
+ )
+
+ // THEN the flow does not emit since the flow should only emit when the transition
+ // starts
+ assertThat(emissions.size).isEqualTo(1)
+ }
+
+ @Test
+ fun transitionFromLockscreenToDreamStartedEvent_irrelevantTransition_notEmitted() =
+ testScope.runTest {
+ val emissions by collectValues(underTest.transitionFromLockscreenToDreamStartedEvent)
+
+ keyguardTransitionRepository.sendTransitionStep(
+ TransitionStep(
+ KeyguardState.LOCKSCREEN,
+ KeyguardState.OCCLUDED,
+ value = 0f,
+ TransitionState.STARTED,
+ )
+ )
+
+ assertThat(emissions).isEmpty()
+ }
+
+ @Test
+ fun transitionFromLockscreenToDreamStartedEvent_irrelevantTransitionState_notEmitted() =
+ testScope.runTest {
+ val emissions by collectValues(underTest.transitionFromLockscreenToDreamStartedEvent)
+
+ keyguardTransitionRepository.sendTransitionStep(
+ TransitionStep(
+ KeyguardState.LOCKSCREEN,
+ KeyguardState.DREAMING,
+ value = 1.0f,
+ TransitionState.FINISHED,
+ )
+ )
+
+ assertThat(emissions).isEmpty()
+ }
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/FakeCollapsedStatusBarViewBinder.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/FakeCollapsedStatusBarViewBinder.kt
new file mode 100644
index 0000000..2ee928f
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/FakeCollapsedStatusBarViewBinder.kt
@@ -0,0 +1,39 @@
+/*
+ * 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.statusbar.pipeline.shared.ui.viewmodel
+
+import android.view.View
+import com.android.systemui.statusbar.pipeline.shared.ui.binder.CollapsedStatusBarViewBinder
+import com.android.systemui.statusbar.pipeline.shared.ui.binder.StatusBarVisibilityChangeListener
+
+/**
+ * A fake view binder that can be used from Java tests.
+ *
+ * Since Java tests can't run tests within test scopes, we need to bypass the flows from
+ * [CollapsedStatusBarViewModel] and just trigger the listener directly.
+ */
+class FakeCollapsedStatusBarViewBinder : CollapsedStatusBarViewBinder {
+ var listener: StatusBarVisibilityChangeListener? = null
+
+ override fun bind(
+ view: View,
+ viewModel: CollapsedStatusBarViewModel,
+ listener: StatusBarVisibilityChangeListener,
+ ) {
+ this.listener = listener
+ }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/FakeCollapsedStatusBarViewModel.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/FakeCollapsedStatusBarViewModel.kt
index cbf6637..88587b2 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/FakeCollapsedStatusBarViewModel.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/FakeCollapsedStatusBarViewModel.kt
@@ -16,8 +16,11 @@
package com.android.systemui.statusbar.pipeline.shared.ui.viewmodel
+import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.MutableStateFlow
class FakeCollapsedStatusBarViewModel : CollapsedStatusBarViewModel {
override val isTransitioningFromLockscreenToOccluded = MutableStateFlow(false)
+
+ override val transitionFromLockscreenToDreamStartedEvent = MutableSharedFlow<Unit>()
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BluetoothControllerImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BluetoothControllerImplTest.java
index 2b13705..7402b4d 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BluetoothControllerImplTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BluetoothControllerImplTest.java
@@ -14,6 +14,8 @@
package com.android.systemui.statusbar.policy;
+import static com.google.common.truth.Truth.assertThat;
+
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
@@ -44,7 +46,11 @@
import com.android.systemui.SysuiTestCase;
import com.android.systemui.bluetooth.BluetoothLogger;
import com.android.systemui.dump.DumpManager;
+import com.android.systemui.flags.FakeFeatureFlags;
+import com.android.systemui.flags.Flags;
import com.android.systemui.settings.UserTracker;
+import com.android.systemui.statusbar.policy.bluetooth.BluetoothRepository;
+import com.android.systemui.statusbar.policy.bluetooth.FakeBluetoothRepository;
import com.android.systemui.util.concurrency.FakeExecutor;
import com.android.systemui.util.time.FakeSystemClock;
@@ -69,6 +75,7 @@
private DumpManager mMockDumpManager;
private BluetoothControllerImpl mBluetoothControllerImpl;
private BluetoothAdapter mMockAdapter;
+ private final FakeFeatureFlags mFakeFeatureFlags = new FakeFeatureFlags();
private List<CachedBluetoothDevice> mDevices;
@@ -89,17 +96,26 @@
.thenReturn(mock(LocalBluetoothProfileManager.class));
mMockDumpManager = mock(DumpManager.class);
- mBluetoothControllerImpl = new BluetoothControllerImpl(mContext,
+ BluetoothRepository bluetoothRepository =
+ new FakeBluetoothRepository(mMockBluetoothManager);
+ mFakeFeatureFlags.set(Flags.NEW_BLUETOOTH_REPOSITORY, true);
+
+ mBluetoothControllerImpl = new BluetoothControllerImpl(
+ mContext,
+ mFakeFeatureFlags,
mUserTracker,
mMockDumpManager,
mock(BluetoothLogger.class),
+ bluetoothRepository,
mTestableLooper.getLooper(),
mMockBluetoothManager,
mMockAdapter);
}
@Test
- public void testNoConnectionWithDevices() {
+ public void testNoConnectionWithDevices_repoFlagOff() {
+ mFakeFeatureFlags.set(Flags.NEW_BLUETOOTH_REPOSITORY, false);
+
CachedBluetoothDevice device = mock(CachedBluetoothDevice.class);
when(device.isConnected()).thenReturn(true);
when(device.getMaxConnectionState()).thenReturn(BluetoothProfile.STATE_CONNECTED);
@@ -113,7 +129,27 @@
}
@Test
- public void testOnServiceConnected_updatesConnectionState() {
+ public void testNoConnectionWithDevices_repoFlagOn() {
+ mFakeFeatureFlags.set(Flags.NEW_BLUETOOTH_REPOSITORY, true);
+
+ CachedBluetoothDevice device = mock(CachedBluetoothDevice.class);
+ when(device.isConnected()).thenReturn(true);
+ when(device.getMaxConnectionState()).thenReturn(BluetoothProfile.STATE_CONNECTED);
+
+ mDevices.add(device);
+ when(mMockLocalAdapter.getConnectionState())
+ .thenReturn(BluetoothAdapter.STATE_DISCONNECTED);
+
+ mBluetoothControllerImpl.onConnectionStateChanged(null,
+ BluetoothAdapter.STATE_DISCONNECTED);
+
+ assertTrue(mBluetoothControllerImpl.isBluetoothConnected());
+ }
+
+ @Test
+ public void testOnServiceConnected_updatesConnectionState_repoFlagOff() {
+ mFakeFeatureFlags.set(Flags.NEW_BLUETOOTH_REPOSITORY, false);
+
when(mMockLocalAdapter.getConnectionState()).thenReturn(BluetoothAdapter.STATE_CONNECTING);
mBluetoothControllerImpl.onServiceConnected();
@@ -123,6 +159,58 @@
}
@Test
+ public void testOnServiceConnected_updatesConnectionState_repoFlagOn() {
+ mFakeFeatureFlags.set(Flags.NEW_BLUETOOTH_REPOSITORY, true);
+
+ when(mMockLocalAdapter.getConnectionState()).thenReturn(BluetoothAdapter.STATE_CONNECTING);
+
+ mBluetoothControllerImpl.onServiceConnected();
+
+ assertTrue(mBluetoothControllerImpl.isBluetoothConnecting());
+ assertFalse(mBluetoothControllerImpl.isBluetoothConnected());
+ }
+
+ @Test
+ public void getConnectedDevices_onlyReturnsConnected_repoFlagOff() {
+ mFakeFeatureFlags.set(Flags.NEW_BLUETOOTH_REPOSITORY, false);
+
+ CachedBluetoothDevice device1Disconnected = mock(CachedBluetoothDevice.class);
+ when(device1Disconnected.isConnected()).thenReturn(false);
+ mDevices.add(device1Disconnected);
+
+ CachedBluetoothDevice device2Connected = mock(CachedBluetoothDevice.class);
+ when(device2Connected.isConnected()).thenReturn(true);
+ mDevices.add(device2Connected);
+
+ mBluetoothControllerImpl.onDeviceAdded(device1Disconnected);
+ mBluetoothControllerImpl.onDeviceAdded(device2Connected);
+
+ assertThat(mBluetoothControllerImpl.getConnectedDevices()).hasSize(1);
+ assertThat(mBluetoothControllerImpl.getConnectedDevices().get(0))
+ .isEqualTo(device2Connected);
+ }
+
+ @Test
+ public void getConnectedDevices_onlyReturnsConnected_repoFlagOn() {
+ mFakeFeatureFlags.set(Flags.NEW_BLUETOOTH_REPOSITORY, true);
+
+ CachedBluetoothDevice device1Disconnected = mock(CachedBluetoothDevice.class);
+ when(device1Disconnected.isConnected()).thenReturn(false);
+ mDevices.add(device1Disconnected);
+
+ CachedBluetoothDevice device2Connected = mock(CachedBluetoothDevice.class);
+ when(device2Connected.isConnected()).thenReturn(true);
+ mDevices.add(device2Connected);
+
+ mBluetoothControllerImpl.onDeviceAdded(device1Disconnected);
+ mBluetoothControllerImpl.onDeviceAdded(device2Connected);
+
+ assertThat(mBluetoothControllerImpl.getConnectedDevices()).hasSize(1);
+ assertThat(mBluetoothControllerImpl.getConnectedDevices().get(0))
+ .isEqualTo(device2Connected);
+ }
+
+ @Test
public void testOnBluetoothStateChange_updatesBluetoothState() {
mBluetoothControllerImpl.onBluetoothStateChanged(BluetoothAdapter.STATE_OFF);
@@ -147,8 +235,9 @@
}
@Test
- public void testOnACLConnectionStateChange_updatesBluetoothStateOnConnection()
- throws Exception {
+ public void testOnACLConnectionStateChange_updatesBluetoothStateOnConnection_repoFlagOff() {
+ mFakeFeatureFlags.set(Flags.NEW_BLUETOOTH_REPOSITORY, false);
+
BluetoothController.Callback callback = mock(BluetoothController.Callback.class);
mBluetoothControllerImpl.addCallback(callback);
@@ -168,6 +257,29 @@
}
@Test
+ public void testOnACLConnectionStateChange_updatesBluetoothStateOnConnection_repoFlagOn() {
+ mFakeFeatureFlags.set(Flags.NEW_BLUETOOTH_REPOSITORY, true);
+
+ BluetoothController.Callback callback = mock(BluetoothController.Callback.class);
+ mBluetoothControllerImpl.addCallback(callback);
+
+ assertFalse(mBluetoothControllerImpl.isBluetoothConnected());
+ CachedBluetoothDevice device = mock(CachedBluetoothDevice.class);
+ mDevices.add(device);
+ when(device.isConnected()).thenReturn(true);
+ when(device.getMaxConnectionState()).thenReturn(BluetoothProfile.STATE_CONNECTED);
+ reset(callback);
+ mBluetoothControllerImpl.onAclConnectionStateChanged(device,
+ BluetoothProfile.STATE_CONNECTED);
+
+ mTestableLooper.processAllMessages();
+
+ assertTrue(mBluetoothControllerImpl.isBluetoothConnected());
+ verify(callback, atLeastOnce()).onBluetoothStateChange(anyBoolean());
+ }
+
+
+ @Test
public void testOnActiveDeviceChanged_updatesAudioActive() {
assertFalse(mBluetoothControllerImpl.isBluetoothAudioActive());
assertFalse(mBluetoothControllerImpl.isBluetoothAudioProfileOnly());
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/bluetooth/BluetoothRepositoryImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/bluetooth/BluetoothRepositoryImplTest.kt
new file mode 100644
index 0000000..6f40f15
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/bluetooth/BluetoothRepositoryImplTest.kt
@@ -0,0 +1,213 @@
+/*
+ * 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.statusbar.policy.bluetooth
+
+import android.bluetooth.BluetoothProfile
+import androidx.test.filters.SmallTest
+import com.android.settingslib.bluetooth.CachedBluetoothDevice
+import com.android.settingslib.bluetooth.LocalBluetoothAdapter
+import com.android.settingslib.bluetooth.LocalBluetoothManager
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.util.mockito.mock
+import com.android.systemui.util.mockito.whenever
+import com.google.common.truth.Truth.assertThat
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.test.StandardTestDispatcher
+import kotlinx.coroutines.test.TestCoroutineScheduler
+import kotlinx.coroutines.test.TestDispatcher
+import kotlinx.coroutines.test.TestScope
+import org.junit.Before
+import org.junit.Test
+import org.mockito.Mock
+import org.mockito.MockitoAnnotations
+
+@OptIn(ExperimentalCoroutinesApi::class)
+@SmallTest
+class BluetoothRepositoryImplTest : SysuiTestCase() {
+
+ private lateinit var underTest: BluetoothRepositoryImpl
+
+ private lateinit var scheduler: TestCoroutineScheduler
+ private lateinit var dispatcher: TestDispatcher
+ private lateinit var testScope: TestScope
+
+ @Mock private lateinit var localBluetoothManager: LocalBluetoothManager
+ @Mock private lateinit var bluetoothAdapter: LocalBluetoothAdapter
+
+ @Before
+ fun setUp() {
+ MockitoAnnotations.initMocks(this)
+ whenever(localBluetoothManager.bluetoothAdapter).thenReturn(bluetoothAdapter)
+
+ scheduler = TestCoroutineScheduler()
+ dispatcher = StandardTestDispatcher(scheduler)
+ testScope = TestScope(dispatcher)
+
+ underTest =
+ BluetoothRepositoryImpl(testScope.backgroundScope, dispatcher, localBluetoothManager)
+ }
+
+ @Test
+ fun fetchConnectionStatusInBackground_currentDevicesEmpty_maxStateIsManagerState() {
+ whenever(bluetoothAdapter.connectionState).thenReturn(BluetoothProfile.STATE_CONNECTING)
+
+ val status = fetchConnectionStatus(currentDevices = emptyList())
+
+ assertThat(status.maxConnectionState).isEqualTo(BluetoothProfile.STATE_CONNECTING)
+ }
+
+ @Test
+ fun fetchConnectionStatusInBackground_currentDevicesEmpty_nullManager_maxStateIsDisconnected() {
+ // This CONNECTING state should be unused because localBluetoothManager is null
+ whenever(bluetoothAdapter.connectionState).thenReturn(BluetoothProfile.STATE_CONNECTING)
+ underTest =
+ BluetoothRepositoryImpl(
+ testScope.backgroundScope,
+ dispatcher,
+ localBluetoothManager = null,
+ )
+
+ val status = fetchConnectionStatus(currentDevices = emptyList())
+
+ assertThat(status.maxConnectionState).isEqualTo(BluetoothProfile.STATE_DISCONNECTED)
+ }
+
+ @Test
+ fun fetchConnectionStatusInBackground_managerStateLargerThanDeviceStates_maxStateIsManager() {
+ whenever(bluetoothAdapter.connectionState).thenReturn(BluetoothProfile.STATE_CONNECTING)
+ val device1 =
+ mock<CachedBluetoothDevice>().also {
+ whenever(it.maxConnectionState).thenReturn(BluetoothProfile.STATE_DISCONNECTED)
+ }
+ val device2 =
+ mock<CachedBluetoothDevice>().also {
+ whenever(it.maxConnectionState).thenReturn(BluetoothProfile.STATE_DISCONNECTED)
+ }
+
+ val status = fetchConnectionStatus(currentDevices = listOf(device1, device2))
+
+ assertThat(status.maxConnectionState).isEqualTo(BluetoothProfile.STATE_CONNECTING)
+ }
+
+ @Test
+ fun fetchConnectionStatusInBackground_oneCurrentDevice_maxStateIsDeviceState() {
+ whenever(bluetoothAdapter.connectionState).thenReturn(BluetoothProfile.STATE_DISCONNECTED)
+ val device =
+ mock<CachedBluetoothDevice>().also {
+ whenever(it.maxConnectionState).thenReturn(BluetoothProfile.STATE_CONNECTING)
+ }
+
+ val status = fetchConnectionStatus(currentDevices = listOf(device))
+
+ assertThat(status.maxConnectionState).isEqualTo(BluetoothProfile.STATE_CONNECTING)
+ }
+
+ @Test
+ fun fetchConnectionStatusInBackground_multipleDevices_maxStateIsHighestState() {
+ whenever(bluetoothAdapter.connectionState).thenReturn(BluetoothProfile.STATE_DISCONNECTED)
+
+ val device1 =
+ mock<CachedBluetoothDevice>().also {
+ whenever(it.maxConnectionState).thenReturn(BluetoothProfile.STATE_CONNECTING)
+ whenever(it.isConnected).thenReturn(false)
+ }
+ val device2 =
+ mock<CachedBluetoothDevice>().also {
+ whenever(it.maxConnectionState).thenReturn(BluetoothProfile.STATE_CONNECTED)
+ whenever(it.isConnected).thenReturn(true)
+ }
+
+ val status = fetchConnectionStatus(currentDevices = listOf(device1, device2))
+
+ assertThat(status.maxConnectionState).isEqualTo(BluetoothProfile.STATE_CONNECTED)
+ }
+
+ @Test
+ fun fetchConnectionStatusInBackground_devicesNotConnected_maxStateIsDisconnected() {
+ whenever(bluetoothAdapter.connectionState).thenReturn(BluetoothProfile.STATE_CONNECTING)
+
+ // WHEN the devices say their state is CONNECTED but [isConnected] is false
+ val device1 =
+ mock<CachedBluetoothDevice>().also {
+ whenever(it.maxConnectionState).thenReturn(BluetoothProfile.STATE_CONNECTED)
+ whenever(it.isConnected).thenReturn(false)
+ }
+ val device2 =
+ mock<CachedBluetoothDevice>().also {
+ whenever(it.maxConnectionState).thenReturn(BluetoothProfile.STATE_CONNECTED)
+ whenever(it.isConnected).thenReturn(false)
+ }
+
+ val status = fetchConnectionStatus(currentDevices = listOf(device1, device2))
+
+ // THEN the max state is DISCONNECTED
+ assertThat(status.maxConnectionState).isEqualTo(BluetoothProfile.STATE_DISCONNECTED)
+ }
+
+ @Test
+ fun fetchConnectionStatusInBackground_currentDevicesEmpty_connectedDevicesEmpty() {
+ val status = fetchConnectionStatus(currentDevices = emptyList())
+
+ assertThat(status.connectedDevices).isEmpty()
+ }
+
+ @Test
+ fun fetchConnectionStatusInBackground_oneCurrentDeviceDisconnected_connectedDevicesEmpty() {
+ val device =
+ mock<CachedBluetoothDevice>().also { whenever(it.isConnected).thenReturn(false) }
+
+ val status = fetchConnectionStatus(currentDevices = listOf(device))
+
+ assertThat(status.connectedDevices).isEmpty()
+ }
+
+ @Test
+ fun fetchConnectionStatusInBackground_oneCurrentDeviceConnected_connectedDevicesHasDevice() {
+ val device =
+ mock<CachedBluetoothDevice>().also { whenever(it.isConnected).thenReturn(true) }
+
+ val status = fetchConnectionStatus(currentDevices = listOf(device))
+
+ assertThat(status.connectedDevices).isEqualTo(listOf(device))
+ }
+
+ @Test
+ fun fetchConnectionStatusInBackground_multipleDevices_connectedDevicesHasOnlyConnected() {
+ val device1Connected =
+ mock<CachedBluetoothDevice>().also { whenever(it.isConnected).thenReturn(true) }
+ val device2Disconnected =
+ mock<CachedBluetoothDevice>().also { whenever(it.isConnected).thenReturn(false) }
+ val device3Connected =
+ mock<CachedBluetoothDevice>().also { whenever(it.isConnected).thenReturn(true) }
+
+ val status =
+ fetchConnectionStatus(
+ currentDevices = listOf(device1Connected, device2Disconnected, device3Connected)
+ )
+
+ assertThat(status.connectedDevices).isEqualTo(listOf(device1Connected, device3Connected))
+ }
+
+ private fun fetchConnectionStatus(
+ currentDevices: Collection<CachedBluetoothDevice>
+ ): ConnectionStatusModel {
+ var receivedStatus: ConnectionStatusModel? = null
+ underTest.fetchConnectionStatusInBackground(currentDevices) { status ->
+ receivedStatus = status
+ }
+ scheduler.runCurrent()
+ return receivedStatus!!
+ }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/bluetooth/FakeBluetoothRepository.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/bluetooth/FakeBluetoothRepository.kt
new file mode 100644
index 0000000..d8c0f77
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/bluetooth/FakeBluetoothRepository.kt
@@ -0,0 +1,48 @@
+/*
+ * 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.statusbar.policy.bluetooth
+
+import com.android.settingslib.bluetooth.CachedBluetoothDevice
+import com.android.settingslib.bluetooth.LocalBluetoothManager
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.test.StandardTestDispatcher
+import kotlinx.coroutines.test.TestCoroutineScheduler
+import kotlinx.coroutines.test.TestScope
+
+/**
+ * Fake [BluetoothRepository] that delegates to the real [BluetoothRepositoryImpl].
+ *
+ * We only need this because [BluetoothRepository] is called from Java, which can't use [TestScope],
+ * [StandardTestDispatcher], etc. to create a test version of the repo. This class uses those test
+ * items under-the-hood so Java classes can indirectly access them.
+ */
+@OptIn(ExperimentalCoroutinesApi::class)
+class FakeBluetoothRepository(localBluetoothManager: LocalBluetoothManager) : BluetoothRepository {
+
+ private val scheduler = TestCoroutineScheduler()
+ private val dispatcher = StandardTestDispatcher(scheduler)
+ private val testScope = TestScope(dispatcher)
+
+ private val impl =
+ BluetoothRepositoryImpl(testScope.backgroundScope, dispatcher, localBluetoothManager)
+
+ override fun fetchConnectionStatusInBackground(
+ currentDevices: Collection<CachedBluetoothDevice>,
+ callback: ConnectionStatusFetchedCallback
+ ) {
+ impl.fetchConnectionStatusInBackground(currentDevices, callback)
+ scheduler.runCurrent()
+ }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/stylus/StylusUsiPowerStartableTest.kt b/packages/SystemUI/tests/src/com/android/systemui/stylus/StylusUsiPowerStartableTest.kt
index 3db0ecc..a5e52a4 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/stylus/StylusUsiPowerStartableTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/stylus/StylusUsiPowerStartableTest.kt
@@ -113,20 +113,6 @@
}
@Test
- fun onStylusBluetoothConnected_refreshesNotification() {
- startable.onStylusBluetoothConnected(STYLUS_DEVICE_ID, "ANY")
-
- verify(stylusUsiPowerUi, times(1)).refresh()
- }
-
- @Test
- fun onStylusBluetoothDisconnected_refreshesNotification() {
- startable.onStylusBluetoothDisconnected(STYLUS_DEVICE_ID, "ANY")
-
- verify(stylusUsiPowerUi, times(1)).refresh()
- }
-
- @Test
fun onStylusUsiBatteryStateChanged_batteryPresentValidCapacity_refreshesNotification() {
val batteryState = FixedCapacityBatteryState(0.1f)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/stylus/StylusUsiPowerUiTest.kt b/packages/SystemUI/tests/src/com/android/systemui/stylus/StylusUsiPowerUiTest.kt
index 572aca9..90821bd 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/stylus/StylusUsiPowerUiTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/stylus/StylusUsiPowerUiTest.kt
@@ -45,6 +45,7 @@
import org.mockito.ArgumentCaptor
import org.mockito.Captor
import org.mockito.Mock
+import org.mockito.Mockito.clearInvocations
import org.mockito.Mockito.doNothing
import org.mockito.Mockito.inOrder
import org.mockito.Mockito.never
@@ -194,22 +195,14 @@
}
@Test
- fun refresh_hasConnectedBluetoothStylus_cancelsNotification() {
- whenever(inputManager.inputDeviceIds).thenReturn(intArrayOf(0))
-
- stylusUsiPowerUi.refresh()
-
- verify(notificationManager).cancel(R.string.stylus_battery_low_percentage)
- }
-
- @Test
- fun refresh_hasConnectedBluetoothStylus_existingNotification_cancelsNotification() {
+ fun refresh_hasConnectedBluetoothStylus_existingNotification_doesNothing() {
stylusUsiPowerUi.updateBatteryState(0, FixedCapacityBatteryState(0.1f))
whenever(inputManager.inputDeviceIds).thenReturn(intArrayOf(0))
+ clearInvocations(notificationManager)
stylusUsiPowerUi.refresh()
- verify(notificationManager).cancel(R.string.stylus_battery_low_percentage)
+ verifyNoMoreInteractions(notificationManager)
}
@Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/theme/ThemeOverlayControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/theme/ThemeOverlayControllerTest.java
index 17b5e05..09ac0e3 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/theme/ThemeOverlayControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/theme/ThemeOverlayControllerTest.java
@@ -16,6 +16,8 @@
package com.android.systemui.theme;
+import static android.util.TypedValue.TYPE_INT_COLOR_ARGB8;
+
import static com.android.systemui.keyguard.WakefulnessLifecycle.WAKEFULNESS_AWAKE;
import static com.android.systemui.theme.ThemeOverlayApplier.OVERLAY_CATEGORY_ACCENT_COLOR;
import static com.android.systemui.theme.ThemeOverlayApplier.OVERLAY_CATEGORY_SYSTEM_PALETTE;
@@ -29,6 +31,7 @@
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.reset;
+import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.when;
@@ -926,4 +929,38 @@
verify(mThemeOverlayApplier, never()).applyCurrentUserOverlays(any(), any(), anyInt(),
any());
}
+
+ @Test
+ public void createDynamicOverlay_addsAllDynamicColors() {
+ // Trigger new wallpaper colors to generate an overlay
+ WallpaperColors mainColors = new WallpaperColors(Color.valueOf(Color.RED),
+ Color.valueOf(Color.BLUE), null);
+ mColorsListener.getValue().onColorsChanged(mainColors, WallpaperManager.FLAG_SYSTEM,
+ USER_SYSTEM);
+ ArgumentCaptor<FabricatedOverlay[]> themeOverlays =
+ ArgumentCaptor.forClass(FabricatedOverlay[].class);
+
+ verify(mThemeOverlayApplier)
+ .applyCurrentUserOverlays(any(), themeOverlays.capture(), anyInt(), any());
+
+ FabricatedOverlay[] overlays = themeOverlays.getValue();
+ FabricatedOverlay accents = overlays[0];
+ FabricatedOverlay neutrals = overlays[1];
+ FabricatedOverlay dynamic = overlays[2];
+
+ final int colorsPerPalette = 12;
+
+ // Color resources were added for all 3 accent palettes
+ verify(accents, times(colorsPerPalette * 3))
+ .setResourceValue(any(String.class), eq(TYPE_INT_COLOR_ARGB8), anyInt(), eq(null));
+ // Color resources were added for all 2 neutral palettes
+ verify(neutrals, times(colorsPerPalette * 2))
+ .setResourceValue(any(String.class), eq(TYPE_INT_COLOR_ARGB8), anyInt(), eq(null));
+ // All dynamic colors were added twice: light and dark them
+ // All fixed colors were added once
+ verify(dynamic, times(
+ DynamicColors.ALL_DYNAMIC_COLORS_MAPPED.size() * 2
+ + DynamicColors.FIXED_COLORS_MAPPED.size())
+ ).setResourceValue(any(String.class), eq(TYPE_INT_COLOR_ARGB8), anyInt(), eq(null));
+ }
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/unfold/FoldAodAnimationControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/unfold/FoldAodAnimationControllerTest.kt
index 8fc0a1a..d9ee081 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/unfold/FoldAodAnimationControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/unfold/FoldAodAnimationControllerTest.kt
@@ -146,7 +146,7 @@
fun onFolded_aodDisabled_doesNotLogLatency() =
runBlocking(IMMEDIATE) {
val job = underTest.listenForDozing(this)
- keyguardRepository.setDozing(true)
+ keyguardRepository.setIsDozing(true)
setAodEnabled(enabled = false)
yield()
@@ -163,7 +163,7 @@
fun onFolded_aodEnabled_logsLatency() =
runBlocking(IMMEDIATE) {
val job = underTest.listenForDozing(this)
- keyguardRepository.setDozing(true)
+ keyguardRepository.setIsDozing(true)
setAodEnabled(enabled = true)
yield()
@@ -181,7 +181,7 @@
fun onFolded_onScreenTurningOnInvokedTwice_doesNotLogLatency() =
runBlocking(IMMEDIATE) {
val job = underTest.listenForDozing(this)
- keyguardRepository.setDozing(true)
+ keyguardRepository.setIsDozing(true)
setAodEnabled(enabled = true)
yield()
@@ -200,10 +200,35 @@
}
@Test
+ fun onFolded_onScreenTurningOnWithoutDozingThenWithDozing_doesNotLogLatency() =
+ runBlocking(IMMEDIATE) {
+ val job = underTest.listenForDozing(this)
+ keyguardRepository.setIsDozing(false)
+ setAodEnabled(enabled = true)
+
+ yield()
+
+ fold()
+ simulateScreenTurningOn()
+ reset(latencyTracker)
+
+ // Now enable dozing and trigger a second run through the aod animation code. It should
+ // not rerun the animation
+ keyguardRepository.setIsDozing(true)
+ yield()
+ simulateScreenTurningOn()
+
+ verify(latencyTracker, never()).onActionStart(any())
+ verify(latencyTracker, never()).onActionEnd(any())
+
+ job.cancel()
+ }
+
+ @Test
fun onFolded_animationCancelled_doesNotLogLatency() =
runBlocking(IMMEDIATE) {
val job = underTest.listenForDozing(this)
- keyguardRepository.setDozing(true)
+ keyguardRepository.setIsDozing(true)
setAodEnabled(enabled = true)
yield()
diff --git a/packages/SystemUI/tests/src/com/android/systemui/volume/CsdWarningDialogTest.java b/packages/SystemUI/tests/src/com/android/systemui/volume/CsdWarningDialogTest.java
index 9cf3e44..b0bd83e 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/volume/CsdWarningDialogTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/volume/CsdWarningDialogTest.java
@@ -22,7 +22,6 @@
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import android.app.Notification;
@@ -75,17 +74,14 @@
}
@Test
- public void create5XCsdDiSalogAndWait_willNotSendNotification() {
+ public void create5XCsdDiSalogAndWait_willSendNotification() {
FakeExecutor executor = new FakeExecutor(new FakeSystemClock());
CsdWarningDialog dialog = new CsdWarningDialog(CSD_WARNING_DOSE_REPEATED_5X, mContext,
mAudioManager, mNotificationManager, executor, null);
dialog.show();
- executor.advanceClockToLast();
- executor.runAllReady();
- dialog.dismiss();
- verify(mNotificationManager, never()).notify(
+ verify(mNotificationManager).notify(
eq(SystemMessageProto.SystemMessage.NOTE_CSD_LOWER_AUDIO), any(Notification.class));
}
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogImplTest.java
index e06b43a..45a37cf 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogImplTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogImplTest.java
@@ -17,22 +17,28 @@
package com.android.systemui.volume;
import static com.android.systemui.volume.Events.DISMISS_REASON_UNKNOWN;
+import static com.android.systemui.volume.Events.SHOW_REASON_UNKNOWN;
import static com.android.systemui.volume.VolumeDialogControllerImpl.STREAMS;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
import android.app.KeyguardManager;
+import android.content.res.Configuration;
import android.media.AudioManager;
import android.os.SystemClock;
import android.provider.DeviceConfig;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
+import android.view.Gravity;
import android.view.InputDevice;
import android.view.MotionEvent;
import android.view.View;
@@ -53,7 +59,9 @@
import com.android.systemui.plugins.VolumeDialogController.State;
import com.android.systemui.statusbar.policy.AccessibilityManagerWrapper;
import com.android.systemui.statusbar.policy.ConfigurationController;
+import com.android.systemui.statusbar.policy.DevicePostureController;
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
+import com.android.systemui.statusbar.policy.FakeConfigurationController;
import com.android.systemui.util.DeviceConfigProxyFake;
import com.android.systemui.util.concurrency.FakeExecutor;
import com.android.systemui.util.time.FakeSystemClock;
@@ -82,6 +90,9 @@
View mDrawerNormal;
private DeviceConfigProxyFake mDeviceConfigProxy;
private FakeExecutor mExecutor;
+ private TestableLooper mTestableLooper;
+ private ConfigurationController mConfigurationController;
+ private int mOriginalOrientation;
@Mock
VolumeDialogController mVolumeDialogController;
@@ -92,8 +103,6 @@
@Mock
DeviceProvisionedController mDeviceProvisionedController;
@Mock
- ConfigurationController mConfigurationController;
- @Mock
MediaOutputDialogFactory mMediaOutputDialogFactory;
@Mock
VolumePanelFactory mVolumePanelFactory;
@@ -104,6 +113,8 @@
@Mock
private DumpManager mDumpManager;
@Mock CsdWarningDialog mCsdWarningDialog;
+ @Mock
+ DevicePostureController mPostureController;
private final CsdWarningDialog.Factory mCsdWarningDialogFactory =
new CsdWarningDialog.Factory() {
@@ -119,9 +130,17 @@
getContext().addMockSystemService(KeyguardManager.class, mKeyguard);
+ mTestableLooper = TestableLooper.get(this);
mDeviceConfigProxy = new DeviceConfigProxyFake();
mExecutor = new FakeExecutor(new FakeSystemClock());
+ when(mPostureController.getDevicePosture())
+ .thenReturn(DevicePostureController.DEVICE_POSTURE_CLOSED);
+
+ mOriginalOrientation = mContext.getResources().getConfiguration().orientation;
+
+ mConfigurationController = new FakeConfigurationController();
+
mDialog = new VolumeDialogImpl(
getContext(),
mVolumeDialogController,
@@ -135,8 +154,9 @@
mDeviceConfigProxy,
mExecutor,
mCsdWarningDialogFactory,
- mDumpManager
- );
+ mPostureController,
+ mTestableLooper.getLooper(),
+ mDumpManager);
mDialog.init(0, null);
State state = createShellState();
mDialog.onStateChangedH(state);
@@ -227,6 +247,7 @@
ArgumentCaptor.forClass(VolumeDialogController.Callbacks.class);
verify(mVolumeDialogController).addCallback(controllerCallbackCapture.capture(), any());
VolumeDialogController.Callbacks callbacks = controllerCallbackCapture.getValue();
+
callbacks.onShowSafetyWarning(AudioManager.FLAG_SHOW_UI);
verify(mAccessibilityMgr).getRecommendedTimeoutMillis(
VolumeDialogImpl.DIALOG_SAFETYWARNING_TIMEOUT_MILLIS,
@@ -371,11 +392,171 @@
verify(mCsdWarningDialog).show();
}
+ @Test
+ public void ifPortraitHalfOpen_drawVerticallyTop() {
+ DevicePostureController devicePostureController = mock(DevicePostureController.class);
+ when(devicePostureController.getDevicePosture())
+ .thenReturn(DevicePostureController.DEVICE_POSTURE_CLOSED);
+
+ VolumeDialogImpl dialog = new VolumeDialogImpl(
+ getContext(),
+ mVolumeDialogController,
+ mAccessibilityMgr,
+ mDeviceProvisionedController,
+ mConfigurationController,
+ mMediaOutputDialogFactory,
+ mVolumePanelFactory,
+ mActivityStarter,
+ mInteractionJankMonitor,
+ mDeviceConfigProxy,
+ mExecutor,
+ mCsdWarningDialogFactory,
+ devicePostureController,
+ mTestableLooper.getLooper(),
+ mDumpManager
+ );
+ dialog.init(0 , null);
+
+ verify(devicePostureController).addCallback(any());
+ dialog.onPostureChanged(DevicePostureController.DEVICE_POSTURE_HALF_OPENED);
+ mTestableLooper.processAllMessages(); // let dismiss() finish
+
+ setOrientation(Configuration.ORIENTATION_PORTRAIT);
+
+ // Call show() to trigger layout updates before verifying position
+ dialog.show(SHOW_REASON_UNKNOWN);
+ mTestableLooper.processAllMessages(); // let show() finish before assessing its side-effect
+
+ int gravity = dialog.getWindowGravity();
+ assertEquals(Gravity.TOP, gravity & Gravity.VERTICAL_GRAVITY_MASK);
+ }
+
+ @Test
+ public void ifPortraitAndOpen_drawCenterVertically() {
+ DevicePostureController devicePostureController = mock(DevicePostureController.class);
+ when(devicePostureController.getDevicePosture())
+ .thenReturn(DevicePostureController.DEVICE_POSTURE_CLOSED);
+
+ VolumeDialogImpl dialog = new VolumeDialogImpl(
+ getContext(),
+ mVolumeDialogController,
+ mAccessibilityMgr,
+ mDeviceProvisionedController,
+ mConfigurationController,
+ mMediaOutputDialogFactory,
+ mVolumePanelFactory,
+ mActivityStarter,
+ mInteractionJankMonitor,
+ mDeviceConfigProxy,
+ mExecutor,
+ mCsdWarningDialogFactory,
+ devicePostureController,
+ mTestableLooper.getLooper(),
+ mDumpManager
+ );
+ dialog.init(0, null);
+
+ verify(devicePostureController).addCallback(any());
+ dialog.onPostureChanged(DevicePostureController.DEVICE_POSTURE_OPENED);
+ mTestableLooper.processAllMessages(); // let dismiss() finish
+
+ setOrientation(Configuration.ORIENTATION_PORTRAIT);
+
+ dialog.show(SHOW_REASON_UNKNOWN);
+ mTestableLooper.processAllMessages(); // let show() finish before assessing its side-effect
+
+ int gravity = dialog.getWindowGravity();
+ assertEquals(Gravity.CENTER_VERTICAL, gravity & Gravity.VERTICAL_GRAVITY_MASK);
+ }
+
+ @Test
+ public void ifLandscapeAndHalfOpen_drawCenterVertically() {
+ DevicePostureController devicePostureController = mock(DevicePostureController.class);
+ when(devicePostureController.getDevicePosture())
+ .thenReturn(DevicePostureController.DEVICE_POSTURE_CLOSED);
+
+ VolumeDialogImpl dialog = new VolumeDialogImpl(
+ getContext(),
+ mVolumeDialogController,
+ mAccessibilityMgr,
+ mDeviceProvisionedController,
+ mConfigurationController,
+ mMediaOutputDialogFactory,
+ mVolumePanelFactory,
+ mActivityStarter,
+ mInteractionJankMonitor,
+ mDeviceConfigProxy,
+ mExecutor,
+ mCsdWarningDialogFactory,
+ devicePostureController,
+ mTestableLooper.getLooper(),
+ mDumpManager
+ );
+ dialog.init(0, null);
+
+ verify(devicePostureController).addCallback(any());
+ dialog.onPostureChanged(DevicePostureController.DEVICE_POSTURE_HALF_OPENED);
+ mTestableLooper.processAllMessages(); // let dismiss() finish
+
+ setOrientation(Configuration.ORIENTATION_LANDSCAPE);
+
+ dialog.show(SHOW_REASON_UNKNOWN);
+ mTestableLooper.processAllMessages(); // let show() finish before assessing its side-effect
+
+ int gravity = dialog.getWindowGravity();
+ assertEquals(Gravity.CENTER_VERTICAL, gravity & Gravity.VERTICAL_GRAVITY_MASK);
+ }
+
+ @Test
+ public void dialogInit_addsPostureControllerCallback() {
+ // init is already called in setup
+ verify(mPostureController).addCallback(any());
+ }
+
+ @Test
+ public void dialogDestroy_removesPostureControllerCallback() {
+ VolumeDialogImpl dialog = new VolumeDialogImpl(
+ getContext(),
+ mVolumeDialogController,
+ mAccessibilityMgr,
+ mDeviceProvisionedController,
+ mConfigurationController,
+ mMediaOutputDialogFactory,
+ mVolumePanelFactory,
+ mActivityStarter,
+ mInteractionJankMonitor,
+ mDeviceConfigProxy,
+ mExecutor,
+ mCsdWarningDialogFactory,
+ mPostureController,
+ mTestableLooper.getLooper(),
+ mDumpManager
+ );
+ dialog.init(0, null);
+
+ verify(mPostureController, never()).removeCallback(any());
+
+ dialog.destroy();
+
+ verify(mPostureController).removeCallback(any());
+ }
+
+ private void setOrientation(int orientation) {
+ Configuration config = new Configuration();
+ config.orientation = orientation;
+ if (mConfigurationController != null) {
+ mConfigurationController.onConfigurationChanged(config);
+ }
+ }
+
@After
public void teardown() {
if (mDialog != null) {
mDialog.clearInternalHandlerAfterTest();
}
+ setOrientation(mOriginalOrientation);
+ mTestableLooper.processAllMessages();
+ reset(mPostureController);
}
/*
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/SysuiTestCase.java b/packages/SystemUI/tests/utils/src/com/android/systemui/SysuiTestCase.java
index 1ec4e8c..8bbd58d 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/SysuiTestCase.java
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/SysuiTestCase.java
@@ -102,7 +102,8 @@
mock(Executor.class),
mock(DumpManager.class),
mock(BroadcastDispatcherLogger.class),
- mock(UserTracker.class));
+ mock(UserTracker.class),
+ shouldFailOnLeakedReceiver());
mRealInstrumentation = InstrumentationRegistry.getInstrumentation();
Instrumentation inst = spy(mRealInstrumentation);
@@ -141,6 +142,10 @@
mDependency.injectTestDependency(DialogLaunchAnimator.class, fakeDialogLaunchAnimator());
}
+ protected boolean shouldFailOnLeakedReceiver() {
+ return false;
+ }
+
@After
public void SysuiTeardown() {
if (mRealInstrumentation != null) {
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/biometrics/data/repository/FakeFingerprintPropertyRepository.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/biometrics/data/repository/FakeFingerprintPropertyRepository.kt
index d9012a5..2362a52 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/biometrics/data/repository/FakeFingerprintPropertyRepository.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/biometrics/data/repository/FakeFingerprintPropertyRepository.kt
@@ -39,20 +39,21 @@
MutableStateFlow(FingerprintSensorType.UNKNOWN)
override val sensorType: StateFlow<FingerprintSensorType> = _sensorType.asStateFlow()
- private val _sensorLocation: MutableStateFlow<SensorLocationInternal> =
- MutableStateFlow(SensorLocationInternal.DEFAULT)
- override val sensorLocation = _sensorLocation.asStateFlow()
+ private val _sensorLocations: MutableStateFlow<Map<String, SensorLocationInternal>> =
+ MutableStateFlow(mapOf("" to SensorLocationInternal.DEFAULT))
+ override val sensorLocations: StateFlow<Map<String, SensorLocationInternal>> =
+ _sensorLocations.asStateFlow()
fun setProperties(
sensorId: Int,
strength: SensorStrength,
sensorType: FingerprintSensorType,
- sensorLocation: SensorLocationInternal
+ sensorLocations: Map<String, SensorLocationInternal>
) {
_sensorId.value = sensorId
_strength.value = strength
_sensorType.value = sensorType
- _sensorLocation.value = sensorLocation
+ _sensorLocations.value = sensorLocations
_isInitialized.value = true
}
}
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/broadcast/FakeBroadcastDispatcher.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/broadcast/FakeBroadcastDispatcher.kt
index ad086ff..af940e4 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/broadcast/FakeBroadcastDispatcher.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/broadcast/FakeBroadcastDispatcher.kt
@@ -27,6 +27,7 @@
import com.android.systemui.broadcast.logging.BroadcastDispatcherLogger
import com.android.systemui.dump.DumpManager
import com.android.systemui.settings.UserTracker
+import java.lang.IllegalStateException
import java.util.concurrent.ConcurrentHashMap
import java.util.concurrent.Executor
@@ -37,7 +38,8 @@
broadcastRunningExecutor: Executor,
dumpManager: DumpManager,
logger: BroadcastDispatcherLogger,
- userTracker: UserTracker
+ userTracker: UserTracker,
+ private val shouldFailOnLeakedReceiver: Boolean
) :
BroadcastDispatcher(
context,
@@ -85,6 +87,9 @@
fun cleanUpReceivers(testName: String) {
registeredReceivers.forEach {
Log.i(testName, "Receiver not unregistered from dispatcher: $it")
+ if (shouldFailOnLeakedReceiver) {
+ throw IllegalStateException("Receiver not unregistered from dispatcher: $it")
+ }
}
registeredReceivers.clear()
}
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeKeyguardRepository.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeKeyguardRepository.kt
index d411590..fd8c4b8 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeKeyguardRepository.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeKeyguardRepository.kt
@@ -54,7 +54,10 @@
override val isKeyguardOccluded: Flow<Boolean> = _isKeyguardOccluded
private val _isDozing = MutableStateFlow(false)
- override val isDozing: Flow<Boolean> = _isDozing
+ override val isDozing: StateFlow<Boolean> = _isDozing
+
+ private val _lastDozeTapToWakePosition = MutableStateFlow<Point?>(null)
+ override val lastDozeTapToWakePosition = _lastDozeTapToWakePosition.asStateFlow()
private val _isAodAvailable = MutableStateFlow(false)
override val isAodAvailable: Flow<Boolean> = _isAodAvailable
@@ -76,12 +79,7 @@
private val _wakefulnessModel =
MutableStateFlow(
- WakefulnessModel(
- WakefulnessState.ASLEEP,
- false,
- WakeSleepReason.OTHER,
- WakeSleepReason.OTHER
- )
+ WakefulnessModel(WakefulnessState.ASLEEP, WakeSleepReason.OTHER, WakeSleepReason.OTHER)
)
override val wakefulness: Flow<WakefulnessModel> = _wakefulnessModel
@@ -137,10 +135,14 @@
_isKeyguardOccluded.value = isOccluded
}
- fun setDozing(isDozing: Boolean) {
+ override fun setIsDozing(isDozing: Boolean) {
_isDozing.value = isDozing
}
+ override fun setLastDozeTapToWakePosition(position: Point) {
+ _lastDozeTapToWakePosition.value = position
+ }
+
fun setAodAvailable(isAodAvailable: Boolean) {
_isAodAvailable.value = isAodAvailable
}
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeTrustRepository.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeTrustRepository.kt
index f0dbc60..1340a47 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeTrustRepository.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeTrustRepository.kt
@@ -31,10 +31,18 @@
override val isCurrentUserActiveUnlockAvailable: StateFlow<Boolean> =
_isCurrentUserActiveUnlockAvailable.asStateFlow()
+ private val _isCurrentUserTrustManaged = MutableStateFlow(false)
+ override val isCurrentUserTrustManaged: StateFlow<Boolean>
+ get() = _isCurrentUserTrustManaged
+
fun setCurrentUserTrusted(trust: Boolean) {
_isCurrentUserTrusted.value = trust
}
+ fun setCurrentUserTrustManaged(value: Boolean) {
+ _isCurrentUserTrustManaged.value = value
+ }
+
fun setCurrentUserActiveUnlockAvailable(available: Boolean) {
_isCurrentUserActiveUnlockAvailable.value = available
}
diff --git a/packages/WallpaperBackup/src/com/android/wallpaperbackup/WallpaperBackupAgent.java b/packages/WallpaperBackup/src/com/android/wallpaperbackup/WallpaperBackupAgent.java
index 6aca2fd..496f4f6 100644
--- a/packages/WallpaperBackup/src/com/android/wallpaperbackup/WallpaperBackupAgent.java
+++ b/packages/WallpaperBackup/src/com/android/wallpaperbackup/WallpaperBackupAgent.java
@@ -365,6 +365,11 @@
final int sysWhich = FLAG_SYSTEM | (lockImageStage.exists() ? 0 : FLAG_LOCK);
try {
+ // First parse the live component name so that we know for logging if we care about
+ // logging errors with the image restore.
+ ComponentName wpService = parseWallpaperComponent(infoStage, "wp");
+ mSystemHasLiveComponent = wpService != null;
+
// It is valid for the imagery to be absent; it means that we were not permitted
// to back up the original image on the source device, or there was no user-supplied
// wallpaper image present.
@@ -372,10 +377,10 @@
restoreFromStage(lockImageStage, infoStage, "kwp", FLAG_LOCK);
// And reset to the wallpaper service we should be using
- ComponentName wpService = parseWallpaperComponent(infoStage, "wp");
updateWallpaperComponent(wpService, !lockImageStage.exists());
} catch (Exception e) {
Slog.e(TAG, "Unable to restore wallpaper: " + e.getMessage());
+ mEventLogger.onRestoreException(e);
} finally {
Slog.v(TAG, "Restore finished; clearing backup bookkeeping");
infoStage.delete();
@@ -399,12 +404,15 @@
// We have a live wallpaper and no static lock image,
// allow live wallpaper to show "through" on lock screen.
mWallpaperManager.clear(FLAG_LOCK);
+ mEventLogger.onLockLiveWallpaperRestored(wpService);
}
+ mEventLogger.onSystemLiveWallpaperRestored(wpService);
} else {
// If we've restored a live wallpaper, but the component doesn't exist,
// we should log it as an error so we can easily identify the problem
// in reports from users
if (wpService != null) {
+ // TODO(b/268471749): Handle delayed case
applyComponentAtInstall(wpService, applyToLock);
Slog.w(TAG, "Wallpaper service " + wpService + " isn't available. "
+ " Will try to apply later");
@@ -424,13 +432,37 @@
try (FileInputStream in = new FileInputStream(stage)) {
mWallpaperManager.setStream(in, cropHint.isEmpty() ? null : cropHint, true,
which);
+
+ // And log the success
+ if ((which & FLAG_SYSTEM) > 0) {
+ mEventLogger.onSystemImageWallpaperRestored();
+ } else {
+ mEventLogger.onLockImageWallpaperRestored();
+ }
}
+ } else {
+ logRestoreError(which, ERROR_NO_METADATA);
}
} else {
Slog.d(TAG, "Restore data doesn't exist for file " + stage.getPath());
+ logRestoreErrorIfNoLiveComponent(which, ERROR_NO_WALLPAPER);
}
}
+ private void logRestoreErrorIfNoLiveComponent(int which, String error) {
+ if (mSystemHasLiveComponent) {
+ return;
+ }
+ logRestoreError(which, error);
+ }
+
+ private void logRestoreError(int which, String error) {
+ if ((which & FLAG_SYSTEM) == FLAG_SYSTEM) {
+ mEventLogger.onSystemImageWallpaperRestoreFailed(error);
+ } else if ((which & FLAG_LOCK) == FLAG_LOCK) {
+ mEventLogger.onLockImageWallpaperRestoreFailed(error);
+ }
+ }
private Rect parseCropHint(File wallpaperInfo, String sectionTag) {
Rect cropHint = new Rect();
try (FileInputStream stream = new FileInputStream(wallpaperInfo)) {
diff --git a/packages/WallpaperBackup/src/com/android/wallpaperbackup/WallpaperEventLogger.java b/packages/WallpaperBackup/src/com/android/wallpaperbackup/WallpaperEventLogger.java
index 64944b3..47c45ac 100644
--- a/packages/WallpaperBackup/src/com/android/wallpaperbackup/WallpaperEventLogger.java
+++ b/packages/WallpaperBackup/src/com/android/wallpaperbackup/WallpaperEventLogger.java
@@ -22,6 +22,7 @@
import android.app.backup.BackupRestoreEventLogger;
import android.app.backup.BackupRestoreEventLogger.BackupRestoreDataType;
import android.app.backup.BackupRestoreEventLogger.BackupRestoreError;
+import android.content.ComponentName;
import com.android.internal.annotations.VisibleForTesting;
@@ -101,6 +102,39 @@
logBackupFailureInternal(WALLPAPER_LIVE_LOCK, error);
}
+ void onSystemImageWallpaperRestored() {
+ logRestoreSuccessInternal(WALLPAPER_IMG_SYSTEM, /* liveComponentWallpaperInfo */ null);
+ }
+
+ void onLockImageWallpaperRestored() {
+ logRestoreSuccessInternal(WALLPAPER_IMG_LOCK, /* liveComponentWallpaperInfo */ null);
+ }
+
+ void onSystemLiveWallpaperRestored(ComponentName wpService) {
+ logRestoreSuccessInternal(WALLPAPER_LIVE_SYSTEM, wpService);
+ }
+
+ void onLockLiveWallpaperRestored(ComponentName wpService) {
+ logRestoreSuccessInternal(WALLPAPER_LIVE_LOCK, wpService);
+ }
+
+ void onSystemImageWallpaperRestoreFailed(@BackupRestoreError String error) {
+ logRestoreFailureInternal(WALLPAPER_IMG_SYSTEM, error);
+ }
+
+ void onLockImageWallpaperRestoreFailed(@BackupRestoreError String error) {
+ logRestoreFailureInternal(WALLPAPER_IMG_LOCK, error);
+ }
+
+ void onSystemLiveWallpaperRestoreFailed(@BackupRestoreError String error) {
+ logRestoreFailureInternal(WALLPAPER_LIVE_SYSTEM, error);
+ }
+
+ void onLockLiveWallpaperRestoreFailed(@BackupRestoreError String error) {
+ logRestoreFailureInternal(WALLPAPER_LIVE_LOCK, error);
+ }
+
+
/**
* Called when the whole backup flow is interrupted by an exception.
@@ -117,6 +151,20 @@
}
}
+ /**
+ * Called when the whole restore flow is interrupted by an exception.
+ */
+ void onRestoreException(Exception exception) {
+ String error = exception.getClass().getName();
+ if (!mProcessedDataTypes.contains(WALLPAPER_IMG_SYSTEM) && !mProcessedDataTypes.contains(
+ WALLPAPER_LIVE_SYSTEM)) {
+ mLogger.logItemsRestoreFailed(WALLPAPER_IMG_SYSTEM, /* count */ 1, error);
+ }
+ if (!mProcessedDataTypes.contains(WALLPAPER_IMG_LOCK) && !mProcessedDataTypes.contains(
+ WALLPAPER_LIVE_LOCK)) {
+ mLogger.logItemsRestoreFailed(WALLPAPER_IMG_LOCK, /* count */ 1, error);
+ }
+ }
private void logBackupSuccessInternal(@BackupRestoreDataType String which,
@Nullable WallpaperInfo liveComponentWallpaperInfo) {
mLogger.logItemsBackedUp(which, /* count */ 1);
@@ -130,10 +178,30 @@
mProcessedDataTypes.add(which);
}
+ private void logRestoreSuccessInternal(@BackupRestoreDataType String which,
+ @Nullable ComponentName liveComponentWallpaperInfo) {
+ mLogger.logItemsRestored(which, /* count */ 1);
+ logRestoredLiveWallpaperNameIfPresent(which, liveComponentWallpaperInfo);
+ mProcessedDataTypes.add(which);
+ }
+
+ private void logRestoreFailureInternal(@BackupRestoreDataType String which,
+ @BackupRestoreError String error) {
+ mLogger.logItemsRestoreFailed(which, /* count */ 1, error);
+ mProcessedDataTypes.add(which);
+ }
+
private void logLiveWallpaperNameIfPresent(@BackupRestoreDataType String wallpaperType,
WallpaperInfo wallpaperInfo) {
if (wallpaperInfo != null) {
mLogger.logBackupMetadata(wallpaperType, wallpaperInfo.getComponent().getClassName());
}
}
+
+ private void logRestoredLiveWallpaperNameIfPresent(@BackupRestoreDataType String wallpaperType,
+ ComponentName wpService) {
+ if (wpService != null) {
+ mLogger.logRestoreMetadata(wallpaperType, wpService.getClassName());
+ }
+ }
}
diff --git a/packages/WallpaperBackup/test/src/com/android/wallpaperbackup/WallpaperBackupAgentTest.java b/packages/WallpaperBackup/test/src/com/android/wallpaperbackup/WallpaperBackupAgentTest.java
index 89459f6..58f6477 100644
--- a/packages/WallpaperBackup/test/src/com/android/wallpaperbackup/WallpaperBackupAgentTest.java
+++ b/packages/WallpaperBackup/test/src/com/android/wallpaperbackup/WallpaperBackupAgentTest.java
@@ -24,6 +24,7 @@
import static com.android.wallpaperbackup.WallpaperBackupAgent.SYSTEM_WALLPAPER_STAGE;
import static com.android.wallpaperbackup.WallpaperBackupAgent.WALLPAPER_INFO_STAGE;
import static com.android.wallpaperbackup.WallpaperEventLogger.ERROR_INELIGIBLE;
+import static com.android.wallpaperbackup.WallpaperEventLogger.ERROR_NO_METADATA;
import static com.android.wallpaperbackup.WallpaperEventLogger.ERROR_NO_WALLPAPER;
import static com.android.wallpaperbackup.WallpaperEventLogger.ERROR_QUOTA_EXCEEDED;
import static com.android.wallpaperbackup.WallpaperEventLogger.WALLPAPER_IMG_LOCK;
@@ -34,6 +35,8 @@
import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.assertEquals;
+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.never;
@@ -55,12 +58,14 @@
import android.os.ParcelFileDescriptor;
import android.os.UserHandle;
import android.service.wallpaper.WallpaperService;
+import android.util.Xml;
import androidx.test.InstrumentationRegistry;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.runner.AndroidJUnit4;
import com.android.internal.content.PackageMonitor;
+import com.android.modules.utils.TypedXmlSerializer;
import com.android.wallpaperbackup.utils.ContextWithServiceOverrides;
import org.junit.After;
@@ -592,6 +597,123 @@
assertThat(result.getSuccessCount()).isEqualTo(1);
}
+ @Test
+ public void testOnRestore_systemWallpaperImgSuccess_logsSuccess() throws Exception {
+ mockStagedWallpaperFile(WALLPAPER_INFO_STAGE);
+ mockStagedWallpaperFile(SYSTEM_WALLPAPER_STAGE);
+ mWallpaperBackupAgent.onCreate(USER_HANDLE, BackupAnnotations.BackupDestination.CLOUD,
+ BackupAnnotations.OperationType.RESTORE);
+
+ mWallpaperBackupAgent.onRestoreFinished();
+
+ DataTypeResult result = getLoggingResult(WALLPAPER_IMG_SYSTEM,
+ mWallpaperBackupAgent.getBackupRestoreEventLogger().getLoggingResults());
+ assertThat(result).isNotNull();
+ assertThat(result.getSuccessCount()).isEqualTo(1);
+ }
+
+ @Test
+ public void testOnRestore_lockWallpaperImgSuccess_logsSuccess() throws Exception {
+ mockStagedWallpaperFile(WALLPAPER_INFO_STAGE);
+ mockStagedWallpaperFile(LOCK_WALLPAPER_STAGE);
+ mWallpaperBackupAgent.onCreate(USER_HANDLE, BackupAnnotations.BackupDestination.CLOUD,
+ BackupAnnotations.OperationType.RESTORE);
+
+ mWallpaperBackupAgent.onRestoreFinished();
+
+ DataTypeResult result = getLoggingResult(WALLPAPER_IMG_LOCK,
+ mWallpaperBackupAgent.getBackupRestoreEventLogger().getLoggingResults());
+ assertThat(result).isNotNull();
+ assertThat(result.getSuccessCount()).isEqualTo(1);
+ }
+
+ @Test
+ public void testOnRestore_systemWallpaperImgMissingAndNoLive_logsFailure() throws Exception {
+ mockStagedWallpaperFile(WALLPAPER_INFO_STAGE);
+ mockStagedWallpaperFile(LOCK_WALLPAPER_STAGE);
+ mWallpaperBackupAgent.onCreate(USER_HANDLE, BackupAnnotations.BackupDestination.CLOUD,
+ BackupAnnotations.OperationType.RESTORE);
+
+ mWallpaperBackupAgent.onRestoreFinished();
+
+ DataTypeResult result = getLoggingResult(WALLPAPER_IMG_SYSTEM,
+ mWallpaperBackupAgent.getBackupRestoreEventLogger().getLoggingResults());
+ assertThat(result).isNotNull();
+ assertThat(result.getFailCount()).isEqualTo(1);
+ assertThat(result.getErrors()).containsKey(ERROR_NO_WALLPAPER);
+
+ }
+
+ @Test
+ public void testOnRestore_lockWallpaperImgMissingAndNoLive_logsFailure() throws Exception {
+ mockStagedWallpaperFile(WALLPAPER_INFO_STAGE);
+ mockStagedWallpaperFile(SYSTEM_WALLPAPER_STAGE);
+ mWallpaperBackupAgent.onCreate(USER_HANDLE, BackupAnnotations.BackupDestination.CLOUD,
+ BackupAnnotations.OperationType.RESTORE);
+
+ mWallpaperBackupAgent.onRestoreFinished();
+
+ DataTypeResult result = getLoggingResult(WALLPAPER_IMG_LOCK,
+ mWallpaperBackupAgent.getBackupRestoreEventLogger().getLoggingResults());
+ assertThat(result).isNotNull();
+ assertThat(result.getFailCount()).isEqualTo(1);
+ assertThat(result.getErrors()).containsKey(ERROR_NO_WALLPAPER);
+ }
+
+ @Test
+ public void testOnRestore_wallpaperInfoMissing_logsFailure() throws Exception {
+ mockStagedWallpaperFile(SYSTEM_WALLPAPER_STAGE);
+ mWallpaperBackupAgent.onCreate(USER_HANDLE, BackupAnnotations.BackupDestination.CLOUD,
+ BackupAnnotations.OperationType.RESTORE);
+
+ mWallpaperBackupAgent.onRestoreFinished();
+
+ DataTypeResult result = getLoggingResult(WALLPAPER_IMG_SYSTEM,
+ mWallpaperBackupAgent.getBackupRestoreEventLogger().getLoggingResults());
+ assertThat(result).isNotNull();
+ assertThat(result.getFailCount()).isEqualTo(1);
+ assertThat(result.getErrors()).containsKey(ERROR_NO_METADATA);
+ }
+
+ @Test
+ public void testOnRestore_imgMissingButWallpaperInfoHasLive_doesNotLogImg() throws Exception {
+ mockRestoredLiveWallpaperFile();
+ mWallpaperBackupAgent.onCreate(USER_HANDLE, BackupAnnotations.BackupDestination.CLOUD,
+ BackupAnnotations.OperationType.RESTORE);
+
+ mWallpaperBackupAgent.onRestoreFinished();
+
+ DataTypeResult system = getLoggingResult(WALLPAPER_IMG_SYSTEM,
+ mWallpaperBackupAgent.getBackupRestoreEventLogger().getLoggingResults());
+ DataTypeResult lock = getLoggingResult(WALLPAPER_IMG_LOCK,
+ mWallpaperBackupAgent.getBackupRestoreEventLogger().getLoggingResults());
+ assertThat(system).isNull();
+ assertThat(lock).isNull();
+ }
+
+ @Test
+ public void testOnRestore_throwsException_logsErrors() throws Exception {
+ when(mWallpaperManager.setStream(any(), any(), anyBoolean(), anyInt())).thenThrow(
+ new RuntimeException());
+ mockStagedWallpaperFile(SYSTEM_WALLPAPER_STAGE);
+ mockStagedWallpaperFile(WALLPAPER_INFO_STAGE);
+ mWallpaperBackupAgent.onCreate(USER_HANDLE, BackupAnnotations.BackupDestination.CLOUD,
+ BackupAnnotations.OperationType.RESTORE);
+
+ mWallpaperBackupAgent.onRestoreFinished();
+
+ DataTypeResult system = getLoggingResult(WALLPAPER_IMG_SYSTEM,
+ mWallpaperBackupAgent.getBackupRestoreEventLogger().getLoggingResults());
+ DataTypeResult lock = getLoggingResult(WALLPAPER_IMG_LOCK,
+ mWallpaperBackupAgent.getBackupRestoreEventLogger().getLoggingResults());
+ assertThat(system).isNotNull();
+ assertThat(system.getFailCount()).isEqualTo(1);
+ assertThat(system.getErrors()).containsKey(RuntimeException.class.getName());
+ assertThat(lock).isNotNull();
+ assertThat(lock.getFailCount()).isEqualTo(1);
+ assertThat(lock.getErrors()).containsKey(RuntimeException.class.getName());
+ }
+
private void mockCurrentWallpaperIds(int systemWallpaperId, int lockWallpaperId) {
when(mWallpaperManager.getWallpaperId(eq(FLAG_SYSTEM))).thenReturn(systemWallpaperId);
when(mWallpaperManager.getWallpaperId(eq(FLAG_LOCK))).thenReturn(lockWallpaperId);
@@ -636,6 +758,27 @@
ParcelFileDescriptor.open(fakeLockWallpaperFile, MODE_READ_ONLY));
}
+ private void mockStagedWallpaperFile(String location) throws Exception {
+ File wallpaperFile = new File(mContext.getFilesDir(), location);
+ wallpaperFile.createNewFile();
+ }
+
+ private void mockRestoredLiveWallpaperFile() throws Exception {
+ File wallpaperFile = new File(mContext.getFilesDir(), WALLPAPER_INFO_STAGE);
+ wallpaperFile.createNewFile();
+ FileOutputStream fstream = new FileOutputStream(wallpaperFile, false);
+ TypedXmlSerializer out = Xml.resolveSerializer(fstream);
+ out.startDocument(null, true);
+ out.startTag(null, "wp");
+ out.attribute(null, "component",
+ getFakeWallpaperInfo().getComponent().flattenToShortString());
+ out.endTag(null, "wp");
+ out.endDocument();
+ fstream.flush();
+ FileUtils.sync(fstream);
+ fstream.close();
+ }
+
private WallpaperInfo getFakeWallpaperInfo() throws Exception {
Context context = InstrumentationRegistry.getTargetContext();
Intent intent = new Intent(WallpaperService.SERVICE_INTERFACE);
diff --git a/packages/WallpaperBackup/test/src/com/android/wallpaperbackup/WallpaperEventLoggerTest.java b/packages/WallpaperBackup/test/src/com/android/wallpaperbackup/WallpaperEventLoggerTest.java
index 3816a3c..383bf2f 100644
--- a/packages/WallpaperBackup/test/src/com/android/wallpaperbackup/WallpaperEventLoggerTest.java
+++ b/packages/WallpaperBackup/test/src/com/android/wallpaperbackup/WallpaperEventLoggerTest.java
@@ -21,16 +21,14 @@
import static com.android.wallpaperbackup.WallpaperEventLogger.WALLPAPER_LIVE_LOCK;
import static com.android.wallpaperbackup.WallpaperEventLogger.WALLPAPER_LIVE_SYSTEM;
+import static com.google.common.truth.Truth.assertThat;
+
import static org.junit.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.ArgumentMatchers.anyString;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.app.WallpaperInfo;
+import android.app.backup.BackupAnnotations;
import android.app.backup.BackupManager;
import android.app.backup.BackupRestoreEventLogger;
import android.content.Context;
@@ -42,8 +40,6 @@
import androidx.test.InstrumentationRegistry;
import androidx.test.runner.AndroidJUnit4;
-import com.android.wallpaperbackup.utils.TestWallpaperService;
-
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -55,8 +51,7 @@
@RunWith(AndroidJUnit4.class)
public class WallpaperEventLoggerTest {
- @Mock
- private BackupRestoreEventLogger mMockLogger;
+ private BackupRestoreEventLogger mEventLogger;
@Mock
private BackupManager mMockBackupManager;
@@ -73,8 +68,8 @@
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
- when(mMockBackupAgent.getBackupRestoreEventLogger()).thenReturn(mMockLogger);
- when(mMockBackupManager.getBackupRestoreEventLogger(any())).thenReturn(mMockLogger);
+ when(mMockBackupAgent.getBackupRestoreEventLogger()).thenReturn(mEventLogger);
+ when(mMockBackupManager.getBackupRestoreEventLogger(any())).thenReturn(mEventLogger);
mWallpaperInfo = getWallpaperInfo();
mWallpaperEventLogger = new WallpaperEventLogger(mMockBackupManager, mMockBackupAgent);
@@ -82,115 +77,339 @@
@Test
public void onSystemImgWallpaperBackedUp_logsSuccess() {
- mWallpaperEventLogger.onSystemImageWallpaperBackedUp();
+ setUpLoggerForBackup();
- verify(mMockLogger).logItemsBackedUp(eq(WALLPAPER_IMG_SYSTEM), eq(1));
+ mWallpaperEventLogger.onSystemImageWallpaperBackedUp();
+ BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_IMG_SYSTEM);
+
+ assertThat(result).isNotNull();
+ assertThat(result.getSuccessCount()).isEqualTo(1);
}
@Test
public void onLockImgWallpaperBackedUp_logsSuccess() {
- mWallpaperEventLogger.onLockImageWallpaperBackedUp();
+ setUpLoggerForBackup();
- verify(mMockLogger).logItemsBackedUp(eq(WALLPAPER_IMG_LOCK), eq(1));
+ mWallpaperEventLogger.onLockImageWallpaperBackedUp();
+ BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_IMG_LOCK);
+
+ assertThat(result).isNotNull();
+ assertThat(result.getSuccessCount()).isEqualTo(1);
}
@Test
public void onSystemLiveWallpaperBackedUp_logsSuccess() {
- mWallpaperEventLogger.onSystemLiveWallpaperBackedUp(mWallpaperInfo);
+ setUpLoggerForBackup();
- verify(mMockLogger).logItemsBackedUp(eq(WALLPAPER_LIVE_SYSTEM), eq(1));
+ mWallpaperEventLogger.onSystemLiveWallpaperBackedUp(mWallpaperInfo);
+ BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_LIVE_SYSTEM);
+
+ assertThat(result).isNotNull();
+ assertThat(result.getSuccessCount()).isEqualTo(1);
}
@Test
public void onLockLiveWallpaperBackedUp_logsSuccess() {
- mWallpaperEventLogger.onLockLiveWallpaperBackedUp(mWallpaperInfo);
+ setUpLoggerForBackup();
- verify(mMockLogger).logItemsBackedUp(eq(WALLPAPER_LIVE_LOCK), eq(1));
+ mWallpaperEventLogger.onLockLiveWallpaperBackedUp(mWallpaperInfo);
+ BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_LIVE_LOCK);
+
+ assertThat(result).isNotNull();
+ assertThat(result.getSuccessCount()).isEqualTo(1);
}
@Test
public void onImgWallpaperBackedUp_nullInfo_doesNotLogMetadata() {
- mWallpaperEventLogger.onSystemImageWallpaperBackedUp();
+ setUpLoggerForBackup();
- verify(mMockLogger, never()).logBackupMetadata(eq(WALLPAPER_IMG_SYSTEM), anyString());
+ mWallpaperEventLogger.onSystemImageWallpaperBackedUp();
+ BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_IMG_SYSTEM);
+
+ assertThat(result).isNotNull();
+ assertThat(result.getMetadataHash()).isNull();
}
@Test
public void onLiveWallpaperBackedUp_logsMetadata() {
- mWallpaperEventLogger.onSystemLiveWallpaperBackedUp(mWallpaperInfo);
+ setUpLoggerForBackup();
- verify(mMockLogger).logBackupMetadata(eq(WALLPAPER_LIVE_SYSTEM),
- eq(TestWallpaperService.class.getName()));
+ mWallpaperEventLogger.onSystemLiveWallpaperBackedUp(mWallpaperInfo);
+ BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_LIVE_SYSTEM);
+
+ assertThat(result).isNotNull();
+ assertThat(result.getMetadataHash()).isNotNull();
}
@Test
public void onSystemImgWallpaperBackupFailed_logsFail() {
- mWallpaperEventLogger.onSystemImageWallpaperBackupFailed(WALLPAPER_ERROR);
+ setUpLoggerForBackup();
- verify(mMockLogger).logItemsBackupFailed(eq(WALLPAPER_IMG_SYSTEM), eq(1),
- eq(WALLPAPER_ERROR));
+ mWallpaperEventLogger.onSystemImageWallpaperBackupFailed(WALLPAPER_ERROR);
+ BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_IMG_SYSTEM);
+
+ assertThat(result).isNotNull();
+ assertThat(result.getFailCount()).isEqualTo(1);
+ assertThat(result.getErrors()).containsKey(WALLPAPER_ERROR);
}
@Test
public void onLockImgWallpaperBackupFailed_logsFail() {
- mWallpaperEventLogger.onLockImageWallpaperBackupFailed(WALLPAPER_ERROR);
+ setUpLoggerForBackup();
- verify(mMockLogger).logItemsBackupFailed(eq(WALLPAPER_IMG_LOCK), eq(1),
- eq(WALLPAPER_ERROR));
+ mWallpaperEventLogger.onLockImageWallpaperBackupFailed(WALLPAPER_ERROR);
+ BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_IMG_LOCK);
+
+ assertThat(result).isNotNull();
+ assertThat(result.getFailCount()).isEqualTo(1);
+ assertThat(result.getErrors()).containsKey(WALLPAPER_ERROR);
}
@Test
public void onSystemLiveWallpaperBackupFailed_logsFail() {
- mWallpaperEventLogger.onSystemLiveWallpaperBackupFailed(WALLPAPER_ERROR);
+ setUpLoggerForBackup();
- verify(mMockLogger).logItemsBackupFailed(eq(WALLPAPER_LIVE_SYSTEM), eq(1),
- eq(WALLPAPER_ERROR));
+ mWallpaperEventLogger.onSystemLiveWallpaperBackupFailed(WALLPAPER_ERROR);
+ BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_LIVE_SYSTEM);
+
+ assertThat(result).isNotNull();
+ assertThat(result.getFailCount()).isEqualTo(1);
+ assertThat(result.getErrors()).containsKey(WALLPAPER_ERROR);
}
@Test
public void onLockLiveWallpaperBackupFailed_logsFail() {
- mWallpaperEventLogger.onLockLiveWallpaperBackupFailed(WALLPAPER_ERROR);
+ setUpLoggerForBackup();
- verify(mMockLogger).logItemsBackupFailed(eq(WALLPAPER_LIVE_LOCK), eq(1),
- eq(WALLPAPER_ERROR));
+ mWallpaperEventLogger.onLockLiveWallpaperBackupFailed(WALLPAPER_ERROR);
+ BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_LIVE_LOCK);
+
+ assertThat(result).isNotNull();
+ assertThat(result.getFailCount()).isEqualTo(1);
+ assertThat(result.getErrors()).containsKey(WALLPAPER_ERROR);
}
@Test
public void onWallpaperBackupException_someProcessed_doesNotLogErrorForProcessedType() {
+ setUpLoggerForBackup();
mWallpaperEventLogger.onSystemImageWallpaperBackedUp();
mWallpaperEventLogger.onBackupException(new Exception());
+ BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_IMG_SYSTEM);
- verify(mMockLogger, never()).logItemsBackupFailed(eq(WALLPAPER_IMG_SYSTEM), anyInt(),
- anyString());
+ assertThat(result).isNotNull();
+ assertThat(result.getFailCount()).isEqualTo(0);
}
@Test
public void onWallpaperBackupException_someProcessed_logsErrorForUnprocessedType() {
+ setUpLoggerForBackup();
mWallpaperEventLogger.onSystemImageWallpaperBackedUp();
mWallpaperEventLogger.onBackupException(new Exception());
+ BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_IMG_LOCK);
- verify(mMockLogger).logItemsBackupFailed(eq(WALLPAPER_IMG_LOCK), eq(1),
- eq(Exception.class.getName()));
-
+ assertThat(result).isNotNull();
+ assertThat(result.getFailCount()).isEqualTo(1);
}
@Test
- public void onWallpaperBackupException_liveTypeProcessed_doesNotLogErrorForSameImgType() {
+ public void onWallpaperBackupException_liveTypeProcessed_doesNotLogForSameImgType() {
+ setUpLoggerForBackup();
mWallpaperEventLogger.onSystemLiveWallpaperBackedUp(mWallpaperInfo);
mWallpaperEventLogger.onBackupException(new Exception());
+ BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_IMG_SYSTEM);
- verify(mMockLogger, never()).logItemsBackupFailed(eq(WALLPAPER_IMG_SYSTEM), anyInt(),
- anyString());
+ assertThat(result).isNull();
}
+ @Test
+ public void onSystemImgWallpaperRestored_logsSuccess() {
+ setUpLoggerForRestore();
+
+ mWallpaperEventLogger.onSystemImageWallpaperRestored();
+ BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_IMG_SYSTEM);
+
+ assertThat(result).isNotNull();
+ assertThat(result.getSuccessCount()).isEqualTo(1);
+ }
+
+ @Test
+ public void onLockImgWallpaperRestored_logsSuccess() {
+ setUpLoggerForRestore();
+
+ mWallpaperEventLogger.onLockImageWallpaperRestored();
+ BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_IMG_LOCK);
+
+ assertThat(result).isNotNull();
+ assertThat(result.getSuccessCount()).isEqualTo(1);
+ }
+
+ @Test
+ public void onSystemLiveWallpaperRestored_logsSuccess() {
+ setUpLoggerForRestore();
+
+ mWallpaperEventLogger.onSystemLiveWallpaperRestored(mWallpaperInfo.getComponent());
+ BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_LIVE_SYSTEM);
+
+ assertThat(result).isNotNull();
+ assertThat(result.getSuccessCount()).isEqualTo(1);
+ }
+
+ @Test
+ public void onLockLiveWallpaperRestored_logsSuccess() {
+ setUpLoggerForRestore();
+
+ mWallpaperEventLogger.onLockLiveWallpaperRestored(mWallpaperInfo.getComponent());
+ BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_LIVE_LOCK);
+
+ assertThat(result).isNotNull();
+ assertThat(result.getSuccessCount()).isEqualTo(1);
+ }
+
+ @Test
+ public void onImgWallpaperRestored_nullInfo_doesNotLogMetadata() {
+ setUpLoggerForRestore();
+
+ mWallpaperEventLogger.onSystemImageWallpaperRestored();
+ BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_IMG_SYSTEM);
+
+ assertThat(result).isNotNull();
+ assertThat(result.getMetadataHash()).isNull();
+ }
+
+
+ @Test
+ public void onLiveWallpaperRestored_logsMetadata() {
+ setUpLoggerForRestore();
+
+ mWallpaperEventLogger.onSystemLiveWallpaperRestored(mWallpaperInfo.getComponent());
+ BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_LIVE_SYSTEM);
+
+ assertThat(result).isNotNull();
+ assertThat(result.getMetadataHash()).isNotNull();
+ }
+
+
+ @Test
+ public void onSystemImgWallpaperRestoreFailed_logsFail() {
+ setUpLoggerForRestore();
+
+ mWallpaperEventLogger.onSystemImageWallpaperRestoreFailed(WALLPAPER_ERROR);
+ BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_IMG_SYSTEM);
+
+ assertThat(result).isNotNull();
+ assertThat(result.getFailCount()).isEqualTo(1);
+ assertThat(result.getErrors()).containsKey(WALLPAPER_ERROR);
+ }
+
+ @Test
+ public void onLockImgWallpaperRestoreFailed_logsFail() {
+ setUpLoggerForRestore();
+
+ mWallpaperEventLogger.onLockImageWallpaperRestoreFailed(WALLPAPER_ERROR);
+ BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_IMG_LOCK);
+
+ assertThat(result).isNotNull();
+ assertThat(result.getFailCount()).isEqualTo(1);
+ assertThat(result.getErrors()).containsKey(WALLPAPER_ERROR);
+ }
+
+
+ @Test
+ public void onSystemLiveWallpaperRestoreFailed_logsFail() {
+ setUpLoggerForRestore();
+
+ mWallpaperEventLogger.onSystemLiveWallpaperRestoreFailed(WALLPAPER_ERROR);
+ BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_LIVE_SYSTEM);
+
+ assertThat(result).isNotNull();
+ assertThat(result.getFailCount()).isEqualTo(1);
+ assertThat(result.getErrors()).containsKey(WALLPAPER_ERROR);
+ }
+
+ @Test
+ public void onLockLiveWallpaperRestoreFailed_logsFail() {
+ setUpLoggerForRestore();
+
+ mWallpaperEventLogger.onLockLiveWallpaperRestoreFailed(WALLPAPER_ERROR);
+ BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_LIVE_LOCK);
+
+ assertThat(result).isNotNull();
+ assertThat(result.getFailCount()).isEqualTo(1);
+ assertThat(result.getErrors()).containsKey(WALLPAPER_ERROR);
+ }
+
+
+ @Test
+ public void onWallpaperRestoreException_someProcessed_doesNotLogErrorForProcessedType() {
+ setUpLoggerForRestore();
+ mWallpaperEventLogger.onSystemImageWallpaperRestored();
+
+ mWallpaperEventLogger.onRestoreException(new Exception());
+ BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_IMG_SYSTEM);
+
+ assertThat(result).isNotNull();
+ assertThat(result.getFailCount()).isEqualTo(0);
+ }
+
+
+ @Test
+ public void onWallpaperRestoreException_someProcessed_logsErrorForUnprocessedType() {
+ setUpLoggerForRestore();
+ mWallpaperEventLogger.onSystemImageWallpaperRestored();
+
+ mWallpaperEventLogger.onRestoreException(new Exception());
+ BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_IMG_LOCK);
+
+ assertThat(result).isNotNull();
+ assertThat(result.getFailCount()).isEqualTo(1);
+ }
+
+ @Test
+ public void onWallpaperRestoreException_liveTypeProcessed_doesNotLogForSameImgType() {
+ setUpLoggerForRestore();
+ mWallpaperEventLogger.onSystemLiveWallpaperRestored(mWallpaperInfo.getComponent());
+
+ mWallpaperEventLogger.onRestoreException(new Exception());
+ BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_IMG_SYSTEM);
+
+ assertThat(result).isNull();
+ }
+
+ private BackupRestoreEventLogger.DataTypeResult getLogsForType(String dataType) {
+ for (BackupRestoreEventLogger.DataTypeResult result : mEventLogger.getLoggingResults()) {
+ if ((result.getDataType()).equals(dataType)) {
+ return result;
+ }
+ }
+ return null;
+ }
+
+ private void setUpLoggerForBackup() {
+ mEventLogger = new BackupRestoreEventLogger(BackupAnnotations.OperationType.BACKUP);
+ createEventLogger();
+ }
+
+ private void setUpLoggerForRestore() {
+ mEventLogger = new BackupRestoreEventLogger(BackupAnnotations.OperationType.RESTORE);
+ createEventLogger();
+ }
+
+ private void createEventLogger() {
+ when(mMockBackupAgent.getBackupRestoreEventLogger()).thenReturn(mEventLogger);
+ when(mMockBackupManager.getBackupRestoreEventLogger(any())).thenReturn(mEventLogger);
+
+ mWallpaperEventLogger = new WallpaperEventLogger(mMockBackupManager, mMockBackupAgent);
+ }
+
+
private WallpaperInfo getWallpaperInfo() throws Exception {
Context context = InstrumentationRegistry.getTargetContext();
Intent intent = new Intent(WallpaperService.SERVICE_INTERFACE);
diff --git a/packages/services/CameraExtensionsProxy/src/com/android/cameraextensions/CameraExtensionsProxyService.java b/packages/services/CameraExtensionsProxy/src/com/android/cameraextensions/CameraExtensionsProxyService.java
index 1298f63..f31ca81 100644
--- a/packages/services/CameraExtensionsProxy/src/com/android/cameraextensions/CameraExtensionsProxyService.java
+++ b/packages/services/CameraExtensionsProxy/src/com/android/cameraextensions/CameraExtensionsProxyService.java
@@ -151,7 +151,6 @@
(EXTENSIONS_VERSION.startsWith(RESULTS_VERSION_PREFIX) ||
EXTENSIONS_VERSION.startsWith(LATENCY_VERSION_PREFIX));
- private HashMap<String, CameraCharacteristics> mCharacteristicsHashMap = new HashMap<>();
private HashMap<String, Long> mMetadataVendorIdMap = new HashMap<>();
private CameraManager mCameraManager;
@@ -501,7 +500,6 @@
if (cameraIds != null) {
for (String cameraId : cameraIds) {
CameraCharacteristics chars = mCameraManager.getCameraCharacteristics(cameraId);
- mCharacteristicsHashMap.put(cameraId, chars);
Object thisClass = CameraCharacteristics.Key.class;
Class<CameraCharacteristics.Key<?>> keyClass =
(Class<CameraCharacteristics.Key<?>>)thisClass;
@@ -554,6 +552,15 @@
return ret;
}
+ private static Map<String, CameraCharacteristics> getCharacteristicsMap(
+ Map<String, CameraMetadataNative> charsMap) {
+ HashMap<String, CameraCharacteristics> ret = new HashMap<>();
+ for (Map.Entry<String, CameraMetadataNative> entry : charsMap.entrySet()) {
+ ret.put(entry.getKey(), new CameraCharacteristics(entry.getValue()));
+ }
+ return ret;
+ }
+
private static List<SizeList> initializeParcelable(
Map<Integer, List<android.util.Size>> sizes) {
if (sizes == null) {
@@ -734,13 +741,15 @@
}
@Override
- public boolean isExtensionAvailable(String cameraId) {
- return mAdvancedExtender.isExtensionAvailable(cameraId, mCharacteristicsHashMap);
+ public boolean isExtensionAvailable(String cameraId,
+ Map<String, CameraMetadataNative> charsMapNative) {
+ return mAdvancedExtender.isExtensionAvailable(cameraId,
+ getCharacteristicsMap(charsMapNative));
}
@Override
- public void init(String cameraId) {
- mAdvancedExtender.init(cameraId, mCharacteristicsHashMap);
+ public void init(String cameraId, Map<String, CameraMetadataNative> charsMapNative) {
+ mAdvancedExtender.init(cameraId, getCharacteristicsMap(charsMapNative));
}
@Override
@@ -1192,7 +1201,8 @@
}
@Override
- public CameraSessionConfig initSession(String cameraId, OutputSurface previewSurface,
+ public CameraSessionConfig initSession(String cameraId,
+ Map<String, CameraMetadataNative> charsMapNative, OutputSurface previewSurface,
OutputSurface imageCaptureSurface, OutputSurface postviewSurface) {
OutputSurfaceImplStub outputPreviewSurfaceImpl =
new OutputSurfaceImplStub(previewSurface);
@@ -1211,10 +1221,12 @@
outputPostviewSurfaceImpl);
sessionConfig = mSessionProcessor.initSession(cameraId,
- mCharacteristicsHashMap, getApplicationContext(), outputSurfaceConfigs);
+ getCharacteristicsMap(charsMapNative),
+ getApplicationContext(), outputSurfaceConfigs);
} else {
sessionConfig = mSessionProcessor.initSession(cameraId,
- mCharacteristicsHashMap, getApplicationContext(), outputPreviewSurfaceImpl,
+ getCharacteristicsMap(charsMapNative),
+ getApplicationContext(), outputPreviewSurfaceImpl,
outputImageCaptureSurfaceImpl, null /*imageAnalysisSurfaceConfig*/);
}
diff --git a/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java b/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java
index 7463061..a324b2f 100644
--- a/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java
+++ b/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java
@@ -2551,6 +2551,9 @@
@Override
public void attachAccessibilityOverlayToWindow(int accessibilityWindowId, SurfaceControl sc)
throws RemoteException {
+ SurfaceControl.Transaction t = new SurfaceControl.Transaction();
+ t.setTrustedOverlay(sc, true).apply();
+ t.close();
synchronized (mLock) {
RemoteAccessibilityConnection connection =
mA11yWindowManager.getConnectionLocked(
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
index d36c959..2d1290c 100644
--- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
+++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
@@ -490,7 +490,7 @@
mMainHandler, context,
new PolicyWarningUIController.NotificationController(context));
mSecurityPolicy = new AccessibilitySecurityPolicy(policyWarningUIController, mContext,
- this);
+ this, LocalServices.getService(PackageManagerInternal.class));
mA11yWindowManager = new AccessibilityWindowManager(mLock, mMainHandler,
mWindowManagerService, this, mSecurityPolicy, this, mTraceManager);
mA11yDisplayListener = new AccessibilityDisplayListener(mContext, mMainHandler);
@@ -5329,9 +5329,8 @@
mA11yOverlayLayers.remove(displayId);
return;
}
- SurfaceControl.Transaction transaction = new SurfaceControl.Transaction();
- transaction.reparent(sc, parent);
- transaction.apply();
- transaction.close();
+ SurfaceControl.Transaction t = new SurfaceControl.Transaction();
+ t.reparent(sc, parent).setTrustedOverlay(sc, true).apply();
+ t.close();
}
}
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilitySecurityPolicy.java b/services/accessibility/java/com/android/server/accessibility/AccessibilitySecurityPolicy.java
index 8865623..9335626 100644
--- a/services/accessibility/java/com/android/server/accessibility/AccessibilitySecurityPolicy.java
+++ b/services/accessibility/java/com/android/server/accessibility/AccessibilitySecurityPolicy.java
@@ -29,6 +29,7 @@
import android.content.ComponentName;
import android.content.Context;
import android.content.pm.PackageManager;
+import android.content.pm.PackageManagerInternal;
import android.content.pm.ResolveInfo;
import android.content.pm.ServiceInfo;
import android.content.pm.UserInfo;
@@ -99,6 +100,7 @@
private final Context mContext;
private final PackageManager mPackageManager;
+ private final PackageManagerInternal mPackageManagerInternal;
private final UserManager mUserManager;
private final AppOpsManager mAppOpsManager;
private final AccessibilityUserManager mAccessibilityUserManager;
@@ -116,10 +118,12 @@
*/
public AccessibilitySecurityPolicy(PolicyWarningUIController policyWarningUIController,
@NonNull Context context,
- @NonNull AccessibilityUserManager a11yUserManager) {
+ @NonNull AccessibilityUserManager a11yUserManager,
+ @NonNull PackageManagerInternal packageManagerInternal) {
mContext = context;
mAccessibilityUserManager = a11yUserManager;
mPackageManager = mContext.getPackageManager();
+ mPackageManagerInternal = packageManagerInternal;
mUserManager = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
mAppOpsManager = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
mPolicyWarningUIController = policyWarningUIController;
@@ -515,10 +519,8 @@
try {
// Since we treat calls from a profile as if made by its parent, using
// MATCH_ANY_USER to query the uid of the given package name.
- return uid == mPackageManager.getPackageUidAsUser(
- packageName, PackageManager.MATCH_ANY_USER, UserHandle.getUserId(uid));
- } catch (PackageManager.NameNotFoundException e) {
- return false;
+ return mPackageManagerInternal.isSameApp(packageName, PackageManager.MATCH_ANY_USER,
+ uid, UserHandle.getUserId(uid));
} finally {
Binder.restoreCallingIdentity(token);
}
diff --git a/services/accessibility/java/com/android/server/accessibility/magnification/FullScreenMagnificationController.java b/services/accessibility/java/com/android/server/accessibility/magnification/FullScreenMagnificationController.java
index fbc7b3c..874fb01 100644
--- a/services/accessibility/java/com/android/server/accessibility/magnification/FullScreenMagnificationController.java
+++ b/services/accessibility/java/com/android/server/accessibility/magnification/FullScreenMagnificationController.java
@@ -1072,6 +1072,10 @@
}
}
+ protected float getLastActivatedScale(int displayId) {
+ return getScale(displayId);
+ }
+
/**
* Returns the X offset of the magnification viewport. If an animation
* is in progress, this reflects the end state of the animation.
diff --git a/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationController.java b/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationController.java
index 7ee72df..9a519fa 100644
--- a/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationController.java
+++ b/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationController.java
@@ -203,19 +203,27 @@
private void updateMagnificationUIControls(int displayId, int mode) {
final boolean isActivated = isActivated(displayId, mode);
- final boolean showUIControls;
+ final boolean showModeSwitchButton;
+ final boolean enableSettingsPanel;
synchronized (mLock) {
- showUIControls = isActivated && mMagnificationCapabilities
- == Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_ALL;
+ showModeSwitchButton = isActivated
+ && mMagnificationCapabilities == ACCESSIBILITY_MAGNIFICATION_MODE_ALL;
+ enableSettingsPanel = isActivated
+ && (mMagnificationCapabilities == ACCESSIBILITY_MAGNIFICATION_MODE_ALL
+ || mMagnificationCapabilities == ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW);
}
- if (showUIControls) {
- // we only need to show magnification button, the settings panel showing should be
- // triggered only on sysui side.
+
+ if (showModeSwitchButton) {
getWindowMagnificationMgr().showMagnificationButton(displayId, mode);
} else {
- getWindowMagnificationMgr().removeMagnificationSettingsPanel(displayId);
getWindowMagnificationMgr().removeMagnificationButton(displayId);
}
+
+ if (!enableSettingsPanel) {
+ // Whether the settings panel needs to be shown is controlled in system UI.
+ // Here, we only guarantee that the settings panel is closed when it is not needed.
+ getWindowMagnificationMgr().removeMagnificationSettingsPanel(displayId);
+ }
}
/** Returns {@code true} if the platform supports window magnification feature. */
@@ -470,12 +478,14 @@
disableFullScreenMagnificationIfNeeded(displayId);
} else {
long duration;
+ float scale;
synchronized (mLock) {
setCurrentMagnificationModeAndSwitchDelegate(displayId,
ACCESSIBILITY_MAGNIFICATION_MODE_NONE);
duration = SystemClock.uptimeMillis() - mWindowModeEnabledTimeArray.get(displayId);
+ scale = mWindowMagnificationMgr.getLastActivatedScale(displayId);
}
- logMagnificationUsageState(ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW, duration);
+ logMagnificationUsageState(ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW, duration, scale);
}
updateMagnificationUIControls(displayId, ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW);
}
@@ -567,13 +577,16 @@
disableWindowMagnificationIfNeeded(displayId);
} else {
long duration;
+ float scale;
synchronized (mLock) {
setCurrentMagnificationModeAndSwitchDelegate(displayId,
ACCESSIBILITY_MAGNIFICATION_MODE_NONE);
duration = SystemClock.uptimeMillis()
- mFullScreenModeEnabledTimeArray.get(displayId);
+ scale = mFullScreenMagnificationController.getLastActivatedScale(displayId);
}
- logMagnificationUsageState(ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN, duration);
+ logMagnificationUsageState(
+ ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN, duration, scale);
}
updateMagnificationUIControls(displayId, ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN);
}
@@ -612,10 +625,11 @@
*
* @param mode The activated magnification mode.
* @param duration The duration in milliseconds during the magnification is activated.
+ * @param scale The last magnification scale for the activation
*/
@VisibleForTesting
- public void logMagnificationUsageState(int mode, long duration) {
- AccessibilityStatsLogUtils.logMagnificationUsageState(mode, duration);
+ public void logMagnificationUsageState(int mode, long duration, float scale) {
+ AccessibilityStatsLogUtils.logMagnificationUsageState(mode, duration, scale);
}
/**
diff --git a/services/accessibility/java/com/android/server/accessibility/magnification/WindowMagnificationManager.java b/services/accessibility/java/com/android/server/accessibility/magnification/WindowMagnificationManager.java
index ce18b2c..d07db3f 100644
--- a/services/accessibility/java/com/android/server/accessibility/magnification/WindowMagnificationManager.java
+++ b/services/accessibility/java/com/android/server/accessibility/magnification/WindowMagnificationManager.java
@@ -142,6 +142,8 @@
private boolean mMagnificationFollowTypingEnabled = true;
@GuardedBy("mLock")
private final SparseBooleanArray mIsImeVisibleArray = new SparseBooleanArray();
+ @GuardedBy("mLock")
+ private final SparseArray<Float> mLastActivatedScale = new SparseArray<>();
private boolean mReceiverRegistered = false;
@VisibleForTesting
@@ -528,6 +530,7 @@
return;
}
magnifier.setScale(scale);
+ mLastActivatedScale.put(displayId, scale);
}
}
@@ -615,6 +618,9 @@
previousEnabled = magnifier.mEnabled;
enabled = magnifier.enableWindowMagnificationInternal(scale, centerX, centerY,
animationCallback, windowPosition, id);
+ if (enabled) {
+ mLastActivatedScale.put(displayId, getScale(displayId));
+ }
}
if (enabled) {
@@ -752,6 +758,15 @@
}
}
+ protected float getLastActivatedScale(int displayId) {
+ synchronized (mLock) {
+ if (!mLastActivatedScale.contains(displayId)) {
+ return -1.0f;
+ }
+ return mLastActivatedScale.get(displayId);
+ }
+ }
+
/**
* Moves window magnification on the specified display with the specified offset.
*
diff --git a/services/autofill/java/com/android/server/autofill/Session.java b/services/autofill/java/com/android/server/autofill/Session.java
index 9e46d73..3113000 100644
--- a/services/autofill/java/com/android/server/autofill/Session.java
+++ b/services/autofill/java/com/android/server/autofill/Session.java
@@ -27,6 +27,7 @@
import static android.service.autofill.FillRequest.FLAG_PASSWORD_INPUT_TYPE;
import static android.service.autofill.FillRequest.FLAG_PCC_DETECTION;
import static android.service.autofill.FillRequest.FLAG_RESET_FILL_DIALOG_STATE;
+import static android.service.autofill.FillRequest.FLAG_SCREEN_HAS_CREDMAN_FIELD;
import static android.service.autofill.FillRequest.FLAG_SUPPORTS_FILL_DIALOG;
import static android.service.autofill.FillRequest.FLAG_VIEW_NOT_FOCUSED;
import static android.service.autofill.FillRequest.INVALID_REQUEST_ID;
@@ -592,6 +593,9 @@
/** Whether the fill dialog UI is disabled. */
private boolean mFillDialogDisabled;
+
+ /** Whether current screen has credman field. */
+ private boolean mScreenHasCredmanField;
}
/**
@@ -1577,6 +1581,13 @@
// TODO(b/266379948): Ideally wait for PCC request to finish for a while more
// (say 100ms) before proceeding further on.
+ processResponseLockedForPcc(response, response.getClientState(), requestFlags);
+ }
+
+
+ @GuardedBy("mLock")
+ private void processResponseLockedForPcc(@NonNull FillResponse response,
+ @Nullable Bundle newClientState, int flags) {
if (DBG) {
Slog.d(TAG, "DBG: Initial response: " + response);
}
@@ -1584,12 +1595,15 @@
response = getEffectiveFillResponse(response);
if (isEmptyResponse(response)) {
// Treat it as a null response.
- processNullResponseLocked(requestId, requestFlags);
+ processNullResponseLocked(
+ response != null ? response.getRequestId() : 0,
+ flags);
+ return;
}
if (DBG) {
Slog.d(TAG, "DBG: Processed response: " + response);
}
- processResponseLocked(response, null, requestFlags);
+ processResponseLocked(response, newClientState, flags);
}
}
@@ -1712,6 +1726,7 @@
}
}
}
+ if (ids.isEmpty()) return saveInfo;
AutofillId[] autofillIds = new AutofillId[ids.size()];
ids.toArray(autofillIds);
return SaveInfo.copy(saveInfo, autofillIds);
@@ -2486,7 +2501,10 @@
if (sDebug) Slog.d(TAG, "Updating client state from auth dataset");
mClientState = newClientState;
}
- final Dataset dataset = (Dataset) result;
+ Dataset dataset = (Dataset) result;
+ FillResponse temp = new FillResponse.Builder().addDataset(dataset).build();
+ temp = getEffectiveFillResponse(temp);
+ dataset = temp.getDatasets().get(0);
final Dataset oldDataset = authenticatedResponse.getDatasets().get(datasetIdx);
if (!isAuthResultDatasetEphemeral(oldDataset, data)) {
authenticatedResponse.getDatasets().set(datasetIdx, dataset);
@@ -3088,6 +3106,20 @@
final SaveInfo saveInfo = response == null ? null : response.getSaveInfo();
/*
+ * Don't show save if the session has credman field
+ *
+ * TODO: add a new enum NO_SAVE_UI_CREDMAN
+ */
+ if (mSessionFlags.mScreenHasCredmanField) {
+ if (sVerbose) {
+ Slog.v(TAG, "Call to Session#showSaveLocked() rejected - "
+ + "there is credman field in screen");
+ }
+ return new SaveResult(/* logSaveShown= */ false, /* removeSession= */ true,
+ Event.NO_SAVE_UI_REASON_NONE);
+ }
+
+ /*
* The Save dialog is only shown if all conditions below are met:
*
* - saveInfo is not null.
@@ -3817,6 +3849,10 @@
return;
}
+ if ((flags & FLAG_SCREEN_HAS_CREDMAN_FIELD) != 0) {
+ mSessionFlags.mScreenHasCredmanField = true;
+ }
+
switch(action) {
case ACTION_START_SESSION:
// View is triggering autofill.
@@ -4293,7 +4329,7 @@
private boolean isFillDialogUiEnabled() {
synchronized (mLock) {
- return !mSessionFlags.mFillDialogDisabled;
+ return !mSessionFlags.mFillDialogDisabled && !mSessionFlags.mScreenHasCredmanField;
}
}
@@ -4643,10 +4679,8 @@
setViewStatesLocked(oldResponse, ViewState.STATE_INITIAL, true);
// Move over the id
newResponse.setRequestId(oldResponse.getRequestId());
- // Replace the old response
- mResponses.put(newResponse.getRequestId(), newResponse);
// Now process the new response
- processResponseLocked(newResponse, newClientState, 0);
+ processResponseLockedForPcc(newResponse, newClientState, 0);
}
@GuardedBy("mLock")
diff --git a/services/companion/java/com/android/server/companion/AssociationRequestsProcessor.java b/services/companion/java/com/android/server/companion/AssociationRequestsProcessor.java
index e9cd84a..77275e0 100644
--- a/services/companion/java/com/android/server/companion/AssociationRequestsProcessor.java
+++ b/services/companion/java/com/android/server/companion/AssociationRequestsProcessor.java
@@ -288,7 +288,7 @@
final AssociationInfo association = new AssociationInfo(id, userId, packageName,
macAddress, displayName, deviceProfile, associatedDevice, selfManaged,
/* notifyOnDeviceNearby */ false, /* revoked */ false, timestamp, Long.MAX_VALUE,
- /* systemDataSyncFlags */ ~0);
+ /* systemDataSyncFlags */ 0);
if (deviceProfile != null) {
// If the "Device Profile" is specified, make the companion application a holder of the
diff --git a/services/companion/java/com/android/server/companion/CompanionDeviceConfig.java b/services/companion/java/com/android/server/companion/CompanionDeviceConfig.java
index 05f2eea..8570515 100644
--- a/services/companion/java/com/android/server/companion/CompanionDeviceConfig.java
+++ b/services/companion/java/com/android/server/companion/CompanionDeviceConfig.java
@@ -31,10 +31,10 @@
public static final String ENABLE_CONTEXT_SYNC_TELECOM = "enable_context_sync_telecom";
/**
- * Returns whether the given flag is currently enabled, with a default value of {@code true}.
+ * Returns whether the given flag is currently enabled, with a default value of {@code false}.
*/
public static boolean isEnabled(String flag) {
- return DeviceConfig.getBoolean(NAMESPACE_COMPANION, flag, /* defaultValue= */ true);
+ return DeviceConfig.getBoolean(NAMESPACE_COMPANION, flag, /* defaultValue= */ false);
}
/**
diff --git a/services/companion/java/com/android/server/companion/PersistentDataStore.java b/services/companion/java/com/android/server/companion/PersistentDataStore.java
index b66c193..54798f4 100644
--- a/services/companion/java/com/android/server/companion/PersistentDataStore.java
+++ b/services/companion/java/com/android/server/companion/PersistentDataStore.java
@@ -133,7 +133,7 @@
* revoked="false"
* last_time_connected="1634641160229"
* time_approved="1634389553216"
- * system_data_sync_flags="-1"/>
+ * system_data_sync_flags="0"/>
*
* <association
* id="3"
@@ -145,7 +145,7 @@
* revoked="false"
* last_time_connected="1634641160229"
* time_approved="1634641160229"
- * system_data_sync_flags="-1"/>
+ * system_data_sync_flags="1"/>
* </associations>
*
* <previously-used-ids>
@@ -432,7 +432,7 @@
out.add(new AssociationInfo(associationId, userId, appPackage,
MacAddress.fromString(deviceAddress), null, profile, null,
/* managedByCompanionApp */ false, notify, /* revoked */ false, timeApproved,
- Long.MAX_VALUE, /* systemDataSyncFlags */ -1));
+ Long.MAX_VALUE, /* systemDataSyncFlags */ 0));
}
private static void readAssociationsV1(@NonNull TypedXmlPullParser parser,
@@ -466,7 +466,7 @@
final long lastTimeConnected = readLongAttribute(
parser, XML_ATTR_LAST_TIME_CONNECTED, Long.MAX_VALUE);
final int systemDataSyncFlags = readIntAttribute(parser,
- XML_ATTR_SYSTEM_DATA_SYNC_FLAGS, -1);
+ XML_ATTR_SYSTEM_DATA_SYNC_FLAGS, 0);
final AssociationInfo associationInfo = createAssociationInfoNoThrow(associationId, userId,
appPackage, macAddress, displayName, profile, selfManaged, notify, revoked,
diff --git a/services/companion/java/com/android/server/companion/transport/CompanionTransportManager.java b/services/companion/java/com/android/server/companion/transport/CompanionTransportManager.java
index 17bdb60..0f00f5f 100644
--- a/services/companion/java/com/android/server/companion/transport/CompanionTransportManager.java
+++ b/services/companion/java/com/android/server/companion/transport/CompanionTransportManager.java
@@ -19,10 +19,8 @@
import static android.Manifest.permission.DELIVER_COMPANION_MESSAGES;
import static com.android.server.companion.transport.Transport.MESSAGE_REQUEST_PERMISSION_RESTORE;
-import static com.android.server.companion.transport.Transport.MESSAGE_REQUEST_PLATFORM_INFO;
import android.annotation.NonNull;
-import android.annotation.Nullable;
import android.annotation.SuppressLint;
import android.app.ActivityManagerInternal;
import android.companion.AssociationInfo;
@@ -33,7 +31,6 @@
import android.content.pm.PackageManager.NameNotFoundException;
import android.os.Binder;
import android.os.Build;
-import android.os.IBinder;
import android.os.ParcelFileDescriptor;
import android.os.RemoteCallbackList;
import android.os.RemoteException;
@@ -46,7 +43,6 @@
import java.io.FileDescriptor;
import java.io.IOException;
-import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
@@ -58,19 +54,8 @@
private static final String TAG = "CDM_CompanionTransportManager";
private static final boolean DEBUG = false;
- private static final int SECURE_CHANNEL_AVAILABLE_SDK = Build.VERSION_CODES.UPSIDE_DOWN_CAKE;
- private static final int NON_ANDROID = -1;
-
private boolean mSecureTransportEnabled = true;
- private static boolean isRequest(int message) {
- return (message & 0xFF000000) == 0x63000000;
- }
-
- private static boolean isResponse(int message) {
- return (message & 0xFF000000) == 0x33000000;
- }
-
private final Context mContext;
private final AssociationStore mAssociationStore;
@@ -84,10 +69,6 @@
@NonNull
private final SparseArray<IOnMessageReceivedListener> mMessageListeners = new SparseArray<>();
-
- @Nullable
- private Transport mTempTransport;
-
public CompanionTransportManager(Context context, AssociationStore associationStore) {
mContext = context;
mAssociationStore = associationStore;
@@ -199,7 +180,8 @@
detachSystemDataTransport(packageName, userId, associationId);
}
- initializeTransport(associationId, fd);
+ // TODO: Implement new API to pass a PSK
+ initializeTransport(associationId, fd, null);
notifyOnTransportsChanged();
}
@@ -237,107 +219,36 @@
});
}
- private void initializeTransport(int associationId, ParcelFileDescriptor fd) {
+ private void initializeTransport(int associationId,
+ ParcelFileDescriptor fd,
+ byte[] preSharedKey) {
Slog.i(TAG, "Initializing transport");
+ Transport transport;
if (!isSecureTransportEnabled()) {
- Transport transport = new RawTransport(associationId, fd, mContext);
- addMessageListenersToTransport(transport);
- transport.start();
- synchronized (mTransports) {
- mTransports.put(associationId, transport);
- }
- Slog.i(TAG, "RawTransport is created");
- return;
- }
-
- // Exchange platform info to decide which transport should be created
- mTempTransport = new RawTransport(associationId, fd, mContext);
- addMessageListenersToTransport(mTempTransport);
- IOnMessageReceivedListener listener = new IOnMessageReceivedListener() {
- @Override
- public void onMessageReceived(int associationId, byte[] data) throws RemoteException {
- synchronized (mTransports) {
- onPlatformInfoReceived(associationId, data);
- }
- }
-
- @Override
- public IBinder asBinder() {
- return null;
- }
- };
- mTempTransport.addListener(MESSAGE_REQUEST_PLATFORM_INFO, listener);
- mTempTransport.start();
-
- int sdk = Build.VERSION.SDK_INT;
- String release = Build.VERSION.RELEASE;
- // data format: | SDK_INT (int) | release length (int) | release |
- final ByteBuffer data = ByteBuffer.allocate(4 + 4 + release.getBytes().length)
- .putInt(sdk)
- .putInt(release.getBytes().length)
- .put(release.getBytes());
-
- // TODO: it should check if preSharedKey is given
- try {
- mTempTransport.sendMessage(MESSAGE_REQUEST_PLATFORM_INFO, data.array());
- } catch (IOException e) {
- Slog.e(TAG, "Failed to exchange platform info");
- }
- }
-
- /**
- * Depending on the remote platform info to decide which transport should be created
- */
- private void onPlatformInfoReceived(int associationId, byte[] data) {
- if (mTempTransport.getAssociationId() != associationId) {
- return;
- }
- // TODO: it should check if preSharedKey is given
-
- ByteBuffer buffer = ByteBuffer.wrap(data);
- int remoteSdk = buffer.getInt();
- byte[] remoteRelease = new byte[buffer.getInt()];
- buffer.get(remoteRelease);
-
- Slog.i(TAG, "Remote device SDK: " + remoteSdk + ", release:" + new String(remoteRelease));
-
- Transport transport = mTempTransport;
- mTempTransport.stop();
-
- int sdk = Build.VERSION.SDK_INT;
- String release = Build.VERSION.RELEASE;
-
- if (sdk < SECURE_CHANNEL_AVAILABLE_SDK || remoteSdk < SECURE_CHANNEL_AVAILABLE_SDK) {
- // If either device is Android T or below, use raw channel
- // TODO: depending on the release version, either
- // 1) using a RawTransport for old T versions
- // 2) or an Ukey2 handshaked transport for UKey2 backported T versions
- Slog.d(TAG, "Secure channel is not supported. Using raw transport");
- transport = new RawTransport(transport.getAssociationId(), transport.getFd(), mContext);
+ // If secure transport is explicitly disabled for testing, use raw transport
+ Slog.i(TAG, "Secure channel is disabled. Creating raw transport");
+ transport = new RawTransport(associationId, fd, mContext);
} else if (Build.isDebuggable()) {
// If device is debug build, use hardcoded test key for authentication
Slog.d(TAG, "Creating an unauthenticated secure channel");
final byte[] testKey = "CDM".getBytes(StandardCharsets.UTF_8);
- transport = new SecureTransport(transport.getAssociationId(), transport.getFd(),
- mContext, testKey, null);
- } else if (sdk == NON_ANDROID || remoteSdk == NON_ANDROID) {
+ transport = new SecureTransport(associationId, fd, mContext, testKey, null);
+ } else if (preSharedKey != null) {
// If either device is not Android, then use app-specific pre-shared key
- // TODO: pass in a real preSharedKey
Slog.d(TAG, "Creating a PSK-authenticated secure channel");
- transport = new SecureTransport(transport.getAssociationId(), transport.getFd(),
- mContext, new byte[0], null);
+ transport = new SecureTransport(associationId, fd, mContext, preSharedKey, null);
} else {
// If none of the above applies, then use secure channel with attestation verification
Slog.d(TAG, "Creating a secure channel");
- transport = new SecureTransport(transport.getAssociationId(), transport.getFd(),
- mContext);
+ transport = new SecureTransport(associationId, fd, mContext);
}
+
addMessageListenersToTransport(transport);
transport.start();
synchronized (mTransports) {
- mTransports.put(transport.getAssociationId(), transport);
+ mTransports.put(associationId, transport);
}
- // Doesn't need to notifyTransportsChanged here, it'll be done in attachSystemDataTransport
+
}
public Future<?> requestPermissionRestore(int associationId, byte[] data) {
diff --git a/services/companion/java/com/android/server/companion/transport/RawTransport.java b/services/companion/java/com/android/server/companion/transport/RawTransport.java
index 4158901..e64509f 100644
--- a/services/companion/java/com/android/server/companion/transport/RawTransport.java
+++ b/services/companion/java/com/android/server/companion/transport/RawTransport.java
@@ -35,7 +35,7 @@
}
@Override
- public void start() {
+ void start() {
if (DEBUG) {
Slog.d(TAG, "Starting raw transport.");
}
@@ -54,7 +54,7 @@
}
@Override
- public void stop() {
+ void stop() {
if (DEBUG) {
Slog.d(TAG, "Stopping raw transport.");
}
@@ -62,7 +62,7 @@
}
@Override
- public void close() {
+ void close() {
stop();
if (DEBUG) {
diff --git a/services/companion/java/com/android/server/companion/transport/SecureTransport.java b/services/companion/java/com/android/server/companion/transport/SecureTransport.java
index 4054fc9..949f39a 100644
--- a/services/companion/java/com/android/server/companion/transport/SecureTransport.java
+++ b/services/companion/java/com/android/server/companion/transport/SecureTransport.java
@@ -51,18 +51,18 @@
}
@Override
- public void start() {
+ void start() {
mSecureChannel.start();
}
@Override
- public void stop() {
+ void stop() {
mSecureChannel.stop();
mShouldProcessRequests = false;
}
@Override
- public void close() {
+ void close() {
mSecureChannel.close();
mShouldProcessRequests = false;
}
diff --git a/services/companion/java/com/android/server/companion/transport/Transport.java b/services/companion/java/com/android/server/companion/transport/Transport.java
index d30104a..6ad6d3a 100644
--- a/services/companion/java/com/android/server/companion/transport/Transport.java
+++ b/services/companion/java/com/android/server/companion/transport/Transport.java
@@ -47,7 +47,6 @@
protected static final boolean DEBUG = Build.IS_DEBUGGABLE;
static final int MESSAGE_REQUEST_PING = 0x63807378; // ?PIN
- public static final int MESSAGE_REQUEST_PLATFORM_INFO = 0x63807073; // ?PFI
public static final int MESSAGE_REQUEST_CONTEXT_SYNC = 0x63678883; // ?CXS
public static final int MESSAGE_REQUEST_PERMISSION_RESTORE = 0x63826983; // ?RES
@@ -113,17 +112,17 @@
/**
* Start listening to messages.
*/
- public abstract void start();
+ abstract void start();
/**
* Soft stop listening to the incoming data without closing the streams.
*/
- public abstract void stop();
+ abstract void stop();
/**
* Stop listening to the incoming data and close the streams.
*/
- public abstract void close();
+ abstract void close();
protected abstract void sendMessage(int message, int sequence, @NonNull byte[] data)
throws IOException;
@@ -183,11 +182,6 @@
sendMessage(MESSAGE_RESPONSE_SUCCESS, sequence, data);
break;
}
- case MESSAGE_REQUEST_PLATFORM_INFO: {
- callback(message, data);
- // DO NOT SEND A RESPONSE!
- break;
- }
case MESSAGE_REQUEST_CONTEXT_SYNC: {
callback(message, data);
sendMessage(MESSAGE_RESPONSE_SUCCESS, sequence, EmptyArray.BYTE);
diff --git a/services/companion/java/com/android/server/companion/virtual/SensorController.java b/services/companion/java/com/android/server/companion/virtual/SensorController.java
index 6d198de..2d591b6 100644
--- a/services/companion/java/com/android/server/companion/virtual/SensorController.java
+++ b/services/companion/java/com/android/server/companion/virtual/SensorController.java
@@ -53,19 +53,18 @@
private static AtomicInteger sNextDirectChannelHandle = new AtomicInteger(1);
- private final Object mLock;
+ private final Object mLock = new Object();
private final int mVirtualDeviceId;
@GuardedBy("mLock")
- private final Map<IBinder, SensorDescriptor> mSensorDescriptors = new ArrayMap<>();
+ private final ArrayMap<IBinder, SensorDescriptor> mSensorDescriptors = new ArrayMap<>();
@NonNull
private final SensorManagerInternal.RuntimeSensorCallback mRuntimeSensorCallback;
private final SensorManagerInternal mSensorManagerInternal;
private final VirtualDeviceManagerInternal mVdmInternal;
- public SensorController(@NonNull Object lock, int virtualDeviceId,
+ public SensorController(int virtualDeviceId,
@Nullable IVirtualSensorCallback virtualSensorCallback) {
- mLock = lock;
mVirtualDeviceId = virtualDeviceId;
mRuntimeSensorCallback = new RuntimeSensorCallbackWrapper(virtualSensorCallback);
mSensorManagerInternal = LocalServices.getService(SensorManagerInternal.class);
@@ -185,7 +184,7 @@
@VisibleForTesting
Map<IBinder, SensorDescriptor> getSensorDescriptors() {
synchronized (mLock) {
- return mSensorDescriptors;
+ return new ArrayMap<>(mSensorDescriptors);
}
}
diff --git a/services/companion/java/com/android/server/companion/virtual/VirtualDeviceImpl.java b/services/companion/java/com/android/server/companion/virtual/VirtualDeviceImpl.java
index de0f68c..6b55d7e 100644
--- a/services/companion/java/com/android/server/companion/virtual/VirtualDeviceImpl.java
+++ b/services/companion/java/com/android/server/companion/virtual/VirtualDeviceImpl.java
@@ -266,8 +266,7 @@
mInputController = inputController;
}
if (sensorController == null) {
- mSensorController = new SensorController(
- mVirtualDeviceLock, mDeviceId, mParams.getVirtualSensorCallback());
+ mSensorController = new SensorController(mDeviceId, mParams.getVirtualSensorCallback());
} else {
mSensorController = sensorController;
}
diff --git a/services/core/java/android/content/pm/PackageManagerInternal.java b/services/core/java/android/content/pm/PackageManagerInternal.java
index 22ac22d..a305ed3 100644
--- a/services/core/java/android/content/pm/PackageManagerInternal.java
+++ b/services/core/java/android/content/pm/PackageManagerInternal.java
@@ -154,16 +154,24 @@
/**
+ * Variant of {@link #isSameApp(String, long, int, int)} with no flags.
+ * @see #isSameApp(String, long, int, int)
+ */
+ public abstract boolean isSameApp(String packageName, int callingUid, int userId);
+
+ /**
* Gets whether a given package name belongs to the calling uid. If the calling uid is an
* {@link Process#isSdkSandboxUid(int) sdk sandbox uid}, checks whether the package name is
* equal to {@link PackageManager#getSdkSandboxPackageName()}.
*
* @param packageName The package name to check.
+ * @param flags The PackageInfoFlagsBits flags to use during uid lookup.
* @param callingUid The calling uid.
* @param userId The user under which to check.
* @return True if the package name belongs to the calling uid.
*/
- public abstract boolean isSameApp(String packageName, int callingUid, int userId);
+ public abstract boolean isSameApp(String packageName,
+ @PackageManager.PackageInfoFlagsBits long flags, int callingUid, int userId);
/**
* Retrieve all of the information we know about a particular package/application.
diff --git a/services/core/java/com/android/server/SoundTriggerInternal.java b/services/core/java/com/android/server/SoundTriggerInternal.java
index f184574..f8830ea 100644
--- a/services/core/java/com/android/server/SoundTriggerInternal.java
+++ b/services/core/java/com/android/server/SoundTriggerInternal.java
@@ -47,7 +47,14 @@
int STATUS_OK = SoundTrigger.STATUS_OK;
// Attach to a specific underlying STModule
- Session attach(@NonNull IBinder client, ModuleProperties underlyingModule);
+ /**
+ * Attach to a specific underlying STModule.
+ * @param client - Binder token representing the app client for death notifications
+ * @param underlyingModule - Properties of the underlying STModule to attach to
+ * @param isTrusted - {@code true} if callbacks will be appropriately AppOps attributed by
+ * a trusted component prior to delivery to the ultimate client.
+ */
+ Session attach(@NonNull IBinder client, ModuleProperties underlyingModule, boolean isTrusted);
// Enumerate possible STModules to attach to
List<ModuleProperties> listModuleProperties(Identity originatorIdentity);
diff --git a/services/core/java/com/android/server/WallpaperUpdateReceiver.java b/services/core/java/com/android/server/WallpaperUpdateReceiver.java
index 9917892..2812233 100644
--- a/services/core/java/com/android/server/WallpaperUpdateReceiver.java
+++ b/services/core/java/com/android/server/WallpaperUpdateReceiver.java
@@ -88,7 +88,7 @@
} else {
//live wallpaper
ComponentName currCN = info.getComponent();
- ComponentName defaultCN = WallpaperManager.getDefaultWallpaperComponent(context);
+ ComponentName defaultCN = WallpaperManager.getCmfDefaultWallpaperComponent(context);
if (!currCN.equals(defaultCN)) {
return true;
}
diff --git a/services/core/java/com/android/server/am/ActiveServices.java b/services/core/java/com/android/server/am/ActiveServices.java
index ca50af8..96766a2 100644
--- a/services/core/java/com/android/server/am/ActiveServices.java
+++ b/services/core/java/com/android/server/am/ActiveServices.java
@@ -2326,7 +2326,7 @@
&& (r.getConnections().size() > 0)
&& (r.mDebugWhileInUseReasonInBindService
!= r.mDebugWhileInUseReasonInStartForeground)) {
- Slog.wtf(TAG, "FGS while-in-use changed (b/276963716): old="
+ logWhileInUseChangeWtf("FGS while-in-use changed (b/276963716): old="
+ reasonCodeToString(r.mDebugWhileInUseReasonInBindService)
+ " new="
+ reasonCodeToString(r.mDebugWhileInUseReasonInStartForeground)
@@ -2589,6 +2589,13 @@
}
}
+ /**
+ * It just does a wtf, but extracted to a method, so we can do a signature search on pitot.
+ */
+ private void logWhileInUseChangeWtf(String message) {
+ Slog.wtf(TAG, message);
+ }
+
private boolean withinFgsDeferRateLimit(ServiceRecord sr, final long now) {
// If we're still within the service's deferral period, then by definition
// deferral is not rate limited.
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index a888a0b..df5b83a 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -2497,13 +2497,10 @@
final File systemDir = SystemServiceManager.ensureSystemDir();
// TODO: Move creation of battery stats service outside of activity manager service.
- mBatteryStatsService = new BatteryStatsService(systemContext, systemDir,
- BackgroundThread.get().getHandler());
- mBatteryStatsService.getActiveStatistics().readLocked();
- mBatteryStatsService.scheduleWriteToDisk();
+ mBatteryStatsService = BatteryStatsService.create(systemContext, systemDir,
+ BackgroundThread.getHandler(), this);
mOnBattery = DEBUG_POWER ? true
: mBatteryStatsService.getActiveStatistics().getIsOnBattery();
- mBatteryStatsService.getActiveStatistics().setCallback(this);
mOomAdjProfiler.batteryPowerChanged(mOnBattery);
mProcessStats = new ProcessStatsService(this, new File(systemDir, "procstats"));
@@ -3764,6 +3761,15 @@
@Override
public void forceStopPackage(final String packageName, int userId) {
+ forceStopPackage(packageName, userId, /*flags=*/ 0);
+ }
+
+ @Override
+ public void forceStopPackageEvenWhenStopping(final String packageName, int userId) {
+ forceStopPackage(packageName, userId, ActivityManager.FLAG_OR_STOPPED);
+ }
+
+ private void forceStopPackage(final String packageName, int userId, int userRunningFlags) {
if (checkCallingPermission(android.Manifest.permission.FORCE_STOP_PACKAGES)
!= PackageManager.PERMISSION_GRANTED) {
String msg = "Permission Denial: forceStopPackage() from pid="
@@ -3779,7 +3785,7 @@
final long callingId = Binder.clearCallingIdentity();
try {
IPackageManager pm = AppGlobals.getPackageManager();
- synchronized(this) {
+ synchronized (this) {
int[] users = userId == UserHandle.USER_ALL
? mUserController.getUsers() : new int[] { userId };
for (int user : users) {
@@ -3807,7 +3813,7 @@
Slog.w(TAG, "Failed trying to unstop package "
+ packageName + ": " + e);
}
- if (mUserController.isUserRunning(user, 0)) {
+ if (mUserController.isUserRunning(user, userRunningFlags)) {
forceStopPackageLocked(packageName, pkgUid, "from pid " + callingPid);
finishForceStopPackageLocked(packageName, pkgUid);
}
@@ -5220,7 +5226,7 @@
isActivityResultType)) {
boolean isChangeEnabled = CompatChanges.isChangeEnabled(
PendingIntent.BLOCK_MUTABLE_IMPLICIT_PENDING_INTENT,
- owningUid);
+ packageName, UserHandle.of(userId));
String resolvedType = resolvedTypes == null
|| i >= resolvedTypes.length ? null : resolvedTypes[i];
ActivityManagerUtils.logUnsafeIntentEvent(
@@ -7514,7 +7520,31 @@
"registerUidObserver");
}
mUidObserverController.register(observer, which, cutpoint, callingPackage,
- Binder.getCallingUid());
+ Binder.getCallingUid(), /*uids*/null);
+ }
+
+ /**
+ * Registers a UidObserver with a uid filter.
+ *
+ * @param observer The UidObserver implementation to register.
+ * @param which A bitmask of events to observe. See ActivityManager.UID_OBSERVER_*.
+ * @param cutpoint The cutpoint for onUidStateChanged events. When the state crosses this
+ * threshold in either direction, onUidStateChanged will be called.
+ * @param callingPackage The name of the calling package.
+ * @param uids A list of uids to watch. If all uids are to be watched, use
+ * registerUidObserver instead.
+ * @throws RemoteException
+ * @return Returns A binder token identifying the UidObserver registration.
+ */
+ @Override
+ public IBinder registerUidObserverForUids(IUidObserver observer, int which, int cutpoint,
+ String callingPackage, int[] uids) {
+ if (!hasUsageStatsPermission(callingPackage)) {
+ enforceCallingPermission(android.Manifest.permission.PACKAGE_USAGE_STATS,
+ "registerUidObserver");
+ }
+ return mUidObserverController.register(observer, which, cutpoint, callingPackage,
+ Binder.getCallingUid(), uids);
}
@Override
@@ -7522,6 +7552,40 @@
mUidObserverController.unregister(observer);
}
+ /**
+ * Adds a uid to the list of uids that a UidObserver will receive updates about.
+ *
+ * @param observerToken The binder token identifying the UidObserver registration.
+ * @param callingPackage The name of the calling package.
+ * @param uid The uid to watch.
+ * @throws RemoteException
+ */
+ @Override
+ public void addUidToObserver(IBinder observerToken, String callingPackage, int uid) {
+ if (!hasUsageStatsPermission(callingPackage)) {
+ enforceCallingPermission(android.Manifest.permission.PACKAGE_USAGE_STATS,
+ "registerUidObserver");
+ }
+ mUidObserverController.addUidToObserver(observerToken, uid);
+ }
+
+ /**
+ * Removes a uid from the list of uids that a UidObserver will receive updates about.
+ *
+ * @param observerToken The binder token identifying the UidObserver registration.
+ * @param callingPackage The name of the calling package.
+ * @param uid The uid to stop watching.
+ * @throws RemoteException
+ */
+ @Override
+ public void removeUidFromObserver(IBinder observerToken, String callingPackage, int uid) {
+ if (!hasUsageStatsPermission(callingPackage)) {
+ enforceCallingPermission(android.Manifest.permission.PACKAGE_USAGE_STATS,
+ "registerUidObserver");
+ }
+ mUidObserverController.removeUidFromObserver(observerToken, uid);
+ }
+
@Override
public boolean isUidActive(int uid, String callingPackage) {
if (!hasUsageStatsPermission(callingPackage)) {
@@ -18616,7 +18680,7 @@
int which, int cutpoint, @NonNull String callingPackage) {
mNetworkPolicyUidObserver = observer;
mUidObserverController.register(observer, which, cutpoint, callingPackage,
- Binder.getCallingUid());
+ Binder.getCallingUid(), /*uids*/null);
}
@Override
@@ -18909,6 +18973,13 @@
pw.flush();
}
+ void waitForBroadcastDispatch(@NonNull PrintWriter pw, @NonNull Intent intent) {
+ enforceCallingPermission(permission.DUMP, "waitForBroadcastDispatch");
+ for (BroadcastQueue queue : mBroadcastQueues) {
+ queue.waitForDispatched(intent, pw);
+ }
+ }
+
void setIgnoreDeliveryGroupPolicy(@NonNull String broadcastAction) {
Objects.requireNonNull(broadcastAction);
enforceCallingPermission(permission.DUMP, "waitForBroadcastBarrier()");
diff --git a/services/core/java/com/android/server/am/ActivityManagerShellCommand.java b/services/core/java/com/android/server/am/ActivityManagerShellCommand.java
index 17a0d62..8759e3f 100644
--- a/services/core/java/com/android/server/am/ActivityManagerShellCommand.java
+++ b/services/core/java/com/android/server/am/ActivityManagerShellCommand.java
@@ -368,6 +368,8 @@
return runWaitForBroadcastBarrier(pw);
case "wait-for-application-barrier":
return runWaitForApplicationBarrier(pw);
+ case "wait-for-broadcast-dispatch":
+ return runWaitForBroadcastDispatch(pw);
case "set-ignore-delivery-group-policy":
return runSetIgnoreDeliveryGroupPolicy(pw);
case "clear-ignore-delivery-group-policy":
@@ -3472,6 +3474,18 @@
return 0;
}
+ int runWaitForBroadcastDispatch(PrintWriter pw) throws RemoteException {
+ pw = new PrintWriter(new TeeWriter(LOG_WRITER_INFO, pw));
+ final Intent intent;
+ try {
+ intent = makeIntent(UserHandle.USER_CURRENT);
+ } catch (URISyntaxException e) {
+ throw new RuntimeException(e.getMessage(), e);
+ }
+ mInternal.waitForBroadcastDispatch(pw, intent);
+ return 0;
+ }
+
int runSetIgnoreDeliveryGroupPolicy(PrintWriter pw) throws RemoteException {
final String broadcastAction = getNextArgRequired();
mInternal.setIgnoreDeliveryGroupPolicy(broadcastAction);
diff --git a/services/core/java/com/android/server/am/BatteryStatsService.java b/services/core/java/com/android/server/am/BatteryStatsService.java
index 6360e2a..36da888 100644
--- a/services/core/java/com/android/server/am/BatteryStatsService.java
+++ b/services/core/java/com/android/server/am/BatteryStatsService.java
@@ -399,6 +399,20 @@
mCpuWakeupStats = new CpuWakeupStats(context, R.xml.irq_device_map, mHandler);
}
+ /**
+ * Creates an instance of BatteryStatsService and restores data from stored state.
+ */
+ public static BatteryStatsService create(Context context, File systemDir, Handler handler,
+ BatteryStatsImpl.BatteryCallback callback) {
+ BatteryStatsService service = new BatteryStatsService(context, systemDir, handler);
+ service.mStats.setCallback(callback);
+ synchronized (service.mStats) {
+ service.mStats.readLocked();
+ }
+ service.scheduleWriteToDisk();
+ return service;
+ }
+
public void publish() {
LocalServices.addService(BatteryStatsInternal.class, new LocalService());
ServiceManager.addService(BatteryStats.SERVICE_NAME, asBinder());
diff --git a/services/core/java/com/android/server/am/BroadcastConstants.java b/services/core/java/com/android/server/am/BroadcastConstants.java
index 4d46963..87214de 100644
--- a/services/core/java/com/android/server/am/BroadcastConstants.java
+++ b/services/core/java/com/android/server/am/BroadcastConstants.java
@@ -179,11 +179,39 @@
* being "runnable" to give other processes a chance to run.
*/
public int MAX_RUNNING_ACTIVE_BROADCASTS = DEFAULT_MAX_RUNNING_ACTIVE_BROADCASTS;
- private static final String KEY_MAX_RUNNING_ACTIVE_BROADCASTS = "bcast_max_running_active_broadcasts";
+ private static final String KEY_MAX_RUNNING_ACTIVE_BROADCASTS =
+ "bcast_max_running_active_broadcasts";
private static final int DEFAULT_MAX_RUNNING_ACTIVE_BROADCASTS =
ActivityManager.isLowRamDeviceStatic() ? 8 : 16;
/**
+ * For {@link BroadcastQueueModernImpl}: Maximum number of active "blocking" broadcasts
+ * to dispatch to a "running" System process queue before we retire them back to
+ * being "runnable" to give other processes a chance to run. Here "blocking" refers to
+ * whether or not we are going to block on the finishReceiver() to be called before moving
+ * to the next broadcast.
+ */
+ public int MAX_CORE_RUNNING_BLOCKING_BROADCASTS = DEFAULT_MAX_CORE_RUNNING_BLOCKING_BROADCASTS;
+ private static final String KEY_CORE_MAX_RUNNING_BLOCKING_BROADCASTS =
+ "bcast_max_core_running_blocking_broadcasts";
+ private static final int DEFAULT_MAX_CORE_RUNNING_BLOCKING_BROADCASTS =
+ ActivityManager.isLowRamDeviceStatic() ? 8 : 16;
+
+ /**
+ * For {@link BroadcastQueueModernImpl}: Maximum number of active non-"blocking" broadcasts
+ * to dispatch to a "running" System process queue before we retire them back to
+ * being "runnable" to give other processes a chance to run. Here "blocking" refers to
+ * whether or not we are going to block on the finishReceiver() to be called before moving
+ * to the next broadcast.
+ */
+ public int MAX_CORE_RUNNING_NON_BLOCKING_BROADCASTS =
+ DEFAULT_MAX_CORE_RUNNING_NON_BLOCKING_BROADCASTS;
+ private static final String KEY_CORE_MAX_RUNNING_NON_BLOCKING_BROADCASTS =
+ "bcast_max_core_running_non_blocking_broadcasts";
+ private static final int DEFAULT_MAX_CORE_RUNNING_NON_BLOCKING_BROADCASTS =
+ ActivityManager.isLowRamDeviceStatic() ? 32 : 64;
+
+ /**
* For {@link BroadcastQueueModernImpl}: Maximum number of pending
* broadcasts to hold for a process before we ignore any delays that policy
* might have applied to that process.
@@ -369,6 +397,12 @@
DEFAULT_MAX_CONSECUTIVE_NORMAL_DISPATCHES);
MAX_RUNNING_ACTIVE_BROADCASTS = getDeviceConfigInt(KEY_MAX_RUNNING_ACTIVE_BROADCASTS,
DEFAULT_MAX_RUNNING_ACTIVE_BROADCASTS);
+ MAX_CORE_RUNNING_BLOCKING_BROADCASTS = getDeviceConfigInt(
+ KEY_CORE_MAX_RUNNING_BLOCKING_BROADCASTS,
+ DEFAULT_MAX_CORE_RUNNING_BLOCKING_BROADCASTS);
+ MAX_CORE_RUNNING_NON_BLOCKING_BROADCASTS = getDeviceConfigInt(
+ KEY_CORE_MAX_RUNNING_NON_BLOCKING_BROADCASTS,
+ DEFAULT_MAX_CORE_RUNNING_NON_BLOCKING_BROADCASTS);
MAX_PENDING_BROADCASTS = getDeviceConfigInt(KEY_MAX_PENDING_BROADCASTS,
DEFAULT_MAX_PENDING_BROADCASTS);
DELAY_NORMAL_MILLIS = getDeviceConfigLong(KEY_DELAY_NORMAL_MILLIS,
@@ -418,6 +452,10 @@
pw.print(KEY_MODERN_QUEUE_ENABLED, MODERN_QUEUE_ENABLED).println();
pw.print(KEY_MAX_RUNNING_PROCESS_QUEUES, MAX_RUNNING_PROCESS_QUEUES).println();
pw.print(KEY_MAX_RUNNING_ACTIVE_BROADCASTS, MAX_RUNNING_ACTIVE_BROADCASTS).println();
+ pw.print(KEY_CORE_MAX_RUNNING_BLOCKING_BROADCASTS,
+ MAX_CORE_RUNNING_BLOCKING_BROADCASTS).println();
+ pw.print(KEY_CORE_MAX_RUNNING_NON_BLOCKING_BROADCASTS,
+ MAX_CORE_RUNNING_NON_BLOCKING_BROADCASTS).println();
pw.print(KEY_MAX_PENDING_BROADCASTS, MAX_PENDING_BROADCASTS).println();
pw.print(KEY_DELAY_NORMAL_MILLIS,
TimeUtils.formatDuration(DELAY_NORMAL_MILLIS)).println();
diff --git a/services/core/java/com/android/server/am/BroadcastDispatcher.java b/services/core/java/com/android/server/am/BroadcastDispatcher.java
index 2adcf2f..8aa3921 100644
--- a/services/core/java/com/android/server/am/BroadcastDispatcher.java
+++ b/services/core/java/com/android/server/am/BroadcastDispatcher.java
@@ -582,6 +582,38 @@
}
}
+ private static boolean isDispatchedInDeferrals(@NonNull ArrayList<Deferrals> list,
+ @NonNull Intent intent) {
+ for (int i = 0; i < list.size(); i++) {
+ if (!isDispatched(list.get(i).broadcasts, intent)) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ private static boolean isDispatched(@NonNull ArrayList<BroadcastRecord> list,
+ @NonNull Intent intent) {
+ for (int i = 0; i < list.size(); i++) {
+ if (intent.filterEquals(list.get(i).intent)) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ public boolean isDispatched(@NonNull Intent intent) {
+ synchronized (mLock) {
+ if ((mCurrentBroadcast != null) && intent.filterEquals(mCurrentBroadcast.intent)) {
+ return false;
+ }
+ return isDispatched(mOrderedBroadcasts, intent)
+ && isDispatched(mAlarmQueue, intent)
+ && isDispatchedInDeferrals(mDeferredBroadcasts, intent)
+ && isDispatchedInDeferrals(mAlarmDeferrals, intent);
+ }
+ }
+
private static int pendingInDeferralsList(ArrayList<Deferrals> list) {
int pending = 0;
final int numEntries = list.size();
diff --git a/services/core/java/com/android/server/am/BroadcastProcessQueue.java b/services/core/java/com/android/server/am/BroadcastProcessQueue.java
index 5c68e67..2803b4b 100644
--- a/services/core/java/com/android/server/am/BroadcastProcessQueue.java
+++ b/services/core/java/com/android/server/am/BroadcastProcessQueue.java
@@ -143,6 +143,12 @@
private int mActiveCountSinceIdle;
/**
+ * Count of {@link #mActive} broadcasts with assumed delivery that have been dispatched
+ * since this queue was last idle.
+ */
+ private int mActiveAssumedDeliveryCountSinceIdle;
+
+ /**
* Flag indicating that the currently active broadcast is being dispatched
* was scheduled via a cold start.
*/
@@ -182,7 +188,7 @@
private int mCountInstrumented;
private int mCountManifest;
- private boolean mPrioritizeEarliest;
+ private int mCountPrioritizeEarliestRequests;
private @UptimeMillisLong long mRunnableAt = Long.MAX_VALUE;
private @Reason int mRunnableAtReason = REASON_EMPTY;
@@ -194,6 +200,7 @@
*/
private boolean mLastDeferredStates;
+ private boolean mUidForeground;
private boolean mUidCached;
private boolean mProcessInstrumented;
private boolean mProcessPersistent;
@@ -403,7 +410,8 @@
* {@link BroadcastQueueModernImpl#updateRunnableList}
*/
@CheckResult
- public boolean setProcessAndUidCached(@Nullable ProcessRecord app, boolean uidCached) {
+ public boolean setProcessAndUidState(@Nullable ProcessRecord app, boolean uidForeground,
+ boolean uidCached) {
this.app = app;
// Since we may have just changed our PID, invalidate cached strings
@@ -413,10 +421,12 @@
boolean didSomething = false;
if (app != null) {
didSomething |= setUidCached(uidCached);
+ didSomething |= setUidForeground(uidForeground);
didSomething |= setProcessInstrumented(app.getActiveInstrumentation() != null);
didSomething |= setProcessPersistent(app.isPersistent());
} else {
didSomething |= setUidCached(uidCached);
+ didSomething |= setUidForeground(false);
didSomething |= setProcessInstrumented(false);
didSomething |= setProcessPersistent(false);
}
@@ -424,6 +434,22 @@
}
/**
+ * Update if the UID this process is belongs to is in "foreground" state, which signals
+ * broadcast dispatch should prioritize delivering broadcasts to this process to minimize any
+ * delays in UI updates.
+ */
+ @CheckResult
+ private boolean setUidForeground(boolean uidForeground) {
+ if (mUidForeground != uidForeground) {
+ mUidForeground = uidForeground;
+ invalidateRunnableAt();
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ /**
* Update if this process is in the "cached" state, typically signaling that
* broadcast dispatch should be paused or delayed.
*/
@@ -499,6 +525,14 @@
return mActiveCountSinceIdle;
}
+ /**
+ * Count of {@link #mActive} broadcasts with assumed delivery that have been dispatched
+ * since this queue was last idle.
+ */
+ public int getActiveAssumedDeliveryCountSinceIdle() {
+ return mActiveAssumedDeliveryCountSinceIdle;
+ }
+
public void setActiveViaColdStart(boolean activeViaColdStart) {
mActiveViaColdStart = activeViaColdStart;
}
@@ -532,6 +566,8 @@
mActive = (BroadcastRecord) next.arg1;
mActiveIndex = next.argi1;
mActiveCountSinceIdle++;
+ mActiveAssumedDeliveryCountSinceIdle +=
+ (mActive.isAssumedDelivered(mActiveIndex) ? 1 : 0);
mActiveViaColdStart = false;
mActiveWasStopped = false;
next.recycle();
@@ -545,6 +581,7 @@
mActive = null;
mActiveIndex = 0;
mActiveCountSinceIdle = 0;
+ mActiveAssumedDeliveryCountSinceIdle = 0;
mActiveViaColdStart = false;
invalidateRunnableAt();
}
@@ -748,7 +785,7 @@
final BroadcastRecord nextLPRecord = (BroadcastRecord) nextLPArgs.arg1;
final int nextLPRecordIndex = nextLPArgs.argi1;
final BroadcastRecord nextHPRecord = (BroadcastRecord) highPriorityQueue.peekFirst().arg1;
- final boolean shouldConsiderLPQueue = (mPrioritizeEarliest
+ final boolean shouldConsiderLPQueue = (mCountPrioritizeEarliestRequests > 0
|| consecutiveHighPriorityCount >= maxHighPriorityDispatchLimit);
final boolean isLPQueueEligible = shouldConsiderLPQueue
&& nextLPRecord.enqueueTime <= nextHPRecord.enqueueTime
@@ -761,10 +798,9 @@
}
/**
- * When {@code prioritizeEarliest} is set to {@code true}, then earliest enqueued
- * broadcasts would be prioritized for dispatching, even if there are urgent broadcasts
- * waiting. This is typically used in case there are callers waiting for "barrier" to be
- * reached.
+ * Add a request to prioritize dispatching of broadcasts that have been enqueued the earliest,
+ * even if there are urgent broadcasts waiting to be dispatched. This is typically used in
+ * case there are callers waiting for "barrier" to be reached.
*
* @return if this operation may have changed internal state, indicating
* that the caller is responsible for invoking
@@ -772,12 +808,38 @@
*/
@CheckResult
@VisibleForTesting
- boolean setPrioritizeEarliest(boolean prioritizeEarliest) {
- if (mPrioritizeEarliest != prioritizeEarliest) {
- mPrioritizeEarliest = prioritizeEarliest;
+ boolean addPrioritizeEarliestRequest() {
+ if (mCountPrioritizeEarliestRequests == 0) {
+ mCountPrioritizeEarliestRequests++;
invalidateRunnableAt();
return true;
} else {
+ mCountPrioritizeEarliestRequests++;
+ return false;
+ }
+ }
+
+ /**
+ * Remove a request to prioritize dispatching of broadcasts that have been enqueued the
+ * earliest, even if there are urgent broadcasts waiting to be dispatched. This is typically
+ * used in case there are callers waiting for "barrier" to be reached.
+ *
+ * <p> Once there are no more remaining requests, the dispatching order reverts back to normal.
+ *
+ * @return if this operation may have changed internal state, indicating
+ * that the caller is responsible for invoking
+ * {@link BroadcastQueueModernImpl#updateRunnableList}
+ */
+ @CheckResult
+ boolean removePrioritizeEarliestRequest() {
+ mCountPrioritizeEarliestRequests--;
+ if (mCountPrioritizeEarliestRequests == 0) {
+ invalidateRunnableAt();
+ return true;
+ } else if (mCountPrioritizeEarliestRequests < 0) {
+ mCountPrioritizeEarliestRequests = 0;
+ return false;
+ } else {
return false;
}
}
@@ -837,7 +899,7 @@
}
/**
- * Quickly determine if this queue has broadcasts enqueued before the given
+ * Quickly determine if this queue has non-deferred broadcasts enqueued before the given
* barrier timestamp that are still waiting to be delivered.
*/
public boolean isBeyondBarrierLocked(@UptimeMillisLong long barrierTime) {
@@ -859,6 +921,41 @@
|| isDeferredUntilActive();
}
+ /**
+ * Quickly determine if this queue has non-deferred broadcasts waiting to be dispatched,
+ * that match {@code intent}, as defined by {@link Intent#filterEquals(Intent)}.
+ */
+ public boolean isDispatched(@NonNull Intent intent) {
+ final boolean activeDispatched = (mActive == null)
+ || (!intent.filterEquals(mActive.intent));
+ final boolean dispatched = isDispatchedInQueue(mPending, intent);
+ final boolean urgentDispatched = isDispatchedInQueue(mPendingUrgent, intent);
+ final boolean offloadDispatched = isDispatchedInQueue(mPendingOffload, intent);
+
+ return (activeDispatched && dispatched && urgentDispatched && offloadDispatched)
+ || isDeferredUntilActive();
+ }
+
+ /**
+ * Quickly determine if the {@code queue} has non-deferred broadcasts waiting to be dispatched,
+ * that match {@code intent}, as defined by {@link Intent#filterEquals(Intent)}.
+ */
+ private boolean isDispatchedInQueue(@NonNull ArrayDeque<SomeArgs> queue,
+ @NonNull Intent intent) {
+ final Iterator<SomeArgs> it = queue.iterator();
+ while (it.hasNext()) {
+ final SomeArgs args = it.next();
+ if (args == null) {
+ return true;
+ }
+ final BroadcastRecord record = (BroadcastRecord) args.arg1;
+ if (intent.filterEquals(record.intent)) {
+ return false;
+ }
+ }
+ return true;
+ }
+
public boolean isRunnable() {
if (mRunnableAtInvalidated) updateRunnableAt();
return mRunnableAt != Long.MAX_VALUE;
@@ -917,7 +1014,7 @@
static final int REASON_CONTAINS_RESULT_TO = 15;
static final int REASON_CONTAINS_INSTRUMENTED = 16;
static final int REASON_CONTAINS_MANIFEST = 17;
- static final int REASON_FOREGROUND_ACTIVITIES = 18;
+ static final int REASON_FOREGROUND = 18;
@IntDef(flag = false, prefix = { "REASON_" }, value = {
REASON_EMPTY,
@@ -937,7 +1034,7 @@
REASON_CONTAINS_RESULT_TO,
REASON_CONTAINS_INSTRUMENTED,
REASON_CONTAINS_MANIFEST,
- REASON_FOREGROUND_ACTIVITIES,
+ REASON_FOREGROUND,
})
@Retention(RetentionPolicy.SOURCE)
public @interface Reason {}
@@ -961,7 +1058,7 @@
case REASON_CONTAINS_RESULT_TO: return "CONTAINS_RESULT_TO";
case REASON_CONTAINS_INSTRUMENTED: return "CONTAINS_INSTRUMENTED";
case REASON_CONTAINS_MANIFEST: return "CONTAINS_MANIFEST";
- case REASON_FOREGROUND_ACTIVITIES: return "FOREGROUND_ACTIVITIES";
+ case REASON_FOREGROUND: return "FOREGROUND";
default: return Integer.toString(reason);
}
}
@@ -1000,11 +1097,9 @@
} else if (mProcessInstrumented) {
mRunnableAt = runnableAt + constants.DELAY_URGENT_MILLIS;
mRunnableAtReason = REASON_INSTRUMENTED;
- } else if (app != null && app.hasForegroundActivities()) {
- // TODO: Listen for uid state changes to check when an uid goes in and out of
- // the TOP state.
+ } else if (mUidForeground) {
mRunnableAt = runnableAt + constants.DELAY_URGENT_MILLIS;
- mRunnableAtReason = REASON_FOREGROUND_ACTIVITIES;
+ mRunnableAtReason = REASON_FOREGROUND;
} else if (mCountOrdered > 0) {
mRunnableAt = runnableAt;
mRunnableAtReason = REASON_CONTAINS_ORDERED;
@@ -1274,7 +1369,11 @@
@NeverCompile
private void dumpProcessState(@NonNull IndentingPrintWriter pw) {
final StringBuilder sb = new StringBuilder();
+ if (mUidForeground) {
+ sb.append("FG");
+ }
if (mUidCached) {
+ if (sb.length() > 0) sb.append("|");
sb.append("CACHED");
}
if (mProcessInstrumented) {
@@ -1309,6 +1408,7 @@
pw.print(" m:"); pw.print(mCountManifest);
pw.print(" csi:"); pw.print(mActiveCountSinceIdle);
+ pw.print(" adcsi:"); pw.print(mActiveAssumedDeliveryCountSinceIdle);
pw.print(" ccu:"); pw.print(mActiveCountConsecutiveUrgent);
pw.print(" ccn:"); pw.print(mActiveCountConsecutiveNormal);
pw.println();
diff --git a/services/core/java/com/android/server/am/BroadcastQueue.java b/services/core/java/com/android/server/am/BroadcastQueue.java
index 6d1344d..8e76e5b 100644
--- a/services/core/java/com/android/server/am/BroadcastQueue.java
+++ b/services/core/java/com/android/server/am/BroadcastQueue.java
@@ -192,7 +192,7 @@
public abstract boolean isIdleLocked();
/**
- * Quickly determine if this queue has broadcasts enqueued before the given
+ * Quickly determine if this queue has non-deferred broadcasts enqueued before the given
* barrier timestamp that are still waiting to be delivered.
*
* @see #waitForIdle
@@ -202,6 +202,15 @@
public abstract boolean isBeyondBarrierLocked(@UptimeMillisLong long barrierTime);
/**
+ * Quickly determine if this queue has non-deferred broadcasts waiting to be dispatched,
+ * that match {@code intent}, as defined by {@link Intent#filterEquals(Intent)}.
+ *
+ * @see #waitForDispatched(Intent, PrintWriter)
+ */
+ @GuardedBy("mService")
+ public abstract boolean isDispatchedLocked(@NonNull Intent intent);
+
+ /**
* Wait until this queue becomes completely idle.
* <p>
* Any broadcasts waiting to be delivered at some point in the future will
@@ -214,7 +223,7 @@
public abstract void waitForIdle(@NonNull PrintWriter pw);
/**
- * Wait until any currently waiting broadcasts have been dispatched.
+ * Wait until any currently waiting non-deferred broadcasts have been dispatched.
* <p>
* Any broadcasts waiting to be delivered at some point in the future will
* be dispatched as quickly as possible.
@@ -225,6 +234,15 @@
public abstract void waitForBarrier(@NonNull PrintWriter pw);
/**
+ * Wait until all non-deferred broadcasts matching {@code intent}, as defined by
+ * {@link Intent#filterEquals(Intent)}, have been dispatched.
+ * <p>
+ * Any broadcasts waiting to be delivered at some point in the future will
+ * be dispatched as quickly as possible.
+ */
+ public abstract void waitForDispatched(@NonNull Intent intent, @NonNull PrintWriter pw);
+
+ /**
* Delays delivering broadcasts to the specified package.
*
* <p> Note that this is only valid for modern queue.
diff --git a/services/core/java/com/android/server/am/BroadcastQueueImpl.java b/services/core/java/com/android/server/am/BroadcastQueueImpl.java
index 4a69f90..7f3ceb5 100644
--- a/services/core/java/com/android/server/am/BroadcastQueueImpl.java
+++ b/services/core/java/com/android/server/am/BroadcastQueueImpl.java
@@ -1793,6 +1793,23 @@
return mDispatcher.isBeyondBarrier(barrierTime);
}
+ public boolean isDispatchedLocked(Intent intent) {
+ if (isIdleLocked()) return true;
+
+ for (int i = 0; i < mParallelBroadcasts.size(); i++) {
+ if (intent.filterEquals(mParallelBroadcasts.get(i).intent)) {
+ return false;
+ }
+ }
+
+ final BroadcastRecord pending = getPendingBroadcastLocked();
+ if ((pending != null) && intent.filterEquals(pending.intent)) {
+ return false;
+ }
+
+ return mDispatcher.isDispatched(intent);
+ }
+
public void waitForIdle(PrintWriter pw) {
waitFor(() -> isIdleLocked(), pw, "idle");
}
@@ -1802,6 +1819,10 @@
waitFor(() -> isBeyondBarrierLocked(barrierTime), pw, "barrier");
}
+ public void waitForDispatched(Intent intent, PrintWriter pw) {
+ waitFor(() -> isDispatchedLocked(intent), pw, "dispatch");
+ }
+
private void waitFor(BooleanSupplier condition, PrintWriter pw, String conditionName) {
long lastPrint = 0;
while (true) {
diff --git a/services/core/java/com/android/server/am/BroadcastQueueModernImpl.java b/services/core/java/com/android/server/am/BroadcastQueueModernImpl.java
index 96e1523..d9b3157 100644
--- a/services/core/java/com/android/server/am/BroadcastQueueModernImpl.java
+++ b/services/core/java/com/android/server/am/BroadcastQueueModernImpl.java
@@ -40,6 +40,7 @@
import static com.android.server.am.BroadcastRecord.getReceiverUid;
import static com.android.server.am.BroadcastRecord.isDeliveryStateTerminal;
+import android.annotation.CheckResult;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.UptimeMillisLong;
@@ -211,6 +212,17 @@
new AtomicReference<>();
/**
+ * Map from UID to its last known "foreground" state. A UID is considered to be in
+ * "foreground" state when it's procState is {@link ActivityManager#PROCESS_STATE_TOP}.
+ * <p>
+ * We manually maintain this data structure since the lifecycle of
+ * {@link ProcessRecord} and {@link BroadcastProcessQueue} can be
+ * mismatched.
+ */
+ @GuardedBy("mService")
+ private final SparseBooleanArray mUidForeground = new SparseBooleanArray();
+
+ /**
* Map from UID to its last known "cached" state.
* <p>
* We manually maintain this data structure since the lifecycle of
@@ -446,43 +458,29 @@
if (DEBUG_BROADCAST) logv("Promoting " + queue
+ " from runnable to running; process is " + queue.app);
-
- // Allocate this available permit and start running!
- final int queueIndex = getRunningIndexOf(null);
- mRunning[queueIndex] = queue;
- avail--;
-
- // Remove ourselves from linked list of runnable things
- mRunnableHead = removeFromRunnableList(mRunnableHead, queue);
-
- // Emit all trace events for this process into a consistent track
- queue.runningTraceTrackName = TAG + ".mRunning[" + queueIndex + "]";
- queue.runningOomAdjusted = queue.isPendingManifest()
- || queue.isPendingOrdered()
- || queue.isPendingResultTo();
-
- // If already warm, we can make OOM adjust request immediately;
- // otherwise we need to wait until process becomes warm
+ promoteToRunningLocked(queue);
+ final boolean completed;
if (processWarm) {
- notifyStartedRunning(queue);
updateOomAdj |= queue.runningOomAdjusted;
- }
-
- // If we're already warm, schedule next pending broadcast now;
- // otherwise we'll wait for the cold start to circle back around
- queue.makeActiveNextPending();
- if (processWarm) {
- queue.traceProcessRunningBegin();
- scheduleReceiverWarmLocked(queue);
+ completed = scheduleReceiverWarmLocked(queue);
} else {
- queue.traceProcessStartingBegin();
- scheduleReceiverColdLocked(queue);
+ completed = scheduleReceiverColdLocked(queue);
}
+ // If we are done with delivering the broadcasts to the process, we can demote it
+ // from the "running" list.
+ if (completed) {
+ demoteFromRunningLocked(queue);
+ }
+ // TODO: If delivering broadcasts to a process is finished, we don't have to hold
+ // a slot for it.
+ avail--;
// Move to considering next runnable queue
queue = nextQueue;
}
+ // TODO: We need to update oomAdj early as this currently doesn't guarantee that the
+ // procState is updated correctly when the app is handling a broadcast.
if (updateOomAdj) {
mService.updateOomAdjPendingTargetsLocked(OOM_ADJ_REASON_START_RECEIVER);
}
@@ -514,7 +512,9 @@
queue.traceProcessEnd();
queue.traceProcessRunningBegin();
- scheduleReceiverWarmLocked(queue);
+ if (scheduleReceiverWarmLocked(queue)) {
+ demoteFromRunningLocked(queue);
+ }
// We might be willing to kick off another cold start
enqueueUpdateRunningList();
@@ -558,6 +558,7 @@
if (queue.isActive()) {
finishReceiverActiveLocked(queue, BroadcastRecord.DELIVERY_FAILURE,
"onApplicationCleanupLocked");
+ demoteFromRunningLocked(queue);
}
// Skip any pending registered receivers, since the old process
@@ -695,8 +696,13 @@
* Schedule the currently active broadcast on the given queue when we know
* the process is cold. This kicks off a cold start and will eventually call
* through to {@link #scheduleReceiverWarmLocked} once it's ready.
+ *
+ * @return {@code true} if the broadcast delivery is finished and the process queue can
+ * be demoted from the running list. Otherwise {@code false}.
*/
- private void scheduleReceiverColdLocked(@NonNull BroadcastProcessQueue queue) {
+ @CheckResult
+ @GuardedBy("mService")
+ private boolean scheduleReceiverColdLocked(@NonNull BroadcastProcessQueue queue) {
checkState(queue.isActive(), "isActive");
// Remember that active broadcast was scheduled via a cold start
@@ -711,12 +717,14 @@
mRunningColdStart = null;
finishReceiverActiveLocked(queue, BroadcastRecord.DELIVERY_SKIPPED,
"BroadcastFilter for cold app");
- return;
+ return true;
}
- if (maybeSkipReceiver(queue, r, index)) {
+ final String skipReason = shouldSkipReceiver(queue, r, index);
+ if (skipReason != null) {
mRunningColdStart = null;
- return;
+ finishReceiverActiveLocked(queue, BroadcastRecord.DELIVERY_SKIPPED, skipReason);
+ return true;
}
final ApplicationInfo info = ((ResolveInfo) receiver).activityInfo.applicationInfo;
@@ -742,8 +750,9 @@
mRunningColdStart = null;
finishReceiverActiveLocked(queue, BroadcastRecord.DELIVERY_FAILURE,
"startProcessLocked failed");
- return;
+ return true;
}
+ return false;
}
/**
@@ -754,38 +763,46 @@
* results by calling through to {@link #finishReceiverLocked}, both in the
* case where a broadcast is handled by a remote app, and the case where the
* broadcast was finished locally without the remote app being involved.
+ *
+ * @return {@code true} if the broadcast delivery is finished and the process queue can
+ * be demoted from the running list. Otherwise {@code false}.
*/
+ @CheckResult
@GuardedBy("mService")
- private void scheduleReceiverWarmLocked(@NonNull BroadcastProcessQueue queue) {
+ private boolean scheduleReceiverWarmLocked(@NonNull BroadcastProcessQueue queue) {
checkState(queue.isActive(), "isActive");
- final BroadcastRecord r = queue.getActive();
- final int index = queue.getActiveIndex();
+ final int cookie = traceBegin("scheduleReceiverWarmLocked");
+ while (queue.isActive()) {
+ final BroadcastRecord r = queue.getActive();
+ final int index = queue.getActiveIndex();
- if (r.terminalCount == 0) {
- r.dispatchTime = SystemClock.uptimeMillis();
- r.dispatchRealTime = SystemClock.elapsedRealtime();
- r.dispatchClockTime = System.currentTimeMillis();
- }
+ if (r.terminalCount == 0) {
+ r.dispatchTime = SystemClock.uptimeMillis();
+ r.dispatchRealTime = SystemClock.elapsedRealtime();
+ r.dispatchClockTime = System.currentTimeMillis();
+ }
- if (maybeSkipReceiver(queue, r, index)) {
- return;
- }
- dispatchReceivers(queue, r, index);
- }
+ final String skipReason = shouldSkipReceiver(queue, r, index);
+ if (skipReason == null) {
+ final boolean isBlockingDispatch = dispatchReceivers(queue, r, index);
+ if (isBlockingDispatch) {
+ traceEnd(cookie);
+ return false;
+ }
+ } else {
+ finishReceiverActiveLocked(queue, BroadcastRecord.DELIVERY_SKIPPED, skipReason);
+ }
- /**
- * Examine a receiver and possibly skip it. The method returns true if the receiver is
- * skipped (and therefore no more work is required).
- */
- private boolean maybeSkipReceiver(@NonNull BroadcastProcessQueue queue,
- @NonNull BroadcastRecord r, int index) {
- final String reason = shouldSkipReceiver(queue, r, index);
- if (reason != null) {
- finishReceiverActiveLocked(queue, BroadcastRecord.DELIVERY_SKIPPED, reason);
- return true;
+ if (shouldRetire(queue)) {
+ break;
+ }
+
+ // We're on a roll; move onto the next broadcast for this process
+ queue.makeActiveNextPending();
}
- return false;
+ traceEnd(cookie);
+ return true;
}
/**
@@ -826,24 +843,21 @@
}
/**
- * Return true if this receiver should be assumed to have been delivered.
- */
- private boolean isAssumedDelivered(BroadcastRecord r, int index) {
- return (r.receivers.get(index) instanceof BroadcastFilter) && !r.ordered
- && (r.resultTo == null);
- }
-
- /**
* A receiver is about to be dispatched. Start ANR timers, if necessary.
+ *
+ * @return {@code true} if this a blocking delivery. That is, we are going to block on the
+ * finishReceiver() to be called before moving to the next broadcast. Otherwise,
+ * {@code false}.
*/
- private void dispatchReceivers(@NonNull BroadcastProcessQueue queue,
+ @CheckResult
+ private boolean dispatchReceivers(@NonNull BroadcastProcessQueue queue,
@NonNull BroadcastRecord r, int index) {
final ProcessRecord app = queue.app;
final Object receiver = r.receivers.get(index);
// Skip ANR tracking early during boot, when requested, or when we
// immediately assume delivery success
- final boolean assumeDelivered = isAssumedDelivered(r, index);
+ final boolean assumeDelivered = r.isAssumedDelivered(index);
if (mService.mProcessesReady && !r.timeoutExempt && !assumeDelivered) {
queue.lastCpuDelayTime = queue.app.getCpuDelayTime();
@@ -898,6 +912,7 @@
if (assumeDelivered) {
finishReceiverActiveLocked(queue, BroadcastRecord.DELIVERY_DELIVERED,
"assuming delivered");
+ return false;
}
} else {
notifyScheduleReceiver(app, r, (ResolveInfo) receiver);
@@ -908,17 +923,21 @@
r.shareIdentity ? r.callingUid : Process.INVALID_UID,
r.shareIdentity ? r.callerPackage : null);
}
+ return true;
} catch (RemoteException e) {
final String msg = "Failed to schedule " + r + " to " + receiver
+ " via " + app + ": " + e;
logw(msg);
app.killLocked("Can't deliver broadcast", ApplicationExitInfo.REASON_OTHER,
ApplicationExitInfo.SUBREASON_UNDELIVERED_BROADCAST, true);
- finishReceiverActiveLocked(queue, BroadcastRecord.DELIVERY_FAILURE, "remote app");
+ finishReceiverActiveLocked(queue, BroadcastRecord.DELIVERY_FAILURE,
+ "remote app");
+ return false;
}
} else {
finishReceiverActiveLocked(queue, BroadcastRecord.DELIVERY_FAILURE,
"missing IApplicationThread");
+ return false;
}
}
@@ -989,6 +1008,7 @@
private void deliveryTimeoutHardLocked(@NonNull BroadcastProcessQueue queue) {
finishReceiverActiveLocked(queue, BroadcastRecord.DELIVERY_TIMEOUT,
"deliveryTimeoutHardLocked");
+ demoteFromRunningLocked(queue);
}
@Override
@@ -1015,7 +1035,7 @@
// To ensure that "beyond" high-water marks are updated in a monotonic
// way, we finish this receiver before possibly skipping any remaining
// aborted receivers
- final boolean res = finishReceiverActiveLocked(queue,
+ finishReceiverActiveLocked(queue,
BroadcastRecord.DELIVERY_DELIVERED, "remote app");
// When the caller aborted an ordered broadcast, we mark all
@@ -1027,30 +1047,52 @@
}
}
- return res;
+ if (shouldRetire(queue)) {
+ demoteFromRunningLocked(queue);
+ return true;
+ }
+
+ // We're on a roll; move onto the next broadcast for this process
+ queue.makeActiveNextPending();
+ if (scheduleReceiverWarmLocked(queue)) {
+ demoteFromRunningLocked(queue);
+ return true;
+ }
+
+ return false;
}
/**
- * Return true if there are more broadcasts in the queue and the queue is runnable.
+ * Return true if there are no more broadcasts in the queue or if the queue is not runnable.
*/
- private boolean shouldContinueScheduling(@NonNull BroadcastProcessQueue queue) {
+ private boolean shouldRetire(@NonNull BroadcastProcessQueue queue) {
// If we've made reasonable progress, periodically retire ourselves to
// avoid starvation of other processes and stack overflow when a
// broadcast is immediately finished without waiting
- final boolean shouldRetire =
- (queue.getActiveCountSinceIdle() >= mConstants.MAX_RUNNING_ACTIVE_BROADCASTS);
+ final boolean shouldRetire;
+ if (UserHandle.isCore(queue.uid)) {
+ final int nonBlockingDeliveryCount = queue.getActiveAssumedDeliveryCountSinceIdle();
+ final int blockingDeliveryCount = (queue.getActiveCountSinceIdle()
+ - queue.getActiveAssumedDeliveryCountSinceIdle());
+ shouldRetire = (blockingDeliveryCount
+ >= mConstants.MAX_CORE_RUNNING_BLOCKING_BROADCASTS) || (nonBlockingDeliveryCount
+ >= mConstants.MAX_CORE_RUNNING_NON_BLOCKING_BROADCASTS);
+ } else {
+ shouldRetire =
+ (queue.getActiveCountSinceIdle() >= mConstants.MAX_RUNNING_ACTIVE_BROADCASTS);
+ }
- return queue.isRunnable() && queue.isProcessWarm() && !shouldRetire;
+ return !queue.isRunnable() || !queue.isProcessWarm() || shouldRetire;
}
/**
* Terminate all active broadcasts on the queue.
*/
- private boolean finishReceiverActiveLocked(@NonNull BroadcastProcessQueue queue,
+ private void finishReceiverActiveLocked(@NonNull BroadcastProcessQueue queue,
@DeliveryState int deliveryState, @NonNull String reason) {
if (!queue.isActive()) {
logw("Ignoring finish; no active broadcast for " + queue);
- return false;
+ return;
}
final int cookie = traceBegin("finishReceiver");
@@ -1077,27 +1119,68 @@
// Given that a receiver just finished, check if the "waitingFor" conditions are met.
checkAndRemoveWaitingFor();
- final boolean res = shouldContinueScheduling(queue);
- if (res) {
- // We're on a roll; move onto the next broadcast for this process
- queue.makeActiveNextPending();
- scheduleReceiverWarmLocked(queue);
- } else {
- // We've drained running broadcasts; maybe move back to runnable
- queue.makeActiveIdle();
- queue.traceProcessEnd();
-
- final int queueIndex = getRunningIndexOf(queue);
- mRunning[queueIndex] = null;
- updateRunnableList(queue);
- enqueueUpdateRunningList();
-
- // Tell other OS components that app is not actively running, giving
- // a chance to update OOM adjustment
- notifyStoppedRunning(queue);
- }
traceEnd(cookie);
- return res;
+ }
+
+ /**
+ * Promote a process to the "running" list.
+ */
+ @GuardedBy("mService")
+ private void promoteToRunningLocked(@NonNull BroadcastProcessQueue queue) {
+ // Allocate this available permit and start running!
+ final int queueIndex = getRunningIndexOf(null);
+ mRunning[queueIndex] = queue;
+
+ // Remove ourselves from linked list of runnable things
+ mRunnableHead = removeFromRunnableList(mRunnableHead, queue);
+
+ // Emit all trace events for this process into a consistent track
+ queue.runningTraceTrackName = TAG + ".mRunning[" + queueIndex + "]";
+ queue.runningOomAdjusted = queue.isPendingManifest()
+ || queue.isPendingOrdered()
+ || queue.isPendingResultTo();
+
+ // If already warm, we can make OOM adjust request immediately;
+ // otherwise we need to wait until process becomes warm
+ final boolean processWarm = queue.isProcessWarm();
+ if (processWarm) {
+ notifyStartedRunning(queue);
+ }
+
+ // If we're already warm, schedule next pending broadcast now;
+ // otherwise we'll wait for the cold start to circle back around
+ queue.makeActiveNextPending();
+ if (processWarm) {
+ queue.traceProcessRunningBegin();
+ } else {
+ queue.traceProcessStartingBegin();
+ }
+ }
+
+ /**
+ * Demote a process from the "running" list.
+ */
+ @GuardedBy("mService")
+ private void demoteFromRunningLocked(@NonNull BroadcastProcessQueue queue) {
+ if (!queue.isActive()) {
+ logw("Ignoring demoteFromRunning; no active broadcast for " + queue);
+ return;
+ }
+
+ final int cookie = traceBegin("demoteFromRunning");
+ // We've drained running broadcasts; maybe move back to runnable
+ queue.makeActiveIdle();
+ queue.traceProcessEnd();
+
+ final int queueIndex = getRunningIndexOf(queue);
+ mRunning[queueIndex] = null;
+ updateRunnableList(queue);
+ enqueueUpdateRunningList();
+
+ // Tell other OS components that app is not actively running, giving
+ // a chance to update OOM adjustment
+ notifyStoppedRunning(queue);
+ traceEnd(cookie);
}
/**
@@ -1212,11 +1295,24 @@
return UserHandle.getUserId(q.uid) == userId;
};
broadcastPredicate = BROADCAST_PREDICATE_ANY;
+
+ cleanupUserStateLocked(mUidCached, userId);
+ cleanupUserStateLocked(mUidForeground, userId);
}
return forEachMatchingBroadcast(queuePredicate, broadcastPredicate,
mBroadcastConsumerSkip, true);
}
+ @GuardedBy("mService")
+ private void cleanupUserStateLocked(@NonNull SparseBooleanArray uidState, int userId) {
+ for (int i = uidState.size() - 1; i >= 0; --i) {
+ final int uid = uidState.keyAt(i);
+ if (UserHandle.getUserId(uid) == userId) {
+ uidState.removeAt(i);
+ }
+ }
+ }
+
private static final Predicate<BroadcastProcessQueue> QUEUE_PREDICATE_ANY =
(q) -> true;
private static final BroadcastPredicate BROADCAST_PREDICATE_ANY =
@@ -1332,6 +1428,19 @@
mService.registerUidObserver(new UidObserver() {
@Override
+ public void onUidStateChanged(int uid, int procState, long procStateSeq,
+ int capability) {
+ synchronized (mService) {
+ if (procState == ActivityManager.PROCESS_STATE_TOP) {
+ mUidForeground.put(uid, true);
+ } else {
+ mUidForeground.delete(uid);
+ }
+ refreshProcessQueuesLocked(uid);
+ }
+ }
+
+ @Override
public void onUidCachedChanged(int uid, boolean cached) {
synchronized (mService) {
if (cached) {
@@ -1339,18 +1448,11 @@
} else {
mUidCached.delete(uid);
}
-
- BroadcastProcessQueue leaf = mProcessQueues.get(uid);
- while (leaf != null) {
- // Update internal state by refreshing values previously
- // read from any known running process
- setQueueProcess(leaf, leaf.app);
- leaf = leaf.processNameNext;
- }
- enqueueUpdateRunningList();
+ refreshProcessQueuesLocked(uid);
}
}
- }, ActivityManager.UID_OBSERVER_CACHED, 0, "android");
+ }, ActivityManager.UID_OBSERVER_PROCSTATE | ActivityManager.UID_OBSERVER_CACHED,
+ ActivityManager.PROCESS_STATE_TOP, "android");
// Kick off periodic health checks
mLocalHandler.sendEmptyMessage(MSG_CHECK_HEALTH);
@@ -1376,6 +1478,16 @@
}
@Override
+ public boolean isDispatchedLocked(@NonNull Intent intent) {
+ return isDispatchedLocked(intent, LOG_WRITER_INFO);
+ }
+
+ public boolean isDispatchedLocked(@NonNull Intent intent, @NonNull PrintWriter pw) {
+ return testAllProcessQueues(q -> q.isDispatched(intent),
+ "dispatch of " + intent, pw);
+ }
+
+ @Override
public void waitForIdle(@NonNull PrintWriter pw) {
waitFor(() -> isIdleLocked(pw));
}
@@ -1383,28 +1495,35 @@
@Override
public void waitForBarrier(@NonNull PrintWriter pw) {
final long now = SystemClock.uptimeMillis();
- waitFor(() -> isBeyondBarrierLocked(now, pw));
+ synchronized (mService) {
+ forEachMatchingQueue(QUEUE_PREDICATE_ANY,
+ q -> q.addPrioritizeEarliestRequest());
+ }
+ try {
+ waitFor(() -> isBeyondBarrierLocked(now, pw));
+ } finally {
+ synchronized (mService) {
+ forEachMatchingQueue(QUEUE_PREDICATE_ANY,
+ q -> q.removePrioritizeEarliestRequest());
+ }
+ }
+ }
+
+ @Override
+ public void waitForDispatched(@NonNull Intent intent, @NonNull PrintWriter pw) {
+ waitFor(() -> isDispatchedLocked(intent, pw));
}
private void waitFor(@NonNull BooleanSupplier condition) {
final CountDownLatch latch = new CountDownLatch(1);
synchronized (mService) {
mWaitingFor.add(Pair.create(condition, latch));
- forEachMatchingQueue(QUEUE_PREDICATE_ANY,
- (q) -> q.setPrioritizeEarliest(true));
}
enqueueUpdateRunningList();
try {
latch.await();
} catch (InterruptedException e) {
throw new RuntimeException(e);
- } finally {
- synchronized (mService) {
- if (mWaitingFor.isEmpty()) {
- forEachMatchingQueue(QUEUE_PREDICATE_ANY,
- (q) -> q.setPrioritizeEarliest(false));
- }
- }
}
}
@@ -1522,8 +1641,9 @@
// warm via this operation, we're going to immediately promote it to
// be running, and any side effect of this operation will then apply
// after it's finished and is returned to the runnable list.
- queue.setProcessAndUidCached(
+ queue.setProcessAndUidState(
mService.getProcessRecordLocked(queue.processName, queue.uid),
+ mUidForeground.get(queue.uid, false),
mUidCached.get(queue.uid, false));
}
}
@@ -1535,12 +1655,29 @@
*/
private void setQueueProcess(@NonNull BroadcastProcessQueue queue,
@Nullable ProcessRecord app) {
- if (queue.setProcessAndUidCached(app, mUidCached.get(queue.uid, false))) {
+ if (queue.setProcessAndUidState(app, mUidForeground.get(queue.uid, false),
+ mUidCached.get(queue.uid, false))) {
updateRunnableList(queue);
}
}
/**
+ * Refresh the process queues with the latest process state so that runnableAt
+ * can be updated.
+ */
+ @GuardedBy("mService")
+ private void refreshProcessQueuesLocked(int uid) {
+ BroadcastProcessQueue leaf = mProcessQueues.get(uid);
+ while (leaf != null) {
+ // Update internal state by refreshing values previously
+ // read from any known running process
+ setQueueProcess(leaf, leaf.app);
+ leaf = leaf.processNameNext;
+ }
+ enqueueUpdateRunningList();
+ }
+
+ /**
* Inform other parts of OS that the given broadcast queue has started
* running, typically for internal bookkeeping.
*/
@@ -1861,7 +1998,13 @@
ipw.println("Cached UIDs:");
ipw.increaseIndent();
- ipw.println(mUidCached.toString());
+ ipw.println(mUidCached);
+ ipw.decreaseIndent();
+ ipw.println();
+
+ ipw.println("Foreground UIDs:");
+ ipw.increaseIndent();
+ ipw.println(mUidForeground);
ipw.decreaseIndent();
ipw.println();
diff --git a/services/core/java/com/android/server/am/BroadcastRecord.java b/services/core/java/com/android/server/am/BroadcastRecord.java
index 64fe393..a9274408 100644
--- a/services/core/java/com/android/server/am/BroadcastRecord.java
+++ b/services/core/java/com/android/server/am/BroadcastRecord.java
@@ -237,6 +237,14 @@
}
}
+ /**
+ * Return true if this receiver should be assumed to have been delivered.
+ */
+ boolean isAssumedDelivered(int index) {
+ return (receivers.get(index) instanceof BroadcastFilter) && !ordered
+ && (resultTo == null);
+ }
+
ProcessRecord curApp; // hosting application of current receiver.
ComponentName curComponent; // the receiver class that is currently running.
ActivityInfo curReceiver; // the manifest receiver that is currently running.
diff --git a/services/core/java/com/android/server/am/ProcessList.java b/services/core/java/com/android/server/am/ProcessList.java
index d7b22a8..c393213 100644
--- a/services/core/java/com/android/server/am/ProcessList.java
+++ b/services/core/java/com/android/server/am/ProcessList.java
@@ -2300,6 +2300,8 @@
final Process.ProcessStartResult startResult;
boolean regularZygote = false;
+ app.mProcessGroupCreated = false;
+ app.mSkipProcessGroupCreation = false;
if (hostingRecord.usesWebviewZygote()) {
startResult = startWebView(entryPoint,
app.processName, uid, uid, gids, runtimeFlags, mountExternal,
@@ -2328,18 +2330,28 @@
isTopApp, app.getDisabledCompatChanges(), pkgDataInfoMap,
allowlistedAppDataInfoMap, bindMountAppsData, bindMountAppStorageDirs,
new String[]{PROC_START_SEQ_IDENT + app.getStartSeq()});
+ // By now the process group should have been created by zygote.
+ app.mProcessGroupCreated = true;
}
if (!regularZygote) {
// webview and app zygote don't have the permission to create the nodes
- final int res = Process.createProcessGroup(uid, startResult.pid);
- if (res < 0) {
- if (res == -OsConstants.ESRCH) {
- Slog.e(ActivityManagerService.TAG, "Unable to create process group for "
- + app.processName + " (" + startResult.pid + ")");
- } else {
- throw new AssertionError("Unable to create process group for "
- + app.processName + " (" + startResult.pid + ")");
+ synchronized (app) {
+ if (!app.mSkipProcessGroupCreation) {
+ // If we're not told to skip the process group creation, go create it.
+ final int res = Process.createProcessGroup(uid, startResult.pid);
+ if (res < 0) {
+ if (res == -OsConstants.ESRCH) {
+ Slog.e(ActivityManagerService.TAG,
+ "Unable to create process group for "
+ + app.processName + " (" + startResult.pid + ")");
+ } else {
+ throw new AssertionError("Unable to create process group for "
+ + app.processName + " (" + startResult.pid + ")");
+ }
+ } else {
+ app.mProcessGroupCreated = true;
+ }
}
}
}
diff --git a/services/core/java/com/android/server/am/ProcessRecord.java b/services/core/java/com/android/server/am/ProcessRecord.java
index 0417b8c..335d676 100644
--- a/services/core/java/com/android/server/am/ProcessRecord.java
+++ b/services/core/java/com/android/server/am/ProcessRecord.java
@@ -424,6 +424,16 @@
*/
Runnable mSuccessorStartRunnable;
+ /**
+ * Whether or not the process group of this process has been created.
+ */
+ volatile boolean mProcessGroupCreated;
+
+ /**
+ * Whether or not we should skip the process group creation.
+ */
+ volatile boolean mSkipProcessGroupCreation;
+
void setStartParams(int startUid, HostingRecord hostingRecord, String seInfo,
long startUptime, long startElapsedTime) {
this.mStartUid = startUid;
@@ -1062,11 +1072,6 @@
return mState.isCached();
}
- @GuardedBy(anyOf = {"mService", "mProcLock"})
- public boolean hasForegroundActivities() {
- return mState.hasForegroundActivities();
- }
-
boolean hasActivities() {
return mWindowProcessController.hasActivities();
}
@@ -1192,8 +1197,26 @@
EventLog.writeEvent(EventLogTags.AM_KILL,
userId, mPid, processName, mState.getSetAdj(), reason);
Process.killProcessQuiet(mPid);
- if (!asyncKPG) Process.sendSignalToProcessGroup(uid, mPid, OsConstants.SIGKILL);
- ProcessList.killProcessGroup(uid, mPid);
+ final boolean killProcessGroup;
+ if (mHostingRecord != null
+ && (mHostingRecord.usesWebviewZygote() || mHostingRecord.usesAppZygote())) {
+ synchronized (ProcessRecord.this) {
+ killProcessGroup = mProcessGroupCreated;
+ if (!killProcessGroup) {
+ // The process group hasn't been created, request to skip it.
+ mSkipProcessGroupCreation = true;
+ }
+ }
+ } else {
+ killProcessGroup = true;
+ }
+ if (killProcessGroup) {
+ if (asyncKPG) {
+ ProcessList.killProcessGroup(uid, mPid);
+ } else {
+ Process.sendSignalToProcessGroup(uid, mPid, OsConstants.SIGKILL);
+ }
+ }
} else {
mPendingStart = false;
}
diff --git a/services/core/java/com/android/server/am/UidObserverController.java b/services/core/java/com/android/server/am/UidObserverController.java
index 790cc7b..a258208 100644
--- a/services/core/java/com/android/server/am/UidObserverController.java
+++ b/services/core/java/com/android/server/am/UidObserverController.java
@@ -27,7 +27,9 @@
import android.app.ActivityManagerProto;
import android.app.IUidObserver;
import android.content.pm.PackageManager;
+import android.os.Binder;
import android.os.Handler;
+import android.os.IBinder;
import android.os.RemoteCallbackList;
import android.os.RemoteException;
import android.os.SystemClock;
@@ -43,6 +45,8 @@
import java.io.PrintWriter;
import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.UUID;
public class UidObserverController {
/** If a UID observer takes more than this long, send a WTF. */
@@ -79,14 +83,19 @@
mValidateUids = new ActiveUids(null /* service */, false /* postChangesToAtm */);
}
- void register(@NonNull IUidObserver observer, int which, int cutpoint,
- @NonNull String callingPackage, int callingUid) {
+ IBinder register(@NonNull IUidObserver observer, int which, int cutpoint,
+ @NonNull String callingPackage, int callingUid, @Nullable int[] uids) {
+ IBinder token = new Binder("UidObserver-" + callingPackage + "-"
+ + UUID.randomUUID().toString());
+
synchronized (mLock) {
mUidObservers.register(observer, new UidObserverRegistration(callingUid,
callingPackage, which, cutpoint,
ActivityManager.checkUidPermission(INTERACT_ACROSS_USERS_FULL, callingUid)
- == PackageManager.PERMISSION_GRANTED));
+ == PackageManager.PERMISSION_GRANTED, uids, token));
}
+
+ return token;
}
void unregister(@NonNull IUidObserver observer) {
@@ -95,6 +104,42 @@
}
}
+ void addUidToObserver(@NonNull IBinder observerToken, int uid) {
+ synchronized (mLock) {
+ int i = mUidObservers.beginBroadcast();
+ while (i-- > 0) {
+ var reg = (UidObserverRegistration) mUidObservers.getBroadcastCookie(i);
+ if (reg.getToken().equals(observerToken)) {
+ reg.addUid(uid);
+ break;
+ }
+
+ if (i == 0) {
+ Slog.e(TAG_UID_OBSERVERS, "Unable to find UidObserver by token");
+ }
+ }
+ mUidObservers.finishBroadcast();
+ }
+ }
+
+ void removeUidFromObserver(@NonNull IBinder observerToken, int uid) {
+ synchronized (mLock) {
+ int i = mUidObservers.beginBroadcast();
+ while (i-- > 0) {
+ var reg = (UidObserverRegistration) mUidObservers.getBroadcastCookie(i);
+ if (reg.getToken().equals(observerToken)) {
+ reg.removeUid(uid);
+ break;
+ }
+
+ if (i == 0) {
+ Slog.e(TAG_UID_OBSERVERS, "Unable to find UidObserver by token");
+ }
+ }
+ mUidObservers.finishBroadcast();
+ }
+ }
+
int enqueueUidChange(@Nullable ChangeRecord currentRecord, int uid, int change, int procState,
int procAdj, long procStateSeq, int capability, boolean ephemeral) {
synchronized (mLock) {
@@ -257,6 +302,10 @@
final ChangeRecord item = mActiveUidChanges[j];
final long start = SystemClock.uptimeMillis();
final int change = item.change;
+ // Is the observer watching this uid?
+ if (!reg.isWatchingUid(item.uid)) {
+ continue;
+ }
// Does the user have permission? Don't send a non user UID change otherwise
if (UserHandle.getUserId(item.uid) != UserHandle.getUserId(reg.mUid)
&& !reg.mCanInteractAcrossUsers) {
@@ -450,6 +499,8 @@
private final int mWhich;
private final int mCutpoint;
private final boolean mCanInteractAcrossUsers;
+ private final IBinder mToken;
+ private int[] mUids;
/**
* Total # of callback calls that took more than {@link #SLOW_UID_OBSERVER_THRESHOLD_MS}.
@@ -481,16 +532,94 @@
};
UidObserverRegistration(int uid, @NonNull String pkg, int which, int cutpoint,
- boolean canInteractAcrossUsers) {
+ boolean canInteractAcrossUsers, @Nullable int[] uids, @NonNull IBinder token) {
this.mUid = uid;
this.mPkg = pkg;
this.mWhich = which;
this.mCutpoint = cutpoint;
this.mCanInteractAcrossUsers = canInteractAcrossUsers;
+
+ if (uids != null) {
+ this.mUids = uids.clone();
+ Arrays.sort(this.mUids);
+ } else {
+ this.mUids = null;
+ }
+
+ this.mToken = token;
+
mLastProcStates = cutpoint >= ActivityManager.MIN_PROCESS_STATE
? new SparseIntArray() : null;
}
+ boolean isWatchingUid(int uid) {
+ if (mUids == null) {
+ return true;
+ }
+
+ return Arrays.binarySearch(mUids, uid) >= 0;
+ }
+
+ void addUid(int uid) {
+ if (mUids == null) {
+ return;
+ }
+
+ int[] temp = mUids;
+ mUids = new int[temp.length + 1];
+ boolean inserted = false;
+ for (int i = 0; i < temp.length; i++) {
+ if (!inserted) {
+ if (temp[i] < uid) {
+ mUids[i] = temp[i];
+ } else if (temp[i] == uid) {
+ // Duplicate uid, no-op and fallback to the previous array
+ mUids = temp;
+ return;
+ } else {
+ mUids[i] = uid;
+ mUids[i + 1] = temp[i];
+ inserted = true;
+ }
+ } else {
+ mUids[i + 1] = temp[i];
+ }
+ }
+
+ if (!inserted) {
+ mUids[temp.length] = uid;
+ }
+ }
+
+ void removeUid(int uid) {
+ if (mUids == null || mUids.length == 0) {
+ return;
+ }
+
+ int[] temp = mUids;
+ mUids = new int[temp.length - 1];
+ boolean removed = false;
+ for (int i = 0; i < temp.length; i++) {
+ if (!removed) {
+ if (temp[i] == uid) {
+ removed = true;
+ } else if (i == temp.length - 1) {
+ // Uid not found, no-op and fallback to the previous array
+ mUids = temp;
+ return;
+ } else {
+ mUids[i] = temp[i];
+ }
+ } else {
+ mUids[i - 1] = temp[i];
+ }
+ }
+ }
+
+ IBinder getToken() {
+ return mToken;
+ }
+
void dump(@NonNull PrintWriter pw, @NonNull IUidObserver observer) {
pw.print(" ");
UserHandle.formatUid(pw, mUid);
diff --git a/services/core/java/com/android/server/ambientcontext/AmbientContextManagerService.java b/services/core/java/com/android/server/ambientcontext/AmbientContextManagerService.java
index a9a77bf..c6b15b6 100644
--- a/services/core/java/com/android/server/ambientcontext/AmbientContextManagerService.java
+++ b/services/core/java/com/android/server/ambientcontext/AmbientContextManagerService.java
@@ -60,6 +60,7 @@
import java.util.List;
import java.util.Objects;
import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
/**
* System service for managing {@link AmbientContextEvent}s.
@@ -595,7 +596,7 @@
synchronized (mLock) {
for (ClientRequest cr : mExistingClientRequests) {
- if (cr.getPackageName().equals(callingPackage)) {
+ if ((cr != null) && cr.getPackageName().equals(callingPackage)) {
AmbientContextManagerPerUserService service =
getAmbientContextManagerPerUserServiceForEventTypes(
UserHandle.getCallingUserId(),
diff --git a/services/core/java/com/android/server/appop/AppOpsService.java b/services/core/java/com/android/server/appop/AppOpsService.java
index a110169..1f3795a 100644
--- a/services/core/java/com/android/server/appop/AppOpsService.java
+++ b/services/core/java/com/android/server/appop/AppOpsService.java
@@ -44,6 +44,7 @@
import static android.app.AppOpsManager.OP_RECORD_AUDIO;
import static android.app.AppOpsManager.OP_RECORD_AUDIO_HOTWORD;
import static android.app.AppOpsManager.OP_RECORD_AUDIO_SANDBOXED;
+import static android.app.AppOpsManager.OP_RUN_ANY_IN_BACKGROUND;
import static android.app.AppOpsManager.OP_VIBRATE;
import static android.app.AppOpsManager.OnOpStartedListener.START_TYPE_FAILED;
import static android.app.AppOpsManager.OnOpStartedListener.START_TYPE_STARTED;
@@ -1769,6 +1770,11 @@
@Override
public void setUidMode(int code, int uid, int mode) {
setUidMode(code, uid, mode, null);
+ if (code == OP_RUN_ANY_IN_BACKGROUND) {
+ // TODO (b/280869337): Remove this once we have the required data.
+ Slog.wtfStack(TAG, "setUidMode called for RUN_ANY_IN_BACKGROUND by uid: "
+ + UserHandle.formatUid(Binder.getCallingUid()));
+ }
}
private void setUidMode(int code, int uid, int mode,
@@ -1944,6 +1950,17 @@
@Override
public void setMode(int code, int uid, @NonNull String packageName, int mode) {
setMode(code, uid, packageName, mode, null);
+ final int callingUid = Binder.getCallingUid();
+ if (code == OP_RUN_ANY_IN_BACKGROUND && mode != MODE_ALLOWED) {
+ // TODO (b/280869337): Remove this once we have the required data.
+ final String callingPackage = ArrayUtils.firstOrNull(getPackagesForUid(callingUid));
+ Slog.wtfStack(TAG,
+ "RUN_ANY_IN_BACKGROUND for package " + packageName + " changed to mode: "
+ + modeToName(mode) + " via setMode. Calling package: " + callingPackage
+ + ", calling uid: " + UserHandle.formatUid(callingUid)
+ + ", calling pid: " + Binder.getCallingPid()
+ + ", system pid: " + Process.myPid());
+ }
}
void setMode(int code, int uid, @NonNull String packageName, int mode,
diff --git a/services/core/java/com/android/server/audio/AudioDeviceInventory.java b/services/core/java/com/android/server/audio/AudioDeviceInventory.java
index 773df37..1d8bef1 100644
--- a/services/core/java/com/android/server/audio/AudioDeviceInventory.java
+++ b/services/core/java/com/android/server/audio/AudioDeviceInventory.java
@@ -1031,7 +1031,8 @@
synchronized (rolesMap) {
Pair<Integer, Integer> key = new Pair<>(useCase, role);
if (!rolesMap.containsKey(key)) {
- return AudioSystem.SUCCESS;
+ // trying to remove a role for a device that wasn't set
+ return AudioSystem.BAD_VALUE;
}
List<AudioDeviceAttributes> roleDevices = rolesMap.get(key);
List<AudioDeviceAttributes> appliedDevices = new ArrayList<>();
diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java
index 2039325..a721873 100644
--- a/services/core/java/com/android/server/audio/AudioService.java
+++ b/services/core/java/com/android/server/audio/AudioService.java
@@ -624,7 +624,7 @@
private int mZenModeAffectedStreams = 0;
// Streams currently muted by ringer mode and dnd
- private int mRingerAndZenModeMutedStreams;
+ protected static volatile int sRingerAndZenModeMutedStreams;
/** Streams that can be muted. Do not resolve to aliases when checking.
* @see System#MUTE_STREAMS_AFFECTED */
@@ -1320,7 +1320,9 @@
// Call setRingerModeInt() to apply correct mute
// state on streams affected by ringer mode.
- mRingerAndZenModeMutedStreams = 0;
+ sRingerAndZenModeMutedStreams = 0;
+ sMuteLogger.enqueue(new AudioServiceEvents.RingerZenMutedStreamsEvent(
+ sRingerAndZenModeMutedStreams, "onInitStreamsAndVolumes"));
setRingerModeInt(getRingerModeInternal(), false);
final float[] preScale = new float[3];
@@ -2132,7 +2134,7 @@
// Unmute streams if required and device is full volume
if (isStreamMute(streamType) && mFullVolumeDevices.contains(device)) {
- mStreamStates[streamType].mute(false);
+ mStreamStates[streamType].mute(false, "updateVolumeStates(" + caller);
}
}
}
@@ -3681,7 +3683,7 @@
if (!(mCameraSoundForced
&& (vss.getStreamType()
== AudioSystem.STREAM_SYSTEM_ENFORCED))) {
- boolean changed = vss.mute(state, /* apply= */ false);
+ boolean changed = vss.mute(state, /* apply= */ false, "muteAliasStreams");
if (changed) {
streamsToMute.add(stream);
}
@@ -3708,7 +3710,8 @@
boolean wasMuted;
synchronized (VolumeStreamState.class) {
final VolumeStreamState streamState = mStreamStates[stream];
- wasMuted = streamState.mute(false); // if unmuting causes a change, it was muted
+ // if unmuting causes a change, it was muted
+ wasMuted = streamState.mute(false, "onUnmuteStream");
final int device = getDeviceForStream(stream);
final int index = streamState.getIndex(device);
@@ -3801,13 +3804,13 @@
/*package*/ void onSetStreamVolume(int streamType, int index, int flags, int device,
String caller, boolean hasModifyAudioSettings, boolean canChangeMute) {
final int stream = mStreamVolumeAlias[streamType];
- setStreamVolumeInt(stream, index, device, false, caller, hasModifyAudioSettings);
// setting volume on ui sounds stream type also controls silent mode
if (((flags & AudioManager.FLAG_ALLOW_RINGER_MODES) != 0) ||
(stream == getUiSoundsStreamType())) {
setRingerMode(getNewRingerMode(stream, index, flags),
TAG + ".onSetStreamVolume", false /*external*/);
}
+ setStreamVolumeInt(stream, index, device, false, caller, hasModifyAudioSettings);
// setting non-zero volume for a muted stream unmutes the stream and vice versa
// except for BT SCO stream where only explicit mute is allowed to comply to BT requirements
if ((streamType != AudioSystem.STREAM_BLUETOOTH_SCO) && canChangeMute) {
@@ -5498,12 +5501,16 @@
PERSIST_DELAY);
}
}
- mStreamStates[streamType].mute(false);
- mRingerAndZenModeMutedStreams &= ~(1 << streamType);
+ sRingerAndZenModeMutedStreams &= ~(1 << streamType);
+ sMuteLogger.enqueue(new AudioServiceEvents.RingerZenMutedStreamsEvent(
+ sRingerAndZenModeMutedStreams, "muteRingerModeStreams"));
+ mStreamStates[streamType].mute(false, "muteRingerModeStreams");
} else {
// mute
- mStreamStates[streamType].mute(true);
- mRingerAndZenModeMutedStreams |= (1 << streamType);
+ sRingerAndZenModeMutedStreams |= (1 << streamType);
+ sMuteLogger.enqueue(new AudioServiceEvents.RingerZenMutedStreamsEvent(
+ sRingerAndZenModeMutedStreams, "muteRingerModeStreams"));
+ mStreamStates[streamType].mute(true, "muteRingerModeStreams");
}
}
}
@@ -6702,7 +6709,7 @@
}
private boolean isStreamMutedByRingerOrZenMode(int streamType) {
- return (mRingerAndZenModeMutedStreams & (1 << streamType)) != 0;
+ return (sRingerAndZenModeMutedStreams & (1 << streamType)) != 0;
}
/**
@@ -7613,7 +7620,7 @@
Log.i(TAG, String.format("onAccessoryPlugMediaUnmute unmuting device=%d [%s]",
newDevice, AudioSystem.getOutputDeviceName(newDevice)));
}
- mStreamStates[AudioSystem.STREAM_MUSIC].mute(false);
+ mStreamStates[AudioSystem.STREAM_MUSIC].mute(false, "onAccessoryPlugMediaUnmute");
}
}
@@ -7989,7 +7996,8 @@
true /*hasModifyAudioSettings*/);
}
if ((isMuted() != streamMuted) && isVssMuteBijective(stream)) {
- mStreamStates[stream].mute(isMuted());
+ mStreamStates[stream].mute(isMuted(),
+ "VGS.applyAllVolumes#1");
}
}
}
@@ -8030,7 +8038,7 @@
true /*hasModifyAudioSettings*/);
}
if ((isMuted() != streamMuted) && isVssMuteBijective(stream)) {
- mStreamStates[stream].mute(isMuted());
+ mStreamStates[stream].mute(isMuted(), "VGS.applyAllVolumes#2");
}
}
}
@@ -8718,10 +8726,10 @@
* @param state the new mute state
* @return true if the mute state was changed
*/
- public boolean mute(boolean state) {
+ public boolean mute(boolean state, String source) {
boolean changed = false;
synchronized (VolumeStreamState.class) {
- changed = mute(state, true);
+ changed = mute(state, true, source);
}
if (changed) {
broadcastMuteSetting(mStreamType, state);
@@ -8770,10 +8778,21 @@
* It prevents unnecessary calls to {@see AudioSystem#setStreamVolume}
* @return true if the mute state was changed
*/
- public boolean mute(boolean state, boolean apply) {
+ public boolean mute(boolean state, boolean apply, String src) {
synchronized (VolumeStreamState.class) {
boolean changed = state != mIsMuted;
if (changed) {
+ sMuteLogger.enqueue(
+ new AudioServiceEvents.StreamMuteEvent(mStreamType, state, src));
+ // check to see if unmuting should not have happened due to ringer muted streams
+ if (!state && isStreamMutedByRingerOrZenMode(mStreamType)) {
+ Log.e(TAG, "Unmuting stream " + mStreamType
+ + " despite ringer-zen muted stream 0x"
+ + Integer.toHexString(AudioService.sRingerAndZenModeMutedStreams),
+ new Exception()); // this will put a stack trace in the logs
+ sMuteLogger.enqueue(new AudioServiceEvents.StreamUnmuteErrorEvent(
+ mStreamType, AudioService.sRingerAndZenModeMutedStreams));
+ }
mIsMuted = state;
if (apply) {
doMute();
@@ -9378,9 +9397,9 @@
public void onChange(boolean selfChange) {
super.onChange(selfChange);
// FIXME This synchronized is not necessary if mSettingsLock only protects mRingerMode.
- // However there appear to be some missing locks around mRingerAndZenModeMutedStreams
+ // However there appear to be some missing locks around sRingerAndZenModeMutedStreams
// and mRingerModeAffectedStreams, so will leave this synchronized for now.
- // mRingerAndZenModeMutedStreams and mMuteAffectedStreams are safe (only accessed once).
+ // sRingerAndZenModeMutedStreams and mMuteAffectedStreams are safe (only accessed once).
synchronized (mSettingsLock) {
if (updateRingerAndZenModeAffectedStreams()) {
/*
@@ -10586,7 +10605,7 @@
new AudioAttributes.Builder().setUsage(AudioAttributes.USAGE_MEDIA).build(), true);
final int nativeDeviceType;
final AudioDeviceAttributes ada;
- if (devices.isEmpty()) {
+ if (!devices.isEmpty()) {
ada = devices.get(0);
nativeDeviceType = ada.getInternalType();
} else {
@@ -10873,6 +10892,9 @@
sLifecycleLogger = new EventLogger(LOG_NB_EVENTS_LIFECYCLE,
"audio services lifecycle");
+ static final EventLogger sMuteLogger = new EventLogger(30,
+ "mute commands");
+
final private EventLogger
mModeLogger = new EventLogger(LOG_NB_EVENTS_PHONE_STATE,
"phone state (logged after successful call to AudioSystem.setPhoneState(int, int))");
@@ -10913,7 +10935,7 @@
pw.println("- mode (external) = " + RINGER_MODE_NAMES[mRingerModeExternal]);
pw.println("- zen mode:" + Settings.Global.zenModeToString(mNm.getZenMode()));
dumpRingerModeStreams(pw, "affected", mRingerModeAffectedStreams);
- dumpRingerModeStreams(pw, "muted", mRingerAndZenModeMutedStreams);
+ dumpRingerModeStreams(pw, "muted", sRingerAndZenModeMutedStreams);
pw.print("- delegate = "); pw.println(mRingerModeDelegate);
}
@@ -11039,6 +11061,8 @@
pw.println("\n");
sVolumeLogger.dump(pw);
pw.println("\n");
+ sMuteLogger.dump(pw);
+ pw.println("\n");
dumpSupportedSystemUsage(pw);
pw.println("\n");
diff --git a/services/core/java/com/android/server/audio/AudioServiceEvents.java b/services/core/java/com/android/server/audio/AudioServiceEvents.java
index b022b5b..6ad9390 100644
--- a/services/core/java/com/android/server/audio/AudioServiceEvents.java
+++ b/services/core/java/com/android/server/audio/AudioServiceEvents.java
@@ -563,4 +563,75 @@
return new StringBuilder("FIXME invalid event type:").append(mEventType).toString();
}
}
+
+ /**
+ * Class to log stream type mute/unmute events
+ */
+ static final class StreamMuteEvent extends EventLogger.Event {
+ final int mStreamType;
+ final boolean mMuted;
+ final String mSource;
+
+ StreamMuteEvent(int streamType, boolean muted, String source) {
+ mStreamType = streamType;
+ mMuted = muted;
+ mSource = source;
+ }
+
+ @Override
+ public String eventToString() {
+ final String streamName =
+ (mStreamType <= AudioSystem.getNumStreamTypes() && mStreamType >= 0)
+ ? AudioSystem.STREAM_NAMES[mStreamType]
+ : ("stream " + mStreamType);
+ return new StringBuilder(streamName)
+ .append(mMuted ? " muting by " : " unmuting by ")
+ .append(mSource)
+ .toString();
+ }
+ }
+
+ /**
+ * Class to log unmute errors that contradict the ringer/zen mode muted streams
+ */
+ static final class StreamUnmuteErrorEvent extends EventLogger.Event {
+ final int mStreamType;
+ final int mRingerZenMutedStreams;
+
+ StreamUnmuteErrorEvent(int streamType, int ringerZenMutedStreams) {
+ mStreamType = streamType;
+ mRingerZenMutedStreams = ringerZenMutedStreams;
+ }
+
+ @Override
+ public String eventToString() {
+ final String streamName =
+ (mStreamType <= AudioSystem.getNumStreamTypes() && mStreamType >= 0)
+ ? AudioSystem.STREAM_NAMES[mStreamType]
+ : ("stream " + mStreamType);
+ return new StringBuilder("Error trying to unmute ")
+ .append(streamName)
+ .append(" despite muted streams 0x")
+ .append(Integer.toHexString(mRingerZenMutedStreams))
+ .toString();
+ }
+ }
+
+ static final class RingerZenMutedStreamsEvent extends EventLogger.Event {
+ final int mRingerZenMutedStreams;
+ final String mSource;
+
+ RingerZenMutedStreamsEvent(int ringerZenMutedStreams, String source) {
+ mRingerZenMutedStreams = ringerZenMutedStreams;
+ mSource = source;
+ }
+
+ @Override
+ public String eventToString() {
+ return new StringBuilder("RingerZenMutedStreams 0x")
+ .append(Integer.toHexString(mRingerZenMutedStreams))
+ .append(" from ").append(mSource)
+ .toString();
+ }
+ }
}
diff --git a/services/core/java/com/android/server/audio/SoundDoseHelper.java b/services/core/java/com/android/server/audio/SoundDoseHelper.java
index aece17e7..4aa256d 100644
--- a/services/core/java/com/android/server/audio/SoundDoseHelper.java
+++ b/services/core/java/com/android/server/audio/SoundDoseHelper.java
@@ -78,6 +78,23 @@
/*package*/ static final String ACTION_CHECK_MUSIC_ACTIVE =
"com.android.server.audio.action.CHECK_MUSIC_ACTIVE";
+ /**
+ * Property to force the index based safe volume warnings. Note that usually when the
+ * CSD warnings are active the safe volume warnings are deactivated. In combination with
+ * {@link SoundDoseHelper#SYSTEM_PROPERTY_SAFEMEDIA_CSD_FORCE} both approaches can be active
+ * at the same time.
+ */
+ private static final String SYSTEM_PROPERTY_SAFEMEDIA_FORCE = "audio.safemedia.force";
+ /** Property for bypassing the index based safe volume approach. */
+ private static final String SYSTEM_PROPERTY_SAFEMEDIA_BYPASS = "audio.safemedia.bypass";
+ /**
+ * Property to force the CSD warnings. Note that usually when the CSD warnings are active the
+ * safe volume warnings are deactivated. In combination with
+ * {@link SoundDoseHelper#SYSTEM_PROPERTY_SAFEMEDIA_FORCE} both approaches can be active
+ * at the same time.
+ */
+ private static final String SYSTEM_PROPERTY_SAFEMEDIA_CSD_FORCE = "audio.safemedia.csd.force";
+
// mSafeMediaVolumeState indicates whether the media volume is limited over headphones.
// It is SAFE_MEDIA_VOLUME_NOT_CONFIGURED at boot time until a network service is connected
// or the configure time is elapsed. It is then set to SAFE_MEDIA_VOLUME_ACTIVE or
@@ -830,56 +847,64 @@
}
private void onConfigureSafeMedia(boolean force, String caller) {
+ updateCsdEnabled(caller);
+
synchronized (mSafeMediaVolumeStateLock) {
int mcc = mContext.getResources().getConfiguration().mcc;
if ((mMcc != mcc) || ((mMcc == 0) && force)) {
mSafeMediaVolumeIndex = mContext.getResources().getInteger(
com.android.internal.R.integer.config_safe_media_volume_index) * 10;
-
initSafeMediaVolumeIndex();
- boolean safeMediaVolumeEnabled =
- SystemProperties.getBoolean("audio.safemedia.force", false)
- || mContext.getResources().getBoolean(
- com.android.internal.R.bool.config_safe_media_volume_enabled);
- boolean safeMediaVolumeBypass =
- SystemProperties.getBoolean("audio.safemedia.bypass", false);
+ updateSafeMediaVolume_l(caller);
- // The persisted state is either "disabled" or "active": this is the state applied
- // next time we boot and cannot be "inactive"
- int persistedState;
- if (safeMediaVolumeEnabled && !safeMediaVolumeBypass) {
- persistedState = SAFE_MEDIA_VOLUME_ACTIVE;
- // The state can already be "inactive" here if the user has forced it before
- // the 30 seconds timeout for forced configuration. In this case we don't reset
- // it to "active".
- if (mSafeMediaVolumeState != SAFE_MEDIA_VOLUME_INACTIVE) {
- if (mMusicActiveMs == 0) {
- mSafeMediaVolumeState = SAFE_MEDIA_VOLUME_ACTIVE;
- enforceSafeMediaVolume(caller);
- } else {
- // We have existing playback time recorded, already confirmed.
- mSafeMediaVolumeState = SAFE_MEDIA_VOLUME_INACTIVE;
- mLastMusicActiveTimeMs = 0;
- }
- }
- } else {
- persistedState = SAFE_MEDIA_VOLUME_DISABLED;
- mSafeMediaVolumeState = SAFE_MEDIA_VOLUME_DISABLED;
- }
mMcc = mcc;
- mAudioHandler.sendMessageAtTime(
- mAudioHandler.obtainMessage(MSG_PERSIST_SAFE_VOLUME_STATE,
- persistedState, /*arg2=*/0,
- /*obj=*/null), /*delay=*/0);
}
-
- updateCsdEnabled(caller);
}
}
+ @GuardedBy("mSafeMediaVolumeStateLock")
+ private void updateSafeMediaVolume_l(String caller) {
+ boolean safeMediaVolumeEnabled =
+ SystemProperties.getBoolean(SYSTEM_PROPERTY_SAFEMEDIA_FORCE, false)
+ || (mContext.getResources().getBoolean(
+ com.android.internal.R.bool.config_safe_media_volume_enabled)
+ && !mEnableCsd.get());
+ boolean safeMediaVolumeBypass =
+ SystemProperties.getBoolean(SYSTEM_PROPERTY_SAFEMEDIA_BYPASS, false);
+
+ // The persisted state is either "disabled" or "active": this is the state applied
+ // next time we boot and cannot be "inactive"
+ int persistedState;
+ if (safeMediaVolumeEnabled && !safeMediaVolumeBypass) {
+ persistedState = SAFE_MEDIA_VOLUME_ACTIVE;
+ // The state can already be "inactive" here if the user has forced it before
+ // the 30 seconds timeout for forced configuration. In this case we don't reset
+ // it to "active".
+ if (mSafeMediaVolumeState != SAFE_MEDIA_VOLUME_INACTIVE) {
+ if (mMusicActiveMs == 0) {
+ mSafeMediaVolumeState = SAFE_MEDIA_VOLUME_ACTIVE;
+ enforceSafeMediaVolume(caller);
+ } else {
+ // We have existing playback time recorded, already confirmed.
+ mSafeMediaVolumeState = SAFE_MEDIA_VOLUME_INACTIVE;
+ mLastMusicActiveTimeMs = 0;
+ }
+ }
+ } else {
+ persistedState = SAFE_MEDIA_VOLUME_DISABLED;
+ mSafeMediaVolumeState = SAFE_MEDIA_VOLUME_DISABLED;
+ }
+
+ mAudioHandler.sendMessageAtTime(
+ mAudioHandler.obtainMessage(MSG_PERSIST_SAFE_VOLUME_STATE,
+ persistedState, /*arg2=*/0,
+ /*obj=*/null), /*delay=*/0);
+ }
+
private void updateCsdEnabled(String caller) {
- boolean newEnableCsd = SystemProperties.getBoolean("audio.safemedia.force", false);
+ boolean newEnableCsd = SystemProperties.getBoolean(SYSTEM_PROPERTY_SAFEMEDIA_CSD_FORCE,
+ false);
if (!newEnableCsd) {
final String featureFlagEnableCsdValue = DeviceConfig.getProperty(
DeviceConfig.NAMESPACE_MEDIA,
@@ -895,6 +920,10 @@
if (mEnableCsd.compareAndSet(!newEnableCsd, newEnableCsd)) {
Log.i(TAG, caller + ": enable CSD " + newEnableCsd);
initCsd();
+
+ synchronized (mSafeMediaVolumeStateLock) {
+ updateSafeMediaVolume_l(caller);
+ }
}
}
diff --git a/services/core/java/com/android/server/clipboard/ClipboardService.java b/services/core/java/com/android/server/clipboard/ClipboardService.java
index fab138b..4b8b431 100644
--- a/services/core/java/com/android/server/clipboard/ClipboardService.java
+++ b/services/core/java/com/android/server/clipboard/ClipboardService.java
@@ -1389,6 +1389,11 @@
callingPackage) == PackageManager.PERMISSION_GRANTED) {
return;
}
+ // Don't notify if this access is coming from the privileged app which owns the device.
+ if (clipboard.deviceId != DEVICE_ID_DEFAULT && mVdmInternal.getDeviceOwnerUid(
+ clipboard.deviceId) == uid) {
+ return;
+ }
// Don't notify if already notified for this uid and clip.
if (clipboard.mNotifiedUids.get(uid)) {
return;
diff --git a/services/core/java/com/android/server/content/SyncManager.java b/services/core/java/com/android/server/content/SyncManager.java
index da822fa..3e31bd1 100644
--- a/services/core/java/com/android/server/content/SyncManager.java
+++ b/services/core/java/com/android/server/content/SyncManager.java
@@ -892,9 +892,8 @@
* @return true/false if contact sharing is enabled/disabled
*/
protected boolean isContactSharingAllowedForCloneProfile() {
- // TODO(b/253449368): This method should also check for the config controlling
- // all app-cloning features.
- return mAppCloningDeviceConfigHelper.getEnableAppCloningBuildingBlocks();
+ return mContext.getResources().getBoolean(R.bool.config_enableAppCloningBuildingBlocks)
+ && mAppCloningDeviceConfigHelper.getEnableAppCloningBuildingBlocks();
}
/**
diff --git a/services/core/java/com/android/server/devicestate/DeviceState.java b/services/core/java/com/android/server/devicestate/DeviceState.java
index 00af224..2ba59b0 100644
--- a/services/core/java/com/android/server/devicestate/DeviceState.java
+++ b/services/core/java/com/android/server/devicestate/DeviceState.java
@@ -139,7 +139,10 @@
@Override
public String toString() {
return "DeviceState{" + "identifier=" + mIdentifier + ", name='" + mName + '\''
- + ", app_accessible=" + !hasFlag(FLAG_APP_INACCESSIBLE) + "}";
+ + ", app_accessible=" + !hasFlag(FLAG_APP_INACCESSIBLE)
+ + ", cancel_when_requester_not_on_top="
+ + hasFlag(FLAG_CANCEL_WHEN_REQUESTER_NOT_ON_TOP)
+ + "}";
}
@Override
diff --git a/services/core/java/com/android/server/input/FocusEventDebugView.java b/services/core/java/com/android/server/input/FocusEventDebugView.java
new file mode 100644
index 0000000..fba2aa6
--- /dev/null
+++ b/services/core/java/com/android/server/input/FocusEventDebugView.java
@@ -0,0 +1,343 @@
+/*
+ * Copyright 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.server.input;
+
+import static android.util.TypedValue.COMPLEX_UNIT_DIP;
+import static android.util.TypedValue.COMPLEX_UNIT_SP;
+import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
+
+import android.animation.LayoutTransition;
+import android.annotation.AnyThread;
+import android.content.Context;
+import android.graphics.Color;
+import android.graphics.ColorFilter;
+import android.graphics.ColorMatrixColorFilter;
+import android.graphics.Typeface;
+import android.util.Pair;
+import android.util.Slog;
+import android.util.TypedValue;
+import android.view.Gravity;
+import android.view.InputEvent;
+import android.view.KeyEvent;
+import android.view.RoundedCorner;
+import android.view.View;
+import android.view.WindowInsets;
+import android.view.animation.AccelerateInterpolator;
+import android.widget.HorizontalScrollView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import com.android.internal.R;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Displays focus events, such as physical keyboard KeyEvents and non-pointer MotionEvents on
+ * the screen.
+ */
+class FocusEventDebugView extends LinearLayout {
+
+ private static final String TAG = FocusEventDebugView.class.getSimpleName();
+
+ private static final int KEY_FADEOUT_DURATION_MILLIS = 1000;
+ private static final int KEY_TRANSITION_DURATION_MILLIS = 100;
+
+ private static final int OUTER_PADDING_DP = 16;
+ private static final int KEY_SEPARATION_MARGIN_DP = 16;
+ private static final int KEY_VIEW_SIDE_PADDING_DP = 16;
+ private static final int KEY_VIEW_VERTICAL_PADDING_DP = 8;
+ private static final int KEY_VIEW_MIN_WIDTH_DP = 32;
+ private static final int KEY_VIEW_TEXT_SIZE_SP = 12;
+
+ private final int mOuterPadding;
+
+ // Tracks all keys that are currently pressed/down.
+ private final Map<Pair<Integer /*deviceId*/, Integer /*scanCode*/>, PressedKeyView>
+ mPressedKeys = new HashMap<>();
+
+ private final PressedKeyContainer mPressedKeyContainer;
+ private final PressedKeyContainer mPressedModifierContainer;
+
+ FocusEventDebugView(Context c) {
+ super(c);
+ setFocusableInTouchMode(true);
+
+ final var dm = mContext.getResources().getDisplayMetrics();
+ mOuterPadding = (int) TypedValue.applyDimension(COMPLEX_UNIT_DIP, OUTER_PADDING_DP, dm);
+
+ setOrientation(HORIZONTAL);
+ setLayoutDirection(LAYOUT_DIRECTION_RTL);
+ setGravity(Gravity.START | Gravity.BOTTOM);
+
+ mPressedKeyContainer = new PressedKeyContainer(mContext);
+ mPressedKeyContainer.setOrientation(HORIZONTAL);
+ mPressedKeyContainer.setGravity(Gravity.RIGHT | Gravity.BOTTOM);
+ mPressedKeyContainer.setLayoutDirection(LAYOUT_DIRECTION_LTR);
+ final var scroller = new HorizontalScrollView(mContext);
+ scroller.addView(mPressedKeyContainer);
+ scroller.setHorizontalScrollBarEnabled(false);
+ scroller.addOnLayoutChangeListener(
+ (view, l, t, r, b, ol, ot, or, ob) -> scroller.fullScroll(View.FOCUS_RIGHT));
+ scroller.setHorizontalFadingEdgeEnabled(true);
+ addView(scroller, new LayoutParams(0, WRAP_CONTENT, 1));
+
+ mPressedModifierContainer = new PressedKeyContainer(mContext);
+ mPressedModifierContainer.setOrientation(VERTICAL);
+ mPressedModifierContainer.setGravity(Gravity.LEFT | Gravity.BOTTOM);
+ addView(mPressedModifierContainer, new LayoutParams(WRAP_CONTENT, WRAP_CONTENT));
+ }
+
+ @Override
+ public WindowInsets onApplyWindowInsets(WindowInsets insets) {
+ int paddingBottom = 0;
+
+ final RoundedCorner bottomLeft =
+ insets.getRoundedCorner(RoundedCorner.POSITION_BOTTOM_LEFT);
+ if (bottomLeft != null) {
+ paddingBottom = bottomLeft.getRadius();
+ }
+
+ final RoundedCorner bottomRight =
+ insets.getRoundedCorner(RoundedCorner.POSITION_BOTTOM_RIGHT);
+ if (bottomRight != null) {
+ paddingBottom = Math.max(paddingBottom, bottomRight.getRadius());
+ }
+
+ if (insets.getDisplayCutout() != null) {
+ paddingBottom =
+ Math.max(paddingBottom, insets.getDisplayCutout().getSafeInsetBottom());
+ }
+
+ setPadding(mOuterPadding, mOuterPadding, mOuterPadding, mOuterPadding + paddingBottom);
+ setClipToPadding(false);
+ invalidate();
+ return super.onApplyWindowInsets(insets);
+ }
+
+ @Override
+ public boolean dispatchKeyEvent(KeyEvent event) {
+ handleKeyEvent(event);
+ return super.dispatchKeyEvent(event);
+ }
+
+ /** Report an input event to the debug view. */
+ @AnyThread
+ public void reportEvent(InputEvent event) {
+ if (!(event instanceof KeyEvent)) {
+ // TODO: Support non-pointer MotionEvents.
+ return;
+ }
+ post(() -> handleKeyEvent(KeyEvent.obtain((KeyEvent) event)));
+ }
+
+ private void handleKeyEvent(KeyEvent keyEvent) {
+ final var identifier = new Pair<>(keyEvent.getDeviceId(), keyEvent.getScanCode());
+ final var container = KeyEvent.isModifierKey(keyEvent.getKeyCode())
+ ? mPressedModifierContainer
+ : mPressedKeyContainer;
+ PressedKeyView pressedKeyView = mPressedKeys.get(identifier);
+ switch (keyEvent.getAction()) {
+ case KeyEvent.ACTION_DOWN: {
+ if (pressedKeyView != null) {
+ if (keyEvent.getRepeatCount() == 0) {
+ Slog.w(TAG, "Got key down for "
+ + KeyEvent.keyCodeToString(keyEvent.getKeyCode())
+ + " that was already tracked as being down.");
+ break;
+ }
+ container.handleKeyRepeat(pressedKeyView);
+ break;
+ }
+
+ pressedKeyView = new PressedKeyView(mContext, getLabel(keyEvent));
+ mPressedKeys.put(identifier, pressedKeyView);
+ container.handleKeyPressed(pressedKeyView);
+ break;
+ }
+ case KeyEvent.ACTION_UP: {
+ if (pressedKeyView == null) {
+ Slog.w(TAG, "Got key up for " + KeyEvent.keyCodeToString(keyEvent.getKeyCode())
+ + " that was not tracked as being down.");
+ break;
+ }
+ mPressedKeys.remove(identifier);
+ container.handleKeyRelease(pressedKeyView);
+ break;
+ }
+ default:
+ break;
+ }
+ keyEvent.recycle();
+ }
+
+ private static String getLabel(KeyEvent event) {
+ switch (event.getKeyCode()) {
+ case KeyEvent.KEYCODE_SPACE:
+ return "\u2423";
+ case KeyEvent.KEYCODE_TAB:
+ return "\u21e5";
+ case KeyEvent.KEYCODE_ENTER:
+ case KeyEvent.KEYCODE_NUMPAD_ENTER:
+ return "\u23CE";
+ case KeyEvent.KEYCODE_DEL:
+ return "\u232B";
+ case KeyEvent.KEYCODE_FORWARD_DEL:
+ return "\u2326";
+ case KeyEvent.KEYCODE_ESCAPE:
+ return "ESC";
+ case KeyEvent.KEYCODE_DPAD_UP:
+ return "\u2191";
+ case KeyEvent.KEYCODE_DPAD_DOWN:
+ return "\u2193";
+ case KeyEvent.KEYCODE_DPAD_LEFT:
+ return "\u2190";
+ case KeyEvent.KEYCODE_DPAD_RIGHT:
+ return "\u2192";
+ case KeyEvent.KEYCODE_DPAD_UP_RIGHT:
+ return "\u2197";
+ case KeyEvent.KEYCODE_DPAD_UP_LEFT:
+ return "\u2196";
+ case KeyEvent.KEYCODE_DPAD_DOWN_RIGHT:
+ return "\u2198";
+ case KeyEvent.KEYCODE_DPAD_DOWN_LEFT:
+ return "\u2199";
+ default:
+ break;
+ }
+
+ final int unicodeChar = event.getUnicodeChar();
+ if (unicodeChar != 0) {
+ return new String(Character.toChars(unicodeChar));
+ }
+
+ final var label = KeyEvent.keyCodeToString(event.getKeyCode());
+ if (label.startsWith("KEYCODE_")) {
+ return label.substring(8);
+ }
+ return label;
+ }
+
+ private static class PressedKeyView extends TextView {
+
+ private static final ColorFilter sInvertColors = new ColorMatrixColorFilter(new float[]{
+ -1.0f, 0, 0, 0, 255, // red
+ 0, -1.0f, 0, 0, 255, // green
+ 0, 0, -1.0f, 0, 255, // blue
+ 0, 0, 0, 1.0f, 0 // alpha
+ });
+
+ PressedKeyView(Context c, String label) {
+ super(c);
+
+ final var dm = c.getResources().getDisplayMetrics();
+ final int keyViewSidePadding =
+ (int) TypedValue.applyDimension(COMPLEX_UNIT_DIP, KEY_VIEW_SIDE_PADDING_DP, dm);
+ final int keyViewVerticalPadding =
+ (int) TypedValue.applyDimension(COMPLEX_UNIT_DIP, KEY_VIEW_VERTICAL_PADDING_DP,
+ dm);
+ final int keyViewMinWidth =
+ (int) TypedValue.applyDimension(COMPLEX_UNIT_DIP, KEY_VIEW_MIN_WIDTH_DP, dm);
+ final int textSize =
+ (int) TypedValue.applyDimension(COMPLEX_UNIT_SP, KEY_VIEW_TEXT_SIZE_SP, dm);
+
+ setText(label);
+ setGravity(Gravity.CENTER);
+ setMinimumWidth(keyViewMinWidth);
+ setTextSize(textSize);
+ setTypeface(Typeface.SANS_SERIF);
+ setBackgroundResource(R.drawable.focus_event_pressed_key_background);
+ setPaddingRelative(keyViewSidePadding, keyViewVerticalPadding, keyViewSidePadding,
+ keyViewVerticalPadding);
+
+ setHighlighted(true);
+ }
+
+ void setHighlighted(boolean isHighlighted) {
+ if (isHighlighted) {
+ setTextColor(Color.BLACK);
+ getBackground().setColorFilter(sInvertColors);
+ } else {
+ setTextColor(Color.WHITE);
+ getBackground().clearColorFilter();
+ }
+ invalidate();
+ }
+ }
+
+ private static class PressedKeyContainer extends LinearLayout {
+
+ private final MarginLayoutParams mPressedKeyLayoutParams;
+
+ PressedKeyContainer(Context c) {
+ super(c);
+
+ final var dm = c.getResources().getDisplayMetrics();
+ final int keySeparationMargin =
+ (int) TypedValue.applyDimension(COMPLEX_UNIT_DIP, KEY_SEPARATION_MARGIN_DP, dm);
+
+ final var transition = new LayoutTransition();
+ transition.disableTransitionType(LayoutTransition.APPEARING);
+ transition.disableTransitionType(LayoutTransition.DISAPPEARING);
+ transition.disableTransitionType(LayoutTransition.CHANGE_DISAPPEARING);
+ transition.setDuration(KEY_TRANSITION_DURATION_MILLIS);
+ setLayoutTransition(transition);
+
+ mPressedKeyLayoutParams = new MarginLayoutParams(WRAP_CONTENT, WRAP_CONTENT);
+ if (getOrientation() == VERTICAL) {
+ mPressedKeyLayoutParams.setMargins(0, keySeparationMargin, 0, 0);
+ } else {
+ mPressedKeyLayoutParams.setMargins(keySeparationMargin, 0, 0, 0);
+ }
+ }
+
+ public void handleKeyPressed(PressedKeyView pressedKeyView) {
+ addView(pressedKeyView, getChildCount(), mPressedKeyLayoutParams);
+ invalidate();
+ }
+
+ public void handleKeyRepeat(PressedKeyView repeatedKeyView) {
+ // Do nothing for now.
+ }
+
+ public void handleKeyRelease(PressedKeyView releasedKeyView) {
+ releasedKeyView.setHighlighted(false);
+ releasedKeyView.clearAnimation();
+ releasedKeyView.animate()
+ .alpha(0)
+ .setDuration(KEY_FADEOUT_DURATION_MILLIS)
+ .setInterpolator(new AccelerateInterpolator())
+ .withEndAction(this::cleanUpPressedKeyViews)
+ .start();
+ }
+
+ private void cleanUpPressedKeyViews() {
+ int numChildrenToRemove = 0;
+ for (int i = 0; i < getChildCount(); i++) {
+ final View child = getChildAt(i);
+ if (child.getAlpha() != 0) {
+ break;
+ }
+ child.setVisibility(View.GONE);
+ child.clearAnimation();
+ numChildrenToRemove++;
+ }
+ removeViews(0, numChildrenToRemove);
+ invalidate();
+ }
+ }
+}
diff --git a/services/core/java/com/android/server/input/InputManagerService.java b/services/core/java/com/android/server/input/InputManagerService.java
index 5f45f91..662591e 100644
--- a/services/core/java/com/android/server/input/InputManagerService.java
+++ b/services/core/java/com/android/server/input/InputManagerService.java
@@ -18,6 +18,7 @@
import static android.provider.DeviceConfig.NAMESPACE_INPUT_NATIVE_BOOT;
import static android.view.KeyEvent.KEYCODE_UNKNOWN;
+import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
import android.Manifest;
import android.annotation.EnforcePermission;
@@ -32,6 +33,7 @@
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
+import android.graphics.PixelFormat;
import android.graphics.PointF;
import android.hardware.SensorPrivacyManager;
import android.hardware.SensorPrivacyManager.Sensors;
@@ -100,6 +102,7 @@
import android.view.SurfaceControl;
import android.view.VerifiedInputEvent;
import android.view.ViewConfiguration;
+import android.view.WindowManager;
import android.view.inputmethod.InputMethodInfo;
import android.view.inputmethod.InputMethodSubtype;
@@ -386,6 +389,11 @@
/** Whether to use the dev/input/event or uevent subsystem for the audio jack. */
final boolean mUseDevInputEventForAudioJack;
+ private final Object mFocusEventDebugViewLock = new Object();
+ @GuardedBy("mFocusEventDebugViewLock")
+ @Nullable
+ private FocusEventDebugView mFocusEventDebugView;
+
/** Point of injection for test dependencies. */
@VisibleForTesting
static class Injector {
@@ -427,7 +435,7 @@
mContext = injector.getContext();
mHandler = new InputManagerHandler(injector.getLooper());
mNative = injector.getNativeService(this);
- mSettingsObserver = new InputSettingsObserver(mContext, mHandler, mNative);
+ mSettingsObserver = new InputSettingsObserver(mContext, mHandler, this, mNative);
mKeyboardLayoutManager = new KeyboardLayoutManager(mContext, mNative, mDataStore,
injector.getLooper());
mBatteryController = new BatteryController(mContext, mNative, injector.getLooper());
@@ -2460,6 +2468,11 @@
// Native callback.
@SuppressWarnings("unused")
private int interceptKeyBeforeQueueing(KeyEvent event, int policyFlags) {
+ synchronized (mFocusEventDebugViewLock) {
+ if (mFocusEventDebugView != null) {
+ mFocusEventDebugView.reportEvent(event);
+ }
+ }
return mWindowManagerCallbacks.interceptKeyBeforeQueueing(event, policyFlags);
}
@@ -3367,6 +3380,45 @@
}
}
+ void updateFocusEventDebugViewEnabled(boolean enabled) {
+ FocusEventDebugView view;
+ synchronized (mFocusEventDebugViewLock) {
+ if (enabled == (mFocusEventDebugView != null)) {
+ return;
+ }
+ if (enabled) {
+ mFocusEventDebugView = new FocusEventDebugView(mContext);
+ view = mFocusEventDebugView;
+ } else {
+ view = mFocusEventDebugView;
+ mFocusEventDebugView = null;
+ }
+ }
+ Objects.requireNonNull(view);
+
+ // Interact with WM outside the lock, since the lock is part of the input hotpath.
+ final WindowManager wm =
+ Objects.requireNonNull(mContext.getSystemService(WindowManager.class));
+ if (!enabled) {
+ wm.removeView(view);
+ return;
+ }
+
+ // TODO: Support multi display
+ final WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
+ lp.type = WindowManager.LayoutParams.TYPE_SECURE_SYSTEM_OVERLAY;
+ lp.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
+ | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
+ | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
+ lp.privateFlags |= WindowManager.LayoutParams.SYSTEM_FLAG_SHOW_FOR_ALL_USERS;
+ lp.setFitInsetsTypes(0);
+ lp.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
+ lp.format = PixelFormat.TRANSLUCENT;
+ lp.setTitle("FocusEventDebugView - display " + mContext.getDisplayId());
+ lp.inputFeatures |= WindowManager.LayoutParams.INPUT_FEATURE_NO_INPUT_CHANNEL;
+ wm.addView(view, lp);
+ }
+
interface KeyboardBacklightControllerInterface {
default void incrementKeyboardBacklight(int deviceId) {}
default void decrementKeyboardBacklight(int deviceId) {}
diff --git a/services/core/java/com/android/server/input/InputSettingsObserver.java b/services/core/java/com/android/server/input/InputSettingsObserver.java
index 153e9c1..651063e 100644
--- a/services/core/java/com/android/server/input/InputSettingsObserver.java
+++ b/services/core/java/com/android/server/input/InputSettingsObserver.java
@@ -43,13 +43,16 @@
private final Context mContext;
private final Handler mHandler;
+ private final InputManagerService mService;
private final NativeInputManagerService mNative;
private final Map<Uri, Consumer<String /* reason*/>> mObservers;
- InputSettingsObserver(Context context, Handler handler, NativeInputManagerService nativeIms) {
+ InputSettingsObserver(Context context, Handler handler, InputManagerService service,
+ NativeInputManagerService nativeIms) {
super(handler);
mContext = context;
mHandler = handler;
+ mService = service;
mNative = nativeIms;
mObservers = Map.ofEntries(
Map.entry(Settings.System.getUriFor(Settings.System.POINTER_SPEED),
@@ -72,7 +75,9 @@
Map.entry(
Settings.Global.getUriFor(
Settings.Global.MAXIMUM_OBSCURING_OPACITY_FOR_TOUCH),
- (reason) -> updateMaximumObscuringOpacityForTouch()));
+ (reason) -> updateMaximumObscuringOpacityForTouch()),
+ Map.entry(Settings.System.getUriFor(Settings.System.SHOW_KEY_PRESSES),
+ (reason) -> updateShowKeyPresses()));
}
/**
@@ -145,6 +150,11 @@
mNative.setShowTouches(getBoolean(Settings.System.SHOW_TOUCHES, false));
}
+ private void updateShowKeyPresses() {
+ mService.updateFocusEventDebugViewEnabled(
+ getBoolean(Settings.System.SHOW_KEY_PRESSES, false));
+ }
+
private void updateAccessibilityLargePointer() {
final int accessibilityConfig = Settings.Secure.getIntForUser(
mContext.getContentResolver(), Settings.Secure.ACCESSIBILITY_LARGE_POINTER_ICON,
diff --git a/services/core/java/com/android/server/inputmethod/HandwritingModeController.java b/services/core/java/com/android/server/inputmethod/HandwritingModeController.java
index effef47..6a0550b 100644
--- a/services/core/java/com/android/server/inputmethod/HandwritingModeController.java
+++ b/services/core/java/com/android/server/inputmethod/HandwritingModeController.java
@@ -55,8 +55,7 @@
final class HandwritingModeController {
public static final String TAG = HandwritingModeController.class.getSimpleName();
- // TODO(b/210039666): flip the flag.
- static final boolean DEBUG = true;
+ static final boolean DEBUG = false;
// Use getHandwritingBufferSize() and not this value directly.
private static final int EVENT_BUFFER_SIZE = 100;
// A longer event buffer used for handwriting delegation
diff --git a/services/core/java/com/android/server/inputmethod/ImeVisibilityStateComputer.java b/services/core/java/com/android/server/inputmethod/ImeVisibilityStateComputer.java
index 19d6fa0..f012d91 100644
--- a/services/core/java/com/android/server/inputmethod/ImeVisibilityStateComputer.java
+++ b/services/core/java/com/android/server/inputmethod/ImeVisibilityStateComputer.java
@@ -27,6 +27,7 @@
import static android.view.WindowManager.LayoutParams.SOFT_INPUT_MASK_STATE;
import static android.view.WindowManager.LayoutParams.SOFT_INPUT_STATE_UNSPECIFIED;
import static android.view.WindowManager.LayoutParams.SoftInputModeFlags;
+import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING;
import static com.android.internal.inputmethod.InputMethodDebug.softInputModeToString;
import static com.android.internal.inputmethod.SoftInputShowHideReason.REMOVE_IME_SCREENSHOT_FROM_IMMS;
@@ -195,19 +196,25 @@
mWindowManagerInternal.setInputMethodTargetChangeListener(new ImeTargetChangeListener() {
@Override
public void onImeTargetOverlayVisibilityChanged(IBinder overlayWindowToken,
- boolean visible, boolean removed) {
- mCurVisibleImeLayeringOverlay = (visible && !removed) ? overlayWindowToken : null;
+ @WindowManager.LayoutParams.WindowType int windowType, boolean visible,
+ boolean removed) {
+ mCurVisibleImeLayeringOverlay =
+ // Ignoring the starting window since it's ok to cover the IME target
+ // window in temporary without affecting the IME visibility.
+ (visible && !removed && windowType != TYPE_APPLICATION_STARTING)
+ ? overlayWindowToken : null;
}
@Override
public void onImeInputTargetVisibilityChanged(IBinder imeInputTarget,
boolean visibleRequested, boolean removed) {
- mCurVisibleImeInputTarget = (visibleRequested && !removed) ? imeInputTarget : null;
- if (mCurVisibleImeInputTarget == null && mCurVisibleImeLayeringOverlay != null) {
+ if (mCurVisibleImeInputTarget == imeInputTarget && (!visibleRequested || removed)
+ && mCurVisibleImeLayeringOverlay != null) {
mService.onApplyImeVisibilityFromComputer(imeInputTarget,
new ImeVisibilityResult(STATE_HIDE_IME_EXPLICIT,
SoftInputShowHideReason.HIDE_WHEN_INPUT_TARGET_INVISIBLE));
}
+ mCurVisibleImeInputTarget = (visibleRequested && !removed) ? imeInputTarget : null;
}
});
}
diff --git a/services/core/java/com/android/server/inputmethod/InputMethodUtils.java b/services/core/java/com/android/server/inputmethod/InputMethodUtils.java
index 17536fc..c97d8e2 100644
--- a/services/core/java/com/android/server/inputmethod/InputMethodUtils.java
+++ b/services/core/java/com/android/server/inputmethod/InputMethodUtils.java
@@ -194,8 +194,8 @@
int uid, String packageName) {
// PackageManagerInternal#getPackageUid() doesn't check MATCH_INSTANT/MATCH_APEX as of
// writing. So setting 0 should be fine.
- return packageManagerInternal.getPackageUid(packageName, 0 /* flags */,
- UserHandle.getUserId(uid)) == uid;
+ return packageManagerInternal.isSameApp(packageName, /* flags= */ 0, uid,
+ UserHandle.getUserId(uid));
}
/**
diff --git a/services/core/java/com/android/server/location/gnss/GnssLocationProvider.java b/services/core/java/com/android/server/location/gnss/GnssLocationProvider.java
index 82b4da3..ed5c130 100644
--- a/services/core/java/com/android/server/location/gnss/GnssLocationProvider.java
+++ b/services/core/java/com/android/server/location/gnss/GnssLocationProvider.java
@@ -272,6 +272,10 @@
private long mStartedChangedElapsedRealtime;
private int mFixInterval = 1000;
+ // True if handleInitialize() has finished;
+ @GuardedBy("mLock")
+ private boolean mInitialized;
+
private ProviderRequest mProviderRequest;
private int mPositionMode;
@@ -570,6 +574,9 @@
}
updateEnabled();
+ synchronized (mLock) {
+ mInitialized = true;
+ }
}
private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
@@ -1718,8 +1725,12 @@
}
// Re-register network callbacks to get an update of available networks right away.
- mNetworkConnectivityHandler.unregisterNetworkCallbacks();
- mNetworkConnectivityHandler.registerNetworkCallbacks();
+ synchronized (mLock) {
+ if (mInitialized) {
+ mNetworkConnectivityHandler.unregisterNetworkCallbacks();
+ mNetworkConnectivityHandler.registerNetworkCallbacks();
+ }
+ }
}
@Override
diff --git a/services/core/java/com/android/server/location/gnss/GnssNetworkConnectivityHandler.java b/services/core/java/com/android/server/location/gnss/GnssNetworkConnectivityHandler.java
index a7fffe2..c0cce6f 100644
--- a/services/core/java/com/android/server/location/gnss/GnssNetworkConnectivityHandler.java
+++ b/services/core/java/com/android/server/location/gnss/GnssNetworkConnectivityHandler.java
@@ -303,6 +303,7 @@
void unregisterNetworkCallbacks() {
mConnMgr.unregisterNetworkCallback(mNetworkConnectivityCallback);
+ mNetworkConnectivityCallback = null;
}
/**
diff --git a/services/core/java/com/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager.java b/services/core/java/com/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager.java
index f073756..24dbce4 100644
--- a/services/core/java/com/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager.java
+++ b/services/core/java/com/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager.java
@@ -128,18 +128,14 @@
public static synchronized RecoverableKeyStoreManager
getInstance(Context context) {
if (mInstance == null) {
- RecoverableKeyStoreDb db;
+ RecoverableKeyStoreDb db = RecoverableKeyStoreDb.newInstance(context);
RemoteLockscreenValidationSessionStorage lockscreenCheckSessions;
if (FeatureFlagUtils.isEnabled(context,
FeatureFlagUtils.SETTINGS_ENABLE_LOCKSCREEN_TRANSFER_API)) {
- // TODO(b/254335492): Remove flag check when feature is launched.
- db = RecoverableKeyStoreDb.newInstance(context, 7);
lockscreenCheckSessions = new RemoteLockscreenValidationSessionStorage();
} else {
- db = RecoverableKeyStoreDb.newInstance(context);
lockscreenCheckSessions = null;
}
-
PlatformKeyManager platformKeyManager;
ApplicationKeyStorage applicationKeyStorage;
try {
diff --git a/services/core/java/com/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb.java b/services/core/java/com/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb.java
index 4a17e9a..d881769 100644
--- a/services/core/java/com/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb.java
+++ b/services/core/java/com/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb.java
@@ -78,18 +78,6 @@
return new RecoverableKeyStoreDb(helper);
}
- /**
- * A new instance, storing the database in the user directory of {@code context}.
- *
- * @hide
- */
- public static RecoverableKeyStoreDb newInstance(Context context, int version) {
- RecoverableKeyStoreDbHelper helper = new RecoverableKeyStoreDbHelper(context, version);
- helper.setWriteAheadLoggingEnabled(true);
- helper.setIdleConnectionTimeout(IDLE_TIMEOUT_SECONDS);
- return new RecoverableKeyStoreDb(helper);
- }
-
private RecoverableKeyStoreDb(RecoverableKeyStoreDbHelper keyStoreDbHelper) {
this.mKeyStoreDbHelper = keyStoreDbHelper;
this.mTestOnlyInsecureCertificateHelper = new TestOnlyInsecureCertificateHelper();
diff --git a/services/core/java/com/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDbHelper.java b/services/core/java/com/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDbHelper.java
index 0e5e55c..386655a 100644
--- a/services/core/java/com/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDbHelper.java
+++ b/services/core/java/com/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDbHelper.java
@@ -34,7 +34,6 @@
private static final String TAG = "RecoverableKeyStoreDbHp";
// v6 - added user id serial number.
- static final int DATABASE_VERSION = 6;
// v7 - added bad guess counter for remote LSKF check;
static final int DATABASE_VERSION_7 = 7;
private static final String DATABASE_NAME = "recoverablekeystore.db";
@@ -118,23 +117,14 @@
super(context, DATABASE_NAME, null, getDbVersion(context));
}
- RecoverableKeyStoreDbHelper(Context context, int version) {
- super(context, DATABASE_NAME, null, version);
- }
-
private static int getDbVersion(Context context) {
- // TODO(b/254335492): Update to version 7 and clean up code.
- return DATABASE_VERSION;
+ return DATABASE_VERSION_7;
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(SQL_CREATE_KEYS_ENTRY);
- if (db.getVersion() == 6) { // always false
- db.execSQL(SQL_CREATE_USER_METADATA_ENTRY);
- } else {
- db.execSQL(SQL_CREATE_USER_METADATA_ENTRY_FOR_V7);
- }
+ db.execSQL(SQL_CREATE_USER_METADATA_ENTRY_FOR_V7);
db.execSQL(SQL_CREATE_RECOVERY_SERVICE_METADATA_ENTRY);
db.execSQL(SQL_CREATE_ROOT_OF_TRUST_ENTRY);
}
diff --git a/services/core/java/com/android/server/notification/ZenModeHelper.java b/services/core/java/com/android/server/notification/ZenModeHelper.java
index 8277041..f38c6c1 100644
--- a/services/core/java/com/android/server/notification/ZenModeHelper.java
+++ b/services/core/java/com/android/server/notification/ZenModeHelper.java
@@ -226,7 +226,6 @@
mPm = mContext.getPackageManager();
mHandler.postMetricsTimer();
cleanUpZenRules();
- evaluateZenMode("onSystemReady", true);
mIsBootComplete = true;
showZenUpgradeNotification(mZenMode);
}
@@ -936,7 +935,10 @@
if (policyChanged) {
dispatchOnPolicyChanged();
}
- mHandler.postApplyConfig(config, reason, triggeringComponent, setRingerMode);
+ final String val = Integer.toString(config.hashCode());
+ Global.putString(mContext.getContentResolver(), Global.ZEN_MODE_CONFIG_ETAG, val);
+ evaluateZenMode(reason, setRingerMode);
+ mConditions.evaluateConfig(config, triggeringComponent, true /*processSubscriptions*/);
return true;
} catch (SecurityException e) {
Log.wtf(TAG, "Invalid rule in config", e);
@@ -946,14 +948,6 @@
}
}
- private void applyConfig(ZenModeConfig config, String reason,
- ComponentName triggeringComponent, boolean setRingerMode) {
- final String val = Integer.toString(config.hashCode());
- Global.putString(mContext.getContentResolver(), Global.ZEN_MODE_CONFIG_ETAG, val);
- evaluateZenMode(reason, setRingerMode);
- mConditions.evaluateConfig(config, triggeringComponent, true /*processSubscriptions*/);
- }
-
private int getZenModeSetting() {
return Global.getInt(mContext.getContentResolver(), Global.ZEN_MODE, Global.ZEN_MODE_OFF);
}
@@ -987,21 +981,23 @@
mZenMode = zen;
setZenModeSetting(mZenMode);
updateConsolidatedPolicy(reason);
- updateRingerModeAffectedStreams();
- if (setRingerMode && (zen != zenBefore || (zen == Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS
- && policyHashBefore != mConsolidatedPolicy.hashCode()))) {
- applyZenToRingerMode();
- }
- applyRestrictions();
+ boolean shouldApplyToRinger = setRingerMode && (zen != zenBefore || (
+ zen == Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS
+ && policyHashBefore != mConsolidatedPolicy.hashCode()));
+ mHandler.postUpdateRingerAndAudio(shouldApplyToRinger);
if (zen != zenBefore) {
mHandler.postDispatchOnZenModeChanged();
}
}
- private void updateRingerModeAffectedStreams() {
+ private void updateRingerAndAudio(boolean shouldApplyToRinger) {
if (mAudioManager != null) {
mAudioManager.updateRingerModeAffectedStreamsInternal();
}
+ if (shouldApplyToRinger) {
+ applyZenToRingerMode();
+ }
+ applyRestrictions();
}
private int computeZenMode() {
@@ -1620,22 +1616,7 @@
private final class H extends Handler {
private static final int MSG_DISPATCH = 1;
private static final int MSG_METRICS = 2;
- private static final int MSG_APPLY_CONFIG = 4;
-
- private final class ConfigMessageData {
- public final ZenModeConfig config;
- public ComponentName triggeringComponent;
- public final String reason;
- public final boolean setRingerMode;
-
- ConfigMessageData(ZenModeConfig config, String reason,
- ComponentName triggeringComponent, boolean setRingerMode) {
- this.config = config;
- this.reason = reason;
- this.setRingerMode = setRingerMode;
- this.triggeringComponent = triggeringComponent;
- }
- }
+ private static final int MSG_RINGER_AUDIO = 5;
private static final long METRICS_PERIOD_MS = 6 * 60 * 60 * 1000;
@@ -1653,10 +1634,9 @@
sendEmptyMessageDelayed(MSG_METRICS, METRICS_PERIOD_MS);
}
- private void postApplyConfig(ZenModeConfig config, String reason,
- ComponentName triggeringComponent, boolean setRingerMode) {
- sendMessage(obtainMessage(MSG_APPLY_CONFIG,
- new ConfigMessageData(config, reason, triggeringComponent, setRingerMode)));
+ private void postUpdateRingerAndAudio(boolean shouldApplyToRinger) {
+ removeMessages(MSG_RINGER_AUDIO);
+ sendMessage(obtainMessage(MSG_RINGER_AUDIO, shouldApplyToRinger));
}
@Override
@@ -1668,10 +1648,9 @@
case MSG_METRICS:
mMetrics.emit();
break;
- case MSG_APPLY_CONFIG:
- ConfigMessageData applyConfigData = (ConfigMessageData) msg.obj;
- applyConfig(applyConfigData.config, applyConfigData.reason,
- applyConfigData.triggeringComponent, applyConfigData.setRingerMode);
+ case MSG_RINGER_AUDIO:
+ boolean shouldApplyToRinger = (boolean) msg.obj;
+ updateRingerAndAudio(shouldApplyToRinger);
}
}
}
diff --git a/services/core/java/com/android/server/pm/AppsFilterImpl.java b/services/core/java/com/android/server/pm/AppsFilterImpl.java
index ac8ff21..ba5907c 100644
--- a/services/core/java/com/android/server/pm/AppsFilterImpl.java
+++ b/services/core/java/com/android/server/pm/AppsFilterImpl.java
@@ -256,6 +256,7 @@
private final PackageManagerInternal mPmInternal;
private volatile boolean mFeatureEnabled =
PackageManager.APP_ENUMERATION_ENABLED_BY_DEFAULT;
+ @GuardedBy("mDisabledPackages")
private final ArraySet<String> mDisabledPackages = new ArraySet<>();
@Nullable
@@ -272,7 +273,9 @@
mInjector = null;
mPmInternal = null;
mFeatureEnabled = orig.mFeatureEnabled;
- mDisabledPackages.addAll(orig.mDisabledPackages);
+ synchronized (orig.mDisabledPackages) {
+ mDisabledPackages.addAll(orig.mDisabledPackages);
+ }
mLoggingEnabled = orig.mLoggingEnabled;
}
@@ -319,7 +322,9 @@
Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "packageIsEnabled");
}
try {
- return !mDisabledPackages.contains(pkg.getPackageName());
+ synchronized (mDisabledPackages) {
+ return !mDisabledPackages.contains(pkg.getPackageName());
+ }
} finally {
if (DEBUG_TRACING) {
Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
@@ -376,10 +381,12 @@
final boolean enabled = mInjector.getCompatibility().isChangeEnabledInternalNoLogging(
PackageManager.FILTER_APPLICATION_QUERY,
AndroidPackageUtils.generateAppInfoWithoutState(pkg));
- if (enabled) {
- mDisabledPackages.remove(pkg.getPackageName());
- } else {
- mDisabledPackages.add(pkg.getPackageName());
+ synchronized (mDisabledPackages) {
+ if (enabled) {
+ mDisabledPackages.remove(pkg.getPackageName());
+ } else {
+ mDisabledPackages.add(pkg.getPackageName());
+ }
}
if (mAppsFilter != null) {
mAppsFilter.onChanged();
@@ -393,7 +400,9 @@
|| setting.getPkg().isDebuggable());
enableLogging(setting.getAppId(), enableLogging);
if (removed) {
- mDisabledPackages.remove(setting.getPackageName());
+ synchronized (mDisabledPackages) {
+ mDisabledPackages.remove(setting.getPackageName());
+ }
if (mAppsFilter != null) {
mAppsFilter.onChanged();
}
diff --git a/services/core/java/com/android/server/pm/DeletePackageHelper.java b/services/core/java/com/android/server/pm/DeletePackageHelper.java
index 9a5ee81..5f52c16 100644
--- a/services/core/java/com/android/server/pm/DeletePackageHelper.java
+++ b/services/core/java/com/android/server/pm/DeletePackageHelper.java
@@ -453,6 +453,7 @@
// We need to set it back to 'installed' so the uninstall
// broadcasts will be sent correctly.
if (DEBUG_REMOVE) Slog.d(TAG, "Not installed by other users, full delete");
+ ps.setPkg(null);
ps.setInstalled(true, userId);
mPm.mSettings.writeKernelMappingLPr(ps);
clearPackageStateAndReturn = false;
diff --git a/services/core/java/com/android/server/pm/GentleUpdateHelper.java b/services/core/java/com/android/server/pm/GentleUpdateHelper.java
index babcd33..925c420 100644
--- a/services/core/java/com/android/server/pm/GentleUpdateHelper.java
+++ b/services/core/java/com/android/server/pm/GentleUpdateHelper.java
@@ -39,6 +39,7 @@
import android.text.format.DateUtils;
import android.util.Slog;
+import com.android.internal.util.IndentingPrintWriter;
import com.android.internal.util.Preconditions;
import java.util.ArrayDeque;
@@ -111,6 +112,25 @@
long timeout = mFinishTime - SystemClock.elapsedRealtime();
return Math.max(timeout, 0);
}
+
+ void dump(IndentingPrintWriter pw) {
+ pw.printPair("packageNames", packageNames);
+ pw.println();
+ pw.printPair("finishTime", mFinishTime);
+ pw.println();
+ pw.printPair("constraints notInCallRequired", constraints.isNotInCallRequired());
+ pw.println();
+ pw.printPair("constraints deviceIdleRequired", constraints.isDeviceIdleRequired());
+ pw.println();
+ pw.printPair("constraints appNotForegroundRequired",
+ constraints.isAppNotForegroundRequired());
+ pw.println();
+ pw.printPair("constraints appNotInteractingRequired",
+ constraints.isAppNotInteractingRequired());
+ pw.println();
+ pw.printPair("constraints appNotTopVisibleRequired",
+ constraints.isAppNotTopVisibleRequired());
+ }
}
private final Context mContext;
@@ -288,4 +308,24 @@
} catch (RemoteException ignore) {
}
}
+
+ void dump(IndentingPrintWriter pw) {
+ pw.println("Gentle update with constraints info:");
+ pw.increaseIndent();
+ pw.printPair("hasPendingIdleJob", mHasPendingIdleJob);
+ pw.println();
+ pw.printPair("Num of PendingIdleFutures", mPendingIdleFutures.size());
+ pw.println();
+ ArrayDeque<PendingInstallConstraintsCheck> pendingChecks = mPendingChecks.clone();
+ int size = pendingChecks.size();
+ pw.printPair("Num of PendingChecks", size);
+ pw.println();
+ pw.increaseIndent();
+ for (int i = 0; i < size; i++) {
+ pw.print(i); pw.print(":");
+ PendingInstallConstraintsCheck pendingInstallConstraintsCheck = pendingChecks.remove();
+ pendingInstallConstraintsCheck.dump(pw);
+ pw.println();
+ }
+ }
}
diff --git a/services/core/java/com/android/server/pm/InstallPackageHelper.java b/services/core/java/com/android/server/pm/InstallPackageHelper.java
index 5932929..f3d5f6e 100644
--- a/services/core/java/com/android/server/pm/InstallPackageHelper.java
+++ b/services/core/java/com/android/server/pm/InstallPackageHelper.java
@@ -654,7 +654,7 @@
synchronized (mPm.mLock) {
final Computer snapshot = mPm.snapshotComputer();
pkgSetting = mPm.mSettings.getPackageLPr(packageName);
- if (pkgSetting == null) {
+ if (pkgSetting == null || pkgSetting.getPkg() == null) {
return PackageManager.INSTALL_FAILED_INVALID_URI;
}
if (!snapshot.canViewInstantApps(callingUid, UserHandle.getUserId(callingUid))) {
diff --git a/services/core/java/com/android/server/pm/LauncherAppsService.java b/services/core/java/com/android/server/pm/LauncherAppsService.java
index 9b1a80be..0bd6dff 100644
--- a/services/core/java/com/android/server/pm/LauncherAppsService.java
+++ b/services/core/java/com/android/server/pm/LauncherAppsService.java
@@ -1330,7 +1330,11 @@
@Override
public PendingIntent getActivityLaunchIntent(String callingPackage, ComponentName component,
UserHandle user) {
- ensureShortcutPermission(callingPackage);
+ if (mContext.checkPermission(android.Manifest.permission.START_TASKS_FROM_RECENTS,
+ injectBinderCallingPid(), injectBinderCallingUid())
+ != PackageManager.PERMISSION_GRANTED) {
+ throw new SecurityException("Permission START_TASKS_FROM_RECENTS required");
+ }
if (!canAccessProfile(user.getIdentifier(), "Cannot start activity")) {
throw new ActivityNotFoundException("Activity could not be found");
}
diff --git a/services/core/java/com/android/server/pm/NoFilteringResolver.java b/services/core/java/com/android/server/pm/NoFilteringResolver.java
index 3923890..ccd5b0e 100644
--- a/services/core/java/com/android/server/pm/NoFilteringResolver.java
+++ b/services/core/java/com/android/server/pm/NoFilteringResolver.java
@@ -23,6 +23,7 @@
import android.content.pm.ResolveInfo;
import android.os.Binder;
+import com.android.internal.R;
import com.android.internal.config.appcloning.AppCloningDeviceConfigHelper;
import com.android.server.pm.pkg.PackageStateInternal;
import com.android.server.pm.resolution.ComponentResolverApi;
@@ -61,7 +62,8 @@
long flags) {
final long token = Binder.clearCallingIdentity();
try {
- return appCloningDeviceConfigHelper.getEnableAppCloningBuildingBlocks()
+ return context.getResources().getBoolean(R.bool.config_enableAppCloningBuildingBlocks)
+ && appCloningDeviceConfigHelper.getEnableAppCloningBuildingBlocks()
&& (resolveForStart || (((flags & PackageManager.MATCH_CLONE_PROFILE) != 0)
&& hasPermission(context, Manifest.permission.QUERY_CLONED_APPS)));
} finally {
diff --git a/services/core/java/com/android/server/pm/PackageInstallerService.java b/services/core/java/com/android/server/pm/PackageInstallerService.java
index f358ce7..e8bf82f 100644
--- a/services/core/java/com/android/server/pm/PackageInstallerService.java
+++ b/services/core/java/com/android/server/pm/PackageInstallerService.java
@@ -724,7 +724,6 @@
params.installFlags |= PackageManager.INSTALL_ALLOW_DOWNGRADE;
} else {
params.installFlags &= ~PackageManager.INSTALL_ALLOW_DOWNGRADE;
- params.installFlags &= ~PackageManager.INSTALL_REQUEST_DOWNGRADE;
}
if (mDisableVerificationForUid != INVALID_UID) {
@@ -1317,6 +1316,11 @@
final var snapshot = mPm.snapshotComputer();
final int callingUid = Binder.getCallingUid();
+ final var callingPackageName = snapshot.getNameForUid(callingUid);
+ if (!TextUtils.equals(callingPackageName, installerPackageName)) {
+ throw new SecurityException("The installerPackageName set by the caller doesn't match "
+ + "the caller's own package name.");
+ }
if (!PackageManagerServiceUtils.isSystemOrRootOrShell(callingUid)) {
for (var packageName : packageNames) {
var ps = snapshot.getPackageStateInternal(packageName);
@@ -1821,6 +1825,7 @@
pw.decreaseIndent();
}
mSilentUpdatePolicy.dump(pw);
+ mGentleUpdateHelper.dump(pw);
}
@VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
diff --git a/services/core/java/com/android/server/pm/PackageInstallerSession.java b/services/core/java/com/android/server/pm/PackageInstallerSession.java
index 97e7f6f..d3f7002 100644
--- a/services/core/java/com/android/server/pm/PackageInstallerSession.java
+++ b/services/core/java/com/android/server/pm/PackageInstallerSession.java
@@ -1645,13 +1645,14 @@
throw new SecurityException("link() can only be run by the system");
}
+ final File target = new File(path);
+ final File source = new File(stageDir, target.getName());
+ var sourcePath = source.getAbsolutePath();
try {
- final File target = new File(path);
- final File source = new File(stageDir, target.getName());
try {
- Os.link(path, source.getAbsolutePath());
+ Os.link(path, sourcePath);
// Grant READ access for APK to be read successfully
- Os.chmod(source.getAbsolutePath(), 0644);
+ Os.chmod(sourcePath, 0644);
} catch (ErrnoException e) {
e.rethrowAsIOException();
}
@@ -1659,6 +1660,12 @@
throw new IOException("Can't relabel file: " + source);
}
} catch (IOException e) {
+ try {
+ Os.unlink(sourcePath);
+ } catch (Exception ignored) {
+ Slog.d(TAG, "Failed to unlink session file: " + sourcePath);
+ }
+
throw ExceptionUtils.wrap(e);
}
}
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index f482046..4ddc7e4 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -6843,6 +6843,12 @@
@Override
public boolean isSameApp(@Nullable String packageName, int callingUid, int userId) {
+ return isSameApp(packageName, /*flags=*/0, callingUid, userId);
+ }
+
+ @Override
+ public boolean isSameApp(@Nullable String packageName,
+ @PackageManager.PackageInfoFlagsBits long flags, int callingUid, int userId) {
if (packageName == null) {
return false;
}
@@ -6851,7 +6857,7 @@
return packageName.equals(mRequiredSdkSandboxPackage);
}
Computer snapshot = snapshot();
- int uid = snapshot.getPackageUid(packageName, 0, userId);
+ int uid = snapshot.getPackageUid(packageName, flags, userId);
return UserHandle.isSameApp(uid, callingUid);
}
diff --git a/services/core/java/com/android/server/pm/ShortcutService.java b/services/core/java/com/android/server/pm/ShortcutService.java
index 2f0cea3..a020728 100644
--- a/services/core/java/com/android/server/pm/ShortcutService.java
+++ b/services/core/java/com/android/server/pm/ShortcutService.java
@@ -1736,10 +1736,6 @@
return;
}
- if (isCallerSystem()) {
- return; // no check
- }
-
if (!Objects.equals(callerPackage, si.getPackage())) {
android.util.EventLog.writeEvent(0x534e4554, "109824443", -1, "");
throw new SecurityException("Shortcut package name mismatch");
diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceImpl.java b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceImpl.java
index 3492b26..f41d964 100644
--- a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceImpl.java
+++ b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceImpl.java
@@ -23,7 +23,6 @@
import static android.app.AppOpsManager.MODE_ALLOWED;
import static android.app.AppOpsManager.MODE_ERRORED;
import static android.content.pm.PackageInstaller.SessionParams.PERMISSION_STATE_DEFAULT;
-import static android.content.pm.PackageInstaller.SessionParams.PERMISSION_STATE_DENIED;
import static android.content.pm.PackageInstaller.SessionParams.PERMISSION_STATE_GRANTED;
import static android.content.pm.PackageManager.FLAGS_PERMISSION_RESTRICTION_ANY_EXEMPT;
import static android.content.pm.PackageManager.FLAG_PERMISSION_APPLY_RESTRICTION;
@@ -3657,25 +3656,6 @@
for (String permission : pkg.getRequestedPermissions()) {
Integer permissionState = permissionStates.get(permission);
- if (Objects.equals(permission, Manifest.permission.USE_FULL_SCREEN_INTENT)
- && permissionState == null) {
- final PackageStateInternal ps;
- final long token = Binder.clearCallingIdentity();
- try {
- ps = mPackageManagerInt.getPackageStateInternal(pkg.getPackageName());
- } finally {
- Binder.restoreCallingIdentity(token);
- }
- final String[] useFullScreenIntentPackageNames =
- mContext.getResources().getStringArray(
- com.android.internal.R.array.config_useFullScreenIntentPackages);
- final boolean canUseFullScreenIntent = (ps != null && ps.isSystem())
- || ArrayUtils.contains(useFullScreenIntentPackageNames,
- pkg.getPackageName());
- permissionState = canUseFullScreenIntent ? PERMISSION_STATE_GRANTED
- : PERMISSION_STATE_DENIED;
- }
-
if (permissionState == null || permissionState == PERMISSION_STATE_DEFAULT) {
continue;
}
diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java
index 79eed64..d7eff52 100644
--- a/services/core/java/com/android/server/policy/PhoneWindowManager.java
+++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java
@@ -216,6 +216,7 @@
import com.android.server.display.BrightnessUtils;
import com.android.server.input.InputManagerInternal;
import com.android.server.inputmethod.InputMethodManagerInternal;
+import com.android.server.pm.UserManagerInternal;
import com.android.server.policy.KeyCombinationManager.TwoKeysCombinationRule;
import com.android.server.policy.keyguard.KeyguardServiceDelegate;
import com.android.server.policy.keyguard.KeyguardServiceDelegate.DrawnListener;
@@ -413,6 +414,7 @@
SensorPrivacyManager mSensorPrivacyManager;
DisplayManager mDisplayManager;
DisplayManagerInternal mDisplayManagerInternal;
+ UserManagerInternal mUserManagerInternal;
private WallpaperManagerInternal mWallpaperManagerInternal;
@@ -2009,6 +2011,7 @@
mSensorPrivacyManager = mContext.getSystemService(SensorPrivacyManager.class);
mDisplayManager = mContext.getSystemService(DisplayManager.class);
mDisplayManagerInternal = LocalServices.getService(DisplayManagerInternal.class);
+ mUserManagerInternal = LocalServices.getService(UserManagerInternal.class);
mPackageManager = mContext.getPackageManager();
mHasFeatureWatch = mPackageManager.hasSystemFeature(FEATURE_WATCH);
mHasFeatureLeanback = mPackageManager.hasSystemFeature(FEATURE_LEANBACK);
@@ -3093,18 +3096,21 @@
}
int screenDisplayId = displayId < 0 ? DEFAULT_DISPLAY : displayId;
+ float minLinearBrightness = mPowerManager.getBrightnessConstraint(
+ PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_MINIMUM);
+ float maxLinearBrightness = mPowerManager.getBrightnessConstraint(
+ PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_MAXIMUM);
float linearBrightness = mDisplayManager.getBrightness(screenDisplayId);
float gammaBrightness = BrightnessUtils.convertLinearToGamma(linearBrightness);
float adjustedGammaBrightness =
gammaBrightness + 1f / BRIGHTNESS_STEPS * direction;
-
+ adjustedGammaBrightness = MathUtils.constrain(adjustedGammaBrightness, 0f,
+ 1f);
float adjustedLinearBrightness = BrightnessUtils.convertGammaToLinear(
adjustedGammaBrightness);
-
- adjustedLinearBrightness = MathUtils.constrain(adjustedLinearBrightness, 0f,
- 1f);
-
+ adjustedLinearBrightness = MathUtils.constrain(adjustedLinearBrightness,
+ minLinearBrightness, maxLinearBrightness);
mDisplayManager.setBrightness(screenDisplayId, adjustedLinearBrightness);
startActivityAsUser(new Intent(Intent.ACTION_SHOW_BRIGHTNESS_DIALOG),
@@ -5742,8 +5748,9 @@
Log.d(TAG, "startDockOrHome: startReason= " + startReason);
}
+ int userId = mUserManagerInternal.getUserAssignedToDisplay(displayId);
// Start home.
- mActivityTaskManagerInternal.startHomeOnDisplay(mCurrentUserId, startReason,
+ mActivityTaskManagerInternal.startHomeOnDisplay(userId, startReason,
displayId, true /* allowInstrumenting */, fromHomeKey);
}
diff --git a/services/core/java/com/android/server/power/stats/BatteryStatsImpl.java b/services/core/java/com/android/server/power/stats/BatteryStatsImpl.java
index 661715c..93d6676 100644
--- a/services/core/java/com/android/server/power/stats/BatteryStatsImpl.java
+++ b/services/core/java/com/android/server/power/stats/BatteryStatsImpl.java
@@ -4745,17 +4745,19 @@
requestWakelockCpuUpdate();
}
- getUidStatsLocked(mappedUid, elapsedRealtimeMs, uptimeMs)
- .noteStartWakeLocked(pid, name, type, elapsedRealtimeMs);
+ Uid uidStats = getUidStatsLocked(mappedUid, elapsedRealtimeMs, uptimeMs);
+ uidStats.noteStartWakeLocked(pid, name, type, elapsedRealtimeMs);
+
+ int procState = uidStats.mProcessState;
if (wc != null) {
FrameworkStatsLog.write(FrameworkStatsLog.WAKELOCK_STATE_CHANGED, wc.getUids(),
wc.getTags(), getPowerManagerWakeLockLevel(type), name,
- FrameworkStatsLog.WAKELOCK_STATE_CHANGED__STATE__ACQUIRE);
+ FrameworkStatsLog.WAKELOCK_STATE_CHANGED__STATE__ACQUIRE, procState);
} else {
FrameworkStatsLog.write_non_chained(FrameworkStatsLog.WAKELOCK_STATE_CHANGED,
mapIsolatedUid(uid), null, getPowerManagerWakeLockLevel(type), name,
- FrameworkStatsLog.WAKELOCK_STATE_CHANGED__STATE__ACQUIRE);
+ FrameworkStatsLog.WAKELOCK_STATE_CHANGED__STATE__ACQUIRE, procState);
}
}
}
@@ -4796,16 +4798,18 @@
requestWakelockCpuUpdate();
}
- getUidStatsLocked(mappedUid, elapsedRealtimeMs, uptimeMs)
- .noteStopWakeLocked(pid, name, type, elapsedRealtimeMs);
+ Uid uidStats = getUidStatsLocked(mappedUid, elapsedRealtimeMs, uptimeMs);
+ uidStats.noteStopWakeLocked(pid, name, type, elapsedRealtimeMs);
+
+ int procState = uidStats.mProcessState;
if (wc != null) {
FrameworkStatsLog.write(FrameworkStatsLog.WAKELOCK_STATE_CHANGED, wc.getUids(),
wc.getTags(), getPowerManagerWakeLockLevel(type), name,
- FrameworkStatsLog.WAKELOCK_STATE_CHANGED__STATE__RELEASE);
+ FrameworkStatsLog.WAKELOCK_STATE_CHANGED__STATE__RELEASE, procState);
} else {
FrameworkStatsLog.write_non_chained(FrameworkStatsLog.WAKELOCK_STATE_CHANGED,
mapIsolatedUid(uid), null, getPowerManagerWakeLockLevel(type), name,
- FrameworkStatsLog.WAKELOCK_STATE_CHANGED__STATE__RELEASE);
+ FrameworkStatsLog.WAKELOCK_STATE_CHANGED__STATE__RELEASE, procState);
}
if (mappedUid != uid) {
diff --git a/services/core/java/com/android/server/power/stats/wakeups/CpuWakeupStats.java b/services/core/java/com/android/server/power/stats/wakeups/CpuWakeupStats.java
index eb6d28e..73ab782 100644
--- a/services/core/java/com/android/server/power/stats/wakeups/CpuWakeupStats.java
+++ b/services/core/java/com/android/server/power/stats/wakeups/CpuWakeupStats.java
@@ -403,10 +403,12 @@
* This class stores recent unattributed activity history per subsystem.
* The activity is stored as a mapping of subsystem to timestamp to uid to procstate.
*/
- private static final class WakingActivityHistory {
+ @VisibleForTesting
+ static final class WakingActivityHistory {
private static final long WAKING_ACTIVITY_RETENTION_MS = TimeUnit.MINUTES.toMillis(10);
- private SparseArray<TimeSparseArray<SparseIntArray>> mWakingActivity =
+ @VisibleForTesting
+ final SparseArray<TimeSparseArray<SparseIntArray>> mWakingActivity =
new SparseArray<>();
void recordActivity(int subsystem, long elapsedRealtime, SparseIntArray uidProcStates) {
@@ -430,7 +432,6 @@
uidsToBlame.put(uid, uidProcStates.valueAt(i));
}
}
- wakingActivity.put(elapsedRealtime, uidsToBlame);
}
// Limit activity history per subsystem to the last WAKING_ACTIVITY_RETENTION_MS.
// Note that the last activity is always present, even if it occurred before
diff --git a/services/core/java/com/android/server/security/rkp/RemoteProvisioningRegistration.java b/services/core/java/com/android/server/security/rkp/RemoteProvisioningRegistration.java
index f586126..7d148f6 100644
--- a/services/core/java/com/android/server/security/rkp/RemoteProvisioningRegistration.java
+++ b/services/core/java/com/android/server/security/rkp/RemoteProvisioningRegistration.java
@@ -17,6 +17,7 @@
package com.android.server.security.rkp;
import android.os.CancellationSignal;
+import android.os.IBinder;
import android.os.OperationCanceledException;
import android.os.OutcomeReceiver;
import android.security.rkp.IGetKeyCallback;
@@ -39,23 +40,23 @@
*/
final class RemoteProvisioningRegistration extends IRegistration.Stub {
static final String TAG = RemoteProvisioningService.TAG;
- private final ConcurrentHashMap<IGetKeyCallback, CancellationSignal> mGetKeyOperations =
+ private final ConcurrentHashMap<IBinder, CancellationSignal> mGetKeyOperations =
new ConcurrentHashMap<>();
- private final Set<IStoreUpgradedKeyCallback> mStoreUpgradedKeyOperations =
- ConcurrentHashMap.newKeySet();
+ private final Set<IBinder> mStoreUpgradedKeyOperations = ConcurrentHashMap.newKeySet();
private final RegistrationProxy mRegistration;
private final Executor mExecutor;
private class GetKeyReceiver implements OutcomeReceiver<RemotelyProvisionedKey, Exception> {
IGetKeyCallback mCallback;
+
GetKeyReceiver(IGetKeyCallback callback) {
mCallback = callback;
}
@Override
public void onResult(RemotelyProvisionedKey result) {
- mGetKeyOperations.remove(mCallback);
- Log.i(TAG, "Successfully fetched key for client " + mCallback.hashCode());
+ mGetKeyOperations.remove(mCallback.asBinder());
+ Log.i(TAG, "Successfully fetched key for client " + mCallback.asBinder().hashCode());
android.security.rkp.RemotelyProvisionedKey parcelable =
new android.security.rkp.RemotelyProvisionedKey();
parcelable.keyBlob = result.getKeyBlob();
@@ -65,19 +66,21 @@
@Override
public void onError(Exception e) {
- mGetKeyOperations.remove(mCallback);
+ mGetKeyOperations.remove(mCallback.asBinder());
if (e instanceof OperationCanceledException) {
- Log.i(TAG, "Operation cancelled for client " + mCallback.hashCode());
+ Log.i(TAG, "Operation cancelled for client " + mCallback.asBinder().hashCode());
wrapCallback(mCallback::onCancel);
} else if (e instanceof RkpProxyException) {
- Log.e(TAG, "RKP error fetching key for client " + mCallback.hashCode() + ": "
+ Log.e(TAG, "RKP error fetching key for client " + mCallback.asBinder().hashCode()
+ + ": "
+ e.getMessage());
RkpProxyException rkpException = (RkpProxyException) e;
wrapCallback(() -> mCallback.onError(toGetKeyError(rkpException),
e.getMessage()));
} else {
- Log.e(TAG, "Unknown error fetching key for client " + mCallback.hashCode() + ": "
- + e.getMessage());
+ Log.e(TAG,
+ "Unknown error fetching key for client " + mCallback.asBinder().hashCode()
+ + ": " + e.getMessage());
wrapCallback(() -> mCallback.onError(IGetKeyCallback.ErrorCode.ERROR_UNKNOWN,
e.getMessage()));
}
@@ -108,20 +111,23 @@
@Override
public void getKey(int keyId, IGetKeyCallback callback) {
CancellationSignal cancellationSignal = new CancellationSignal();
- if (mGetKeyOperations.putIfAbsent(callback, cancellationSignal) != null) {
- Log.e(TAG, "Client can only request one call at a time " + callback.hashCode());
+ if (mGetKeyOperations.putIfAbsent(callback.asBinder(), cancellationSignal) != null) {
+ Log.e(TAG,
+ "Client can only request one call at a time " + callback.asBinder().hashCode());
throw new IllegalArgumentException(
"Callback is already associated with an existing operation: "
- + callback.hashCode());
+ + callback.asBinder().hashCode());
}
try {
- Log.i(TAG, "Fetching key " + keyId + " for client " + callback.hashCode());
+ Log.i(TAG, "Fetching key " + keyId + " for client " + callback.asBinder().hashCode());
mRegistration.getKeyAsync(keyId, cancellationSignal, mExecutor,
new GetKeyReceiver(callback));
} catch (Exception e) {
- Log.e(TAG, "getKeyAsync threw an exception for client " + callback.hashCode(), e);
- mGetKeyOperations.remove(callback);
+ Log.e(TAG,
+ "getKeyAsync threw an exception for client " + callback.asBinder().hashCode(),
+ e);
+ mGetKeyOperations.remove(callback.asBinder());
wrapCallback(() -> callback.onError(IGetKeyCallback.ErrorCode.ERROR_UNKNOWN,
e.getMessage()));
}
@@ -129,23 +135,23 @@
@Override
public void cancelGetKey(IGetKeyCallback callback) {
- CancellationSignal cancellationSignal = mGetKeyOperations.remove(callback);
+ CancellationSignal cancellationSignal = mGetKeyOperations.remove(callback.asBinder());
if (cancellationSignal == null) {
throw new IllegalArgumentException(
- "Invalid client in cancelGetKey: " + callback.hashCode());
+ "Invalid client in cancelGetKey: " + callback.asBinder().hashCode());
}
- Log.i(TAG, "Requesting cancellation for client " + callback.hashCode());
+ Log.i(TAG, "Requesting cancellation for client " + callback.asBinder().hashCode());
cancellationSignal.cancel();
}
@Override
public void storeUpgradedKeyAsync(byte[] oldKeyBlob, byte[] newKeyBlob,
IStoreUpgradedKeyCallback callback) {
- if (!mStoreUpgradedKeyOperations.add(callback)) {
+ if (!mStoreUpgradedKeyOperations.add(callback.asBinder())) {
throw new IllegalArgumentException(
"Callback is already associated with an existing operation: "
- + callback.hashCode());
+ + callback.asBinder().hashCode());
}
try {
@@ -153,20 +159,20 @@
new OutcomeReceiver<>() {
@Override
public void onResult(Void result) {
- mStoreUpgradedKeyOperations.remove(callback);
+ mStoreUpgradedKeyOperations.remove(callback.asBinder());
wrapCallback(callback::onSuccess);
}
@Override
public void onError(Exception e) {
- mStoreUpgradedKeyOperations.remove(callback);
+ mStoreUpgradedKeyOperations.remove(callback.asBinder());
wrapCallback(() -> callback.onError(e.getMessage()));
}
});
} catch (Exception e) {
Log.e(TAG, "storeUpgradedKeyAsync threw an exception for client "
- + callback.hashCode(), e);
- mStoreUpgradedKeyOperations.remove(callback);
+ + callback.asBinder().hashCode(), e);
+ mStoreUpgradedKeyOperations.remove(callback.asBinder());
wrapCallback(() -> callback.onError(e.getMessage()));
}
}
diff --git a/services/core/java/com/android/server/security/rkp/RemoteProvisioningService.java b/services/core/java/com/android/server/security/rkp/RemoteProvisioningService.java
index 97e4636..2bd7383 100644
--- a/services/core/java/com/android/server/security/rkp/RemoteProvisioningService.java
+++ b/services/core/java/com/android/server/security/rkp/RemoteProvisioningService.java
@@ -61,7 +61,7 @@
try {
mCallback.onSuccess(new RemoteProvisioningRegistration(registration, mExecutor));
} catch (RemoteException e) {
- Log.e(TAG, "Error calling success callback " + mCallback.hashCode(), e);
+ Log.e(TAG, "Error calling success callback " + mCallback.asBinder().hashCode(), e);
}
}
@@ -70,7 +70,7 @@
try {
mCallback.onError(error.toString());
} catch (RemoteException e) {
- Log.e(TAG, "Error calling error callback " + mCallback.hashCode(), e);
+ Log.e(TAG, "Error calling error callback " + mCallback.asBinder().hashCode(), e);
}
}
}
diff --git a/services/core/java/com/android/server/trust/TrustManagerService.java b/services/core/java/com/android/server/trust/TrustManagerService.java
index 1c89ec4..3c5ad2a 100644
--- a/services/core/java/com/android/server/trust/TrustManagerService.java
+++ b/services/core/java/com/android/server/trust/TrustManagerService.java
@@ -1573,7 +1573,7 @@
@Override
public void reportUserMayRequestUnlock(int userId) throws RemoteException {
enforceReportPermission();
- mHandler.obtainMessage(MSG_USER_MAY_REQUEST_UNLOCK, userId).sendToTarget();
+ mHandler.obtainMessage(MSG_USER_MAY_REQUEST_UNLOCK, userId, /*arg2=*/ 0).sendToTarget();
}
@Override
diff --git a/services/core/java/com/android/server/tv/TvInputManagerService.java b/services/core/java/com/android/server/tv/TvInputManagerService.java
index 88c9042..1f5c1cf 100644
--- a/services/core/java/com/android/server/tv/TvInputManagerService.java
+++ b/services/core/java/com/android/server/tv/TvInputManagerService.java
@@ -2629,6 +2629,10 @@
getSessionLocked(sessionState).notifyAdBufferReady(buffer);
} catch (RemoteException | SessionNotFoundException e) {
Slog.e(TAG, "error in notifyAdBuffer", e);
+ } finally {
+ if (buffer != null) {
+ buffer.getSharedMemory().close();
+ }
}
}
} finally {
@@ -3891,10 +3895,13 @@
return;
}
try {
- mSessionState.client.onAdBufferConsumed(
- buffer, mSessionState.seq);
+ mSessionState.client.onAdBufferConsumed(buffer, mSessionState.seq);
} catch (RemoteException e) {
Slog.e(TAG, "error in onAdBufferConsumed", e);
+ } finally {
+ if (buffer != null) {
+ buffer.getSharedMemory().close();
+ }
}
}
}
diff --git a/services/core/java/com/android/server/tv/interactive/TvInteractiveAppManagerService.java b/services/core/java/com/android/server/tv/interactive/TvInteractiveAppManagerService.java
index 80cb085..e6273d3 100644
--- a/services/core/java/com/android/server/tv/interactive/TvInteractiveAppManagerService.java
+++ b/services/core/java/com/android/server/tv/interactive/TvInteractiveAppManagerService.java
@@ -2007,6 +2007,10 @@
getSessionLocked(sessionState).notifyAdBufferConsumed(buffer);
} catch (RemoteException | SessionNotFoundException e) {
Slogf.e(TAG, "error in notifyAdBufferConsumed", e);
+ } finally {
+ if (buffer != null) {
+ buffer.getSharedMemory().close();
+ }
}
}
} finally {
@@ -3063,6 +3067,10 @@
mSessionState.mClient.onAdBufferReady(buffer, mSessionState.mSeq);
} catch (RemoteException e) {
Slogf.e(TAG, "error in onAdBuffer", e);
+ } finally {
+ if (buffer != null) {
+ buffer.getSharedMemory().close();
+ }
}
}
}
diff --git a/services/core/java/com/android/server/wallpaper/WallpaperManagerInternal.java b/services/core/java/com/android/server/wallpaper/WallpaperManagerInternal.java
index 3699557..25c0750 100644
--- a/services/core/java/com/android/server/wallpaper/WallpaperManagerInternal.java
+++ b/services/core/java/com/android/server/wallpaper/WallpaperManagerInternal.java
@@ -33,4 +33,7 @@
/** Notifies when the screen starts turning on and is not yet visible to the user. */
public abstract void onScreenTurningOn(int displayId);
+
+ /** Notifies when the keyguard is going away. Sent right after the bouncer is gone. */
+ public abstract void onKeyguardGoingAway();
}
diff --git a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
index 4c8f513..8d392a1 100644
--- a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
+++ b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
@@ -514,6 +514,7 @@
} catch (RemoteException e) {
// if this fails we don't really care; the setting app may just
// have crashed and that sort of thing is a fact of life.
+ Slog.w(TAG, "onWallpaperChanged threw an exception", e);
}
}
}
@@ -524,7 +525,7 @@
try {
cb.onWallpaperChanged();
} catch (RemoteException e) {
- // Oh well it went away; no big deal
+ Slog.w(TAG, "Failed to notify keyguard callback about wallpaper changes", e);
}
}
}
@@ -620,6 +621,7 @@
} catch (RemoteException e) {
// Callback is gone, it's not necessary to unregister it since
// RemoteCallbackList#getBroadcastItem will take care of it.
+ Slog.w(TAG, "onWallpaperColorsChanged() threw an exception", e);
}
}
@@ -628,7 +630,7 @@
try {
keyguardListener.onWallpaperColorsChanged(wallpaperColors, which, userId);
} catch (RemoteException e) {
- // Oh well it went away; no big deal
+ Slog.w(TAG, "keyguardListener.onWallpaperColorsChanged threw an exception", e);
}
}
}
@@ -965,7 +967,7 @@
connection.mService.detach(mToken);
}
} catch (RemoteException e) {
- Slog.w(TAG, "connection.mService.destroy() threw a RemoteException");
+ Slog.w(TAG, "connection.mService.destroy() threw a RemoteException", e);
}
mEngine = null;
}
@@ -1117,7 +1119,7 @@
try {
cb.onColorsChanged(area, colors);
} catch (RemoteException e) {
- e.printStackTrace();
+ Slog.w(TAG, "Failed to notify local color callbacks", e);
}
};
synchronized (mLock) {
@@ -1316,7 +1318,7 @@
try {
mReply.sendResult(null);
} catch (RemoteException e) {
- Slog.d(TAG, "failed to send callback!", e);
+ Slog.d(TAG, "Failed to send callback!", e);
} finally {
Binder.restoreCallingIdentity(ident);
}
@@ -1583,7 +1585,7 @@
mShuttingDown = false;
mImageWallpaper = ComponentName.unflattenFromString(
context.getResources().getString(R.string.image_wallpaper_component));
- mDefaultWallpaperComponent = WallpaperManager.getDefaultWallpaperComponent(context);
+ mDefaultWallpaperComponent = WallpaperManager.getCmfDefaultWallpaperComponent(context);
mWindowManagerInternal = LocalServices.getService(WindowManagerInternal.class);
mPackageManagerInternal = LocalServices.getService(PackageManagerInternal.class);
mIPackageManager = AppGlobals.getPackageManager();
@@ -1617,6 +1619,11 @@
public void onScreenTurningOn(int displayId) {
notifyScreenTurningOn(displayId);
}
+
+ @Override
+ public void onKeyguardGoingAway() {
+ notifyKeyguardGoingAway();
+ }
}
void initialize() {
@@ -1904,7 +1911,8 @@
try {
si = mIPackageManager.getServiceInfo(cname,
PackageManager.MATCH_DIRECT_BOOT_UNAWARE, wallpaper.userId);
- } catch (RemoteException ignored) {
+ } catch (RemoteException e) {
+ Slog.w(TAG, "Failure starting previous wallpaper; clearing", e);
}
if (mIsLockscreenLiveWallpaperEnabled) {
@@ -1913,7 +1921,6 @@
}
if (si == null) {
- Slog.w(TAG, "Failure starting previous wallpaper; clearing");
clearWallpaperLocked(false, FLAG_SYSTEM, wallpaper.userId, reply);
} else {
Slog.w(TAG, "Wallpaper isn't direct boot aware; using fallback until unlocked");
@@ -1937,8 +1944,6 @@
WallpaperData wallpaper, IRemoteCallback reply, ServiceInfo serviceInfo) {
if (serviceInfo == null) {
- Slog.w(TAG, "Failure starting previous wallpaper; clearing");
-
if (wallpaper.mWhich == (FLAG_LOCK | FLAG_SYSTEM)) {
clearWallpaperLocked(false, FLAG_SYSTEM, wallpaper.userId, null);
clearWallpaperLocked(false, FLAG_LOCK, wallpaper.userId, reply);
@@ -2037,7 +2042,7 @@
try {
cb.onWallpaperChanged();
} catch (RemoteException e) {
- // Oh well it went away; no big deal
+ Slog.w(TAG, "Failed to notify keyguard after wallpaper clear", e);
}
}
saveSettingsLocked(userId);
@@ -2069,6 +2074,7 @@
try {
reply.sendResult(null);
} catch (RemoteException e1) {
+ Slog.w(TAG, "Failed to notify callback after wallpaper clear", e1);
}
}
} finally {
@@ -2163,6 +2169,7 @@
try {
engine.setDesiredSize(width, height);
} catch (RemoteException e) {
+ Slog.w(TAG, "Failed to set desired size", e);
}
notifyCallbacksLocked(wallpaper);
} else if (wallpaper.connection.mService != null && connector != null) {
@@ -2258,6 +2265,7 @@
try {
engine.setDisplayPadding(padding);
} catch (RemoteException e) {
+ Slog.w(TAG, "Failed to set display padding", e);
}
notifyCallbacksLocked(wallpaper);
} else if (wallpaper.connection.mService != null && connector != null) {
@@ -2493,7 +2501,7 @@
try {
engine.setInAmbientMode(inAmbientMode, animationDuration);
} catch (RemoteException e) {
- // Cannot talk to wallpaper engine.
+ Slog.w(TAG, "Failed to set ambient mode", e);
}
}
}
@@ -2527,7 +2535,7 @@
displayConnector.mEngine.dispatchWallpaperCommand(
WallpaperManager.COMMAND_WAKING_UP, x, y, -1, extras);
} catch (RemoteException e) {
- e.printStackTrace();
+ Slog.w(TAG, "Failed to dispatch COMMAND_WAKING_UP", e);
}
}
});
@@ -2566,7 +2574,7 @@
WallpaperManager.COMMAND_GOING_TO_SLEEP, x, y, -1,
extras);
} catch (RemoteException e) {
- e.printStackTrace();
+ Slog.w(TAG, "Failed to dispatch COMMAND_GOING_TO_SLEEP", e);
}
}
});
@@ -2577,8 +2585,7 @@
/**
* Propagates screen turned on event to wallpaper engine(s).
*/
- @Override
- public void notifyScreenTurnedOn(int displayId) {
+ private void notifyScreenTurnedOn(int displayId) {
synchronized (mLock) {
if (mIsLockscreenLiveWallpaperEnabled) {
for (WallpaperData data : getActiveWallpapers()) {
@@ -2606,20 +2613,17 @@
try {
engine.onScreenTurnedOn();
} catch (RemoteException e) {
- e.printStackTrace();
+ Slog.w(TAG, "Failed to notify that the screen turned on", e);
}
}
}
}
}
-
-
/**
* Propagate screen turning on event to wallpaper engine(s).
*/
- @Override
- public void notifyScreenTurningOn(int displayId) {
+ private void notifyScreenTurningOn(int displayId) {
synchronized (mLock) {
if (mIsLockscreenLiveWallpaperEnabled) {
for (WallpaperData data : getActiveWallpapers()) {
@@ -2647,13 +2651,52 @@
try {
engine.onScreenTurningOn();
} catch (RemoteException e) {
- e.printStackTrace();
+ Slog.w(TAG, "Failed to notify that the screen is turning on", e);
}
}
}
}
}
+ /**
+ * Propagate a keyguard going away event to the wallpaper engine.
+ */
+ private void notifyKeyguardGoingAway() {
+ synchronized (mLock) {
+ if (mIsLockscreenLiveWallpaperEnabled) {
+ for (WallpaperData data : getActiveWallpapers()) {
+ data.connection.forEachDisplayConnector(displayConnector -> {
+ if (displayConnector.mEngine != null) {
+ try {
+ displayConnector.mEngine.dispatchWallpaperCommand(
+ WallpaperManager.COMMAND_KEYGUARD_GOING_AWAY,
+ -1, -1, -1, new Bundle());
+ } catch (RemoteException e) {
+ Slog.w(TAG, "Failed to notify that the keyguard is going away", e);
+ }
+ }
+ });
+ }
+ return;
+ }
+
+ final WallpaperData data = mWallpaperMap.get(mCurrentUserId);
+ if (data != null && data.connection != null) {
+ data.connection.forEachDisplayConnector(displayConnector -> {
+ if (displayConnector.mEngine != null) {
+ try {
+ displayConnector.mEngine.dispatchWallpaperCommand(
+ WallpaperManager.COMMAND_KEYGUARD_GOING_AWAY,
+ -1, -1, -1, new Bundle());
+ } catch (RemoteException e) {
+ Slog.w(TAG, "Failed to notify that the keyguard is going away", e);
+ }
+ }
+ });
+ }
+ }
+ }
+
@Override
public boolean setLockWallpaperCallback(IWallpaperManagerCallback cb) {
checkPermission(android.Manifest.permission.INTERNAL_SYSTEM_WINDOW);
@@ -2745,6 +2788,20 @@
}
/**
+ * Returns true if there is a static wallpaper on the specified screen. With which=FLAG_LOCK,
+ * always return false if the lockscreen doesn't run its own wallpaper engine.
+ */
+ @Override
+ public boolean isStaticWallpaper(int which) {
+ synchronized (mLock) {
+ WallpaperData wallpaperData = (which == FLAG_LOCK ? mLockWallpaperMap : mWallpaperMap)
+ .get(mCurrentUserId);
+ if (wallpaperData == null) return false;
+ return mImageWallpaper.equals(wallpaperData.wallpaperComponent);
+ }
+ }
+
+ /**
* Sets wallpaper dim amount for the calling UID. This applies to all destinations (home, lock)
* with an active wallpaper engine.
*
@@ -2795,10 +2852,8 @@
try {
connector.mEngine.applyDimming(maxDimAmount);
} catch (RemoteException e) {
- Slog.w(TAG,
- "Can't apply dimming on wallpaper display "
- + "connector",
- e);
+ Slog.w(TAG, "Can't apply dimming on wallpaper display "
+ + "connector", e);
}
}
});
@@ -3515,6 +3570,7 @@
try {
wallpaper.connection.mReply.sendResult(null);
} catch (RemoteException e) {
+ Slog.w(TAG, "Error sending reply to wallpaper before disconnect", e);
}
wallpaper.connection.mReply = null;
}
@@ -3582,6 +3638,7 @@
// The RemoteCallbackList will take care of removing
// the dead object for us.
+ Slog.w(TAG, "Failed to notify callbacks about wallpaper changes", e);
}
}
wallpaper.callbacks.finishBroadcast();
diff --git a/services/core/java/com/android/server/wm/ActivityClientController.java b/services/core/java/com/android/server/wm/ActivityClientController.java
index c40d72c..6b90181 100644
--- a/services/core/java/com/android/server/wm/ActivityClientController.java
+++ b/services/core/java/com/android/server/wm/ActivityClientController.java
@@ -1159,9 +1159,10 @@
}
return;
}
+ transition.collect(topFocusedRootTask);
+ executeMultiWindowFullscreenRequest(fullscreenRequest, topFocusedRootTask);
r.mTransitionController.requestStartTransition(transition, topFocusedRootTask,
null /* remoteTransition */, null /* displayChange */);
- executeMultiWindowFullscreenRequest(fullscreenRequest, topFocusedRootTask);
transition.setReady(topFocusedRootTask, true);
}
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java
index 7d0b4c4..1e50f3d 100644
--- a/services/core/java/com/android/server/wm/ActivityRecord.java
+++ b/services/core/java/com/android/server/wm/ActivityRecord.java
@@ -1640,7 +1640,7 @@
if (isState(RESUMED)) {
newParent.setResumedActivity(this, "onParentChanged");
}
- mLetterboxUiController.onActivityParentChanged(newParent);
+ mLetterboxUiController.updateInheritedLetterbox();
}
if (rootTask != null && rootTask.topRunningActivity() == this) {
@@ -7942,9 +7942,7 @@
}
// This is necessary in order to avoid going into size compat mode when the orientation
// change request comes from the app
- if (mWmService.mLetterboxConfiguration
- .isSizeCompatModeDisabledAfterOrientationChangeFromApp()
- && getRequestedConfigurationOrientation(false, requestedOrientation)
+ if (getRequestedConfigurationOrientation(false, requestedOrientation)
!= getRequestedConfigurationOrientation(false /*forDisplay */)) {
// Do not change the requested configuration now, because this will be done when setting
// the orientation below with the new mCompatDisplayInsets
diff --git a/services/core/java/com/android/server/wm/ActivityStarter.java b/services/core/java/com/android/server/wm/ActivityStarter.java
index 19a12f2..e8acbe4 100644
--- a/services/core/java/com/android/server/wm/ActivityStarter.java
+++ b/services/core/java/com/android/server/wm/ActivityStarter.java
@@ -2909,6 +2909,9 @@
private void setTargetRootTaskIfNeeded(ActivityRecord intentActivity) {
intentActivity.getTaskFragment().clearLastPausedActivity();
Task intentTask = intentActivity.getTask();
+ // The intent task might be reparented while in getOrCreateRootTask, caches the original
+ // root task to distinguish if it is moving to front or not.
+ final Task origRootTask = intentTask != null ? intentTask.getRootTask() : null;
if (mTargetRootTask == null) {
// Update launch target task when it is not indicated.
@@ -2941,7 +2944,8 @@
? null : focusRootTask.topRunningNonDelayedActivityLocked(mNotTop);
final Task topTask = curTop != null ? curTop.getTask() : null;
differentTopTask = topTask != intentTask
- || (focusRootTask != null && topTask != focusRootTask.getTopMostTask());
+ || (focusRootTask != null && topTask != focusRootTask.getTopMostTask())
+ || (focusRootTask != null && focusRootTask != origRootTask);
} else {
// The existing task should always be different from those in other displays.
differentTopTask = true;
diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java b/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java
index 3f4a775..7926216 100644
--- a/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java
+++ b/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java
@@ -178,6 +178,9 @@
/**
* Returns the top activity from each of the currently visible root tasks, and the related task
* id. The first entry will be the focused activity.
+ *
+ * <p>NOTE: If the top activity is in the split screen, the other activities in the same split
+ * screen will also be returned.
*/
public abstract List<ActivityAssistInfo> getTopVisibleActivities();
diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
index b816dad..f35343c 100644
--- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
+++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
@@ -276,6 +276,7 @@
import com.android.server.statusbar.StatusBarManagerInternal;
import com.android.server.uri.NeededUriGrants;
import com.android.server.uri.UriGrantsManagerInternal;
+import com.android.server.wallpaper.WallpaperManagerInternal;
import java.io.BufferedReader;
import java.io.File;
@@ -365,6 +366,7 @@
private ComponentName mSysUiServiceComponent;
private PermissionPolicyInternal mPermissionPolicyInternal;
private StatusBarManagerInternal mStatusBarManagerInternal;
+ private WallpaperManagerInternal mWallpaperManagerInternal;
@VisibleForTesting
final ActivityTaskManagerInternal mInternal;
private PowerManagerInternal mPowerManagerInternal;
@@ -3553,6 +3555,10 @@
mRootWindowContainer.forAllDisplays(displayContent -> {
mKeyguardController.keyguardGoingAway(displayContent.getDisplayId(), flags);
});
+ WallpaperManagerInternal wallpaperManagerInternal = getWallpaperManagerInternal();
+ if (wallpaperManagerInternal != null) {
+ wallpaperManagerInternal.onKeyguardGoingAway();
+ }
}
} finally {
Binder.restoreCallingIdentity(token);
@@ -5232,6 +5238,13 @@
return mStatusBarManagerInternal;
}
+ WallpaperManagerInternal getWallpaperManagerInternal() {
+ if (mWallpaperManagerInternal == null) {
+ mWallpaperManagerInternal = LocalServices.getService(WallpaperManagerInternal.class);
+ }
+ return mWallpaperManagerInternal;
+ }
+
AppWarnings getAppWarningsLocked() {
return mAppWarnings;
}
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java
index 57812c1..fa5da30 100644
--- a/services/core/java/com/android/server/wm/DisplayContent.java
+++ b/services/core/java/com/android/server/wm/DisplayContent.java
@@ -1884,7 +1884,7 @@
/** Returns {@code true} if the IME is possible to show on the launching activity. */
boolean mayImeShowOnLaunchingActivity(@NonNull ActivityRecord r) {
- final WindowState win = r.findMainWindow();
+ final WindowState win = r.findMainWindow(false /* exclude starting window */);
if (win == null) {
return false;
}
diff --git a/services/core/java/com/android/server/wm/DisplayPolicy.java b/services/core/java/com/android/server/wm/DisplayPolicy.java
index be52e5a..911591c 100644
--- a/services/core/java/com/android/server/wm/DisplayPolicy.java
+++ b/services/core/java/com/android/server/wm/DisplayPolicy.java
@@ -22,6 +22,7 @@
import static android.view.InsetsFrameProvider.SOURCE_CONTAINER_BOUNDS;
import static android.view.InsetsFrameProvider.SOURCE_DISPLAY;
import static android.view.InsetsFrameProvider.SOURCE_FRAME;
+import static android.view.ViewRootImpl.CLIENT_TRANSIENT;
import static android.view.WindowInsetsController.APPEARANCE_LIGHT_NAVIGATION_BARS;
import static android.view.WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS;
import static android.view.WindowInsetsController.APPEARANCE_LOW_PROFILE_BARS;
@@ -184,7 +185,6 @@
private final boolean mCarDockEnablesAccelerometer;
private final boolean mDeskDockEnablesAccelerometer;
- private final boolean mDeskDockRespectsNoSensorAndLockedWithoutAccelerometer;
private final AccessibilityManager mAccessibilityManager;
private final ImmersiveModeConfirmation mImmersiveModeConfirmation;
private final ScreenshotHelper mScreenshotHelper;
@@ -214,7 +214,8 @@
}
}
- private final SystemGesturesPointerEventListener mSystemGestures;
+ // Will be null in client transient mode.
+ private SystemGesturesPointerEventListener mSystemGestures;
final DecorInsets mDecorInsets;
@@ -394,8 +395,6 @@
final Resources r = mContext.getResources();
mCarDockEnablesAccelerometer = r.getBoolean(R.bool.config_carDockEnablesAccelerometer);
mDeskDockEnablesAccelerometer = r.getBoolean(R.bool.config_deskDockEnablesAccelerometer);
- mDeskDockRespectsNoSensorAndLockedWithoutAccelerometer =
- r.getBoolean(R.bool.config_deskRespectsNoSensorAndLockedWithoutAccelerometer);
mCanSystemBarsBeShownByUser = !r.getBoolean(
R.bool.config_remoteInsetsControllerControlsSystemBars) || r.getBoolean(
R.bool.config_remoteInsetsControllerSystemBarsCanBeShownByUserAction);
@@ -411,158 +410,162 @@
final Looper looper = UiThread.getHandler().getLooper();
mHandler = new PolicyHandler(looper);
// TODO(b/181821798) Migrate SystemGesturesPointerEventListener to use window context.
- mSystemGestures = new SystemGesturesPointerEventListener(mUiContext, mHandler,
- new SystemGesturesPointerEventListener.Callbacks() {
+ if (!CLIENT_TRANSIENT) {
+ SystemGesturesPointerEventListener.Callbacks gesturesPointerEventCallbacks =
+ new SystemGesturesPointerEventListener.Callbacks() {
- private static final long MOUSE_GESTURE_DELAY_MS = 500;
+ private static final long MOUSE_GESTURE_DELAY_MS = 500;
- private Runnable mOnSwipeFromLeft = this::onSwipeFromLeft;
- private Runnable mOnSwipeFromTop = this::onSwipeFromTop;
- private Runnable mOnSwipeFromRight = this::onSwipeFromRight;
- private Runnable mOnSwipeFromBottom = this::onSwipeFromBottom;
+ private Runnable mOnSwipeFromLeft = this::onSwipeFromLeft;
+ private Runnable mOnSwipeFromTop = this::onSwipeFromTop;
+ private Runnable mOnSwipeFromRight = this::onSwipeFromRight;
+ private Runnable mOnSwipeFromBottom = this::onSwipeFromBottom;
- private Insets getControllableInsets(WindowState win) {
- if (win == null) {
- return Insets.NONE;
- }
- final InsetsSourceProvider provider = win.getControllableInsetProvider();
- if (provider == null) {
- return Insets.NONE;
- }
- return provider.getSource().calculateInsets(win.getBounds(),
- true /* ignoreVisibility */);
+ private Insets getControllableInsets(WindowState win) {
+ if (win == null) {
+ return Insets.NONE;
}
+ final InsetsSourceProvider provider = win.getControllableInsetProvider();
+ if (provider == null) {
+ return Insets.NONE;
+ }
+ return provider.getSource().calculateInsets(win.getBounds(),
+ true /* ignoreVisibility */);
+ }
- @Override
- public void onSwipeFromTop() {
- synchronized (mLock) {
- requestTransientBars(mTopGestureHost,
- getControllableInsets(mTopGestureHost).top > 0);
+ @Override
+ public void onSwipeFromTop() {
+ synchronized (mLock) {
+ requestTransientBars(mTopGestureHost,
+ getControllableInsets(mTopGestureHost).top > 0);
+ }
+ }
+
+ @Override
+ public void onSwipeFromBottom() {
+ synchronized (mLock) {
+ requestTransientBars(mBottomGestureHost,
+ getControllableInsets(mBottomGestureHost).bottom > 0);
+ }
+ }
+
+ private boolean allowsSideSwipe(Region excludedRegion) {
+ return mNavigationBarAlwaysShowOnSideGesture
+ && !mSystemGestures.currentGestureStartedInRegion(excludedRegion);
+ }
+
+ @Override
+ public void onSwipeFromRight() {
+ final Region excludedRegion = Region.obtain();
+ synchronized (mLock) {
+ mDisplayContent.calculateSystemGestureExclusion(
+ excludedRegion, null /* outUnrestricted */);
+ final boolean hasWindow =
+ getControllableInsets(mRightGestureHost).right > 0;
+ if (hasWindow || allowsSideSwipe(excludedRegion)) {
+ requestTransientBars(mRightGestureHost, hasWindow);
}
}
+ excludedRegion.recycle();
+ }
- @Override
- public void onSwipeFromBottom() {
- synchronized (mLock) {
- requestTransientBars(mBottomGestureHost,
- getControllableInsets(mBottomGestureHost).bottom > 0);
+ @Override
+ public void onSwipeFromLeft() {
+ final Region excludedRegion = Region.obtain();
+ synchronized (mLock) {
+ mDisplayContent.calculateSystemGestureExclusion(
+ excludedRegion, null /* outUnrestricted */);
+ final boolean hasWindow =
+ getControllableInsets(mLeftGestureHost).left > 0;
+ if (hasWindow || allowsSideSwipe(excludedRegion)) {
+ requestTransientBars(mLeftGestureHost, hasWindow);
}
}
+ excludedRegion.recycle();
+ }
- private boolean allowsSideSwipe(Region excludedRegion) {
- return mNavigationBarAlwaysShowOnSideGesture
- && !mSystemGestures.currentGestureStartedInRegion(excludedRegion);
+ @Override
+ public void onFling(int duration) {
+ if (mService.mPowerManagerInternal != null) {
+ mService.mPowerManagerInternal.setPowerBoost(
+ Boost.INTERACTION, duration);
}
+ }
- @Override
- public void onSwipeFromRight() {
- final Region excludedRegion = Region.obtain();
- synchronized (mLock) {
- mDisplayContent.calculateSystemGestureExclusion(
- excludedRegion, null /* outUnrestricted */);
- final boolean hasWindow =
- getControllableInsets(mRightGestureHost).right > 0;
- if (hasWindow || allowsSideSwipe(excludedRegion)) {
- requestTransientBars(mRightGestureHost, hasWindow);
- }
- }
- excludedRegion.recycle();
- }
+ @Override
+ public void onDebug() {
+ // no-op
+ }
- @Override
- public void onSwipeFromLeft() {
- final Region excludedRegion = Region.obtain();
- synchronized (mLock) {
- mDisplayContent.calculateSystemGestureExclusion(
- excludedRegion, null /* outUnrestricted */);
- final boolean hasWindow =
- getControllableInsets(mLeftGestureHost).left > 0;
- if (hasWindow || allowsSideSwipe(excludedRegion)) {
- requestTransientBars(mLeftGestureHost, hasWindow);
- }
- }
- excludedRegion.recycle();
- }
+ private WindowOrientationListener getOrientationListener() {
+ final DisplayRotation rotation = mDisplayContent.getDisplayRotation();
+ return rotation != null ? rotation.getOrientationListener() : null;
+ }
- @Override
- public void onFling(int duration) {
- if (mService.mPowerManagerInternal != null) {
- mService.mPowerManagerInternal.setPowerBoost(
- Boost.INTERACTION, duration);
- }
+ @Override
+ public void onDown() {
+ final WindowOrientationListener listener = getOrientationListener();
+ if (listener != null) {
+ listener.onTouchStart();
}
+ }
- @Override
- public void onDebug() {
- // no-op
+ @Override
+ public void onUpOrCancel() {
+ final WindowOrientationListener listener = getOrientationListener();
+ if (listener != null) {
+ listener.onTouchEnd();
}
+ }
- private WindowOrientationListener getOrientationListener() {
- final DisplayRotation rotation = mDisplayContent.getDisplayRotation();
- return rotation != null ? rotation.getOrientationListener() : null;
- }
+ @Override
+ public void onMouseHoverAtLeft() {
+ mHandler.removeCallbacks(mOnSwipeFromLeft);
+ mHandler.postDelayed(mOnSwipeFromLeft, MOUSE_GESTURE_DELAY_MS);
+ }
- @Override
- public void onDown() {
- final WindowOrientationListener listener = getOrientationListener();
- if (listener != null) {
- listener.onTouchStart();
- }
- }
+ @Override
+ public void onMouseHoverAtTop() {
+ mHandler.removeCallbacks(mOnSwipeFromTop);
+ mHandler.postDelayed(mOnSwipeFromTop, MOUSE_GESTURE_DELAY_MS);
+ }
- @Override
- public void onUpOrCancel() {
- final WindowOrientationListener listener = getOrientationListener();
- if (listener != null) {
- listener.onTouchEnd();
- }
- }
+ @Override
+ public void onMouseHoverAtRight() {
+ mHandler.removeCallbacks(mOnSwipeFromRight);
+ mHandler.postDelayed(mOnSwipeFromRight, MOUSE_GESTURE_DELAY_MS);
+ }
- @Override
- public void onMouseHoverAtLeft() {
- mHandler.removeCallbacks(mOnSwipeFromLeft);
- mHandler.postDelayed(mOnSwipeFromLeft, MOUSE_GESTURE_DELAY_MS);
- }
+ @Override
+ public void onMouseHoverAtBottom() {
+ mHandler.removeCallbacks(mOnSwipeFromBottom);
+ mHandler.postDelayed(mOnSwipeFromBottom, MOUSE_GESTURE_DELAY_MS);
+ }
- @Override
- public void onMouseHoverAtTop() {
- mHandler.removeCallbacks(mOnSwipeFromTop);
- mHandler.postDelayed(mOnSwipeFromTop, MOUSE_GESTURE_DELAY_MS);
- }
+ @Override
+ public void onMouseLeaveFromLeft() {
+ mHandler.removeCallbacks(mOnSwipeFromLeft);
+ }
- @Override
- public void onMouseHoverAtRight() {
- mHandler.removeCallbacks(mOnSwipeFromRight);
- mHandler.postDelayed(mOnSwipeFromRight, MOUSE_GESTURE_DELAY_MS);
- }
+ @Override
+ public void onMouseLeaveFromTop() {
+ mHandler.removeCallbacks(mOnSwipeFromTop);
+ }
- @Override
- public void onMouseHoverAtBottom() {
- mHandler.removeCallbacks(mOnSwipeFromBottom);
- mHandler.postDelayed(mOnSwipeFromBottom, MOUSE_GESTURE_DELAY_MS);
- }
+ @Override
+ public void onMouseLeaveFromRight() {
+ mHandler.removeCallbacks(mOnSwipeFromRight);
+ }
- @Override
- public void onMouseLeaveFromLeft() {
- mHandler.removeCallbacks(mOnSwipeFromLeft);
- }
-
- @Override
- public void onMouseLeaveFromTop() {
- mHandler.removeCallbacks(mOnSwipeFromTop);
- }
-
- @Override
- public void onMouseLeaveFromRight() {
- mHandler.removeCallbacks(mOnSwipeFromRight);
- }
-
- @Override
- public void onMouseLeaveFromBottom() {
- mHandler.removeCallbacks(mOnSwipeFromBottom);
- }
- });
- displayContent.registerPointerEventListener(mSystemGestures);
+ @Override
+ public void onMouseLeaveFromBottom() {
+ mHandler.removeCallbacks(mOnSwipeFromBottom);
+ }
+ };
+ mSystemGestures = new SystemGesturesPointerEventListener(mUiContext, mHandler,
+ gesturesPointerEventCallbacks);
+ displayContent.registerPointerEventListener(mSystemGestures);
+ }
mAppTransitionListener = new WindowManagerInternal.AppTransitionListener() {
private Runnable mAppTransitionPending = () -> {
@@ -648,7 +651,9 @@
mContext, () -> {
synchronized (mLock) {
onConfigurationChanged();
- mSystemGestures.onConfigurationChanged();
+ if (!CLIENT_TRANSIENT) {
+ mSystemGestures.onConfigurationChanged();
+ }
mDisplayContent.updateSystemGestureExclusion();
}
});
@@ -670,7 +675,9 @@
}
void systemReady() {
- mSystemGestures.systemReady();
+ if (!CLIENT_TRANSIENT) {
+ mSystemGestures.systemReady();
+ }
if (mService.mPointerLocationEnabled) {
setPointerLocationEnabled(true);
}
@@ -707,10 +714,6 @@
return mDeskDockEnablesAccelerometer;
}
- boolean isDeskDockRespectsNoSensorAndLockedWithoutAccelerometer() {
- return mDeskDockRespectsNoSensorAndLockedWithoutAccelerometer;
- }
-
public void setPersistentVrModeEnabled(boolean persistentVrModeEnabled) {
mPersistentVrModeEnabled = persistentVrModeEnabled;
}
@@ -1315,7 +1318,9 @@
}
void onDisplayInfoChanged(DisplayInfo info) {
- mSystemGestures.onDisplayInfoChanged(info);
+ if (!CLIENT_TRANSIENT) {
+ mSystemGestures.onDisplayInfoChanged(info);
+ }
}
/**
@@ -1688,7 +1693,9 @@
// Update the latest display size, cutout.
mDisplayContent.updateDisplayInfo();
onConfigurationChanged();
- mSystemGestures.onConfigurationChanged();
+ if (!CLIENT_TRANSIENT) {
+ mSystemGestures.onConfigurationChanged();
+ }
}
/**
@@ -1967,6 +1974,9 @@
@VisibleForTesting
void requestTransientBars(WindowState swipeTarget, boolean isGestureOnSystemBar) {
+ if (CLIENT_TRANSIENT) {
+ return;
+ }
if (swipeTarget == null || !mService.mPolicy.isUserSetupComplete()) {
// Swipe-up for navigation bar is disabled during setup
return;
@@ -2514,8 +2524,6 @@
pw.print("mCarDockEnablesAccelerometer="); pw.print(mCarDockEnablesAccelerometer);
pw.print(" mDeskDockEnablesAccelerometer=");
pw.println(mDeskDockEnablesAccelerometer);
- pw.print(" mDeskDockRespectsNoSensorAndLockedWithoutAccelerometer=");
- pw.println(mDeskDockRespectsNoSensorAndLockedWithoutAccelerometer);
pw.print(prefix); pw.print("mDockMode="); pw.print(Intent.dockStateToString(mDockMode));
pw.print(" mLidState="); pw.println(WindowManagerFuncs.lidStateToString(mLidState));
pw.print(prefix); pw.print("mAwake="); pw.print(mAwake);
@@ -2617,7 +2625,9 @@
final DecorInsets.Info info = mDecorInsets.mInfoForRotation[rotation];
pw.println(prefixInner + Surface.rotationToString(rotation) + "=" + info);
}
- mSystemGestures.dump(pw, prefix);
+ if (!CLIENT_TRANSIENT) {
+ mSystemGestures.dump(pw, prefix);
+ }
pw.print(prefix); pw.println("Looper state:");
mHandler.getLooper().dump(new PrintWriterPrinter(pw), prefix + " ");
diff --git a/services/core/java/com/android/server/wm/DisplayRotation.java b/services/core/java/com/android/server/wm/DisplayRotation.java
index a3d233d..87de0f6 100644
--- a/services/core/java/com/android/server/wm/DisplayRotation.java
+++ b/services/core/java/com/android/server/wm/DisplayRotation.java
@@ -1239,10 +1239,6 @@
mDisplayPolicy.isCarDockEnablesAccelerometer();
final boolean deskDockEnablesAccelerometer =
mDisplayPolicy.isDeskDockEnablesAccelerometer();
- final boolean deskDockRespectsNoSensorAndLockedWithoutAccelerometer =
- mDisplayPolicy.isDeskDockRespectsNoSensorAndLockedWithoutAccelerometer()
- && (orientation == ActivityInfo.SCREEN_ORIENTATION_LOCKED
- || orientation == ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
@Surface.Rotation
final int preferredRotation;
@@ -1263,10 +1259,10 @@
|| dockMode == Intent.EXTRA_DOCK_STATE_LE_DESK
|| dockMode == Intent.EXTRA_DOCK_STATE_HE_DESK)
&& (deskDockEnablesAccelerometer || mDeskDockRotation >= 0)
- && !deskDockRespectsNoSensorAndLockedWithoutAccelerometer) {
+ && !(orientation == ActivityInfo.SCREEN_ORIENTATION_LOCKED
+ || orientation == ActivityInfo.SCREEN_ORIENTATION_NOSENSOR)) {
// Ignore sensor when in desk dock unless explicitly enabled.
- // This case can override the behavior of NOSENSOR, and can also
- // enable 180 degree rotation while docked.
+ // This case can enable 180 degree rotation while docked.
preferredRotation = deskDockEnablesAccelerometer ? sensorRotation : mDeskDockRotation;
} else if (hdmiPlugged && mDemoHdmiRotationLock) {
// Ignore sensor when plugged into HDMI when demo HDMI rotation lock enabled.
diff --git a/services/core/java/com/android/server/wm/ImeTargetChangeListener.java b/services/core/java/com/android/server/wm/ImeTargetChangeListener.java
index 8bc445b..88b76aa 100644
--- a/services/core/java/com/android/server/wm/ImeTargetChangeListener.java
+++ b/services/core/java/com/android/server/wm/ImeTargetChangeListener.java
@@ -18,6 +18,7 @@
import android.annotation.NonNull;
import android.os.IBinder;
+import android.view.WindowManager;
/**
* Callback the IME targeting window visibility change state for
@@ -32,11 +33,13 @@
* has changed its window visibility.
*
* @param overlayWindowToken the window token of the overlay window.
+ * @param windowType the window type of the overlay window.
* @param visible the visibility of the overlay window, {@code true} means visible
* and {@code false} otherwise.
* @param removed Whether the IME target overlay window has being removed.
*/
default void onImeTargetOverlayVisibilityChanged(@NonNull IBinder overlayWindowToken,
+ @WindowManager.LayoutParams.WindowType int windowType,
boolean visible, boolean removed) {
}
diff --git a/services/core/java/com/android/server/wm/LetterboxConfiguration.java b/services/core/java/com/android/server/wm/LetterboxConfiguration.java
index 6936a2d..f492bab 100644
--- a/services/core/java/com/android/server/wm/LetterboxConfiguration.java
+++ b/services/core/java/com/android/server/wm/LetterboxConfiguration.java
@@ -19,7 +19,6 @@
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.LetterboxConfigurationDeviceConfig.KEY_ALLOW_IGNORE_ORIENTATION_REQUEST;
-import static com.android.server.wm.LetterboxConfigurationDeviceConfig.KEY_DISABLE_SIZE_COMPAT_MODE_AFTER_ORIENTATION_CHANGE_FROM_APP;
import static com.android.server.wm.LetterboxConfigurationDeviceConfig.KEY_ENABLE_CAMERA_COMPAT_TREATMENT;
import static com.android.server.wm.LetterboxConfigurationDeviceConfig.KEY_ENABLE_COMPAT_FAKE_FOCUS;
import static com.android.server.wm.LetterboxConfigurationDeviceConfig.KEY_ENABLE_DISPLAY_ROTATION_IMMERSIVE_APP_COMPAT_POLICY;
@@ -330,9 +329,6 @@
mDeviceConfig.updateFlagActiveStatus(
/* isActive */ mTranslucentLetterboxingEnabled,
/* key */ KEY_ENABLE_LETTERBOX_TRANSLUCENT_ACTIVITY);
- mDeviceConfig.updateFlagActiveStatus(
- /* isActive */ true,
- /* key */ KEY_DISABLE_SIZE_COMPAT_MODE_AFTER_ORIENTATION_CHANGE_FROM_APP);
mLetterboxConfigurationPersister = letterboxConfigurationPersister;
mLetterboxConfigurationPersister.start();
@@ -347,16 +343,6 @@
}
/**
- * Whether size compat mode is disabled after an orientation change request comes from the app.
- * This value is controlled via {@link android.provider.DeviceConfig}.
- */
- // TODO(b/270356567) Clean up this flag
- boolean isSizeCompatModeDisabledAfterOrientationChangeFromApp() {
- return mDeviceConfig.getFlag(
- KEY_DISABLE_SIZE_COMPAT_MODE_AFTER_ORIENTATION_CHANGE_FROM_APP);
- }
-
- /**
* Overrides the aspect ratio of letterbox for fixed orientation. If given value is <= {@link
* #MIN_FIXED_ORIENTATION_LETTERBOX_ASPECT_RATIO}, both it and a value of {@link
* com.android.internal.R.dimen.config_fixedOrientationLetterboxAspectRatio} will be ignored and
diff --git a/services/core/java/com/android/server/wm/LetterboxConfigurationDeviceConfig.java b/services/core/java/com/android/server/wm/LetterboxConfigurationDeviceConfig.java
index 1651af3..a739e42 100644
--- a/services/core/java/com/android/server/wm/LetterboxConfigurationDeviceConfig.java
+++ b/services/core/java/com/android/server/wm/LetterboxConfigurationDeviceConfig.java
@@ -52,11 +52,6 @@
private static final boolean DEFAULT_VALUE_ENABLE_LETTERBOX_TRANSLUCENT_ACTIVITY = true;
- static final String KEY_DISABLE_SIZE_COMPAT_MODE_AFTER_ORIENTATION_CHANGE_FROM_APP =
- "disable_size_compat_mode_after_orientation_change_from_app";
- private static final boolean
- DEFAULT_VALUE_DISABLE_SIZE_COMPAT_MODE_AFTER_ORIENTATION_CHANGE_FROM_APP = true;
-
@VisibleForTesting
static final Map<String, Boolean> sKeyToDefaultValueMap = Map.of(
KEY_ENABLE_CAMERA_COMPAT_TREATMENT,
@@ -68,9 +63,7 @@
KEY_ENABLE_COMPAT_FAKE_FOCUS,
DEFAULT_VALUE_ENABLE_COMPAT_FAKE_FOCUS,
KEY_ENABLE_LETTERBOX_TRANSLUCENT_ACTIVITY,
- DEFAULT_VALUE_ENABLE_LETTERBOX_TRANSLUCENT_ACTIVITY,
- KEY_DISABLE_SIZE_COMPAT_MODE_AFTER_ORIENTATION_CHANGE_FROM_APP,
- DEFAULT_VALUE_DISABLE_SIZE_COMPAT_MODE_AFTER_ORIENTATION_CHANGE_FROM_APP
+ DEFAULT_VALUE_ENABLE_LETTERBOX_TRANSLUCENT_ACTIVITY
);
// Whether camera compatibility treatment is enabled.
@@ -99,10 +92,6 @@
private boolean mIsTranslucentLetterboxingAllowed =
DEFAULT_VALUE_ENABLE_LETTERBOX_TRANSLUCENT_ACTIVITY;
- // Whether size compat mode is disabled after an orientation change request comes from the app
- private boolean mIsSizeCompatModeDisabledAfterOrientationChangeFromApp =
- DEFAULT_VALUE_DISABLE_SIZE_COMPAT_MODE_AFTER_ORIENTATION_CHANGE_FROM_APP;
-
// Set of active device configs that need to be updated in
// DeviceConfig.OnPropertiesChangedListener#onPropertiesChanged.
private final ArraySet<String> mActiveDeviceConfigsSet = new ArraySet<>();
@@ -152,8 +141,6 @@
return mIsCompatFakeFocusAllowed;
case KEY_ENABLE_LETTERBOX_TRANSLUCENT_ACTIVITY:
return mIsTranslucentLetterboxingAllowed;
- case KEY_DISABLE_SIZE_COMPAT_MODE_AFTER_ORIENTATION_CHANGE_FROM_APP:
- return mIsSizeCompatModeDisabledAfterOrientationChangeFromApp;
default:
throw new AssertionError("Unexpected flag name: " + key);
}
@@ -181,10 +168,6 @@
case KEY_ENABLE_LETTERBOX_TRANSLUCENT_ACTIVITY:
mIsTranslucentLetterboxingAllowed = getDeviceConfig(key, defaultValue);
break;
- case KEY_DISABLE_SIZE_COMPAT_MODE_AFTER_ORIENTATION_CHANGE_FROM_APP:
- mIsSizeCompatModeDisabledAfterOrientationChangeFromApp =
- getDeviceConfig(key, defaultValue);
- break;
default:
throw new AssertionError("Unexpected flag name: " + key);
}
diff --git a/services/core/java/com/android/server/wm/LetterboxUiController.java b/services/core/java/com/android/server/wm/LetterboxUiController.java
index 6ef6fa7..0288e4b 100644
--- a/services/core/java/com/android/server/wm/LetterboxUiController.java
+++ b/services/core/java/com/android/server/wm/LetterboxUiController.java
@@ -113,6 +113,8 @@
import com.android.server.wm.LetterboxConfiguration.LetterboxBackgroundType;
import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Optional;
import java.util.function.BooleanSupplier;
import java.util.function.Consumer;
@@ -127,8 +129,7 @@
final class LetterboxUiController {
private static final Predicate<ActivityRecord> FIRST_OPAQUE_NOT_FINISHING_ACTIVITY_PREDICATE =
- activityRecord -> activityRecord.fillsParent() && !activityRecord.isFinishing()
- && activityRecord.nowVisible;
+ activityRecord -> activityRecord.fillsParent() && !activityRecord.isFinishing();
private static final String TAG = TAG_WITH_CLASS_NAME ? "LetterboxUiController" : TAG_ATM;
@@ -180,6 +181,10 @@
// Corresponds to OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS
private final boolean mIsOverrideEnableCompatFakeFocusEnabled;
+ // The list of observers for the destroy event of candidate opaque activities
+ // when dealing with translucent activities.
+ private final List<LetterboxUiController> mDestroyListeners = new ArrayList<>();
+
@Nullable
private final Boolean mBooleanPropertyAllowOrientationOverride;
@Nullable
@@ -193,6 +198,10 @@
@Nullable
private WindowContainerListener mLetterboxConfigListener;
+ @Nullable
+ @VisibleForTesting
+ ActivityRecord mFirstOpaqueActivityBeneath;
+
private boolean mShowWallpaperForLetterboxBackground;
// In case of transparent activities we might need to access the aspectRatio of the
@@ -353,6 +362,10 @@
mLetterbox.destroy();
mLetterbox = null;
}
+ for (int i = mDestroyListeners.size() - 1; i >= 0; i--) {
+ mDestroyListeners.get(i).updateInheritedLetterbox();
+ }
+ mDestroyListeners.clear();
if (mLetterboxConfigListener != null) {
mLetterboxConfigListener.onRemoved();
mLetterboxConfigListener = null;
@@ -819,13 +832,14 @@
// Get the bounds of the "space-to-fill". The transformed bounds have the highest
// priority because the activity is launched in a rotated environment. In multi-window
- // mode, the task-level represents this. In fullscreen-mode, the task container does
+ // mode, the taskFragment-level represents this for both split-screen
+ // and activity-embedding. In fullscreen-mode, the task container does
// (since the orientation letterbox is also applied to the task).
final Rect transformedBounds = mActivityRecord.getFixedRotationTransformDisplayBounds();
final Rect spaceToFill = transformedBounds != null
? transformedBounds
: mActivityRecord.inMultiWindowMode()
- ? mActivityRecord.getTask().getBounds()
+ ? mActivityRecord.getTaskFragment().getBounds()
: mActivityRecord.getRootTask().getParent().getBounds();
// In case of translucent activities an option is to use the WindowState#getFrame() of
// the first opaque activity beneath. In some cases (e.g. an opaque activity is using
@@ -1571,7 +1585,11 @@
* first opaque activity beneath.
* @param parent The parent container.
*/
- void onActivityParentChanged(WindowContainer<?> parent) {
+ void updateInheritedLetterbox() {
+ final WindowContainer<?> parent = mActivityRecord.getParent();
+ if (parent == null) {
+ return;
+ }
if (!mLetterboxConfiguration.isTranslucentLetterboxingEnabled()) {
return;
}
@@ -1581,22 +1599,24 @@
}
// In case mActivityRecord.hasCompatDisplayInsetsWithoutOverride() we don't apply the
// opaque activity constraints because we're expecting the activity is already letterboxed.
+ mFirstOpaqueActivityBeneath = mActivityRecord.getTask().getActivity(
+ FIRST_OPAQUE_NOT_FINISHING_ACTIVITY_PREDICATE /* callback */,
+ mActivityRecord /* boundary */, false /* includeBoundary */,
+ true /* traverseTopToBottom */);
+ if (mFirstOpaqueActivityBeneath == null || mFirstOpaqueActivityBeneath.isEmbedded()) {
+ // We skip letterboxing if the translucent activity doesn't have any opaque
+ // activities beneath or the activity below is embedded which never has letterbox.
+ mActivityRecord.recomputeConfiguration();
+ return;
+ }
if (mActivityRecord.getTask() == null || mActivityRecord.fillsParent()
|| mActivityRecord.hasCompatDisplayInsetsWithoutInheritance()) {
return;
}
- final ActivityRecord firstOpaqueActivityBeneath = mActivityRecord.getTask().getActivity(
- FIRST_OPAQUE_NOT_FINISHING_ACTIVITY_PREDICATE /* callback */,
- mActivityRecord /* boundary */, false /* includeBoundary */,
- true /* traverseTopToBottom */);
- if (firstOpaqueActivityBeneath == null || firstOpaqueActivityBeneath.isEmbedded()) {
- // We skip letterboxing if the translucent activity doesn't have any opaque
- // activities beneath or the activity below is embedded which never has letterbox.
- return;
- }
- inheritConfiguration(firstOpaqueActivityBeneath);
+ mFirstOpaqueActivityBeneath.mLetterboxUiController.mDestroyListeners.add(this);
+ inheritConfiguration(mFirstOpaqueActivityBeneath);
mLetterboxConfigListener = WindowContainer.overrideConfigurationPropagation(
- mActivityRecord, firstOpaqueActivityBeneath,
+ mActivityRecord, mFirstOpaqueActivityBeneath,
(opaqueConfig, transparentOverrideConfig) -> {
resetTranslucentOverrideConfig(transparentOverrideConfig);
final Rect parentBounds = parent.getWindowConfiguration().getBounds();
@@ -1610,7 +1630,7 @@
// We need to initialize appBounds to avoid NPE. The actual value will
// be set ahead when resolving the Configuration for the activity.
transparentOverrideConfig.windowConfiguration.setAppBounds(new Rect());
- inheritConfiguration(firstOpaqueActivityBeneath);
+ inheritConfiguration(mFirstOpaqueActivityBeneath);
return transparentOverrideConfig;
});
}
@@ -1684,10 +1704,7 @@
if (!hasInheritedLetterboxBehavior() || mActivityRecord.getTask() == null) {
return Optional.empty();
}
- return Optional.ofNullable(mActivityRecord.getTask().getActivity(
- FIRST_OPAQUE_NOT_FINISHING_ACTIVITY_PREDICATE /* callback */,
- mActivityRecord /* boundary */, false /* includeBoundary */,
- true /* traverseTopToBottom */));
+ return Optional.ofNullable(mFirstOpaqueActivityBeneath);
}
/** Resets the screen size related fields so they can be resolved by requested bounds later. */
@@ -1718,6 +1735,10 @@
}
private void clearInheritedConfig() {
+ if (mFirstOpaqueActivityBeneath != null) {
+ mFirstOpaqueActivityBeneath.mLetterboxUiController.mDestroyListeners.remove(this);
+ }
+ mFirstOpaqueActivityBeneath = null;
mLetterboxConfigListener = null;
mInheritedMinAspectRatio = UNDEFINED_ASPECT_RATIO;
mInheritedMaxAspectRatio = UNDEFINED_ASPECT_RATIO;
diff --git a/services/core/java/com/android/server/wm/RootWindowContainer.java b/services/core/java/com/android/server/wm/RootWindowContainer.java
index d3edeae..0074ebd 100644
--- a/services/core/java/com/android/server/wm/RootWindowContainer.java
+++ b/services/core/java/com/android/server/wm/RootWindowContainer.java
@@ -1374,7 +1374,8 @@
void startHomeOnEmptyDisplays(String reason) {
forAllTaskDisplayAreas(taskDisplayArea -> {
if (taskDisplayArea.topRunningActivity() == null) {
- startHomeOnTaskDisplayArea(mCurrentUser, reason, taskDisplayArea,
+ int userId = mWmService.getUserAssignedToDisplay(taskDisplayArea.getDisplayId());
+ startHomeOnTaskDisplayArea(userId, reason, taskDisplayArea,
false /* allowInstrumenting */, false /* fromHomeKey */);
}
});
@@ -1422,7 +1423,9 @@
Intent homeIntent = null;
ActivityInfo aInfo = null;
- if (taskDisplayArea == getDefaultTaskDisplayArea()) {
+ if (taskDisplayArea == getDefaultTaskDisplayArea()
+ || mWmService.shouldPlacePrimaryHomeOnDisplay(
+ taskDisplayArea.getDisplayId(), userId)) {
homeIntent = mService.getHomeIntent();
aInfo = resolveHomeActivity(userId, homeIntent);
} else if (shouldPlaceSecondaryHomeOnDisplayArea(taskDisplayArea)) {
@@ -1589,7 +1592,8 @@
r.moveFocusableActivityToTop(myReason);
return resumeFocusedTasksTopActivities(r.getRootTask(), prev, null);
}
- return startHomeOnTaskDisplayArea(mCurrentUser, myReason, taskDisplayArea,
+ int userId = mWmService.getUserAssignedToDisplay(taskDisplayArea.getDisplayId());
+ return startHomeOnTaskDisplayArea(userId, myReason, taskDisplayArea,
false /* allowInstrumenting */, false /* fromHomeKey */);
}
@@ -1667,8 +1671,9 @@
final int displayId = taskDisplayArea != null ? taskDisplayArea.getDisplayId()
: INVALID_DISPLAY;
if (displayId == DEFAULT_DISPLAY || (displayId != INVALID_DISPLAY
- && displayId == mService.mVr2dDisplayId)) {
- // No restrictions to default display or vr 2d display.
+ && (displayId == mService.mVr2dDisplayId
+ || mWmService.shouldPlacePrimaryHomeOnDisplay(displayId)))) {
+ // No restrictions to default display, vr 2d display or main display for visible users.
return true;
}
@@ -1741,9 +1746,13 @@
/**
* @return a list of pairs, containing activities and their task id which are the top ones in
* each visible root task. The first entry will be the focused activity.
+ *
+ * <p>NOTE: If the top activity is in the split screen, the other activities in the same split
+ * screen will also be returned.
*/
List<ActivityAssistInfo> getTopVisibleActivities() {
final ArrayList<ActivityAssistInfo> topVisibleActivities = new ArrayList<>();
+ final ArrayList<ActivityAssistInfo> activityAssistInfos = new ArrayList<>();
final Task topFocusedRootTask = getTopDisplayFocusedRootTask();
// Traverse all displays.
forAllRootTasks(rootTask -> {
@@ -1751,11 +1760,21 @@
if (rootTask.shouldBeVisible(null /* starting */)) {
final ActivityRecord top = rootTask.getTopNonFinishingActivity();
if (top != null) {
- ActivityAssistInfo visibleActivity = new ActivityAssistInfo(top);
+ activityAssistInfos.clear();
+ activityAssistInfos.add(new ActivityAssistInfo(top));
+ // Check if the activity on the split screen.
+ final Task adjacentTask = top.getTask().getAdjacentTask();
+ if (adjacentTask != null) {
+ final ActivityRecord adjacentActivityRecord =
+ adjacentTask.getTopNonFinishingActivity();
+ if (adjacentActivityRecord != null) {
+ activityAssistInfos.add(new ActivityAssistInfo(adjacentActivityRecord));
+ }
+ }
if (rootTask == topFocusedRootTask) {
- topVisibleActivities.add(0, visibleActivity);
+ topVisibleActivities.addAll(0, activityAssistInfos);
} else {
- topVisibleActivities.add(visibleActivity);
+ topVisibleActivities.addAll(activityAssistInfos);
}
}
}
diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java
index 931c258..b7c29bf 100644
--- a/services/core/java/com/android/server/wm/Task.java
+++ b/services/core/java/com/android/server/wm/Task.java
@@ -5170,6 +5170,12 @@
// task.
r.setVisibility(true);
ensureActivitiesVisible(null, 0, !PRESERVE_WINDOWS);
+ // If launching behind, the app will start regardless of what's above it, so mark it
+ // as unknown even before prior `pause`. This also prevents a race between set-ready
+ // and activityPause. Launch-behind is basically only used for dream now.
+ if (!r.isVisibleRequested()) {
+ r.notifyUnknownVisibilityLaunchedForKeyguardTransition();
+ }
// Go ahead to execute app transition for this activity since the app transition
// will not be triggered through the resume channel.
mDisplayContent.executeAppTransition();
diff --git a/services/core/java/com/android/server/wm/Transition.java b/services/core/java/com/android/server/wm/Transition.java
index 50bf38b..bfd0d96 100644
--- a/services/core/java/com/android/server/wm/Transition.java
+++ b/services/core/java/com/android/server/wm/Transition.java
@@ -314,7 +314,6 @@
mLogger.mCreateWallTimeMs = System.currentTimeMillis();
mLogger.mCreateTimeNs = SystemClock.elapsedRealtimeNanos();
- controller.mTransitionTracer.logState(this);
}
@Nullable
@@ -532,7 +531,6 @@
mLogger.mSyncId = mSyncId;
mLogger.mCollectTimeNs = SystemClock.elapsedRealtimeNanos();
- mController.mTransitionTracer.logState(this);
}
/**
@@ -555,7 +553,6 @@
applyReady();
mLogger.mStartTimeNs = SystemClock.elapsedRealtimeNanos();
- mController.mTransitionTracer.logState(this);
mController.updateAnimatingState(mTmpTransaction);
// merge into the next-time the global transaction is applied. This is too-early to set
@@ -1232,7 +1229,6 @@
validateVisibility();
mState = STATE_FINISHED;
- mController.mTransitionTracer.logState(this);
// Rotation change may be deferred while there is a display change transition, so check
// again in case there is a new pending change.
if (hasParticipatedDisplay && !mController.useShellTransitionsRotation()) {
@@ -1261,6 +1257,7 @@
}
ProtoLog.v(ProtoLogGroup.WM_DEBUG_WINDOW_TRANSITIONS, "Aborting Transition: %d", mSyncId);
mState = STATE_ABORT;
+ mLogger.mAbortTimeNs = SystemClock.elapsedRealtimeNanos();
mController.mTransitionTracer.logAbortedTransition(this);
// Syncengine abort will call through to onTransactionReady()
mSyncEngine.abort(mSyncId);
diff --git a/services/core/java/com/android/server/wm/TransitionController.java b/services/core/java/com/android/server/wm/TransitionController.java
index c9316bf..b697ab1 100644
--- a/services/core/java/com/android/server/wm/TransitionController.java
+++ b/services/core/java/com/android/server/wm/TransitionController.java
@@ -941,7 +941,6 @@
}
mPlayingTransitions.add(transition);
updateRunningRemoteAnimation(transition, true /* isPlaying */);
- mTransitionTracer.logState(transition);
// Sync engine should become idle after this, so the idle listener will check the queue.
}
@@ -1122,7 +1121,6 @@
mLatestOnTopTasksReported.clear();
}
}
- mTransitionTracer.logState(transition);
// This is called during Transition.abort whose codepath will eventually check the queue
// via sync-engine idle.
}
@@ -1416,12 +1414,11 @@
long mReadyTimeNs;
long mSendTimeNs;
long mFinishTimeNs;
+ long mAbortTimeNs;
TransitionRequestInfo mRequest;
WindowContainerTransaction mStartWCT;
int mSyncId;
TransitionInfo mInfo;
- ProtoOutputStream mProtoOutputStream = new ProtoOutputStream();
- long mProtoToken;
private String buildOnSendLog() {
StringBuilder sb = new StringBuilder("Sent Transition #").append(mSyncId)
diff --git a/services/core/java/com/android/server/wm/TransitionTracer.java b/services/core/java/com/android/server/wm/TransitionTracer.java
index 6aac81b..afc1492 100644
--- a/services/core/java/com/android/server/wm/TransitionTracer.java
+++ b/services/core/java/com/android/server/wm/TransitionTracer.java
@@ -50,10 +50,11 @@
private static final int ALWAYS_ON_TRACING_CAPACITY = 15 * 1024; // 15 KB
private static final int ACTIVE_TRACING_BUFFER_CAPACITY = 5000 * 1024; // 5 MB
static final String WINSCOPE_EXT = ".winscope";
- private static final String TRACE_FILE = "/data/misc/wmtrace/transition_trace" + WINSCOPE_EXT;
+ private static final String TRACE_FILE =
+ "/data/misc/wmtrace/wm_transition_trace" + WINSCOPE_EXT;
private static final long MAGIC_NUMBER_VALUE = ((long) MAGIC_NUMBER_H << 32) | MAGIC_NUMBER_L;
- private final TransitionTraceBuffer mTraceBuffer = new TransitionTraceBuffer();
+ private final TraceBuffer mTraceBuffer = new TraceBuffer(ALWAYS_ON_TRACING_CAPACITY);
private final Object mEnabledLock = new Object();
private volatile boolean mActiveTracingEnabled = false;
@@ -72,18 +73,22 @@
*/
public void logSentTransition(Transition transition, ArrayList<ChangeInfo> targets,
TransitionInfo info) {
- // Dump the info to proto that will not be available when the transition finishes or
- // is canceled
- final ProtoOutputStream outputStream = transition.mLogger.mProtoOutputStream;
- transition.mLogger.mProtoToken = outputStream
- .start(com.android.server.wm.shell.TransitionTraceProto.FINISHED_TRANSITIONS);
+ final ProtoOutputStream outputStream = new ProtoOutputStream();
+ final long protoToken = outputStream
+ .start(com.android.server.wm.shell.TransitionTraceProto.TRANSITIONS);
+ outputStream.write(com.android.server.wm.shell.Transition.ID, transition.getSyncId());
+ outputStream.write(com.android.server.wm.shell.Transition.CREATE_TIME_NS,
+ transition.mLogger.mCreateTimeNs);
+ outputStream.write(com.android.server.wm.shell.Transition.SEND_TIME_NS,
+ transition.mLogger.mSendTimeNs);
outputStream.write(com.android.server.wm.shell.Transition.START_TRANSACTION_ID,
transition.getStartTransaction().getId());
outputStream.write(com.android.server.wm.shell.Transition.FINISH_TRANSACTION_ID,
transition.getFinishTransaction().getId());
dumpTransitionTargetsToProto(outputStream, transition, targets);
+ outputStream.end(protoToken);
- logTransitionInfo(transition, info);
+ mTraceBuffer.add(outputStream);
}
/**
@@ -93,17 +98,15 @@
* @param transition The transition that has finished.
*/
public void logFinishedTransition(Transition transition) {
- if (transition.mLogger.mProtoToken == 0) {
- // Transition finished but never sent, so open token never added
- final ProtoOutputStream outputStream = transition.mLogger.mProtoOutputStream;
- transition.mLogger.mProtoToken = outputStream
- .start(com.android.server.wm.shell.TransitionTraceProto.FINISHED_TRANSITIONS);
- }
+ final ProtoOutputStream outputStream = new ProtoOutputStream();
+ final long protoToken = outputStream
+ .start(com.android.server.wm.shell.TransitionTraceProto.TRANSITIONS);
+ outputStream.write(com.android.server.wm.shell.Transition.ID, transition.getSyncId());
+ outputStream.write(com.android.server.wm.shell.Transition.FINISH_TIME_NS,
+ transition.mLogger.mFinishTimeNs);
+ outputStream.end(protoToken);
- // Dump the rest of the transition's info that wasn't dumped during logSentTransition
- dumpFinishedTransitionToProto(transition.mLogger.mProtoOutputStream, transition);
- transition.mLogger.mProtoOutputStream.end(transition.mLogger.mProtoToken);
- mTraceBuffer.pushTransitionProto(transition.mLogger.mProtoOutputStream);
+ mTraceBuffer.add(outputStream);
}
/**
@@ -113,38 +116,15 @@
* @param transition The transition that has been aborted
*/
public void logAbortedTransition(Transition transition) {
- // We don't care about aborted transitions unless actively tracing
- if (!mActiveTracingEnabled) {
- return;
- }
- logFinishedTransition(transition);
- }
-
- /**
- * Records the current state of a transition in the transition trace (if it is running).
- * @param transition the transition that we want to record the state of.
- */
- public void logState(com.android.server.wm.Transition transition) {
- if (!mActiveTracingEnabled) {
- return;
- }
final ProtoOutputStream outputStream = new ProtoOutputStream();
- dumpTransitionStateToProto(outputStream, transition);
- mTraceBuffer.pushTransitionState(outputStream);
- }
+ final long protoToken = outputStream
+ .start(com.android.server.wm.shell.TransitionTraceProto.TRANSITIONS);
+ outputStream.write(com.android.server.wm.shell.Transition.ID, transition.getSyncId());
+ outputStream.write(com.android.server.wm.shell.Transition.ABORT_TIME_NS,
+ transition.mLogger.mAbortTimeNs);
+ outputStream.end(protoToken);
- /**
- * Records the transition info that is being sent over to Shell.
- * @param transition The transition the info is associated with.
- * @param info The transition info we want to log.
- */
- private void logTransitionInfo(Transition transition, TransitionInfo info) {
- if (!mActiveTracingEnabled) {
- return;
- }
- final ProtoOutputStream outputStream = new ProtoOutputStream();
- dumpTransitionInfoToProto(outputStream, transition, info);
- mTraceBuffer.pushTransitionInfo(outputStream);
+ mTraceBuffer.add(outputStream);
}
private void dumpTransitionTargetsToProto(ProtoOutputStream outputStream,
@@ -189,139 +169,6 @@
Trace.endSection();
}
- private void dumpFinishedTransitionToProto(
- ProtoOutputStream outputStream,
- Transition transition
- ) {
- Trace.beginSection("TransitionTracer#dumpFinishedTransitionToProto");
-
- outputStream.write(com.android.server.wm.shell.Transition.CREATE_TIME_NS,
- transition.mLogger.mCreateTimeNs);
- outputStream.write(com.android.server.wm.shell.Transition.SEND_TIME_NS,
- transition.mLogger.mSendTimeNs);
- outputStream.write(com.android.server.wm.shell.Transition.FINISH_TIME_NS,
- transition.mLogger.mFinishTimeNs);
-
- Trace.endSection();
- }
-
- private void dumpTransitionStateToProto(ProtoOutputStream outputStream, Transition transition) {
- Trace.beginSection("TransitionTracer#dumpTransitionStateToProto");
-
- final long stateToken = outputStream
- .start(com.android.server.wm.shell.TransitionTraceProto.TRANSITION_STATES);
-
- outputStream.write(com.android.server.wm.shell.TransitionState.TIME_NS,
- SystemClock.elapsedRealtimeNanos());
- outputStream.write(com.android.server.wm.shell.TransitionState.TRANSITION_ID,
- transition.getSyncId());
- outputStream.write(com.android.server.wm.shell.TransitionState.TRANSITION_TYPE,
- transition.mType);
- outputStream.write(com.android.server.wm.shell.TransitionState.STATE,
- transition.getState());
- outputStream.write(com.android.server.wm.shell.TransitionState.FLAGS,
- transition.getFlags());
-
- for (int i = 0; i < transition.mChanges.size(); ++i) {
- final WindowContainer window = transition.mChanges.keyAt(i);
- final ChangeInfo changeInfo = transition.mChanges.valueAt(i);
- dumpChangeInfoToProto(outputStream, window, changeInfo);
- }
-
- for (int i = 0; i < transition.mParticipants.size(); ++i) {
- final WindowContainer window = transition.mParticipants.valueAt(i);
- window.writeIdentifierToProto(outputStream,
- com.android.server.wm.shell.TransitionState.PARTICIPANTS);
- }
-
- outputStream.end(stateToken);
- Trace.endSection();
- }
-
- private void dumpChangeInfoToProto(ProtoOutputStream outputStream, WindowContainer window,
- ChangeInfo changeInfo) {
- Trace.beginSection("TransitionTraceBuffer#writeChange");
- final long changeEntryToken =
- outputStream.start(com.android.server.wm.shell.TransitionState.CHANGE);
-
- final int transitMode = changeInfo.getTransitMode(window);
- final boolean hasChanged = changeInfo.hasChanged();
- final int changeFlags = changeInfo.getChangeFlags(window);
- final int windowingMode = changeInfo.mWindowingMode;
-
- outputStream.write(com.android.server.wm.shell.ChangeInfo.TRANSIT_MODE, transitMode);
- outputStream.write(com.android.server.wm.shell.ChangeInfo.HAS_CHANGED, hasChanged);
- outputStream.write(com.android.server.wm.shell.ChangeInfo.CHANGE_FLAGS, changeFlags);
- outputStream.write(com.android.server.wm.shell.ChangeInfo.WINDOWING_MODE, windowingMode);
- window.writeIdentifierToProto(
- outputStream, com.android.server.wm.shell.ChangeInfo.WINDOW_IDENTIFIER);
-
- outputStream.end(changeEntryToken);
- Trace.endSection();
- }
-
- private void dumpTransitionInfoToProto(ProtoOutputStream outputStream,
- Transition transition, TransitionInfo info) {
- Trace.beginSection("TransitionTracer#dumpTransitionInfoToProto");
- final long transitionInfoToken = outputStream
- .start(com.android.server.wm.shell.TransitionTraceProto.TRANSITION_INFO);
-
- outputStream.write(com.android.server.wm.shell.TransitionInfo.TRANSITION_ID,
- transition.getSyncId());
- for (int i = 0; i < info.getChanges().size(); ++i) {
- TransitionInfo.Change change = info.getChanges().get(i);
- dumpTransitionInfoChangeToProto(outputStream, change);
- }
-
- outputStream.end(transitionInfoToken);
- Trace.endSection();
- }
-
- private void dumpTransitionInfoChangeToProto(
- ProtoOutputStream outputStream,
- TransitionInfo.Change change
- ) {
- Trace.beginSection("TransitionTracer#dumpTransitionInfoChangeToProto");
- final long changeEntryToken = outputStream
- .start(com.android.server.wm.shell.TransitionInfo.CHANGE);
-
- outputStream.write(com.android.server.wm.shell.TransitionInfoChange.LAYER_ID,
- change.getLeash().getLayerId());
- outputStream.write(com.android.server.wm.shell.TransitionInfoChange.MODE, change.getMode());
-
- outputStream.end(changeEntryToken);
- Trace.endSection();
- }
-
- private class TransitionTraceBuffer {
- private final TraceBuffer mTransitionBuffer = new TraceBuffer(ALWAYS_ON_TRACING_CAPACITY);
- private final TraceBuffer mStateBuffer = new TraceBuffer(ACTIVE_TRACING_BUFFER_CAPACITY);
- private final TraceBuffer mTransitionInfoBuffer =
- new TraceBuffer(ACTIVE_TRACING_BUFFER_CAPACITY);
-
- private void pushTransitionProto(ProtoOutputStream outputStream) {
- mTransitionBuffer.add(outputStream);
- }
-
- private void pushTransitionState(ProtoOutputStream outputStream) {
- mStateBuffer.add(outputStream);
- }
-
- private void pushTransitionInfo(ProtoOutputStream outputStream) {
- mTransitionInfoBuffer.add(outputStream);
- }
-
- public void writeToFile(File file, ProtoOutputStream proto) throws IOException {
- mTransitionBuffer.writeTraceToFile(file, proto);
- }
-
- public void reset() {
- mTransitionBuffer.resetBuffer();
- mStateBuffer.resetBuffer();
- mTransitionInfoBuffer.resetBuffer();
- }
- }
-
/**
* Starts collecting transitions for the trace.
* If called while a trace is already running, this will reset the trace.
@@ -335,8 +182,8 @@
LogAndPrintln.i(pw, "Starting shell transition trace.");
synchronized (mEnabledLock) {
mActiveTracingEnabled = true;
- mTraceBuffer.mTransitionBuffer.setCapacity(ACTIVE_TRACING_BUFFER_CAPACITY);
- mTraceBuffer.reset();
+ mTraceBuffer.resetBuffer();
+ mTraceBuffer.setCapacity(ACTIVE_TRACING_BUFFER_CAPACITY);
}
Trace.endSection();
}
@@ -364,8 +211,8 @@
synchronized (mEnabledLock) {
mActiveTracingEnabled = false;
writeTraceToFileLocked(pw, outputFile);
- mTraceBuffer.reset();
- mTraceBuffer.mTransitionBuffer.setCapacity(ALWAYS_ON_TRACING_CAPACITY);
+ mTraceBuffer.resetBuffer();
+ mTraceBuffer.setCapacity(ALWAYS_ON_TRACING_CAPACITY);
}
Trace.endSection();
}
@@ -404,7 +251,7 @@
int pid = android.os.Process.myPid();
LogAndPrintln.i(pw, "Writing file to " + file.getAbsolutePath()
+ " from process " + pid);
- mTraceBuffer.writeToFile(file, proto);
+ mTraceBuffer.writeTraceToFile(file, proto);
} catch (IOException e) {
LogAndPrintln.e(pw, "Unable to write buffer to file", e);
}
diff --git a/services/core/java/com/android/server/wm/WindowContainer.java b/services/core/java/com/android/server/wm/WindowContainer.java
index 3ccf183..be5f141 100644
--- a/services/core/java/com/android/server/wm/WindowContainer.java
+++ b/services/core/java/com/android/server/wm/WindowContainer.java
@@ -1416,6 +1416,9 @@
}
void onAppTransitionDone() {
+ if (mSurfaceFreezer.hasLeash()) {
+ mSurfaceFreezer.unfreeze(getSyncTransaction());
+ }
for (int i = mChildren.size() - 1; i >= 0; --i) {
final WindowContainer wc = mChildren.get(i);
wc.onAppTransitionDone();
@@ -3592,11 +3595,11 @@
&& !mTransitionController.useShellTransitionsRotation()) {
if (deltaRotation != Surface.ROTATION_0) {
updateSurfaceRotation(t, deltaRotation, null /* positionLeash */);
- t.setFixedTransformHint(mSurfaceControl,
+ getPendingTransaction().setFixedTransformHint(mSurfaceControl,
getWindowConfiguration().getDisplayRotation());
} else if (deltaRotation != mLastDeltaRotation) {
t.setMatrix(mSurfaceControl, 1, 0, 0, 1);
- t.unsetFixedTransformHint(mSurfaceControl);
+ getPendingTransaction().unsetFixedTransformHint(mSurfaceControl);
}
}
mLastDeltaRotation = deltaRotation;
@@ -3990,6 +3993,9 @@
}
// Otherwise this is the "root" of a synced subtree, so continue on to preparation.
}
+ if (oldParent != null && newParent != null && !shouldUpdateSyncOnReparent()) {
+ return;
+ }
// This container's situation has changed so we need to restart its sync.
// We cannot reset the sync without a chance of a deadlock since it will request a new
@@ -4004,6 +4010,11 @@
prepareSync();
}
+ /** Returns {@code true} if {@link #mSyncState} needs to be updated when reparenting. */
+ protected boolean shouldUpdateSyncOnReparent() {
+ return true;
+ }
+
void registerWindowContainerListener(WindowContainerListener listener) {
registerWindowContainerListener(listener, true /* shouldPropConfig */);
}
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index 40c6c46..25b7df4 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -283,6 +283,7 @@
import android.view.SurfaceSession;
import android.view.TaskTransitionSpec;
import android.view.View;
+import android.view.ViewDebug;
import android.view.WindowContentFrameStats;
import android.view.WindowInsets;
import android.view.WindowInsets.Type.InsetsType;
@@ -1811,7 +1812,7 @@
if (imMayMove) {
displayContent.computeImeTarget(true /* updateImeTarget */);
if (win.isImeOverlayLayeringTarget()) {
- dispatchImeTargetOverlayVisibilityChanged(client.asBinder(),
+ dispatchImeTargetOverlayVisibilityChanged(client.asBinder(), win.mAttrs.type,
win.isVisibleRequestedOrAdding(), false /* removed */);
}
}
@@ -2521,7 +2522,7 @@
final boolean winVisibleChanged = win.isVisible() != wasVisible;
if (win.isImeOverlayLayeringTarget() && winVisibleChanged) {
- dispatchImeTargetOverlayVisibilityChanged(client.asBinder(),
+ dispatchImeTargetOverlayVisibilityChanged(client.asBinder(), win.mAttrs.type,
win.isVisible(), false /* removed */);
}
// Notify listeners about IME input target window visibility change.
@@ -2675,7 +2676,7 @@
void finishDrawingWindow(Session session, IWindow client,
@Nullable SurfaceControl.Transaction postDrawTransaction, int seqId) {
if (postDrawTransaction != null) {
- postDrawTransaction.sanitize();
+ postDrawTransaction.sanitize(Binder.getCallingPid(), Binder.getCallingUid());
}
final long origId = Binder.clearCallingIdentity();
@@ -3355,15 +3356,17 @@
});
}
- void dispatchImeTargetOverlayVisibilityChanged(@NonNull IBinder token, boolean visible,
+ void dispatchImeTargetOverlayVisibilityChanged(@NonNull IBinder token,
+ @WindowManager.LayoutParams.WindowType int windowType, boolean visible,
boolean removed) {
if (mImeTargetChangeListener != null) {
if (DEBUG_INPUT_METHOD) {
Slog.d(TAG, "onImeTargetOverlayVisibilityChanged, win=" + mWindowMap.get(token)
- + "visible=" + visible + ", removed=" + removed);
+ + ", type=" + ViewDebug.intToString(WindowManager.LayoutParams.class,
+ "type", windowType) + "visible=" + visible + ", removed=" + removed);
}
mH.post(() -> mImeTargetChangeListener.onImeTargetOverlayVisibilityChanged(token,
- visible, removed));
+ windowType, visible, removed));
}
}
@@ -3615,6 +3618,19 @@
return mUmInternal.isUserVisible(userId);
}
+ @UserIdInt int getUserAssignedToDisplay(int displayId) {
+ return mUmInternal.getUserAssignedToDisplay(displayId);
+ }
+
+ boolean shouldPlacePrimaryHomeOnDisplay(int displayId) {
+ int userId = mUmInternal.getUserAssignedToDisplay(displayId);
+ return shouldPlacePrimaryHomeOnDisplay(displayId, userId);
+ }
+
+ boolean shouldPlacePrimaryHomeOnDisplay(int displayId, int userId) {
+ return mUmInternal.getMainDisplayAssignedToUser(userId) == displayId;
+ }
+
public void enableScreenAfterBoot() {
synchronized (mGlobalLock) {
ProtoLog.i(WM_DEBUG_BOOT, "enableScreenAfterBoot: mDisplayEnabled=%b "
@@ -3909,15 +3925,17 @@
/**
* Returns the touch mode state for the display id passed as argument.
+ *
+ * This method will return the default touch mode state (represented by
+ * {@code com.android.internal.R.bool.config_defaultInTouchMode}) if the display passed as
+ * argument is no longer registered in {@RootWindowContainer}).
*/
@Override // Binder call
public boolean isInTouchMode(int displayId) {
synchronized (mGlobalLock) {
final DisplayContent displayContent = mRoot.getDisplayContent(displayId);
if (displayContent == null) {
- throw new IllegalStateException("Failed to retrieve the touch mode state for"
- + "display {" + displayId + "}: display is not registered in "
- + "WindowRootContainer");
+ return mContext.getResources().getBoolean(R.bool.config_defaultInTouchMode);
}
return displayContent.isInTouchMode();
}
diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java
index 032f08a..ba94282 100644
--- a/services/core/java/com/android/server/wm/WindowState.java
+++ b/services/core/java/com/android/server/wm/WindowState.java
@@ -2349,7 +2349,7 @@
super.removeImmediately();
if (isImeOverlayLayeringTarget()) {
- mWmService.dispatchImeTargetOverlayVisibilityChanged(mClient.asBinder(),
+ mWmService.dispatchImeTargetOverlayVisibilityChanged(mClient.asBinder(), mAttrs.type,
false /* visible */, true /* removed */);
}
final DisplayContent dc = getDisplayContent();
@@ -5635,6 +5635,13 @@
}
@Override
+ protected boolean shouldUpdateSyncOnReparent() {
+ // Keep the sync state in case the client is drawing for the latest conifguration or the
+ // configuration is not changed after reparenting. This avoids a redundant redraw request.
+ return mSyncState != SYNC_STATE_NONE && !mLastConfigReportedToClient;
+ }
+
+ @Override
boolean prepareSync() {
if (!mDrawHandlers.isEmpty()) {
Slog.w(TAG, "prepareSync with mDrawHandlers, " + this + ", " + Debug.getCallers(8));
diff --git a/services/core/java/com/android/server/wm/WindowToken.java b/services/core/java/com/android/server/wm/WindowToken.java
index 4c5efef..31afcbf 100644
--- a/services/core/java/com/android/server/wm/WindowToken.java
+++ b/services/core/java/com/android/server/wm/WindowToken.java
@@ -596,7 +596,8 @@
.build();
t.setPosition(leash, mLastSurfacePosition.x, mLastSurfacePosition.y);
t.reparent(getSurfaceControl(), leash);
- t.setFixedTransformHint(leash, getWindowConfiguration().getDisplayRotation());
+ getPendingTransaction().setFixedTransformHint(leash,
+ getWindowConfiguration().getDisplayRotation());
mFixedRotationTransformLeash = leash;
updateSurfaceRotation(t, rotation, mFixedRotationTransformLeash);
return mFixedRotationTransformLeash;
diff --git a/services/credentials/java/com/android/server/credentials/ClearRequestSession.java b/services/credentials/java/com/android/server/credentials/ClearRequestSession.java
index 04ecd6e..e3d4c22 100644
--- a/services/credentials/java/com/android/server/credentials/ClearRequestSession.java
+++ b/services/credentials/java/com/android/server/credentials/ClearRequestSession.java
@@ -19,6 +19,7 @@
import android.annotation.Nullable;
import android.content.ComponentName;
import android.content.Context;
+import android.credentials.ClearCredentialStateException;
import android.credentials.ClearCredentialStateRequest;
import android.credentials.CredentialProviderInfo;
import android.credentials.IClearCredentialStateCallback;
@@ -29,6 +30,8 @@
import android.service.credentials.CallingAppInfo;
import android.util.Slog;
+import com.android.server.credentials.metrics.ProviderSessionMetric;
+
import java.util.ArrayList;
import java.util.Set;
@@ -92,9 +95,12 @@
public void onFinalResponseReceived(
ComponentName componentName,
Void response) {
- mRequestSessionMetric.collectChosenMetricViaCandidateTransfer(
- mProviders.get(componentName.flattenToString()).mProviderSessionMetric
- .getCandidatePhasePerProviderMetric());
+ if (mProviders.get(componentName.flattenToString()) != null) {
+ ProviderSessionMetric providerSessionMetric =
+ mProviders.get(componentName.flattenToString()).mProviderSessionMetric;
+ mRequestSessionMetric.collectChosenMetricViaCandidateTransfer(providerSessionMetric
+ .getCandidatePhasePerProviderMetric());
+ }
respondToClientWithResponseAndFinish(null);
}
@@ -141,8 +147,9 @@
return;
}
}
- // TODO: Replace with properly defined error type
- respondToClientWithErrorAndFinish("UNKNOWN", "All providers failed");
+ String exception = ClearCredentialStateException.TYPE_UNKNOWN;
+ mRequestSessionMetric.collectFrameworkException(exception);
+ respondToClientWithErrorAndFinish(exception, "All providers failed");
}
@Override
diff --git a/services/credentials/java/com/android/server/credentials/CreateRequestSession.java b/services/credentials/java/com/android/server/credentials/CreateRequestSession.java
index 4b32062..2d6e74f 100644
--- a/services/credentials/java/com/android/server/credentials/CreateRequestSession.java
+++ b/services/credentials/java/com/android/server/credentials/CreateRequestSession.java
@@ -35,6 +35,7 @@
import android.service.credentials.PermissionUtils;
import android.util.Slog;
+import com.android.server.credentials.metrics.ProviderSessionMetric;
import com.android.server.credentials.metrics.ProviderStatusForMetrics;
import java.util.ArrayList;
@@ -49,6 +50,7 @@
ICreateCredentialCallback, CreateCredentialResponse>
implements ProviderSession.ProviderInternalCallback<CreateCredentialResponse> {
private static final String TAG = "CreateRequestSession";
+ private final Set<String> mPrimaryProviders;
CreateRequestSession(@NonNull Context context, RequestSession.SessionLifetime sessionCallback,
Object lock, int userId, int callingUid,
@@ -56,6 +58,7 @@
ICreateCredentialCallback callback,
CallingAppInfo callingAppInfo,
Set<ComponentName> enabledProviders,
+ Set<String> primaryProviders,
CancellationSignal cancellationSignal,
long startedTimestamp) {
super(context, sessionCallback, lock, userId, callingUid, request, callback,
@@ -63,6 +66,7 @@
callingAppInfo, enabledProviders, cancellationSignal, startedTimestamp);
mRequestSessionMetric.collectCreateFlowInitialMetricInfo(
/*origin=*/request.getOrigin() != null);
+ mPrimaryProviders = primaryProviders;
}
/**
@@ -99,8 +103,7 @@
mClientAppInfo.getPackageName(),
PermissionUtils.hasPermission(mContext, mClientAppInfo.getPackageName(),
Manifest.permission.CREDENTIAL_MANAGER_SET_ALLOWED_PROVIDERS),
- // TODO(b/279480457): populate
- /*defaultProviderId=*/new ArrayList<>()),
+ /*defaultProviderId=*/new ArrayList<String>(mPrimaryProviders)),
providerDataList);
mClientCallback.onPendingIntent(mPendingIntent);
} catch (RemoteException e) {
@@ -129,9 +132,12 @@
@Nullable CreateCredentialResponse response) {
Slog.i(TAG, "Final credential received from: " + componentName.flattenToString());
mRequestSessionMetric.collectUiResponseData(/*uiReturned=*/ true, System.nanoTime());
- mRequestSessionMetric.collectChosenMetricViaCandidateTransfer(mProviders.get(
- componentName.flattenToString()).mProviderSessionMetric
- .getCandidatePhasePerProviderMetric());
+ if (mProviders.get(componentName.flattenToString()) != null) {
+ ProviderSessionMetric providerSessionMetric =
+ mProviders.get(componentName.flattenToString()).mProviderSessionMetric;
+ mRequestSessionMetric.collectChosenMetricViaCandidateTransfer(providerSessionMetric
+ .getCandidatePhasePerProviderMetric());
+ }
if (response != null) {
mRequestSessionMetric.collectChosenProviderStatus(
ProviderStatusForMetrics.FINAL_SUCCESS.getMetricCode());
@@ -139,7 +145,9 @@
} else {
mRequestSessionMetric.collectChosenProviderStatus(
ProviderStatusForMetrics.FINAL_FAILURE.getMetricCode());
- respondToClientWithErrorAndFinish(CreateCredentialException.TYPE_NO_CREATE_OPTIONS,
+ String exception = CreateCredentialException.TYPE_NO_CREATE_OPTIONS;
+ mRequestSessionMetric.collectFrameworkException(exception);
+ respondToClientWithErrorAndFinish(exception,
"Invalid response");
}
}
@@ -152,18 +160,21 @@
@Override
public void onUiCancellation(boolean isUserCancellation) {
- if (isUserCancellation) {
- respondToClientWithErrorAndFinish(CreateCredentialException.TYPE_USER_CANCELED,
- "User cancelled the selector");
- } else {
- respondToClientWithErrorAndFinish(CreateCredentialException.TYPE_INTERRUPTED,
- "The UI was interrupted - please try again.");
+ String exception = CreateCredentialException.TYPE_USER_CANCELED;
+ String message = "User cancelled the selector";
+ if (!isUserCancellation) {
+ exception = CreateCredentialException.TYPE_INTERRUPTED;
+ message = "The UI was interrupted - please try again.";
}
+ mRequestSessionMetric.collectFrameworkException(exception);
+ respondToClientWithErrorAndFinish(exception, message);
}
@Override
public void onUiSelectorInvocationFailure() {
- respondToClientWithErrorAndFinish(CreateCredentialException.TYPE_NO_CREATE_OPTIONS,
+ String exception = CreateCredentialException.TYPE_NO_CREATE_OPTIONS;
+ mRequestSessionMetric.collectFrameworkException(exception);
+ respondToClientWithErrorAndFinish(exception,
"No create options available.");
}
@@ -179,7 +190,9 @@
Slog.i(TAG, "Provider status changed - ui invocation is needed");
getProviderDataAndInitiateUi();
} else {
- respondToClientWithErrorAndFinish(CreateCredentialException.TYPE_NO_CREATE_OPTIONS,
+ String exception = CreateCredentialException.TYPE_NO_CREATE_OPTIONS;
+ mRequestSessionMetric.collectFrameworkException(exception);
+ respondToClientWithErrorAndFinish(exception,
"No create options available.");
}
}
diff --git a/services/credentials/java/com/android/server/credentials/CredentialManagerService.java b/services/credentials/java/com/android/server/credentials/CredentialManagerService.java
index dd180d0..86dbe11 100644
--- a/services/credentials/java/com/android/server/credentials/CredentialManagerService.java
+++ b/services/credentials/java/com/android/server/credentials/CredentialManagerService.java
@@ -18,7 +18,6 @@
import static android.Manifest.permission.CREDENTIAL_MANAGER_SET_ALLOWED_PROVIDERS;
import static android.Manifest.permission.CREDENTIAL_MANAGER_SET_ORIGIN;
-import static android.Manifest.permission.LAUNCH_CREDENTIAL_SELECTOR;
import static android.content.Context.CREDENTIAL_SERVICE;
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
@@ -46,7 +45,6 @@
import android.credentials.PrepareGetCredentialResponseInternal;
import android.credentials.RegisterCredentialDescriptionRequest;
import android.credentials.UnregisterCredentialDescriptionRequest;
-import android.credentials.ui.IntentFactory;
import android.os.Binder;
import android.os.CancellationSignal;
import android.os.IBinder;
@@ -69,6 +67,7 @@
import com.android.server.infra.SecureSettingsServiceNameResolver;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashSet;
@@ -196,25 +195,36 @@
return;
}
- CredentialManagerServiceImpl serviceToBeRemoved = null;
+ List<CredentialManagerServiceImpl> servicesToBeRemoved = new ArrayList<>();
for (CredentialManagerServiceImpl service : services) {
if (service != null) {
CredentialProviderInfo credentialProviderInfo = service.getCredentialProviderInfo();
ComponentName componentName =
credentialProviderInfo.getServiceInfo().getComponentName();
if (packageName.equals(componentName.getPackageName())) {
- serviceToBeRemoved = service;
- removeServiceFromMultiModeSettings(componentName.flattenToString(), userId);
- break;
+ servicesToBeRemoved.add(service);
}
}
}
- if (serviceToBeRemoved != null) {
+
+ // Iterate over all the services to be removed, and remove them from the user configurable
+ // services cache, the system services cache as well as the setting key-value pair.
+ for (CredentialManagerServiceImpl serviceToBeRemoved : servicesToBeRemoved) {
removeServiceFromCache(serviceToBeRemoved, userId);
+ removeServiceFromSystemServicesCache(serviceToBeRemoved, userId);
+ removeServiceFromMultiModeSettings(serviceToBeRemoved.getComponentName()
+ .flattenToString(), userId);
CredentialDescriptionRegistry.forUser(userId)
.evictProviderWithPackageName(serviceToBeRemoved.getServicePackageName());
}
- // TODO("Iterate over system services and remove if needed")
+ }
+
+ @GuardedBy("mLock")
+ private void removeServiceFromSystemServicesCache(
+ CredentialManagerServiceImpl serviceToBeRemoved, int userId) {
+ if (mSystemServicesCacheList.get(userId) != null) {
+ mSystemServicesCacheList.get(userId).remove(serviceToBeRemoved);
+ }
}
@GuardedBy("mLock")
@@ -271,6 +281,21 @@
}
}
+ private static Set<String> getPrimaryProvidersForUserId(Context context, int userId) {
+ final int resolvedUserId = ActivityManager.handleIncomingUser(
+ Binder.getCallingPid(), Binder.getCallingUid(),
+ userId, false, false,
+ "getPrimaryProvidersForUserId", null);
+ SecureSettingsServiceNameResolver resolver = new SecureSettingsServiceNameResolver(
+ context, Settings.Secure.CREDENTIAL_SERVICE_PRIMARY,
+ /* isMultipleMode= */ true);
+ String[] serviceNames = resolver.readServiceNameList(resolvedUserId);
+ if (serviceNames == null) {
+ return new HashSet<String>();
+ }
+ return new HashSet<String>(Arrays.asList(serviceNames));
+ }
+
@GuardedBy("mLock")
private List<CredentialManagerServiceImpl> getCredentialProviderServicesLocked(int userId) {
List<CredentialManagerServiceImpl> concatenatedServices = new ArrayList<>();
@@ -457,7 +482,7 @@
callback,
request,
constructCallingAppInfo(callingPackage, userId, request.getOrigin()),
- getEnabledProviders(),
+ getEnabledProvidersForUser(userId),
CancellationSignal.fromTransport(cancelTransport),
timestampBegan);
addSessionLocked(userId, session);
@@ -512,7 +537,7 @@
getCredentialCallback,
request,
constructCallingAppInfo(callingPackage, userId, request.getOrigin()),
- getEnabledProviders(),
+ getEnabledProvidersForUser(userId),
CancellationSignal.fromTransport(cancelTransport),
timestampBegan,
prepareGetCredentialCallback);
@@ -630,7 +655,8 @@
request,
callback,
constructCallingAppInfo(callingPackage, userId, request.getOrigin()),
- getEnabledProviders(),
+ getEnabledProvidersForUser(userId),
+ getPrimaryProvidersForUserId(getContext(), userId),
CancellationSignal.fromTransport(cancelTransport),
timestampBegan);
addSessionLocked(userId, session);
@@ -678,7 +704,8 @@
@Override
public void setEnabledProviders(
- List<String> providers, int userId, ISetEnabledProvidersCallback callback) {
+ List<String> primaryProviders, List<String> providers, int userId,
+ ISetEnabledProvidersCallback callback) {
if (!hasWriteSecureSettingsPermission()) {
try {
callback.onError(
@@ -699,17 +726,27 @@
"setEnabledProviders",
null);
- String storedValue = String.join(":", providers);
- if (!Settings.Secure.putStringForUser(
- getContext().getContentResolver(),
- Settings.Secure.CREDENTIAL_SERVICE,
- storedValue,
- userId)) {
- Slog.e(TAG, "Failed to store setting containing enabled providers");
+ Set<String> enableProvider = new HashSet<>(providers);
+ enableProvider.addAll(primaryProviders);
+
+ boolean writeEnabledStatus =
+ Settings.Secure.putStringForUser(getContext().getContentResolver(),
+ Settings.Secure.CREDENTIAL_SERVICE,
+ String.join(":", enableProvider),
+ userId);
+
+ boolean writePrimaryStatus =
+ Settings.Secure.putStringForUser(getContext().getContentResolver(),
+ Settings.Secure.CREDENTIAL_SERVICE_PRIMARY,
+ String.join(":", primaryProviders),
+ userId);
+
+ if (!writeEnabledStatus || !writePrimaryStatus) {
+ Slog.e(TAG, "Failed to store setting containing enabled or primary providers");
try {
callback.onError(
"failed_setting_store",
- "Failed to store setting containing enabled providers");
+ "Failed to store setting containing enabled or primary providers");
} catch (RemoteException e) {
Slog.e(TAG, "Issue with invoking error response: ", e);
return;
@@ -723,10 +760,6 @@
Slog.e(TAG, "Issue with invoking response: ", e);
// TODO: Propagate failure
}
-
- // Send an intent to the UI that we have new enabled providers.
- getContext().sendBroadcast(IntentFactory.createProviderUpdateIntent(),
- LAUNCH_CREDENTIAL_SELECTOR);
}
@Override
@@ -774,7 +807,8 @@
verifyGetProvidersPermission();
return CredentialProviderInfoFactory.getCredentialProviderServices(
- mContext, userId, providerFilter, getEnabledProviders());
+ mContext, userId, providerFilter, getEnabledProvidersForUser(userId),
+ getPrimaryProvidersForUserId(mContext, userId));
}
@Override
@@ -784,7 +818,8 @@
final int userId = UserHandle.getCallingUserId();
return CredentialProviderInfoFactory.getCredentialProviderServicesForTesting(
- mContext, userId, providerFilter, getEnabledProviders());
+ mContext, userId, providerFilter, getEnabledProvidersForUser(userId),
+ getPrimaryProvidersForUserId(mContext, userId));
}
@Override
@@ -800,24 +835,26 @@
}
}
- @SuppressWarnings("GuardedBy") // ErrorProne requires service.mLock which is the same
- // this.mLock
- private Set<ComponentName> getEnabledProviders() {
+ private Set<ComponentName> getEnabledProvidersForUser(int userId) {
+ final int resolvedUserId = ActivityManager.handleIncomingUser(
+ Binder.getCallingPid(), Binder.getCallingUid(),
+ userId, false, false,
+ "getEnabledProvidersForUser", null);
+
Set<ComponentName> enabledProviders = new HashSet<>();
- synchronized (mLock) {
- runForUser(
- (service) -> {
- try {
- enabledProviders.add(
- service.getCredentialProviderInfo()
- .getServiceInfo().getComponentName());
- } catch (NullPointerException e) {
- // Safe check
- Slog.e(TAG, "Skipping provider as either the providerInfo"
- + " or serviceInfo is null - weird");
- }
- });
+ String directValue = Settings.Secure.getStringForUser(
+ mContext.getContentResolver(), Settings.Secure.CREDENTIAL_SERVICE, resolvedUserId);
+
+ if (!TextUtils.isEmpty(directValue)) {
+ String[] components = directValue.split(":");
+ for (String componentString : components) {
+ ComponentName component = ComponentName.unflattenFromString(componentString);
+ if (component != null) {
+ enabledProviders.add(component);
+ }
+ }
}
+
return enabledProviders;
}
@@ -847,7 +884,7 @@
callback,
request,
constructCallingAppInfo(callingPackage, userId, null),
- getEnabledProviders(),
+ getEnabledProvidersForUser(userId),
CancellationSignal.fromTransport(cancelTransport),
timestampBegan);
addSessionLocked(userId, session);
diff --git a/services/credentials/java/com/android/server/credentials/CredentialManagerServiceImpl.java b/services/credentials/java/com/android/server/credentials/CredentialManagerServiceImpl.java
index 808fdae..379800b 100644
--- a/services/credentials/java/com/android/server/credentials/CredentialManagerServiceImpl.java
+++ b/services/credentials/java/com/android/server/credentials/CredentialManagerServiceImpl.java
@@ -38,7 +38,6 @@
AbstractPerUserSystemService<CredentialManagerServiceImpl, CredentialManagerService> {
private static final String TAG = "CredManSysServiceImpl";
- // TODO(b/210531) : Make final when update flow is fixed
@GuardedBy("mLock")
@NonNull
private CredentialProviderInfo mInfo;
@@ -72,7 +71,6 @@
@GuardedBy("mLock")
protected ServiceInfo newServiceInfoLocked(@NonNull ComponentName serviceComponent)
throws PackageManager.NameNotFoundException {
- // TODO : Test update flows with multiple providers
if (mInfo != null) {
Slog.i(TAG, "newServiceInfoLocked, mInfo not null : "
+ mInfo.getServiceInfo().getComponentName().flattenToString() + " , "
diff --git a/services/credentials/java/com/android/server/credentials/CredentialManagerUi.java b/services/credentials/java/com/android/server/credentials/CredentialManagerUi.java
index 0dee7a4..25561ed 100644
--- a/services/credentials/java/com/android/server/credentials/CredentialManagerUi.java
+++ b/services/credentials/java/com/android/server/credentials/CredentialManagerUi.java
@@ -33,9 +33,11 @@
import android.os.Looper;
import android.os.ResultReceiver;
import android.service.credentials.CredentialProviderInfoFactory;
+import android.util.Log;
import android.util.Slog;
import java.util.ArrayList;
+import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.UUID;
@@ -47,7 +49,7 @@
private final CredentialManagerUiCallback mCallbacks;
@NonNull
private final Context mContext;
- // TODO : Use for starting the activity for this user
+
private final int mUserId;
private UiStatus mStatus;
@@ -70,6 +72,8 @@
};
private void handleUiResult(int resultCode, Bundle resultData) {
+ Log.i("reemademo", "handleUiResult with resultCOde: " + resultCode);
+
switch (resultCode) {
case UserSelectionDialogResult.RESULT_CODE_DIALOG_COMPLETE_WITH_SELECTION:
mStatus = UiStatus.IN_PROGRESS;
@@ -82,10 +86,14 @@
}
break;
case UserSelectionDialogResult.RESULT_CODE_DIALOG_USER_CANCELED:
+ Log.i("reemademo", "RESULT_CODE_DIALOG_USER_CANCELED");
+
mStatus = UiStatus.TERMINATED;
mCallbacks.onUiCancellation(/* isUserCancellation= */ true);
break;
case UserSelectionDialogResult.RESULT_CODE_CANCELED_AND_LAUNCHED_SETTINGS:
+ Log.i("reemademo", "RESULT_CODE_CANCELED_AND_LAUNCHED_SETTINGS");
+
mStatus = UiStatus.TERMINATED;
mCallbacks.onUiCancellation(/* isUserCancellation= */ false);
break;
@@ -94,7 +102,7 @@
mCallbacks.onUiSelectorInvocationFailure();
break;
default:
- Slog.i(TAG, "Unknown error code returned from the UI");
+ Log.i("reemademo", "Unknown error code returned from the UI");
mStatus = UiStatus.IN_PROGRESS;
mCallbacks.onUiSelectorInvocationFailure();
break;
@@ -154,7 +162,9 @@
mContext,
mUserId,
CredentialManager.PROVIDER_FILTER_USER_PROVIDERS_ONLY,
- mEnabledProviders);
+ mEnabledProviders,
+ // Don't need primary providers here.
+ new HashSet<String>());
List<DisabledProviderData> disabledProviderDataList = allProviders.stream()
.filter(provider -> !provider.isEnabled())
diff --git a/services/credentials/java/com/android/server/credentials/GetRequestSession.java b/services/credentials/java/com/android/server/credentials/GetRequestSession.java
index 1503410..9eb3b3b 100644
--- a/services/credentials/java/com/android/server/credentials/GetRequestSession.java
+++ b/services/credentials/java/com/android/server/credentials/GetRequestSession.java
@@ -19,6 +19,7 @@
import android.annotation.Nullable;
import android.content.ComponentName;
import android.content.Context;
+import android.credentials.CredentialOption;
import android.credentials.CredentialProviderInfo;
import android.credentials.GetCredentialException;
import android.credentials.GetCredentialRequest;
@@ -31,6 +32,7 @@
import android.service.credentials.CallingAppInfo;
import android.util.Slog;
+import com.android.server.credentials.metrics.ProviderSessionMetric;
import com.android.server.credentials.metrics.ProviderStatusForMetrics;
import java.util.ArrayList;
@@ -52,11 +54,22 @@
CancellationSignal cancellationSignal,
long startedTimestamp) {
super(context, sessionCallback, lock, userId, callingUid, request, callback,
- RequestInfo.TYPE_GET, callingAppInfo, enabledProviders, cancellationSignal,
- startedTimestamp);
+ getRequestInfoFromRequest(request), callingAppInfo, enabledProviders,
+ cancellationSignal, startedTimestamp);
mRequestSessionMetric.collectGetFlowInitialMetricInfo(request);
}
+ private static String getRequestInfoFromRequest(GetCredentialRequest request) {
+ for (CredentialOption option : request.getCredentialOptions()) {
+ if (option.getCredentialRetrievalData().getStringArrayList(
+ CredentialOption
+ .SUPPORTED_ELEMENT_KEYS) != null) {
+ return RequestInfo.TYPE_GET_VIA_REGISTRY;
+ }
+ }
+ return RequestInfo.TYPE_GET;
+ }
+
/**
* Creates a new provider session, and adds it list of providers that are contributing to
* this session.
@@ -94,8 +107,10 @@
} catch (RemoteException e) {
mRequestSessionMetric.collectUiReturnedFinalPhase(/*uiReturned=*/ false);
mCredentialManagerUi.setStatus(CredentialManagerUi.UiStatus.TERMINATED);
+ String exception = GetCredentialException.TYPE_UNKNOWN;
+ mRequestSessionMetric.collectFrameworkException(exception);
respondToClientWithErrorAndFinish(
- GetCredentialException.TYPE_UNKNOWN, "Unable to instantiate selector");
+ exception, "Unable to instantiate selector");
}
}
@@ -116,9 +131,12 @@
@Nullable GetCredentialResponse response) {
Slog.i(TAG, "onFinalResponseReceived from: " + componentName.flattenToString());
mRequestSessionMetric.collectUiResponseData(/*uiReturned=*/ true, System.nanoTime());
- mRequestSessionMetric.collectChosenMetricViaCandidateTransfer(
- mProviders.get(componentName.flattenToString())
- .mProviderSessionMetric.getCandidatePhasePerProviderMetric());
+ if (mProviders.get(componentName.flattenToString()) != null) {
+ ProviderSessionMetric providerSessionMetric =
+ mProviders.get(componentName.flattenToString()).mProviderSessionMetric;
+ mRequestSessionMetric.collectChosenMetricViaCandidateTransfer(providerSessionMetric
+ .getCandidatePhasePerProviderMetric());
+ }
if (response != null) {
mRequestSessionMetric.collectChosenProviderStatus(
ProviderStatusForMetrics.FINAL_SUCCESS.getMetricCode());
@@ -126,7 +144,9 @@
} else {
mRequestSessionMetric.collectChosenProviderStatus(
ProviderStatusForMetrics.FINAL_FAILURE.getMetricCode());
- respondToClientWithErrorAndFinish(GetCredentialException.TYPE_NO_CREDENTIAL,
+ String exception = GetCredentialException.TYPE_NO_CREDENTIAL;
+ mRequestSessionMetric.collectFrameworkException(exception);
+ respondToClientWithErrorAndFinish(exception,
"Invalid response from provider");
}
}
@@ -140,18 +160,21 @@
@Override
public void onUiCancellation(boolean isUserCancellation) {
- if (isUserCancellation) {
- respondToClientWithErrorAndFinish(GetCredentialException.TYPE_USER_CANCELED,
- "User cancelled the selector");
- } else {
- respondToClientWithErrorAndFinish(GetCredentialException.TYPE_INTERRUPTED,
- "The UI was interrupted - please try again.");
+ String exception = GetCredentialException.TYPE_NO_CREDENTIAL;
+ String message = "User cancelled the selector";
+ if (!isUserCancellation) {
+ exception = GetCredentialException.TYPE_INTERRUPTED;
+ message = "The UI was interrupted - please try again.";
}
+ mRequestSessionMetric.collectFrameworkException(exception);
+ respondToClientWithErrorAndFinish(exception, message);
}
@Override
public void onUiSelectorInvocationFailure() {
- respondToClientWithErrorAndFinish(GetCredentialException.TYPE_NO_CREDENTIAL,
+ String exception = GetCredentialException.TYPE_NO_CREDENTIAL;
+ mRequestSessionMetric.collectFrameworkException(exception);
+ respondToClientWithErrorAndFinish(exception,
"No credentials available.");
}
@@ -175,7 +198,9 @@
Slog.i(TAG, "Provider status changed - ui invocation is needed");
getProviderDataAndInitiateUi();
} else {
- respondToClientWithErrorAndFinish(GetCredentialException.TYPE_NO_CREDENTIAL,
+ String exception = GetCredentialException.TYPE_NO_CREDENTIAL;
+ mRequestSessionMetric.collectFrameworkException(exception);
+ respondToClientWithErrorAndFinish(exception,
"No credentials available");
}
}
@@ -196,7 +221,9 @@
// Respond to client if all auth entries are empty and nothing else to show on the UI
if (providerDataContainsEmptyAuthEntriesOnly()) {
- respondToClientWithErrorAndFinish(GetCredentialException.TYPE_NO_CREDENTIAL,
+ String exception = GetCredentialException.TYPE_NO_CREDENTIAL;
+ mRequestSessionMetric.collectFrameworkException(exception);
+ respondToClientWithErrorAndFinish(exception,
"No credentials available");
}
}
diff --git a/services/credentials/java/com/android/server/credentials/MetricUtilities.java b/services/credentials/java/com/android/server/credentials/MetricUtilities.java
index e4c6b3a..f9c44a9 100644
--- a/services/credentials/java/com/android/server/credentials/MetricUtilities.java
+++ b/services/credentials/java/com/android/server/credentials/MetricUtilities.java
@@ -24,12 +24,14 @@
import com.android.internal.util.FrameworkStatsLog;
import com.android.server.credentials.metrics.ApiName;
import com.android.server.credentials.metrics.ApiStatus;
+import com.android.server.credentials.metrics.CandidateAggregateMetric;
import com.android.server.credentials.metrics.CandidateBrowsingPhaseMetric;
import com.android.server.credentials.metrics.CandidatePhaseMetric;
import com.android.server.credentials.metrics.ChosenProviderFinalPhaseMetric;
import com.android.server.credentials.metrics.EntryEnum;
import com.android.server.credentials.metrics.InitialPhaseMetric;
+import java.security.SecureRandom;
import java.util.List;
import java.util.Map;
@@ -48,12 +50,15 @@
public static final String DEFAULT_STRING = "";
public static final int[] DEFAULT_REPEATED_INT_32 = new int[0];
public static final String[] DEFAULT_REPEATED_STR = new String[0];
+ public static final boolean[] DEFAULT_REPEATED_BOOL = new boolean[0];
// Used for single count metric emits, such as singular amounts of various types
public static final int UNIT = 1;
// Used for zero count metric emits, such as zero amounts of various types
public static final int ZERO = 0;
// The number of characters at the end of the string to use as a key
- public static final int DELTA_CUT = 20;
+ public static final int DELTA_RESPONSES_CUT = 20;
+ // The cut for exception strings from the end - used to keep metrics small
+ public static final int DELTA_EXCEPTION_CUT = 30;
/**
* This retrieves the uid of any package name, given a context and a component name for the
@@ -76,6 +81,15 @@
}
/**
+ * Used to help generate random sequences for local sessions, in the time-scale of credential
+ * manager flows.
+ * @return a high entropy int useful to use in reasonable time-frame sessions.
+ */
+ public static int getHighlyUniqueInteger() {
+ return new SecureRandom().nextInt();
+ }
+
+ /**
* Given any two timestamps in nanoseconds, this gets the difference and converts to
* milliseconds. Assumes the difference is not larger than the maximum int size.
*
@@ -127,7 +141,7 @@
index++;
}
FrameworkStatsLog.write(FrameworkStatsLog.CREDENTIAL_MANAGER_FINAL_PHASE_REPORTED,
- /* session_id */ finalPhaseMetric.getSessionId(),
+ /* session_id */ finalPhaseMetric.getSessionIdProvider(),
/* sequence_num */ emitSequenceId,
/* ui_returned_final_start */ finalPhaseMetric.isUiReturned(),
/* chosen_provider_uid */ finalPhaseMetric.getChosenUid(),
@@ -165,8 +179,9 @@
finalPhaseMetric.getResponseCollective().getUniqueResponseStrings(),
/* per_classtype_counts */
finalPhaseMetric.getResponseCollective().getUniqueResponseCounts(),
- /* framework_exception_unique_classtypes */
- DEFAULT_STRING
+ /* framework_exception_unique_classtype */
+ finalPhaseMetric.getFrameworkException(),
+ /* primary_indicated */ false
);
} catch (Exception e) {
Slog.w(TAG, "Unexpected error during final provider uid emit: " + e);
@@ -210,7 +225,7 @@
CandidatePhaseMetric metric = session.mProviderSessionMetric
.getCandidatePhasePerProviderMetric();
if (sessionId == -1) {
- sessionId = metric.getSessionId();
+ sessionId = metric.getSessionIdProvider();
}
if (!queryReturned) {
queryReturned = metric.isQueryReturned();
@@ -268,7 +283,9 @@
/* per_classtype_counts */
initialPhaseMetric.getUniqueRequestCounts(),
/* api_name */
- initialPhaseMetric.getApiName()
+ initialPhaseMetric.getApiName(),
+ /* primary_candidates_indicated */
+ DEFAULT_REPEATED_BOOL
);
} catch (Exception e) {
Slog.w(TAG, "Unexpected error during candidate provider uid metric emit: " + e);
@@ -312,7 +329,7 @@
FrameworkStatsLog.write(FrameworkStatsLog.CREDENTIAL_MANAGER_INIT_PHASE_REPORTED,
/* api_name */ initialPhaseMetric.getApiName(),
/* caller_uid */ initialPhaseMetric.getCallerUid(),
- /* session_id */ initialPhaseMetric.getSessionId(),
+ /* session_id */ initialPhaseMetric.getSessionIdCaller(),
/* sequence_num */ sequenceNum,
/* initial_timestamp_reference_nanoseconds */
initialPhaseMetric.getCredentialServiceStartedTimeNanoseconds(),
@@ -329,4 +346,129 @@
Slog.w(TAG, "Unexpected error during initial metric emit: " + e);
}
}
+
+ /**
+ * A logging utility focused on track 1, where the calling app is known. This captures all
+ * aggregate information for the candidate phase.
+ *
+ * @param candidateAggregateMetric the aggregate candidate metric information collected
+ * @param sequenceNum the sequence number for this api call session emit
+ */
+ public static void logApiCalledAggregateCandidate(
+ CandidateAggregateMetric candidateAggregateMetric,
+ int sequenceNum) {
+ try {
+ if (!LOG_FLAG) {
+ FrameworkStatsLog.write(FrameworkStatsLog.CREDENTIAL_MANAGER_TOTAL_REPORTED,
+ /*session_id*/ candidateAggregateMetric.getSessionIdProvider(),
+ /*sequence_num*/ sequenceNum,
+ /*query_returned*/ candidateAggregateMetric.isQueryReturned(),
+ /*num_providers*/ candidateAggregateMetric.getNumProviders(),
+ /*min_query_start_timestamp_microseconds*/
+ DEFAULT_INT_32,
+ /*max_query_end_timestamp_microseconds*/
+ DEFAULT_INT_32,
+ /*query_response_unique_classtypes*/
+ DEFAULT_REPEATED_STR,
+ /*query_per_classtype_counts*/
+ DEFAULT_REPEATED_INT_32,
+ /*query_unique_entries*/
+ DEFAULT_REPEATED_INT_32,
+ /*query_per_entry_counts*/
+ DEFAULT_REPEATED_INT_32,
+ /*query_total_candidate_failure*/
+ DEFAULT_INT_32,
+ /*query_framework_exception_unique_classtypes*/
+ DEFAULT_REPEATED_STR,
+ /*query_per_exception_classtype_counts*/
+ DEFAULT_REPEATED_INT_32,
+ /*auth_response_unique_classtypes*/
+ DEFAULT_REPEATED_STR,
+ /*auth_per_classtype_counts*/
+ DEFAULT_REPEATED_INT_32,
+ /*auth_unique_entries*/
+ DEFAULT_REPEATED_INT_32,
+ /*auth_per_entry_counts*/
+ DEFAULT_REPEATED_INT_32,
+ /*auth_total_candidate_failure*/
+ DEFAULT_INT_32,
+ /*auth_framework_exception_unique_classtypes*/
+ DEFAULT_REPEATED_STR,
+ /*auth_per_exception_classtype_counts*/
+ DEFAULT_REPEATED_INT_32,
+ /*num_auth_clicks*/
+ DEFAULT_INT_32,
+ /*auth_returned*/ false
+ );
+ }
+ } catch (Exception e) {
+ Slog.w(TAG, "Unexpected error during metric logging: " + e);
+ }
+ }
+
+ /**
+ * A logging utility used primarily for the final phase of the current metric setup for track 1.
+ *
+ * @param finalPhaseMetric the coalesced data of the chosen provider
+ * @param browsingPhaseMetrics the coalesced data of the browsing phase
+ * @param apiStatus the final status of this particular api call
+ * @param emitSequenceId an emitted sequence id for the current session
+ */
+ public static void logApiCalledNoUidFinal(ChosenProviderFinalPhaseMetric finalPhaseMetric,
+ List<CandidateBrowsingPhaseMetric> browsingPhaseMetrics, int apiStatus,
+ int emitSequenceId) {
+ try {
+ if (!LOG_FLAG) {
+ return;
+ }
+ int browsedSize = browsingPhaseMetrics.size();
+ int[] browsedClickedEntries = new int[browsedSize];
+ int[] browsedProviderUid = new int[browsedSize];
+ int index = 0;
+ for (CandidateBrowsingPhaseMetric metric : browsingPhaseMetrics) {
+ browsedClickedEntries[index] = metric.getEntryEnum();
+ browsedProviderUid[index] = metric.getProviderUid();
+ index++;
+ }
+ FrameworkStatsLog.write(FrameworkStatsLog.CREDENTIAL_MANAGER_FINALNOUID_REPORTED,
+ /* session_id */ finalPhaseMetric.getSessionIdCaller(),
+ /* sequence_num */ emitSequenceId,
+ /* ui_returned_final_start */ finalPhaseMetric.isUiReturned(),
+ /* chosen_provider_query_start_timestamp_microseconds */
+ finalPhaseMetric.getTimestampFromReferenceStartMicroseconds(finalPhaseMetric
+ .getQueryStartTimeNanoseconds()),
+ /* chosen_provider_query_end_timestamp_microseconds */
+ finalPhaseMetric.getTimestampFromReferenceStartMicroseconds(finalPhaseMetric
+ .getQueryEndTimeNanoseconds()),
+ /* chosen_provider_ui_invoked_timestamp_microseconds */
+ finalPhaseMetric.getTimestampFromReferenceStartMicroseconds(finalPhaseMetric
+ .getUiCallStartTimeNanoseconds()),
+ /* chosen_provider_ui_finished_timestamp_microseconds */
+ finalPhaseMetric.getTimestampFromReferenceStartMicroseconds(finalPhaseMetric
+ .getUiCallEndTimeNanoseconds()),
+ /* chosen_provider_finished_timestamp_microseconds */
+ finalPhaseMetric.getTimestampFromReferenceStartMicroseconds(finalPhaseMetric
+ .getFinalFinishTimeNanoseconds()),
+ /* chosen_provider_status */ finalPhaseMetric.getChosenProviderStatus(),
+ /* chosen_provider_has_exception */ finalPhaseMetric.isHasException(),
+ /* unique_entries */
+ finalPhaseMetric.getResponseCollective().getUniqueEntries(),
+ /* per_entry_counts */
+ finalPhaseMetric.getResponseCollective().getUniqueEntryCounts(),
+ /* unique_response_classtypes */
+ finalPhaseMetric.getResponseCollective().getUniqueResponseStrings(),
+ /* per_classtype_counts */
+ finalPhaseMetric.getResponseCollective().getUniqueResponseCounts(),
+ /* framework_exception_unique_classtype */
+ finalPhaseMetric.getFrameworkException(),
+ /* clicked_entries */ browsedClickedEntries,
+ /* provider_of_clicked_entry */ browsedProviderUid,
+ /* api_status */ apiStatus,
+ /* primary_indicated */ false
+ );
+ } catch (Exception e) {
+ Slog.w(TAG, "Unexpected error during metric logging: " + e);
+ }
+ }
+
}
diff --git a/services/credentials/java/com/android/server/credentials/ProviderClearSession.java b/services/credentials/java/com/android/server/credentials/ProviderClearSession.java
index c1fb92d..d4b8800 100644
--- a/services/credentials/java/com/android/server/credentials/ProviderClearSession.java
+++ b/services/credentials/java/com/android/server/credentials/ProviderClearSession.java
@@ -62,7 +62,6 @@
android.credentials.ClearCredentialStateRequest clientRequest,
CallingAppInfo callingAppInfo
) {
- // TODO: Determine if provider needs to declare clear capability in manifest
return new ClearCredentialStateRequest(
callingAppInfo,
clientRequest.getData());
@@ -95,7 +94,7 @@
mProviderSessionMetric.collectCandidateFrameworkException(mProviderException.getType());
}
mProviderSessionMetric.collectCandidateExceptionStatus(/*hasException=*/true);
- updateStatusAndInvokeCallback(toStatus(errorCode),
+ updateStatusAndInvokeCallback(Status.CANCELED,
/*source=*/ CredentialsSource.REMOTE_PROVIDER);
}
@@ -133,7 +132,8 @@
protected void invokeSession() {
if (mRemoteCredentialService != null) {
startCandidateMetrics();
- mRemoteCredentialService.onClearCredentialState(mProviderRequest, this);
+ mRemoteCredentialService.setCallback(this);
+ mRemoteCredentialService.onClearCredentialState(mProviderRequest);
}
}
}
diff --git a/services/credentials/java/com/android/server/credentials/ProviderCreateSession.java b/services/credentials/java/com/android/server/credentials/ProviderCreateSession.java
index 4cdc6f4..25f20ca 100644
--- a/services/credentials/java/com/android/server/credentials/ProviderCreateSession.java
+++ b/services/credentials/java/com/android/server/credentials/ProviderCreateSession.java
@@ -167,7 +167,7 @@
mProviderSessionMetric.collectCandidateFrameworkException(mProviderException.getType());
}
mProviderSessionMetric.collectCandidateExceptionStatus(/*hasException=*/true);
- updateStatusAndInvokeCallback(toStatus(errorCode),
+ updateStatusAndInvokeCallback(Status.CANCELED,
/*source=*/ CredentialsSource.REMOTE_PROVIDER);
}
@@ -193,11 +193,11 @@
mProviderResponseDataHandler.addResponseContent(response.getCreateEntries(),
response.getRemoteCreateEntry());
if (mProviderResponseDataHandler.isEmptyResponse(response)) {
- mProviderSessionMetric.collectCandidateEntryMetrics(response);
+ mProviderSessionMetric.collectCandidateEntryMetrics(response, /*isAuthEntry*/false);
updateStatusAndInvokeCallback(Status.EMPTY_RESPONSE,
/*source=*/ CredentialsSource.REMOTE_PROVIDER);
} else {
- mProviderSessionMetric.collectCandidateEntryMetrics(response);
+ mProviderSessionMetric.collectCandidateEntryMetrics(response, /*isAuthEntry*/false);
updateStatusAndInvokeCallback(Status.SAVE_ENTRIES_RECEIVED,
/*source=*/ CredentialsSource.REMOTE_PROVIDER);
}
@@ -248,7 +248,8 @@
protected void invokeSession() {
if (mRemoteCredentialService != null) {
startCandidateMetrics();
- mRemoteCredentialService.onBeginCreateCredential(mProviderRequest, this);
+ mRemoteCredentialService.setCallback(this);
+ mRemoteCredentialService.onBeginCreateCredential(mProviderRequest);
}
}
diff --git a/services/credentials/java/com/android/server/credentials/ProviderGetSession.java b/services/credentials/java/com/android/server/credentials/ProviderGetSession.java
index 8070fa7..51af25b 100644
--- a/services/credentials/java/com/android/server/credentials/ProviderGetSession.java
+++ b/services/credentials/java/com/android/server/credentials/ProviderGetSession.java
@@ -220,7 +220,7 @@
mProviderSessionMetric.collectCandidateFrameworkException(mProviderException.getType());
}
mProviderSessionMetric.collectCandidateExceptionStatus(/*hasException=*/true);
- updateStatusAndInvokeCallback(toStatus(errorCode),
+ updateStatusAndInvokeCallback(Status.CANCELED,
/*source=*/ CredentialsSource.REMOTE_PROVIDER);
}
@@ -309,7 +309,8 @@
protected void invokeSession() {
if (mRemoteCredentialService != null) {
startCandidateMetrics();
- mRemoteCredentialService.onBeginGetCredential(mProviderRequest, this);
+ mRemoteCredentialService.setCallback(this);
+ mRemoteCredentialService.onBeginGetCredential(mProviderRequest);
}
}
@@ -432,6 +433,7 @@
BeginGetCredentialResponse response = PendingIntentResultHandler
.extractResponseContent(providerPendingIntentResponse
.getResultData());
+ mProviderSessionMetric.collectCandidateEntryMetrics(response, /*isAuthEntry*/true);
if (response != null && !mProviderResponseDataHandler.isEmptyResponse(response)) {
addToInitialRemoteResponse(response, /*isInitialResponse=*/ false);
// Additional content received is in the form of new response content.
@@ -469,12 +471,12 @@
addToInitialRemoteResponse(response, /*isInitialResponse=*/true);
// Log the data.
if (mProviderResponseDataHandler.isEmptyResponse(response)) {
- mProviderSessionMetric.collectCandidateEntryMetrics(response);
+ mProviderSessionMetric.collectCandidateEntryMetrics(response, /*isAuthEntry*/false);
updateStatusAndInvokeCallback(Status.EMPTY_RESPONSE,
/*source=*/ CredentialsSource.REMOTE_PROVIDER);
return;
}
- mProviderSessionMetric.collectCandidateEntryMetrics(response);
+ mProviderSessionMetric.collectCandidateEntryMetrics(response, /*isAuthEntry*/false);
updateStatusAndInvokeCallback(Status.CREDENTIALS_RECEIVED,
/*source=*/ CredentialsSource.REMOTE_PROVIDER);
}
diff --git a/services/credentials/java/com/android/server/credentials/ProviderSession.java b/services/credentials/java/com/android/server/credentials/ProviderSession.java
index 73fdc1c..068ca79 100644
--- a/services/credentials/java/com/android/server/credentials/ProviderSession.java
+++ b/services/credentials/java/com/android/server/credentials/ProviderSession.java
@@ -71,7 +71,7 @@
@NonNull
protected Boolean mProviderResponseSet = false;
@NonNull
- protected final ProviderSessionMetric mProviderSessionMetric = new ProviderSessionMetric();
+ protected final ProviderSessionMetric mProviderSessionMetric;
@NonNull
private int mProviderSessionUid;
@@ -110,9 +110,14 @@
* and is ready to return the final credential back to the user.
*/
public static boolean isCompletionStatus(Status status) {
- return status == Status.CREDENTIAL_RECEIVED_FROM_INTENT
- || status == Status.CREDENTIAL_RECEIVED_FROM_SELECTION
- || status == Status.COMPLETE;
+ return status == Status.COMPLETE || status == Status.EMPTY_RESPONSE;
+ }
+
+ /**
+ * Gives access to the objects metric collectors.
+ */
+ public ProviderSessionMetric getProviderSessionMetric() {
+ return this.mProviderSessionMetric;
}
/**
@@ -149,28 +154,21 @@
mComponentName = componentName;
mRemoteCredentialService = remoteCredentialService;
mProviderSessionUid = MetricUtilities.getPackageUid(mContext, mComponentName);
+ mProviderSessionMetric = new ProviderSessionMetric(
+ ((RequestSession) mCallbacks).mRequestSessionMetric.getSessionIdTrackTwo());
}
- /** Provider status at various states of the request session. */
- // TODO: Review status values, and adjust where needed
+ /** Provider status at various states of the provider session. */
enum Status {
NOT_STARTED,
PENDING,
- REQUIRES_AUTHENTICATION,
CREDENTIALS_RECEIVED,
SERVICE_DEAD,
- CREDENTIAL_RECEIVED_FROM_INTENT,
- PENDING_INTENT_INVOKED,
- CREDENTIAL_RECEIVED_FROM_SELECTION,
- SAVE_ENTRIES_RECEIVED, CANCELED,
- NO_CREDENTIALS, EMPTY_RESPONSE, NO_CREDENTIALS_FROM_AUTH_ENTRY, COMPLETE
- }
-
- /** Converts exception to a provider session status. */
- @NonNull
- public static Status toStatus(int errorCode) {
- // TODO : Add more mappings as more flows are supported
- return Status.CANCELED;
+ SAVE_ENTRIES_RECEIVED,
+ CANCELED,
+ EMPTY_RESPONSE,
+ NO_CREDENTIALS_FROM_AUTH_ENTRY,
+ COMPLETE
}
protected static String generateUniqueId() {
@@ -217,10 +215,10 @@
CredentialsSource source) {
setStatus(status);
mProviderSessionMetric.collectCandidateMetricUpdate(isTerminatingStatus(status),
- isCompletionStatus(status), mProviderSessionUid);
+ isCompletionStatus(status), mProviderSessionUid,
+ source == CredentialsSource.AUTH_ENTRY);
mCallbacks.onProviderStatusChanged(status, mComponentName, source);
}
-
/** Common method that transfers metrics from the init phase to candidates */
protected void startCandidateMetrics() {
mProviderSessionMetric.collectCandidateMetricSetupViaInitialMetric(
diff --git a/services/credentials/java/com/android/server/credentials/RemoteCredentialService.java b/services/credentials/java/com/android/server/credentials/RemoteCredentialService.java
index f5e3b86..4bcf8be 100644
--- a/services/credentials/java/com/android/server/credentials/RemoteCredentialService.java
+++ b/services/credentials/java/com/android/server/credentials/RemoteCredentialService.java
@@ -48,6 +48,7 @@
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
+import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicReference;
/**
@@ -59,13 +60,17 @@
private static final String TAG = "RemoteCredentialService";
/** Timeout for a single request. */
- private static final long TIMEOUT_REQUEST_MILLIS = 5 * DateUtils.SECOND_IN_MILLIS;
+ private static final long TIMEOUT_REQUEST_MILLIS = 3 * DateUtils.SECOND_IN_MILLIS;
/** Timeout to unbind after the task queue is empty. */
private static final long TIMEOUT_IDLE_SERVICE_CONNECTION_MILLIS =
5 * DateUtils.SECOND_IN_MILLIS;
private final ComponentName mComponentName;
+ private AtomicBoolean mOngoingRequest = new AtomicBoolean(false);
+
+ @Nullable private ProviderCallbacks mCallback;
+
/**
* Callbacks to be invoked when the provider remote service responds with a
* success or failure.
@@ -94,12 +99,35 @@
mComponentName = componentName;
}
+ public void setCallback(ProviderCallbacks callback) {
+ mCallback = callback;
+ }
+
/** Unbinds automatically after this amount of time. */
@Override
protected long getAutoDisconnectTimeoutMs() {
return TIMEOUT_IDLE_SERVICE_CONNECTION_MILLIS;
}
+ @Override
+ public void onBindingDied(ComponentName name) {
+ super.onBindingDied(name);
+
+ Slog.w(TAG, "binding died for: " + name);
+ }
+
+ @Override
+ public void binderDied() {
+ super.binderDied();
+ Slog.w(TAG, "binderDied");
+
+ if (mCallback != null) {
+ mOngoingRequest.set(false);
+ mCallback.onProviderServiceDied(this);
+ }
+
+ }
+
/** Return the componentName of the service to be connected. */
@NonNull
public ComponentName getComponentName() {
@@ -116,11 +144,14 @@
* provider service.
*
* @param request the request to be sent to the provider
- * @param callback the callback to be used to send back the provider response to the
- * {@link ProviderGetSession} class that maintains provider state
*/
- public void onBeginGetCredential(@NonNull BeginGetCredentialRequest request,
- ProviderCallbacks<BeginGetCredentialResponse> callback) {
+ public void onBeginGetCredential(@NonNull BeginGetCredentialRequest request) {
+ if (mCallback == null) {
+ Slog.w(TAG, "Callback is not set");
+ return;
+ }
+ mOngoingRequest.set(true);
+
AtomicReference<ICancellationSignal> cancellationSink = new AtomicReference<>();
AtomicReference<CompletableFuture<BeginGetCredentialResponse>> futureRef =
new AtomicReference<>();
@@ -154,7 +185,9 @@
dispatchCancellationSignal(cancellation);
} else {
cancellationSink.set(cancellation);
- callback.onProviderCancellable(cancellation);
+ if (mCallback != null) {
+ mCallback.onProviderCancellable(cancellation);
+ }
}
}
});
@@ -166,7 +199,7 @@
futureRef.set(connectThenExecute);
connectThenExecute.whenComplete((result, error) -> Handler.getMain().post(() ->
- handleExecutionResponse(result, error, cancellationSink, callback)));
+ handleExecutionResponse(result, error, cancellationSink)));
}
/**
@@ -174,11 +207,14 @@
* provider service.
*
* @param request the request to be sent to the provider
- * @param callback the callback to be used to send back the provider response to the
- * {@link ProviderCreateSession} class that maintains provider state
*/
- public void onBeginCreateCredential(@NonNull BeginCreateCredentialRequest request,
- ProviderCallbacks<BeginCreateCredentialResponse> callback) {
+ public void onBeginCreateCredential(@NonNull BeginCreateCredentialRequest request) {
+ if (mCallback == null) {
+ Slog.w(TAG, "Callback is not set");
+ return;
+ }
+ mOngoingRequest.set(true);
+
AtomicReference<ICancellationSignal> cancellationSink = new AtomicReference<>();
AtomicReference<CompletableFuture<BeginCreateCredentialResponse>> futureRef =
new AtomicReference<>();
@@ -212,7 +248,9 @@
dispatchCancellationSignal(cancellation);
} else {
cancellationSink.set(cancellation);
- callback.onProviderCancellable(cancellation);
+ if (mCallback != null) {
+ mCallback.onProviderCancellable(cancellation);
+ }
}
}
});
@@ -224,7 +262,7 @@
futureRef.set(connectThenExecute);
connectThenExecute.whenComplete((result, error) -> Handler.getMain().post(() ->
- handleExecutionResponse(result, error, cancellationSink, callback)));
+ handleExecutionResponse(result, error, cancellationSink)));
}
/**
@@ -232,11 +270,14 @@
* provider service.
*
* @param request the request to be sent to the provider
- * @param callback the callback to be used to send back the provider response to the
- * {@link ProviderClearSession} class that maintains provider state
*/
- public void onClearCredentialState(@NonNull ClearCredentialStateRequest request,
- ProviderCallbacks<Void> callback) {
+ public void onClearCredentialState(@NonNull ClearCredentialStateRequest request) {
+ if (mCallback == null) {
+ Slog.w(TAG, "Callback is not set");
+ return;
+ }
+ mOngoingRequest.set(true);
+
AtomicReference<ICancellationSignal> cancellationSink = new AtomicReference<>();
AtomicReference<CompletableFuture<Void>> futureRef = new AtomicReference<>();
@@ -269,7 +310,9 @@
dispatchCancellationSignal(cancellation);
} else {
cancellationSink.set(cancellation);
- callback.onProviderCancellable(cancellation);
+ if (mCallback != null) {
+ mCallback.onProviderCancellable(cancellation);
+ }
}
}
});
@@ -281,40 +324,58 @@
futureRef.set(connectThenExecute);
connectThenExecute.whenComplete((result, error) -> Handler.getMain().post(() ->
- handleExecutionResponse(result, error, cancellationSink, callback)));
+ handleExecutionResponse(result, error, cancellationSink)));
}
private <T> void handleExecutionResponse(T result,
Throwable error,
- AtomicReference<ICancellationSignal> cancellationSink,
- ProviderCallbacks<T> callback) {
+ AtomicReference<ICancellationSignal> cancellationSink) {
if (error == null) {
- callback.onProviderResponseSuccess(result);
+ if (mCallback != null) {
+ mCallback.onProviderResponseSuccess(result);
+ }
} else {
if (error instanceof TimeoutException) {
Slog.i(TAG, "Remote provider response timed tuo for: " + mComponentName);
+ if (!mOngoingRequest.get()) {
+ return;
+ }
dispatchCancellationSignal(cancellationSink.get());
- callback.onProviderResponseFailure(
- CredentialProviderErrors.ERROR_TIMEOUT,
- null);
+ if (mCallback != null) {
+ mOngoingRequest.set(false);
+ mCallback.onProviderResponseFailure(
+ CredentialProviderErrors.ERROR_TIMEOUT, null);
+ }
} else if (error instanceof CancellationException) {
Slog.i(TAG, "Cancellation exception for remote provider: " + mComponentName);
+ if (!mOngoingRequest.get()) {
+ return;
+ }
dispatchCancellationSignal(cancellationSink.get());
- callback.onProviderResponseFailure(
- CredentialProviderErrors.ERROR_TASK_CANCELED,
- null);
+ if (mCallback != null) {
+ mOngoingRequest.set(false);
+ mCallback.onProviderResponseFailure(
+ CredentialProviderErrors.ERROR_TASK_CANCELED,
+ null);
+ }
} else if (error instanceof GetCredentialException) {
- callback.onProviderResponseFailure(
- CredentialProviderErrors.ERROR_PROVIDER_FAILURE,
- (GetCredentialException) error);
+ if (mCallback != null) {
+ mCallback.onProviderResponseFailure(
+ CredentialProviderErrors.ERROR_PROVIDER_FAILURE,
+ (GetCredentialException) error);
+ }
} else if (error instanceof CreateCredentialException) {
- callback.onProviderResponseFailure(
- CredentialProviderErrors.ERROR_PROVIDER_FAILURE,
- (CreateCredentialException) error);
+ if (mCallback != null) {
+ mCallback.onProviderResponseFailure(
+ CredentialProviderErrors.ERROR_PROVIDER_FAILURE,
+ (CreateCredentialException) error);
+ }
} else {
- callback.onProviderResponseFailure(
- CredentialProviderErrors.ERROR_UNKNOWN,
- (Exception) error);
+ if (mCallback != null) {
+ mCallback.onProviderResponseFailure(
+ CredentialProviderErrors.ERROR_UNKNOWN,
+ (Exception) error);
+ }
}
}
}
diff --git a/services/credentials/java/com/android/server/credentials/RequestSession.java b/services/credentials/java/com/android/server/credentials/RequestSession.java
index 7caa921..a41b571 100644
--- a/services/credentials/java/com/android/server/credentials/RequestSession.java
+++ b/services/credentials/java/com/android/server/credentials/RequestSession.java
@@ -75,6 +75,8 @@
protected final Handler mHandler;
@UserIdInt
protected final int mUserId;
+
+ protected final int mUniqueSessionInteger;
private final int mCallingUid;
@NonNull
protected final CallingAppInfo mClientAppInfo;
@@ -82,7 +84,7 @@
protected final CancellationSignal mCancellationSignal;
protected final Map<String, ProviderSession> mProviders = new ConcurrentHashMap<>();
- protected final RequestSessionMetric mRequestSessionMetric = new RequestSessionMetric();
+ protected final RequestSessionMetric mRequestSessionMetric;
protected final String mHybridService;
protected final Object mLock;
@@ -132,7 +134,10 @@
mUserId, this, mEnabledProviders);
mHybridService = context.getResources().getString(
R.string.config_defaultCredentialManagerHybridService);
- mRequestSessionMetric.collectInitialPhaseMetricInfo(timestampStarted, mRequestId,
+ mUniqueSessionInteger = MetricUtilities.getHighlyUniqueInteger();
+ mRequestSessionMetric = new RequestSessionMetric(mUniqueSessionInteger,
+ MetricUtilities.getHighlyUniqueInteger());
+ mRequestSessionMetric.collectInitialPhaseMetricInfo(timestampStarted,
mCallingUid, ApiName.getMetricCodeFromRequestInfo(mRequestType));
setCancellationListener();
}
diff --git a/services/credentials/java/com/android/server/credentials/metrics/ApiName.java b/services/credentials/java/com/android/server/credentials/metrics/ApiName.java
index 1930a48..fd49796 100644
--- a/services/credentials/java/com/android/server/credentials/metrics/ApiName.java
+++ b/services/credentials/java/com/android/server/credentials/metrics/ApiName.java
@@ -18,11 +18,13 @@
import static android.credentials.ui.RequestInfo.TYPE_CREATE;
import static android.credentials.ui.RequestInfo.TYPE_GET;
+import static android.credentials.ui.RequestInfo.TYPE_GET_VIA_REGISTRY;
import static android.credentials.ui.RequestInfo.TYPE_UNDEFINED;
import static com.android.internal.util.FrameworkStatsLog.CREDENTIAL_MANAGER_INITIAL_PHASE_REPORTED__API_NAME__API_NAME_CLEAR_CREDENTIAL;
import static com.android.internal.util.FrameworkStatsLog.CREDENTIAL_MANAGER_INITIAL_PHASE_REPORTED__API_NAME__API_NAME_CREATE_CREDENTIAL;
import static com.android.internal.util.FrameworkStatsLog.CREDENTIAL_MANAGER_INITIAL_PHASE_REPORTED__API_NAME__API_NAME_GET_CREDENTIAL;
+import static com.android.internal.util.FrameworkStatsLog.CREDENTIAL_MANAGER_INITIAL_PHASE_REPORTED__API_NAME__API_NAME_GET_CREDENTIAL_VIA_REGISTRY;
import static com.android.internal.util.FrameworkStatsLog.CREDENTIAL_MANAGER_INITIAL_PHASE_REPORTED__API_NAME__API_NAME_IS_ENABLED_CREDENTIAL_PROVIDER_SERVICE;
import static com.android.internal.util.FrameworkStatsLog.CREDENTIAL_MANAGER_INITIAL_PHASE_REPORTED__API_NAME__API_NAME_UNKNOWN;
@@ -35,6 +37,8 @@
public enum ApiName {
UNKNOWN(CREDENTIAL_MANAGER_INITIAL_PHASE_REPORTED__API_NAME__API_NAME_UNKNOWN),
GET_CREDENTIAL(CREDENTIAL_MANAGER_INITIAL_PHASE_REPORTED__API_NAME__API_NAME_GET_CREDENTIAL),
+ GET_CREDENTIAL_VIA_REGISTRY(
+CREDENTIAL_MANAGER_INITIAL_PHASE_REPORTED__API_NAME__API_NAME_GET_CREDENTIAL_VIA_REGISTRY),
CREATE_CREDENTIAL(
CREDENTIAL_MANAGER_INITIAL_PHASE_REPORTED__API_NAME__API_NAME_CREATE_CREDENTIAL),
CLEAR_CREDENTIAL(
@@ -52,6 +56,8 @@
CREATE_CREDENTIAL.mInnerMetricCode),
new AbstractMap.SimpleEntry<>(TYPE_GET,
GET_CREDENTIAL.mInnerMetricCode),
+ new AbstractMap.SimpleEntry<>(TYPE_GET_VIA_REGISTRY,
+ GET_CREDENTIAL_VIA_REGISTRY.mInnerMetricCode),
new AbstractMap.SimpleEntry<>(TYPE_UNDEFINED,
CLEAR_CREDENTIAL.mInnerMetricCode)
);
diff --git a/services/credentials/java/com/android/server/credentials/metrics/BrowsedAuthenticationMetric.java b/services/credentials/java/com/android/server/credentials/metrics/BrowsedAuthenticationMetric.java
new file mode 100644
index 0000000..51e86d5
--- /dev/null
+++ b/services/credentials/java/com/android/server/credentials/metrics/BrowsedAuthenticationMetric.java
@@ -0,0 +1,36 @@
+/*
+ * 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.server.credentials.metrics;
+
+/**
+ * Encapsulates an authentication entry click atom, as a part of track 2.
+ * Contains information about what was collected from the authentication entry output.
+ */
+public class BrowsedAuthenticationMetric {
+ // The session id of this provider known flow related metric
+ private final int mSessionIdProvider;
+ // TODO(b/271135048) - Match the atom and provide a clean per provider session metric
+ // encapsulation.
+
+ public BrowsedAuthenticationMetric(int sessionIdProvider) {
+ mSessionIdProvider = sessionIdProvider;
+ }
+
+ public int getSessionIdProvider() {
+ return mSessionIdProvider;
+ }
+}
diff --git a/services/credentials/java/com/android/server/credentials/metrics/CandidateAggregateMetric.java b/services/credentials/java/com/android/server/credentials/metrics/CandidateAggregateMetric.java
new file mode 100644
index 0000000..08e7583
--- /dev/null
+++ b/services/credentials/java/com/android/server/credentials/metrics/CandidateAggregateMetric.java
@@ -0,0 +1,75 @@
+/*
+ * 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.server.credentials.metrics;
+
+import com.android.server.credentials.ProviderSession;
+
+import java.util.Map;
+
+/**
+ * This will generate most of its data via using the information of {@link CandidatePhaseMetric}
+ * across all the providers. This belongs to the metric flow where the calling app is known.
+ */
+public class CandidateAggregateMetric {
+
+ private static final String TAG = "CandidateProviderMetric";
+ // The session id of this provider metric
+ private final int mSessionIdProvider;
+ // Indicates if this provider returned from the query phase, default false
+ private boolean mQueryReturned = false;
+ // Indicates the total number of providers this aggregate captures information for, default 0
+ private int mNumProviders = 0;
+ // Indicates the total number of authentication entries that were tapped in aggregate, default 0
+ private int mNumAuthEntriesTapped = 0;
+
+ public CandidateAggregateMetric(int sessionIdTrackOne) {
+ mSessionIdProvider = sessionIdTrackOne;
+ }
+
+ public int getSessionIdProvider() {
+ return mSessionIdProvider;
+ }
+
+ /**
+ * This will take all the candidate data captured and aggregate that information.
+ * TODO(b/271135048) : Add on authentication entry outputs from track 2 here as well once
+ * generated
+ * @param providers the providers associated with the candidate flow
+ */
+ public void collectAverages(Map<String, ProviderSession> providers) {
+ // TODO(b/271135048) : Complete this method
+ mNumProviders = providers.size();
+ var providerSessions = providers.values();
+ for (var session : providerSessions) {
+ var metric = session.getProviderSessionMetric();
+ mQueryReturned = mQueryReturned || metric
+ .mCandidatePhasePerProviderMetric.isQueryReturned();
+ }
+ }
+
+ public int getNumProviders() {
+ return mNumProviders;
+ }
+
+ public boolean isQueryReturned() {
+ return mQueryReturned;
+ }
+
+ public int getNumAuthEntriesTapped() {
+ return mNumAuthEntriesTapped;
+ }
+}
diff --git a/services/credentials/java/com/android/server/credentials/metrics/CandidateBrowsingPhaseMetric.java b/services/credentials/java/com/android/server/credentials/metrics/CandidateBrowsingPhaseMetric.java
index 07af654..6b74252 100644
--- a/services/credentials/java/com/android/server/credentials/metrics/CandidateBrowsingPhaseMetric.java
+++ b/services/credentials/java/com/android/server/credentials/metrics/CandidateBrowsingPhaseMetric.java
@@ -27,23 +27,11 @@
* though collection will begin in the candidate phase when the user begins browsing options.
*/
public class CandidateBrowsingPhaseMetric {
- // The session id associated with the API Call this candidate provider is a part of, default -1
- private int mSessionId = -1;
// The EntryEnum that was pressed, defaults to -1
private int mEntryEnum = EntryEnum.UNKNOWN.getMetricCode();
// The provider associated with the press, defaults to -1
private int mProviderUid = -1;
- /* -- The session ID -- */
-
- public void setSessionId(int sessionId) {
- mSessionId = sessionId;
- }
-
- public int getSessionId() {
- return mSessionId;
- }
-
/* -- The Entry of this tap -- */
public void setEntryEnum(int entryEnum) {
diff --git a/services/credentials/java/com/android/server/credentials/metrics/CandidatePhaseMetric.java b/services/credentials/java/com/android/server/credentials/metrics/CandidatePhaseMetric.java
index 3ea9b1ce..d9bf4a1 100644
--- a/services/credentials/java/com/android/server/credentials/metrics/CandidatePhaseMetric.java
+++ b/services/credentials/java/com/android/server/credentials/metrics/CandidatePhaseMetric.java
@@ -32,8 +32,8 @@
public class CandidatePhaseMetric {
private static final String TAG = "CandidateProviderMetric";
- // The session id of this provider, default set to -1
- private int mSessionId = -1;
+ // The session id of this provider metric
+ private final int mSessionIdProvider;
// Indicates if this provider returned from the query phase, default false
private boolean mQueryReturned = false;
@@ -53,13 +53,15 @@
private int mProviderQueryStatus = -1;
// Indicates if an exception was thrown by this provider, false by default
private boolean mHasException = false;
+ // Indicates the framework only exception belonging to this provider
private String mFrameworkException = "";
// Stores the response credential information, as well as the response entry information which
// by default, contains empty info
private ResponseCollective mResponseCollective = new ResponseCollective(Map.of(), Map.of());
- public CandidatePhaseMetric() {
+ public CandidatePhaseMetric(int sessionIdTrackTwo) {
+ mSessionIdProvider = sessionIdTrackTwo;
}
/* ---------- Latencies ---------- */
@@ -141,12 +143,8 @@
/* -------------- Session Id ---------------- */
- public void setSessionId(int sessionId) {
- mSessionId = sessionId;
- }
-
- public int getSessionId() {
- return mSessionId;
+ public int getSessionIdProvider() {
+ return mSessionIdProvider;
}
/* -------------- Query Returned Status ---------------- */
diff --git a/services/credentials/java/com/android/server/credentials/metrics/ChosenProviderFinalPhaseMetric.java b/services/credentials/java/com/android/server/credentials/metrics/ChosenProviderFinalPhaseMetric.java
index 93a8290..e8af860 100644
--- a/services/credentials/java/com/android/server/credentials/metrics/ChosenProviderFinalPhaseMetric.java
+++ b/services/credentials/java/com/android/server/credentials/metrics/ChosenProviderFinalPhaseMetric.java
@@ -32,8 +32,12 @@
*/
public class ChosenProviderFinalPhaseMetric {
private static final String TAG = "ChosenFinalPhaseMetric";
- // The session id associated with this API call, used to unite split emits
- private int mSessionId = -1;
+ // The session id associated with this API call, used to unite split emits, for the flow
+ // where we know the calling app
+ private final int mSessionIdCaller;
+ // The session id associated with this API call, used to unite split emits, for the flow
+ // where we know the provider apps
+ private final int mSessionIdProvider;
// Reveals if the UI was returned, false by default
private boolean mUiReturned = false;
private int mChosenUid = -1;
@@ -66,13 +70,17 @@
private int mChosenProviderStatus = -1;
// Indicates if an exception was thrown by this provider, false by default
private boolean mHasException = false;
+ // Indicates a framework only exception that occurs in the final phase of the flow
+ private String mFrameworkException = "";
// Stores the response credential information, as well as the response entry information which
// by default, contains empty info
private ResponseCollective mResponseCollective = new ResponseCollective(Map.of(), Map.of());
- public ChosenProviderFinalPhaseMetric() {
+ public ChosenProviderFinalPhaseMetric(int sessionIdCaller, int sessionIdProvider) {
+ mSessionIdCaller = sessionIdCaller;
+ mSessionIdProvider = sessionIdProvider;
}
/* ------------------- UID ------------------- */
@@ -235,12 +243,8 @@
/* ----------- Session ID -------------- */
- public void setSessionId(int sessionId) {
- mSessionId = sessionId;
- }
-
- public int getSessionId() {
- return mSessionId;
+ public int getSessionIdProvider() {
+ return mSessionIdProvider;
}
/* ----------- UI Returned Successfully -------------- */
@@ -272,4 +276,20 @@
public ResponseCollective getResponseCollective() {
return mResponseCollective;
}
+
+ /* -------------- Framework Exception ---------------- */
+
+ public void setFrameworkException(String frameworkException) {
+ mFrameworkException = frameworkException;
+ }
+
+ public String getFrameworkException() {
+ return mFrameworkException;
+ }
+
+ /* -------------- Session ID for Track One (Known Calling App) ---------------- */
+
+ public int getSessionIdCaller() {
+ return mSessionIdCaller;
+ }
}
diff --git a/services/credentials/java/com/android/server/credentials/metrics/InitialPhaseMetric.java b/services/credentials/java/com/android/server/credentials/metrics/InitialPhaseMetric.java
index 060e56c..8e965e3 100644
--- a/services/credentials/java/com/android/server/credentials/metrics/InitialPhaseMetric.java
+++ b/services/credentials/java/com/android/server/credentials/metrics/InitialPhaseMetric.java
@@ -32,8 +32,8 @@
private int mApiName = ApiName.UNKNOWN.getMetricCode();
// The caller uid of the calling application, default to -1
private int mCallerUid = -1;
- // The session id to unite multiple atom emits, default to -1
- private int mSessionId = -1;
+ // The session id to unite multiple atom emits
+ private final int mSessionIdCaller;
// Raw timestamps in nanoseconds, *the only* one logged as such (i.e. 64 bits) since it is a
// reference point.
@@ -50,7 +50,8 @@
private Map<String, Integer> mRequestCounts = new LinkedHashMap<>();
- public InitialPhaseMetric() {
+ public InitialPhaseMetric(int sessionIdTrackOne) {
+ mSessionIdCaller = sessionIdTrackOne;
}
/* ---------- Latencies ---------- */
@@ -105,12 +106,8 @@
/* ------ SessionId ------ */
- public void setSessionId(int sessionId) {
- mSessionId = sessionId;
- }
-
- public int getSessionId() {
- return mSessionId;
+ public int getSessionIdCaller() {
+ return mSessionIdCaller;
}
/* ------ Count Request Class Types ------ */
diff --git a/services/credentials/java/com/android/server/credentials/metrics/ProviderSessionMetric.java b/services/credentials/java/com/android/server/credentials/metrics/ProviderSessionMetric.java
index f011b55..47db8f5 100644
--- a/services/credentials/java/com/android/server/credentials/metrics/ProviderSessionMetric.java
+++ b/services/credentials/java/com/android/server/credentials/metrics/ProviderSessionMetric.java
@@ -16,7 +16,7 @@
package com.android.server.credentials.metrics;
-import static com.android.server.credentials.MetricUtilities.DELTA_CUT;
+import static com.android.server.credentials.MetricUtilities.DELTA_RESPONSES_CUT;
import static com.android.server.credentials.MetricUtilities.generateMetricKey;
import android.annotation.NonNull;
@@ -44,10 +44,17 @@
// Specific candidate provider metric for the provider this session handles
@NonNull
- protected final CandidatePhaseMetric mCandidatePhasePerProviderMetric =
- new CandidatePhaseMetric();
+ protected final CandidatePhaseMetric mCandidatePhasePerProviderMetric;
- public ProviderSessionMetric() {}
+ // IFF there was an authentication entry clicked, this stores all required information for
+ // that event. This is for the 'get' flow.
+ @NonNull
+ protected final BrowsedAuthenticationMetric mBrowsedAuthenticationMetric;
+
+ public ProviderSessionMetric(int sessionIdTrackTwo) {
+ mCandidatePhasePerProviderMetric = new CandidatePhaseMetric(sessionIdTrackTwo);
+ mBrowsedAuthenticationMetric = new BrowsedAuthenticationMetric(sessionIdTrackTwo);
+ }
/**
* Retrieve the candidate provider phase metric and the data it contains.
@@ -56,6 +63,7 @@
return mCandidatePhasePerProviderMetric;
}
+
/**
* This collects for ProviderSessions, with respect to the candidate providers, whether
* an exception occurred in the candidate call.
@@ -78,6 +86,13 @@
}
}
+ private void collectAuthEntryUpdate(boolean isFailureStatus,
+ boolean isCompletionStatus, int providerSessionUid) {
+ // TODO(b/271135048) - Mimic typical candidate update, but with authentication metric
+ // Collect the final timestamps (and start timestamp), status, exceptions and the provider
+ // uid. This occurs typically *after* the collection is complete.
+ }
+
/**
* Used to collect metrics at the update stage when a candidate provider gives back an update.
*
@@ -86,8 +101,12 @@
* @param providerSessionUid the uid of the provider
*/
public void collectCandidateMetricUpdate(boolean isFailureStatus,
- boolean isCompletionStatus, int providerSessionUid) {
+ boolean isCompletionStatus, int providerSessionUid, boolean isAuthEntry) {
try {
+ if (isAuthEntry) {
+ collectAuthEntryUpdate(isFailureStatus, isCompletionStatus, providerSessionUid);
+ return;
+ }
mCandidatePhasePerProviderMetric.setCandidateUid(providerSessionUid);
mCandidatePhasePerProviderMetric
.setQueryFinishTimeNanoseconds(System.nanoTime());
@@ -119,7 +138,6 @@
*/
public void collectCandidateMetricSetupViaInitialMetric(InitialPhaseMetric initMetric) {
try {
- mCandidatePhasePerProviderMetric.setSessionId(initMetric.getSessionId());
mCandidatePhasePerProviderMetric.setServiceBeganTimeNanoseconds(
initMetric.getCredentialServiceStartedTimeNanoseconds());
mCandidatePhasePerProviderMetric.setStartQueryTimeNanoseconds(System.nanoTime());
@@ -133,13 +151,14 @@
* purposes.
*
* @param response contains entries and data from the candidate provider responses
+ * @param isAuthEntry indicates if this is an auth entry collection or not
* @param <R> the response type associated with the API flow in progress
*/
- public <R> void collectCandidateEntryMetrics(R response) {
+ public <R> void collectCandidateEntryMetrics(R response, boolean isAuthEntry) {
try {
if (response instanceof BeginGetCredentialResponse) {
beginGetCredentialResponseCollectionCandidateEntryMetrics(
- (BeginGetCredentialResponse) response);
+ (BeginGetCredentialResponse) response, isAuthEntry);
} else if (response instanceof BeginCreateCredentialResponse) {
beginCreateCredentialResponseCollectionCandidateEntryMetrics(
(BeginCreateCredentialResponse) response);
@@ -170,7 +189,7 @@
entryCounts.put(EntryEnum.AUTHENTICATION_ENTRY, numAuthEntries);
entries.forEach(entry -> {
- String entryKey = generateMetricKey(entry.getType(), DELTA_CUT);
+ String entryKey = generateMetricKey(entry.getType(), DELTA_RESPONSES_CUT);
responseCounts.put(entryKey, responseCounts.getOrDefault(entryKey, 0) + 1);
});
@@ -198,7 +217,7 @@
}
private void beginGetCredentialResponseCollectionCandidateEntryMetrics(
- BeginGetCredentialResponse response) {
+ BeginGetCredentialResponse response, boolean isAuthEntry) {
Map<EntryEnum, Integer> entryCounts = new LinkedHashMap<>();
Map<String, Integer> responseCounts = new LinkedHashMap<>();
int numCredEntries = response.getCredentialEntries().size();
@@ -212,11 +231,16 @@
entryCounts.put(EntryEnum.AUTHENTICATION_ENTRY, numAuthEntries);
response.getCredentialEntries().forEach(entry -> {
- String entryKey = generateMetricKey(entry.getType(), DELTA_CUT);
+ String entryKey = generateMetricKey(entry.getType(), DELTA_RESPONSES_CUT);
responseCounts.put(entryKey, responseCounts.getOrDefault(entryKey, 0) + 1);
});
ResponseCollective responseCollective = new ResponseCollective(responseCounts, entryCounts);
- mCandidatePhasePerProviderMetric.setResponseCollective(responseCollective);
+
+ if (!isAuthEntry) {
+ mCandidatePhasePerProviderMetric.setResponseCollective(responseCollective);
+ } else {
+ // TODO(b/immediately) - Add the auth entry get logic
+ }
}
}
diff --git a/services/credentials/java/com/android/server/credentials/metrics/RequestSessionMetric.java b/services/credentials/java/com/android/server/credentials/metrics/RequestSessionMetric.java
index 4624e0b..03ffe23 100644
--- a/services/credentials/java/com/android/server/credentials/metrics/RequestSessionMetric.java
+++ b/services/credentials/java/com/android/server/credentials/metrics/RequestSessionMetric.java
@@ -16,14 +16,16 @@
package com.android.server.credentials.metrics;
-import static com.android.server.credentials.MetricUtilities.DELTA_CUT;
+import static com.android.server.credentials.MetricUtilities.DELTA_EXCEPTION_CUT;
+import static com.android.server.credentials.MetricUtilities.DELTA_RESPONSES_CUT;
import static com.android.server.credentials.MetricUtilities.generateMetricKey;
import static com.android.server.credentials.MetricUtilities.logApiCalledCandidatePhase;
import static com.android.server.credentials.MetricUtilities.logApiCalledFinalPhase;
+import static com.android.server.credentials.MetricUtilities.logApiCalledNoUidFinal;
+import android.annotation.NonNull;
import android.credentials.GetCredentialRequest;
import android.credentials.ui.UserSelectionDialogResult;
-import android.os.IBinder;
import android.util.Slog;
import com.android.server.credentials.ProviderSession;
@@ -47,13 +49,24 @@
// As emits occur in sequential order, increment this counter and utilize
protected int mSequenceCounter = 0;
- protected final InitialPhaseMetric mInitialPhaseMetric = new InitialPhaseMetric();
+ protected final InitialPhaseMetric mInitialPhaseMetric;
protected final ChosenProviderFinalPhaseMetric
- mChosenProviderFinalPhaseMetric = new ChosenProviderFinalPhaseMetric();
+ mChosenProviderFinalPhaseMetric;
// TODO(b/271135048) - Replace this with a new atom per each browsing emit (V4)
protected List<CandidateBrowsingPhaseMetric> mCandidateBrowsingPhaseMetric = new ArrayList<>();
+ // Specific aggregate candidate provider metric for the provider this session handles
+ @NonNull
+ protected final CandidateAggregateMetric mCandidateAggregateMetric;
+ // Since track two is shared, this allows provider sessions to capture a metric-specific
+ // session token for the flow where the provider is known
+ private final int mSessionIdTrackTwo;
- public RequestSessionMetric() {
+ public RequestSessionMetric(int sessionIdTrackOne, int sessionIdTrackTwo) {
+ mSessionIdTrackTwo = sessionIdTrackTwo;
+ mInitialPhaseMetric = new InitialPhaseMetric(sessionIdTrackOne);
+ mCandidateAggregateMetric = new CandidateAggregateMetric(sessionIdTrackOne);
+ mChosenProviderFinalPhaseMetric = new ChosenProviderFinalPhaseMetric(
+ sessionIdTrackOne, sessionIdTrackTwo);
}
/**
@@ -75,18 +88,25 @@
}
/**
+ * @return the aggregate candidate phase metrics associated with the request session
+ */
+ public CandidateAggregateMetric getCandidateAggregateMetric() {
+ return mCandidateAggregateMetric;
+ }
+
+ /**
* Upon starting the service, this fills the initial phase metric properly.
*
* @param timestampStarted the timestamp the service begins at
- * @param mRequestId the IBinder used to retrieve a unique id
* @param mCallingUid the calling process's uid
* @param metricCode typically pulled from {@link ApiName}
+ * @param callingAppFlowUniqueInt the unique integer used as the session id for the calling app
+ * known flow
*/
- public void collectInitialPhaseMetricInfo(long timestampStarted, IBinder mRequestId,
+ public void collectInitialPhaseMetricInfo(long timestampStarted,
int mCallingUid, int metricCode) {
try {
mInitialPhaseMetric.setCredentialServiceStartedTimeNanoseconds(timestampStarted);
- mInitialPhaseMetric.setSessionId(mRequestId.hashCode());
mInitialPhaseMetric.setCallerUid(mCallingUid);
mInitialPhaseMetric.setApiName(metricCode);
} catch (Exception e) {
@@ -168,11 +188,9 @@
Map<String, Integer> uniqueRequestCounts = new LinkedHashMap<>();
try {
request.getCredentialOptions().forEach(option -> {
- String optionKey = generateMetricKey(option.getType(), DELTA_CUT);
- if (!uniqueRequestCounts.containsKey(optionKey)) {
- uniqueRequestCounts.put(optionKey, 0);
- }
- uniqueRequestCounts.put(optionKey, uniqueRequestCounts.get(optionKey) + 1);
+ String optionKey = generateMetricKey(option.getType(), DELTA_RESPONSES_CUT);
+ uniqueRequestCounts.put(optionKey, uniqueRequestCounts.getOrDefault(optionKey,
+ 0) + 1);
});
} catch (Exception e) {
Slog.i(TAG, "Unexpected error during get request metric logging: " + e);
@@ -207,7 +225,6 @@
CandidatePhaseMetric selectedProviderPhaseMetric) {
try {
CandidateBrowsingPhaseMetric browsingPhaseMetric = new CandidateBrowsingPhaseMetric();
- browsingPhaseMetric.setSessionId(mInitialPhaseMetric.getSessionId());
browsingPhaseMetric.setEntryEnum(
EntryEnum.getMetricCodeFromString(selection.getEntryKey()));
browsingPhaseMetric.setProviderUid(selectedProviderPhaseMetric.getCandidateUid());
@@ -218,7 +235,7 @@
}
/**
- * Updates the final phase metric with the designated bit
+ * Updates the final phase metric with the designated bit.
*
* @param exceptionBitFinalPhase represents if the final phase provider had an exception
*/
@@ -231,6 +248,21 @@
}
/**
+ * This allows collecting the framework exception string for the final phase metric.
+ * NOTE that this exception will be cut for space optimizations.
+ *
+ * @param exception the framework exception that is being recorded
+ */
+ public void collectFrameworkException(String exception) {
+ try {
+ mChosenProviderFinalPhaseMetric.setFrameworkException(
+ generateMetricKey(exception, DELTA_EXCEPTION_CUT));
+ } catch (Exception e) {
+ Slog.w(TAG, "Unexpected error during metric logging: " + e);
+ }
+ }
+
+ /**
* Allows encapsulating the overall final phase metric status from the chosen and final
* provider.
*
@@ -260,7 +292,6 @@
*/
public void collectChosenMetricViaCandidateTransfer(CandidatePhaseMetric candidatePhaseMetric) {
try {
- mChosenProviderFinalPhaseMetric.setSessionId(candidatePhaseMetric.getSessionId());
mChosenProviderFinalPhaseMetric.setChosenUid(candidatePhaseMetric.getCandidateUid());
mChosenProviderFinalPhaseMetric.setQueryPhaseLatencyMicroseconds(
@@ -284,7 +315,7 @@
* In the final phase, this helps log use cases that were either pure failures or user
* canceled. It's expected that {@link #collectFinalPhaseProviderMetricStatus(boolean,
* ProviderStatusForMetrics) collectFinalPhaseProviderMetricStatus} is called prior to this.
- * Otherwise, the logging will miss required bits
+ * Otherwise, the logging will miss required bits.
*
* @param isUserCanceledError a boolean indicating if the error was due to user cancelling
*/
@@ -318,6 +349,20 @@
}
/**
+ * Handles aggregate candidate phase metric emits in the RequestSession context, after the
+ * candidate phase completes.
+ *
+ * @param providers a map with known providers and their held metric objects
+ */
+ public void logCandidateAggregateMetrics(Map<String, ProviderSession> providers) {
+ try {
+ mCandidateAggregateMetric.collectAverages(providers);
+ } catch (Exception e) {
+ Slog.i(TAG, "Unexpected error during aggregate candidate logging " + e);
+ }
+ }
+
+ /**
* Handles the final logging for RequestSession context for the final phase.
*
* @param apiStatus the final status of the api being called
@@ -327,9 +372,15 @@
logApiCalledFinalPhase(mChosenProviderFinalPhaseMetric, mCandidateBrowsingPhaseMetric,
apiStatus,
++mSequenceCounter);
+ logApiCalledNoUidFinal(mChosenProviderFinalPhaseMetric, mCandidateBrowsingPhaseMetric,
+ apiStatus,
+ ++mSequenceCounter);
} catch (Exception e) {
Slog.i(TAG, "Unexpected error during final metric emit: " + e);
}
}
+ public int getSessionIdTrackTwo() {
+ return mSessionIdTrackTwo;
+ }
}
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
index 9798709..02c6d68 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
@@ -447,6 +447,7 @@
import android.util.DebugUtils;
import android.util.IndentingPrintWriter;
import android.util.IntArray;
+import android.util.Log;
import android.util.Pair;
import android.util.Slog;
import android.util.SparseArray;
@@ -1214,7 +1215,7 @@
sendDeviceOwnerUserCommand(DeviceAdminReceiver.ACTION_USER_STOPPED, userHandle);
if (isManagedProfile(userHandle)) {
Slogf.d(LOG_TAG, "Managed profile was stopped");
- updatePersonalAppsSuspension(userHandle, false /* unlocked */);
+ updatePersonalAppsSuspension(userHandle);
}
} else if (Intent.ACTION_USER_SWITCHED.equals(action)) {
sendDeviceOwnerUserCommand(DeviceAdminReceiver.ACTION_USER_SWITCHED, userHandle);
@@ -1224,8 +1225,7 @@
}
if (isManagedProfile(userHandle)) {
Slogf.d(LOG_TAG, "Managed profile became unlocked");
- final boolean suspended =
- updatePersonalAppsSuspension(userHandle, true /* unlocked */);
+ final boolean suspended = updatePersonalAppsSuspension(userHandle);
triggerPolicyComplianceCheckIfNeeded(userHandle, suspended);
}
} else if (Intent.ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE.equals(action)) {
@@ -1252,13 +1252,13 @@
updateSystemUpdateFreezePeriodsRecord(/* saveIfChanged */ true);
final int userId = getManagedUserId(getMainUserId());
if (userId >= 0) {
- updatePersonalAppsSuspension(userId, mUserManager.isUserUnlocked(userId));
+ updatePersonalAppsSuspension(userId);
}
} else if (ACTION_PROFILE_OFF_DEADLINE.equals(action)) {
Slogf.i(LOG_TAG, "Profile off deadline alarm was triggered");
final int userId = getManagedUserId(getMainUserId());
if (userId >= 0) {
- updatePersonalAppsSuspension(userId, mUserManager.isUserUnlocked(userId));
+ updatePersonalAppsSuspension(userId);
} else {
Slogf.wtf(LOG_TAG, "Got deadline alarm for nonexistent profile");
}
@@ -1268,9 +1268,12 @@
} else if (ACTION_MANAGED_PROFILE_UNAVAILABLE.equals(action)) {
notifyIfManagedSubscriptionsAreUnavailable(
UserHandle.of(userHandle), /* managedProfileAvailable= */ false);
+ updatePersonalAppsSuspension(userHandle);
} else if (ACTION_MANAGED_PROFILE_AVAILABLE.equals(action)) {
notifyIfManagedSubscriptionsAreUnavailable(
UserHandle.of(userHandle), /* managedProfileAvailable= */ true);
+ final boolean suspended = updatePersonalAppsSuspension(userHandle);
+ triggerPolicyComplianceCheckIfNeeded(userHandle, suspended);
} else if (LOGIN_ACCOUNTS_CHANGED_ACTION.equals(action)) {
calculateHasIncompatibleAccounts();
}
@@ -3433,9 +3436,9 @@
final int profileUserHandle = getManagedUserId(userHandle);
if (profileUserHandle >= 0) {
// Given that the parent user has just started, profile should be locked.
- updatePersonalAppsSuspension(profileUserHandle, false /* unlocked */);
+ updatePersonalAppsSuspension(profileUserHandle);
} else {
- suspendPersonalAppsInternal(userHandle, false);
+ suspendPersonalAppsInternal(userHandle, profileUserHandle, false);
}
}
@@ -3611,10 +3614,7 @@
if (isProfileOwnerOfOrganizationOwnedDevice(userId)
&& getManagedSubscriptionsPolicy().getPolicyType()
== ManagedSubscriptionsPolicy.TYPE_ALL_MANAGED_SUBSCRIPTIONS) {
- String defaultDialerPackageName = getOemDefaultDialerPackage();
- String defaultSmsPackageName = getOemDefaultSmsPackage();
- updateDialerAndSmsManagedShortcutsOverrideCache(defaultDialerPackageName,
- defaultSmsPackageName);
+ updateDialerAndSmsManagedShortcutsOverrideCache();
}
startOwnerService(userId, "start-user");
@@ -7714,7 +7714,7 @@
}
// Unsuspend personal apps if needed.
- suspendPersonalAppsInternal(parentId, false);
+ suspendPersonalAppsInternal(parentId, getManagedUserId(parentId), false);
// Notify FRP agent, LSS and WindowManager to ensure they don't hold on to stale policies.
final int frpAgentUid = getFrpManagementAgentUid();
@@ -10728,15 +10728,6 @@
return UserHandle.USER_NULL;
}
- private @UserIdInt int getManagedProfileUserId() {
- for (UserInfo ui : mUserManagerInternal.getUserInfos()) {
- if (ui.isManagedProfile()) {
- return ui.id;
- }
- }
- return UserHandle.USER_NULL;
- }
-
/**
* This API is cached: invalidate with invalidateBinderCaches().
*/
@@ -11599,6 +11590,12 @@
synchronized (getLockObject()) {
final ActiveAdmin activeAdmin = getParentOfAdminIfRequired(
getProfileOwnerOrDeviceOwnerLocked(caller.getUserId()), parent);
+
+ if (isManagedProfile(userId)) {
+ mInjector.binderWithCleanCallingIdentity(
+ () -> updateDialerAndSmsManagedShortcutsOverrideCache());
+ }
+
if (!Objects.equals(activeAdmin.mSmsPackage, packageName)) {
activeAdmin.mSmsPackage = packageName;
saveSettingsLocked(caller.getUserId());
@@ -11644,6 +11641,11 @@
});
// Only save the package when the setting the role succeeded without exception.
synchronized (getLockObject()) {
+ if (isManagedProfile(callerUserId)) {
+ mInjector.binderWithCleanCallingIdentity(
+ () -> updateDialerAndSmsManagedShortcutsOverrideCache());
+ }
+
final ActiveAdmin admin = getProfileOwnerOrDeviceOwnerLocked(callerUserId);
if (!Objects.equals(admin.mDialerPackage, packageName)) {
admin.mDialerPackage = packageName;
@@ -12079,7 +12081,7 @@
Objects.requireNonNull(who, "ComponentName is null");
final CallerIdentity caller = getCallerIdentity(who);
Preconditions.checkCallAuthorization(
- isDeviceOwner(caller) || isProfileOwner(caller));
+ isDefaultDeviceOwner(caller) || isProfileOwner(caller));
if (packageList != null) {
for (String pkg : packageList) {
@@ -13364,8 +13366,14 @@
PolicyDefinition<Boolean> policyDefinition =
PolicyDefinition.getPolicyDefinitionForUserRestriction(key);
if (enabledFromThisOwner) {
- setLocalUserRestrictionInternal(
- admin, key, /* enabled= */ true, affectedUserId);
+ // TODO: Remove this special case - replace with breaking change to require
+ // setGlobally to disable ADB
+ if (key.equals(UserManager.DISALLOW_DEBUGGING_FEATURES) && parent) {
+ setGlobalUserRestrictionInternal(admin, key, /* enabled= */ true);
+ } else {
+ setLocalUserRestrictionInternal(
+ admin, key, /* enabled= */ true, affectedUserId);
+ }
} else {
// Remove any local and global policy that was set by the admin
if (!policyDefinition.isLocalOnlyPolicy()) {
@@ -15154,7 +15162,7 @@
}
DevicePolicyEventLogger
.createEvent(DevicePolicyEnums.SET_LOCKTASK_MODE_ENABLED)
- .setAdmin(admin.info.getPackageName())
+ .setAdmin(admin.info == null ? null : admin.info.getPackageName())
.setBoolean(isEnabled)
.setStrings(pkg)
.write();
@@ -20787,7 +20795,7 @@
}
mInjector.binderWithCleanCallingIdentity(() -> updatePersonalAppsSuspension(
- callingUserId, mUserManager.isUserUnlocked(callingUserId)));
+ callingUserId));
DevicePolicyEventLogger
.createEvent(DevicePolicyEnums.SET_PERSONAL_APPS_SUSPENDED)
@@ -20821,16 +20829,19 @@
/**
* Checks whether personal apps should be suspended according to the policy and applies the
* change if needed.
- *
- * @param unlocked whether the profile is currently running unlocked.
*/
- private boolean updatePersonalAppsSuspension(int profileUserId, boolean unlocked) {
+ private boolean updatePersonalAppsSuspension(int profileUserId) {
final boolean shouldSuspend;
synchronized (getLockObject()) {
final ActiveAdmin profileOwner = getProfileOwnerAdminLocked(profileUserId);
if (profileOwner != null) {
- final int notificationState =
- updateProfileOffDeadlineLocked(profileUserId, profileOwner, unlocked);
+ // Profile is considered "off" when it is either not running or is running locked
+ // or is in quiet mode, i.e. when the admin cannot sync policies or show UI.
+ boolean profileUserOff =
+ !mUserManagerInternal.isUserUnlockingOrUnlocked(profileUserId)
+ || mUserManager.isQuietModeEnabled(UserHandle.of(profileUserId));
+ final int notificationState = updateProfileOffDeadlineLocked(
+ profileUserId, profileOwner, profileUserOff);
final boolean suspendedExplicitly = profileOwner.mSuspendPersonalApps;
final boolean suspendedByTimeout = profileOwner.mProfileOffDeadline == -1;
Slogf.d(LOG_TAG,
@@ -20845,7 +20856,7 @@
}
final int parentUserId = getProfileParentId(profileUserId);
- suspendPersonalAppsInternal(parentUserId, shouldSuspend);
+ suspendPersonalAppsInternal(parentUserId, profileUserId, shouldSuspend);
return shouldSuspend;
}
@@ -20855,16 +20866,16 @@
* @return notification state
*/
private int updateProfileOffDeadlineLocked(
- int profileUserId, ActiveAdmin profileOwner, boolean unlocked) {
+ int profileUserId, ActiveAdmin profileOwner, boolean off) {
final long now = mInjector.systemCurrentTimeMillis();
if (profileOwner.mProfileOffDeadline != 0 && now > profileOwner.mProfileOffDeadline) {
- Slogf.i(LOG_TAG, "Profile off deadline has been reached, unlocked: " + unlocked);
+ Slogf.i(LOG_TAG, "Profile off deadline has been reached, off: " + off);
if (profileOwner.mProfileOffDeadline != -1) {
// Move the deadline far to the past so that it cannot be rolled back by TZ change.
profileOwner.mProfileOffDeadline = -1;
saveSettingsLocked(profileUserId);
}
- return unlocked ? PROFILE_OFF_NOTIFICATION_NONE : PROFILE_OFF_NOTIFICATION_SUSPENDED;
+ return off ? PROFILE_OFF_NOTIFICATION_SUSPENDED : PROFILE_OFF_NOTIFICATION_NONE;
}
boolean shouldSaveSettings = false;
if (profileOwner.mSuspendPersonalApps) {
@@ -20881,7 +20892,7 @@
profileOwner.mProfileOffDeadline = 0;
shouldSaveSettings = true;
} else if (profileOwner.mProfileOffDeadline == 0
- && (profileOwner.mProfileMaximumTimeOffMillis != 0 && !unlocked)) {
+ && (profileOwner.mProfileMaximumTimeOffMillis != 0 && off)) {
// There profile is locked and there is a policy, but the deadline is not set -> set the
// deadline.
Slogf.i(LOG_TAG, "Profile off deadline is set.");
@@ -20895,7 +20906,7 @@
final long alarmTime;
final int notificationState;
- if (unlocked || profileOwner.mProfileOffDeadline == 0) {
+ if (!off || profileOwner.mProfileOffDeadline == 0) {
alarmTime = 0;
notificationState = PROFILE_OFF_NOTIFICATION_NONE;
} else if (profileOwner.mProfileOffDeadline - now < MANAGED_PROFILE_OFF_WARNING_PERIOD) {
@@ -20929,23 +20940,40 @@
return notificationState;
}
- private void suspendPersonalAppsInternal(int userId, boolean suspended) {
- if (getUserData(userId).mAppsSuspended == suspended) {
+ private void suspendPersonalAppsInternal(
+ int parentUserId, int profileUserId, boolean suspended) {
+ if (getUserData(parentUserId).mAppsSuspended == suspended) {
return;
}
Slogf.i(LOG_TAG, "%s personal apps for user %d", suspended ? "Suspending" : "Unsuspending",
- userId);
+ parentUserId);
- if (suspended) {
- suspendPersonalAppsInPackageManager(userId);
+ if (isPolicyEngineForFinanceFlagEnabled()) {
+ // TODO(b/280602237): migrate properly
+ ActiveAdmin profileOwner = getProfileOwnerAdminLocked(profileUserId);
+ if (profileOwner != null) {
+ EnforcingAdmin admin = EnforcingAdmin.createEnterpriseEnforcingAdmin(
+ profileOwner.info.getComponent(),
+ profileUserId,
+ profileOwner);
+ mDevicePolicyEngine.setLocalPolicy(
+ PolicyDefinition.PERSONAL_APPS_SUSPENDED,
+ admin,
+ new BooleanPolicyValue(suspended),
+ parentUserId);
+ }
} else {
- mInjector.getPackageManagerInternal().unsuspendForSuspendingPackage(
- PLATFORM_PACKAGE_NAME, userId);
+ if (suspended) {
+ suspendPersonalAppsInPackageManager(parentUserId);
+ } else {
+ mInjector.getPackageManagerInternal().unsuspendForSuspendingPackage(
+ PLATFORM_PACKAGE_NAME, parentUserId);
+ }
}
synchronized (getLockObject()) {
- getUserData(userId).mAppsSuspended = suspended;
- saveSettingsLocked(userId);
+ getUserData(parentUserId).mAppsSuspended = suspended;
+ saveSettingsLocked(parentUserId);
}
}
@@ -21152,7 +21180,7 @@
}
mInjector.binderWithCleanCallingIdentity(
- () -> updatePersonalAppsSuspension(userId, mUserManager.isUserUnlocked()));
+ () -> updatePersonalAppsSuspension(userId));
DevicePolicyEventLogger
.createEvent(DevicePolicyEnums.SET_MANAGED_PROFILE_MAXIMUM_TIME_OFF)
@@ -21797,10 +21825,9 @@
final AccountManager accountManager = mContext.createContextAsUser(
UserHandle.of(sourceUserId), /* flags= */ 0)
.getSystemService(AccountManager.class);
- final AccountManagerFuture<Bundle> bundle = accountManager.removeAccount(account,
- null, null /* callback */, null /* handler */);
try {
- final Bundle result = bundle.getResult();
+ final Bundle result = accountManager.removeAccount(account,
+ null, null /* callback */, null /* handler */).getResult(60, TimeUnit.SECONDS);
if (result.getBoolean(AccountManager.KEY_BOOLEAN_RESULT, /* default */ false)) {
Slogf.i(LOG_TAG, "Account removed from the primary user.");
} else {
@@ -22701,7 +22728,7 @@
}
private void handleFinancedDeviceKioskRoleChange() {
- if (!isPermissionCheckFlagEnabled()) {
+ if (!isPolicyEngineForFinanceFlagEnabled()) {
return;
}
Slog.i(LOG_TAG, "Handling action " + ACTION_DEVICE_FINANCING_STATE_CHANGED);
@@ -23183,6 +23210,8 @@
MANAGE_DEVICE_POLICY_ACROSS_USERS);
CROSS_USER_PERMISSIONS.put(MANAGE_DEVICE_POLICY_DEFAULT_SMS,
MANAGE_DEVICE_POLICY_ACROSS_USERS);
+ CROSS_USER_PERMISSIONS.put(MANAGE_DEVICE_POLICY_INPUT_METHODS,
+ MANAGE_DEVICE_POLICY_ACROSS_USERS);
CROSS_USER_PERMISSIONS.put(MANAGE_DEVICE_POLICY_MICROPHONE,
MANAGE_DEVICE_POLICY_ACROSS_USERS);
CROSS_USER_PERMISSIONS.put(MANAGE_DEVICE_POLICY_MOBILE_NETWORK,
@@ -23915,8 +23944,7 @@
Slogf.w(LOG_TAG, "Couldn't install sms app, sms app package is null");
}
- updateDialerAndSmsManagedShortcutsOverrideCache(defaultDialerPackageName,
- defaultSmsPackageName);
+ updateDialerAndSmsManagedShortcutsOverrideCache();
} catch (RemoteException re) {
// shouldn't happen
Slogf.wtf(LOG_TAG, "Failed to install dialer/sms app", re);
@@ -23932,17 +23960,28 @@
return mContext.getString(R.string.config_defaultSms);
}
- private void updateDialerAndSmsManagedShortcutsOverrideCache(
- String defaultDialerPackageName, String defaultSmsPackageName) {
+ private void updateDialerAndSmsManagedShortcutsOverrideCache() {
ArrayMap<String, String> shortcutOverrides = new ArrayMap<>();
+ int managedUserId = getManagedUserId();
+ List<String> dialerRoleHolders = mRoleManager.getRoleHoldersAsUser(RoleManager.ROLE_DIALER,
+ UserHandle.of(managedUserId));
+ List<String> smsRoleHolders = mRoleManager.getRoleHoldersAsUser(RoleManager.ROLE_SMS,
+ UserHandle.of(managedUserId));
- if (defaultDialerPackageName != null) {
- shortcutOverrides.put(defaultDialerPackageName, defaultDialerPackageName);
+ String dialerPackageToOverride = getOemDefaultDialerPackage();
+ String smsPackageToOverride = getOemDefaultSmsPackage();
+
+ // To get the default app, we can get all the role holders and get the first element.
+ if (dialerPackageToOverride != null) {
+ shortcutOverrides.put(dialerPackageToOverride,
+ dialerRoleHolders.isEmpty() ? dialerPackageToOverride
+ : dialerRoleHolders.get(0));
+ }
+ if (smsPackageToOverride != null) {
+ shortcutOverrides.put(smsPackageToOverride,
+ smsRoleHolders.isEmpty() ? smsPackageToOverride : smsRoleHolders.get(0));
}
- if (defaultSmsPackageName != null) {
- shortcutOverrides.put(defaultSmsPackageName, defaultSmsPackageName);
- }
mPolicyCache.setLauncherShortcutOverrides(shortcutOverrides);
}
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/PolicyDefinition.java b/services/devicepolicy/java/com/android/server/devicepolicy/PolicyDefinition.java
index 17c84f9..bac39e0 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/PolicyDefinition.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/PolicyDefinition.java
@@ -265,7 +265,7 @@
// never used, but might need some refactoring to not always assume a non-null
// mechanism.
TRUE_MORE_RESTRICTIVE,
- POLICY_FLAG_LOCAL_ONLY_POLICY,
+ POLICY_FLAG_LOCAL_ONLY_POLICY | POLICY_FLAG_INHERITABLE,
PolicyEnforcerCallbacks::setApplicationHidden,
new BooleanPolicySerializer());
@@ -290,7 +290,7 @@
new AccountTypePolicyKey(
DevicePolicyIdentifiers.ACCOUNT_MANAGEMENT_DISABLED_POLICY),
TRUE_MORE_RESTRICTIVE,
- POLICY_FLAG_LOCAL_ONLY_POLICY,
+ POLICY_FLAG_LOCAL_ONLY_POLICY | POLICY_FLAG_INHERITABLE,
// Nothing is enforced, we just need to store it
(Boolean value, Context context, Integer userId, PolicyKey policyKey) -> true,
new BooleanPolicySerializer());
@@ -311,7 +311,7 @@
static PolicyDefinition<Set<String>> PERMITTED_INPUT_METHODS = new PolicyDefinition<>(
new NoArgsPolicyKey(DevicePolicyIdentifiers.PERMITTED_INPUT_METHODS_POLICY),
new MostRecent<>(),
- POLICY_FLAG_LOCAL_ONLY_POLICY,
+ POLICY_FLAG_LOCAL_ONLY_POLICY | POLICY_FLAG_INHERITABLE,
(Set<String> value, Context context, Integer userId, PolicyKey policyKey) -> true,
new StringSetPolicySerializer());
@@ -319,10 +319,18 @@
static PolicyDefinition<Boolean> SCREEN_CAPTURE_DISABLED = new PolicyDefinition<>(
new NoArgsPolicyKey(DevicePolicyIdentifiers.SCREEN_CAPTURE_DISABLED_POLICY),
TRUE_MORE_RESTRICTIVE,
- /* flags= */ 0,
+ POLICY_FLAG_INHERITABLE,
PolicyEnforcerCallbacks::setScreenCaptureDisabled,
new BooleanPolicySerializer());
+ static PolicyDefinition<Boolean> PERSONAL_APPS_SUSPENDED = new PolicyDefinition<>(
+ new NoArgsPolicyKey(DevicePolicyIdentifiers.PERSONAL_APPS_SUSPENDED_POLICY),
+ new MostRecent<>(),
+ POLICY_FLAG_LOCAL_ONLY_POLICY | POLICY_FLAG_INHERITABLE,
+ PolicyEnforcerCallbacks::setPersonalAppsSuspended,
+ new BooleanPolicySerializer());
+
+
private static final Map<String, PolicyDefinition<?>> POLICY_DEFINITIONS = new HashMap<>();
private static Map<String, Integer> USER_RESTRICTION_FLAGS = new HashMap<>();
@@ -352,6 +360,8 @@
PERMITTED_INPUT_METHODS);
POLICY_DEFINITIONS.put(DevicePolicyIdentifiers.SCREEN_CAPTURE_DISABLED_POLICY,
SCREEN_CAPTURE_DISABLED);
+ POLICY_DEFINITIONS.put(DevicePolicyIdentifiers.PERSONAL_APPS_SUSPENDED_POLICY,
+ PERSONAL_APPS_SUSPENDED);
// User Restriction Policies
USER_RESTRICTION_FLAGS.put(UserManager.DISALLOW_MODIFY_ACCOUNTS, /* flags= */ 0);
@@ -537,7 +547,7 @@
String restriction, int flags) {
String identifier = DevicePolicyIdentifiers.getIdentifierForUserRestriction(restriction);
UserRestrictionPolicyKey key = new UserRestrictionPolicyKey(identifier, restriction);
- flags |= POLICY_FLAG_USER_RESTRICTION_POLICY;
+ flags |= (POLICY_FLAG_USER_RESTRICTION_POLICY | POLICY_FLAG_INHERITABLE);
PolicyDefinition<Boolean> definition = new PolicyDefinition<>(
key,
TRUE_MORE_RESTRICTIVE,
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/PolicyEnforcerCallbacks.java b/services/devicepolicy/java/com/android/server/devicepolicy/PolicyEnforcerCallbacks.java
index 816a984..454337f 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/PolicyEnforcerCallbacks.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/PolicyEnforcerCallbacks.java
@@ -16,6 +16,8 @@
package com.android.server.devicepolicy;
+import static com.android.server.pm.PackageManagerService.PLATFORM_PACKAGE_NAME;
+
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.AppGlobals;
@@ -46,6 +48,7 @@
import android.view.IWindowManager;
import com.android.internal.os.BackgroundThread;
+import com.android.internal.util.ArrayUtils;
import com.android.server.LocalServices;
import com.android.server.pm.UserManagerInternal;
import com.android.server.utils.Slogf;
@@ -275,4 +278,28 @@
}
});
}
+
+ static boolean setPersonalAppsSuspended(
+ @Nullable Boolean suspended, @NonNull Context context, int userId,
+ @NonNull PolicyKey policyKey) {
+ Binder.withCleanCallingIdentity(() -> {
+ if (suspended != null && suspended) {
+ suspendPersonalAppsInPackageManager(context, userId);
+ } else {
+ LocalServices.getService(PackageManagerInternal.class)
+ .unsuspendForSuspendingPackage(PLATFORM_PACKAGE_NAME, userId);
+ }
+ });
+ return true;
+ }
+
+ private static void suspendPersonalAppsInPackageManager(Context context, int userId) {
+ final String[] appsToSuspend = PersonalAppsSuspensionHelper.forUser(context, userId)
+ .getPersonalAppsForSuspension();
+ final String[] failedApps = LocalServices.getService(PackageManagerInternal.class)
+ .setPackagesSuspendedByAdmin(userId, appsToSuspend, true);
+ if (!ArrayUtils.isEmpty(failedApps)) {
+ Slogf.wtf(LOG_TAG, "Failed to suspend apps: " + String.join(",", failedApps));
+ }
+ }
}
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index a8a1c03..af84180 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -735,7 +735,7 @@
final String name = args[1];
final Dumpable dumpable = mDumpables.get(name);
if (dumpable == null) {
- pw.printf("No dummpable named %s\n", name);
+ pw.printf("No dumpable named %s\n", name);
return;
}
@@ -2644,7 +2644,11 @@
// AdServicesManagerService (PP API service)
t.traceBegin("StartAdServicesManagerService");
- mSystemServiceManager.startService(AD_SERVICES_MANAGER_SERVICE_CLASS);
+ SystemService adServices = mSystemServiceManager
+ .startService(AD_SERVICES_MANAGER_SERVICE_CLASS);
+ if (adServices instanceof Dumpable) {
+ mDumper.addDumpable((Dumpable) adServices);
+ }
t.traceEnd();
// OnDevicePersonalizationSystemService
diff --git a/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/ImeVisibilityStateComputerTest.java b/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/ImeVisibilityStateComputerTest.java
index 3871e1d..a38c162 100644
--- a/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/ImeVisibilityStateComputerTest.java
+++ b/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/ImeVisibilityStateComputerTest.java
@@ -23,6 +23,7 @@
import static android.view.WindowManager.DISPLAY_IME_POLICY_HIDE;
import static android.view.WindowManager.DISPLAY_IME_POLICY_LOCAL;
import static android.view.WindowManager.LayoutParams.SOFT_INPUT_STATE_UNCHANGED;
+import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify;
import static com.android.internal.inputmethod.SoftInputShowHideReason.HIDE_WHEN_INPUT_TARGET_INVISIBLE;
@@ -241,8 +242,12 @@
final IBinder testImeTargetOverlay = new Binder();
final IBinder testImeInputTarget = new Binder();
+ // Simulate a test IME input target was visible.
+ mListener.onImeInputTargetVisibilityChanged(testImeInputTarget, true, false);
+
// Simulate a test IME layering target overlay fully occluded the IME input target.
- mListener.onImeTargetOverlayVisibilityChanged(testImeTargetOverlay, true, false);
+ mListener.onImeTargetOverlayVisibilityChanged(testImeTargetOverlay,
+ TYPE_APPLICATION_OVERLAY, true, false);
mListener.onImeInputTargetVisibilityChanged(testImeInputTarget, false, false);
final ArgumentCaptor<IBinder> targetCaptor = ArgumentCaptor.forClass(IBinder.class);
final ArgumentCaptor<ImeVisibilityResult> resultCaptor = ArgumentCaptor.forClass(
diff --git a/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/InputMethodManagerServiceTestBase.java b/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/InputMethodManagerServiceTestBase.java
index c80ecbf..1a8e00c 100644
--- a/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/InputMethodManagerServiceTestBase.java
+++ b/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/InputMethodManagerServiceTestBase.java
@@ -207,6 +207,8 @@
when(mMockActivityManagerInternal.isSystemReady()).thenReturn(true);
when(mMockPackageManagerInternal.getPackageUid(anyString(), anyLong(), anyInt()))
.thenReturn(Binder.getCallingUid());
+ when(mMockPackageManagerInternal.isSameApp(anyString(), anyLong(), anyInt(), anyInt()))
+ .thenReturn(true);
when(mMockWindowManagerInternal.onToggleImeRequested(anyBoolean(), any(), any(), anyInt()))
.thenReturn(TEST_IME_TARGET_INFO);
when(mMockInputMethodClient.asBinder()).thenReturn(mMockInputMethodBinder);
diff --git a/services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/parsing/PackageParserLegacyCoreTest.java b/services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/parsing/PackageParserLegacyCoreTest.java
index 906cc83..9e37164 100644
--- a/services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/parsing/PackageParserLegacyCoreTest.java
+++ b/services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/parsing/PackageParserLegacyCoreTest.java
@@ -93,6 +93,9 @@
private static final int PLATFORM_VERSION = 20;
private static final int NEWER_VERSION = 30;
+ private static final int DISALLOW_PRERELEASE = -1;
+ private static final int DISALLOW_RELEASED = -1;
+
@Rule public final Expect expect = Expect.create();
private void verifyComputeMinSdkVersion(int minSdkVersion, String minSdkCodename,
@@ -149,8 +152,10 @@
// Don't allow newer pre-release minSdkVersion on pre-release platform.
// APP: Pre-release API 30
// DEV: Pre-release API 20
- verifyComputeMinSdkVersion(NEWER_VERSION, NEWER_PRE_RELEASE, false, -1);
- verifyComputeMinSdkVersion(NEWER_VERSION, NEWER_PRE_RELEASE_WITH_FINGERPRINT, false, -1);
+ verifyComputeMinSdkVersion(NEWER_VERSION, NEWER_PRE_RELEASE, false,
+ DISALLOW_PRERELEASE);
+ verifyComputeMinSdkVersion(NEWER_VERSION, NEWER_PRE_RELEASE_WITH_FINGERPRINT, false,
+ DISALLOW_PRERELEASE);
}
@Test
@@ -173,21 +178,27 @@
// Don't allow older pre-release minSdkVersion on released platform.
// APP: Pre-release API 10
// DEV: Released API 20
- verifyComputeMinSdkVersion(OLDER_VERSION, OLDER_PRE_RELEASE, true, -1);
- verifyComputeMinSdkVersion(OLDER_VERSION, OLDER_PRE_RELEASE_WITH_FINGERPRINT, true, -1);
+ verifyComputeMinSdkVersion(OLDER_VERSION, OLDER_PRE_RELEASE, true,
+ DISALLOW_RELEASED);
+ verifyComputeMinSdkVersion(OLDER_VERSION, OLDER_PRE_RELEASE_WITH_FINGERPRINT, true,
+ DISALLOW_RELEASED);
// Don't allow same pre-release minSdkVersion on released platform.
// APP: Pre-release API 20
// DEV: Released API 20
- verifyComputeMinSdkVersion(PLATFORM_VERSION, PRE_RELEASE, true, -1);
- verifyComputeMinSdkVersion(PLATFORM_VERSION, PRE_RELEASE_WITH_FINGERPRINT, true, -1);
+ verifyComputeMinSdkVersion(PLATFORM_VERSION, PRE_RELEASE, true,
+ DISALLOW_RELEASED);
+ verifyComputeMinSdkVersion(PLATFORM_VERSION, PRE_RELEASE_WITH_FINGERPRINT, true,
+ DISALLOW_RELEASED);
// Don't allow newer pre-release minSdkVersion on released platform.
// APP: Pre-release API 30
// DEV: Released API 20
- verifyComputeMinSdkVersion(NEWER_VERSION, NEWER_PRE_RELEASE, true, -1);
- verifyComputeMinSdkVersion(NEWER_VERSION, NEWER_PRE_RELEASE_WITH_FINGERPRINT, true, -1);
+ verifyComputeMinSdkVersion(NEWER_VERSION, NEWER_PRE_RELEASE, true,
+ DISALLOW_RELEASED);
+ verifyComputeMinSdkVersion(NEWER_VERSION, NEWER_PRE_RELEASE_WITH_FINGERPRINT, true,
+ DISALLOW_RELEASED);
}
private void verifyComputeTargetSdkVersion(int targetSdkVersion, String targetSdkCodename,
@@ -254,10 +265,10 @@
// Don't allow newer pre-release targetSdkVersion on pre-release platform.
// APP: Pre-release API 30
// DEV: Pre-release API 20
- verifyComputeTargetSdkVersion(NEWER_VERSION, NEWER_PRE_RELEASE, false, false, -1);
+ verifyComputeTargetSdkVersion(NEWER_VERSION, NEWER_PRE_RELEASE, false, false,
+ DISALLOW_PRERELEASE);
verifyComputeTargetSdkVersion(NEWER_VERSION, NEWER_PRE_RELEASE_WITH_FINGERPRINT, false,
- false, -1
- );
+ false, DISALLOW_PRERELEASE);
// Do allow newer pre-release targetSdkVersion on pre-release platform when
// allowUnknownCodenames is true.
@@ -290,35 +301,35 @@
// Don't allow older pre-release targetSdkVersion on released platform.
// APP: Pre-release API 10
// DEV: Released API 20
- verifyComputeTargetSdkVersion(OLDER_VERSION, OLDER_PRE_RELEASE, true, false, -1);
+ verifyComputeTargetSdkVersion(OLDER_VERSION, OLDER_PRE_RELEASE, true, false,
+ DISALLOW_RELEASED);
verifyComputeTargetSdkVersion(OLDER_VERSION, OLDER_PRE_RELEASE_WITH_FINGERPRINT, true,
- false, -1
- );
+ false, DISALLOW_RELEASED);
// Don't allow same pre-release targetSdkVersion on released platform.
// APP: Pre-release API 20
// DEV: Released API 20
- verifyComputeTargetSdkVersion(PLATFORM_VERSION, PRE_RELEASE, true, false, -1);
+ verifyComputeTargetSdkVersion(PLATFORM_VERSION, PRE_RELEASE, true, false,
+ DISALLOW_RELEASED);
verifyComputeTargetSdkVersion(PLATFORM_VERSION, PRE_RELEASE_WITH_FINGERPRINT, true, false,
- -1
- );
+ DISALLOW_RELEASED);
// Don't allow same pre-release targetSdkVersion on released platform when
// allowUnknownCodenames is true.
// APP: Pre-release API 20
// DEV: Released API 20
verifyComputeTargetSdkVersion(PLATFORM_VERSION, PRE_RELEASE, true, true,
- -1);
+ DISALLOW_RELEASED);
verifyComputeTargetSdkVersion(PLATFORM_VERSION, PRE_RELEASE_WITH_FINGERPRINT, true, true,
- -1);
+ DISALLOW_RELEASED);
// Don't allow newer pre-release targetSdkVersion on released platform.
// APP: Pre-release API 30
// DEV: Released API 20
- verifyComputeTargetSdkVersion(NEWER_VERSION, NEWER_PRE_RELEASE, true, false, -1);
+ verifyComputeTargetSdkVersion(NEWER_VERSION, NEWER_PRE_RELEASE, true, false,
+ DISALLOW_RELEASED);
verifyComputeTargetSdkVersion(NEWER_VERSION, NEWER_PRE_RELEASE_WITH_FINGERPRINT, true,
- false, -1
- );
+ false, DISALLOW_RELEASED);
// Do allow newer pre-release targetSdkVersion on released platform when
// allowUnknownCodenames is true.
// APP: Pre-release API 30
diff --git a/services/tests/RemoteProvisioningServiceTests/src/com/android/server/security/rkp/RemoteProvisioningRegistrationTest.java b/services/tests/RemoteProvisioningServiceTests/src/com/android/server/security/rkp/RemoteProvisioningRegistrationTest.java
index 1dcd0b9..df7be51 100644
--- a/services/tests/RemoteProvisioningServiceTests/src/com/android/server/security/rkp/RemoteProvisioningRegistrationTest.java
+++ b/services/tests/RemoteProvisioningServiceTests/src/com/android/server/security/rkp/RemoteProvisioningRegistrationTest.java
@@ -23,8 +23,10 @@
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.anyInt;
import static org.mockito.Mockito.argThat;
+import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.contains;
import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.mock;
@@ -32,6 +34,7 @@
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
+import android.os.Binder;
import android.os.CancellationSignal;
import android.os.OperationCanceledException;
import android.os.OutcomeReceiver;
@@ -101,8 +104,10 @@
.when(mRegistrationProxy).getKeyAsync(eq(42), any(), any(), any());
IGetKeyCallback callback = mock(IGetKeyCallback.class);
+ doReturn(new Binder()).when(callback).asBinder();
mRegistration.getKey(42, callback);
verify(callback).onSuccess(matches(expectedKey));
+ verify(callback, atLeastOnce()).asBinder();
verifyNoMoreInteractions(callback);
}
@@ -114,8 +119,10 @@
executor.execute(() -> receiver.onError(expectedException))))
.when(mRegistrationProxy).getKeyAsync(eq(0), any(), any(), any());
IGetKeyCallback callback = mock(IGetKeyCallback.class);
+ doReturn(new Binder()).when(callback).asBinder();
mRegistration.getKey(0, callback);
verify(callback).onError(eq(IGetKeyCallback.ErrorCode.ERROR_UNKNOWN), eq("oops!"));
+ verify(callback, atLeastOnce()).asBinder();
verifyNoMoreInteractions(callback);
}
@@ -140,18 +147,28 @@
executor.execute(() -> receiver.onError(expectedException))))
.when(mRegistrationProxy).getKeyAsync(eq(0), any(), any(), any());
IGetKeyCallback callback = mock(IGetKeyCallback.class);
+ doReturn(new Binder()).when(callback).asBinder();
mRegistration.getKey(0, callback);
verify(callback).onError(eq(error), contains(errorField.getName()));
+ verify(callback, atLeastOnce()).asBinder();
verifyNoMoreInteractions(callback);
}
}
@Test
public void getKeyCancelDuringProxyOperation() throws Exception {
+ final Binder theBinder = new Binder();
IGetKeyCallback callback = mock(IGetKeyCallback.class);
+ doReturn(theBinder).when(callback).asBinder();
doAnswer(
answerGetKeyAsync((keyId, cancelSignal, executor, receiver) -> {
- mRegistration.cancelGetKey(callback);
+ // Use a different callback object to ensure that the callback equivalence
+ // relies on the actual IBinder object.
+ IGetKeyCallback differentCallback = mock(IGetKeyCallback.class);
+ doReturn(theBinder).when(differentCallback).asBinder();
+ mRegistration.cancelGetKey(differentCallback);
+ verify(differentCallback, atLeastOnce()).asBinder();
+ verifyNoMoreInteractions(differentCallback);
assertThat(cancelSignal.isCanceled()).isTrue();
executor.execute(() -> receiver.onError(new OperationCanceledException()));
}))
@@ -159,18 +176,21 @@
mRegistration.getKey(Integer.MAX_VALUE, callback);
verify(callback).onCancel();
+ verify(callback, atLeastOnce()).asBinder();
verifyNoMoreInteractions(callback);
}
@Test
public void cancelGetKeyWithInvalidCallback() throws Exception {
IGetKeyCallback callback = mock(IGetKeyCallback.class);
+ doReturn(new Binder()).when(callback).asBinder();
assertThrows(IllegalArgumentException.class, () -> mRegistration.cancelGetKey(callback));
}
@Test
public void getKeyRejectsDuplicateCallback() throws Exception {
IGetKeyCallback callback = mock(IGetKeyCallback.class);
+ doReturn(new Binder()).when(callback).asBinder();
doAnswer(
answerGetKeyAsync((keyId, cancelSignal, executor, receiver) -> {
assertThrows(IllegalArgumentException.class, () ->
@@ -181,12 +201,14 @@
mRegistration.getKey(0, callback);
verify(callback, times(1)).onSuccess(any());
+ verify(callback, atLeastOnce()).asBinder();
verifyNoMoreInteractions(callback);
}
@Test
public void getKeyCancelAfterCompleteFails() throws Exception {
IGetKeyCallback callback = mock(IGetKeyCallback.class);
+ doReturn(new Binder()).when(callback).asBinder();
doAnswer(
answerGetKeyAsync((keyId, cancelSignal, executor, receiver) ->
executor.execute(() ->
@@ -197,6 +219,7 @@
mRegistration.getKey(Integer.MIN_VALUE, callback);
verify(callback).onSuccess(any());
assertThrows(IllegalArgumentException.class, () -> mRegistration.cancelGetKey(callback));
+ verify(callback, atLeastOnce()).asBinder();
verifyNoMoreInteractions(callback);
}
@@ -208,10 +231,12 @@
.getKeyAsync(anyInt(), any(), any(), any());
IGetKeyCallback callback = mock(IGetKeyCallback.class);
+ doReturn(new Binder()).when(callback).asBinder();
mRegistration.getKey(0, callback);
verify(callback).onError(eq(IGetKeyCallback.ErrorCode.ERROR_UNKNOWN),
eq(expectedException.getMessage()));
assertThrows(IllegalArgumentException.class, () -> mRegistration.cancelGetKey(callback));
+ verify(callback, atLeastOnce()).asBinder();
verifyNoMoreInteractions(callback);
}
@@ -224,8 +249,10 @@
.storeUpgradedKeyAsync(any(), any(), any(), any());
IStoreUpgradedKeyCallback callback = mock(IStoreUpgradedKeyCallback.class);
+ doReturn(new Binder()).when(callback).asBinder();
mRegistration.storeUpgradedKeyAsync(new byte[0], new byte[0], callback);
verify(callback).onSuccess();
+ verify(callback, atLeastOnce()).asBinder();
verifyNoMoreInteractions(callback);
}
@@ -239,8 +266,10 @@
.storeUpgradedKeyAsync(any(), any(), any(), any());
IStoreUpgradedKeyCallback callback = mock(IStoreUpgradedKeyCallback.class);
+ doReturn(new Binder()).when(callback).asBinder();
mRegistration.storeUpgradedKeyAsync(new byte[0], new byte[0], callback);
verify(callback).onError(errorString);
+ verify(callback, atLeastOnce()).asBinder();
verifyNoMoreInteractions(callback);
}
@@ -252,14 +281,17 @@
.storeUpgradedKeyAsync(any(), any(), any(), any());
IStoreUpgradedKeyCallback callback = mock(IStoreUpgradedKeyCallback.class);
+ doReturn(new Binder()).when(callback).asBinder();
mRegistration.storeUpgradedKeyAsync(new byte[0], new byte[0], callback);
verify(callback).onError(errorString);
+ verify(callback, atLeastOnce()).asBinder();
verifyNoMoreInteractions(callback);
}
@Test
public void storeUpgradedKeyDuplicateCallback() throws Exception {
IStoreUpgradedKeyCallback callback = mock(IStoreUpgradedKeyCallback.class);
+ doReturn(new Binder()).when(callback).asBinder();
doAnswer(
answerStoreUpgradedKeyAsync((oldBlob, newBlob, executor, receiver) -> {
@@ -273,6 +305,7 @@
mRegistration.storeUpgradedKeyAsync(new byte[0], new byte[0], callback);
verify(callback).onSuccess();
+ verify(callback, atLeastOnce()).asBinder();
verifyNoMoreInteractions(callback);
}
diff --git a/services/tests/mockingservicestests/src/com/android/server/am/BroadcastQueueModernImplTest.java b/services/tests/mockingservicestests/src/com/android/server/am/BroadcastQueueModernImplTest.java
index acfea85..581fe4a 100644
--- a/services/tests/mockingservicestests/src/com/android/server/am/BroadcastQueueModernImplTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/am/BroadcastQueueModernImplTest.java
@@ -393,9 +393,9 @@
List.of(makeMockRegisteredReceiver()), false);
enqueueOrReplaceBroadcast(queue, airplaneRecord, 0);
- queue.setProcessAndUidCached(null, false);
+ queue.setProcessAndUidState(null, false, false);
final long notCachedRunnableAt = queue.getRunnableAt();
- queue.setProcessAndUidCached(null, true);
+ queue.setProcessAndUidState(null, false, true);
final long cachedRunnableAt = queue.getRunnableAt();
assertThat(cachedRunnableAt).isGreaterThan(notCachedRunnableAt);
assertFalse(queue.isRunnable());
@@ -420,9 +420,9 @@
List.of(makeMockRegisteredReceiver()), false);
enqueueOrReplaceBroadcast(queue, airplaneRecord, 0);
- queue.setProcessAndUidCached(null, false);
+ queue.setProcessAndUidState(null, false, false);
final long notCachedRunnableAt = queue.getRunnableAt();
- queue.setProcessAndUidCached(null, true);
+ queue.setProcessAndUidState(null, false, true);
final long cachedRunnableAt = queue.getRunnableAt();
assertThat(cachedRunnableAt).isGreaterThan(notCachedRunnableAt);
assertTrue(queue.isRunnable());
@@ -452,13 +452,13 @@
// verify that:
// (a) the queue is immediately runnable by existence of a fg-priority broadcast
// (b) the next one up is the fg-priority broadcast despite its later enqueue time
- queue.setProcessAndUidCached(null, false);
+ queue.setProcessAndUidState(null, false, false);
assertTrue(queue.isRunnable());
assertThat(queue.getRunnableAt()).isAtMost(airplaneRecord.enqueueClockTime);
assertEquals(ProcessList.SCHED_GROUP_UNDEFINED, queue.getPreferredSchedulingGroupLocked());
assertEquals(queue.peekNextBroadcastRecord(), airplaneRecord);
- queue.setProcessAndUidCached(null, true);
+ queue.setProcessAndUidState(null, false, true);
assertTrue(queue.isRunnable());
assertThat(queue.getRunnableAt()).isAtMost(airplaneRecord.enqueueClockTime);
assertEquals(ProcessList.SCHED_GROUP_UNDEFINED, queue.getPreferredSchedulingGroupLocked());
@@ -515,6 +515,28 @@
assertEquals(BroadcastProcessQueue.REASON_MAX_PENDING, queue.getRunnableAtReason());
}
+ @Test
+ public void testRunnableAt_uidForeground() {
+ final BroadcastProcessQueue queue = new BroadcastProcessQueue(mConstants, PACKAGE_GREEN,
+ getUidForPackage(PACKAGE_GREEN));
+
+ final Intent timeTick = new Intent(Intent.ACTION_TIME_TICK);
+ final BroadcastRecord timeTickRecord = makeBroadcastRecord(timeTick,
+ List.of(makeMockRegisteredReceiver()));
+ enqueueOrReplaceBroadcast(queue, timeTickRecord, 0);
+
+ assertThat(queue.getRunnableAt()).isGreaterThan(timeTickRecord.enqueueTime);
+ assertEquals(BroadcastProcessQueue.REASON_NORMAL, queue.getRunnableAtReason());
+
+ queue.setProcessAndUidState(mProcess, true, false);
+ assertThat(queue.getRunnableAt()).isLessThan(timeTickRecord.enqueueTime);
+ assertEquals(BroadcastProcessQueue.REASON_FOREGROUND, queue.getRunnableAtReason());
+
+ queue.setProcessAndUidState(mProcess, false, false);
+ assertThat(queue.getRunnableAt()).isGreaterThan(timeTickRecord.enqueueTime);
+ assertEquals(BroadcastProcessQueue.REASON_NORMAL, queue.getRunnableAtReason());
+ }
+
/**
* Verify that a cached process that would normally be delayed becomes
* immediately runnable when the given broadcast is enqueued.
@@ -522,7 +544,7 @@
private void doRunnableAt_Cached(BroadcastRecord testRecord, int testRunnableAtReason) {
final BroadcastProcessQueue queue = new BroadcastProcessQueue(mConstants,
PACKAGE_GREEN, getUidForPackage(PACKAGE_GREEN));
- queue.setProcessAndUidCached(null, true);
+ queue.setProcessAndUidState(null, false, true);
final BroadcastRecord lazyRecord = makeBroadcastRecord(
new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED),
@@ -769,7 +791,7 @@
BroadcastProcessQueue queue = new BroadcastProcessQueue(mConstants,
PACKAGE_GREEN, getUidForPackage(PACKAGE_GREEN));
- queue.setPrioritizeEarliest(true);
+ queue.addPrioritizeEarliestRequest();
long timeCounter = 100;
enqueueOrReplaceBroadcast(queue,
@@ -814,6 +836,28 @@
queue.makeActiveNextPending();
assertEquals(AppWidgetManager.ACTION_APPWIDGET_UPDATE,
queue.getActive().intent.getAction());
+
+
+ queue.removePrioritizeEarliestRequest();
+
+ enqueueOrReplaceBroadcast(queue,
+ makeBroadcastRecord(new Intent(Intent.ACTION_BOOT_COMPLETED)
+ .addFlags(Intent.FLAG_RECEIVER_OFFLOAD)), 0, timeCounter++);
+ enqueueOrReplaceBroadcast(queue,
+ makeBroadcastRecord(new Intent(Intent.ACTION_TIMEZONE_CHANGED)),
+ 0, timeCounter++);
+ enqueueOrReplaceBroadcast(queue,
+ makeBroadcastRecord(new Intent(Intent.ACTION_LOCALE_CHANGED)
+ .addFlags(Intent.FLAG_RECEIVER_FOREGROUND)), 0, timeCounter++);
+
+ // Once the request to prioritize earliest is removed, we should expect broadcasts
+ // to be dispatched in the order of foreground, normal and then offload.
+ queue.makeActiveNextPending();
+ assertEquals(Intent.ACTION_LOCALE_CHANGED, queue.getActive().intent.getAction());
+ queue.makeActiveNextPending();
+ assertEquals(Intent.ACTION_TIMEZONE_CHANGED, queue.getActive().intent.getAction());
+ queue.makeActiveNextPending();
+ assertEquals(Intent.ACTION_BOOT_COMPLETED, queue.getActive().intent.getAction());
}
/**
diff --git a/services/tests/mockingservicestests/src/com/android/server/am/BroadcastQueueTest.java b/services/tests/mockingservicestests/src/com/android/server/am/BroadcastQueueTest.java
index 7be1d7c..ad5f0d7 100644
--- a/services/tests/mockingservicestests/src/com/android/server/am/BroadcastQueueTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/am/BroadcastQueueTest.java
@@ -25,12 +25,15 @@
import static com.android.server.am.BroadcastRecord.deliveryStateToString;
import static com.android.server.am.BroadcastRecord.isReceiverEquals;
+import static com.google.common.truth.Truth.assertThat;
+
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt;
@@ -1890,6 +1893,36 @@
assertTrue(mQueue.isBeyondBarrierLocked(afterSecond));
}
+ @Test
+ public void testWaitForBroadcastDispatch() throws Exception {
+ final ProcessRecord callerApp = makeActiveProcessRecord(PACKAGE_RED);
+ final ProcessRecord receiverApp = makeActiveProcessRecord(PACKAGE_GREEN);
+
+ final Intent timeTick = new Intent(Intent.ACTION_TIME_TICK);
+ assertTrue(mQueue.isDispatchedLocked(timeTick));
+
+ final Intent timezone = new Intent(Intent.ACTION_TIMEZONE_CHANGED);
+ enqueueBroadcast(makeBroadcastRecord(timezone, callerApp,
+ List.of(makeRegisteredReceiver(receiverApp))));
+
+ assertTrue(mQueue.isDispatchedLocked(timeTick));
+ assertFalse(mQueue.isDispatchedLocked(timezone));
+
+ enqueueBroadcast(makeBroadcastRecord(timeTick, callerApp,
+ List.of(makeRegisteredReceiver(receiverApp))));
+
+ assertFalse(mQueue.isDispatchedLocked(timeTick));
+ assertFalse(mQueue.isDispatchedLocked(timezone));
+
+ mLooper.release();
+
+ mQueue.waitForDispatched(timeTick, LOG_WRITER_INFO);
+ assertTrue(mQueue.isDispatchedLocked(timeTick));
+
+ mQueue.waitForDispatched(timezone, LOG_WRITER_INFO);
+ assertTrue(mQueue.isDispatchedLocked(timezone));
+ }
+
/**
* Verify that we OOM adjust for manifest receivers.
*/
@@ -2102,4 +2135,75 @@
waitForIdle();
verifyScheduleRegisteredReceiver(times(1), receiverGreenApp, airplane);
}
+
+ @Test
+ public void testBroadcastDelivery_uidForeground() throws Exception {
+ // Legacy stack doesn't support prioritization to foreground app.
+ Assume.assumeTrue(mImpl == Impl.MODERN);
+
+ final ProcessRecord callerApp = makeActiveProcessRecord(PACKAGE_RED);
+ final ProcessRecord receiverBlueApp = makeActiveProcessRecord(PACKAGE_BLUE);
+ final ProcessRecord receiverGreenApp = makeActiveProcessRecord(PACKAGE_GREEN);
+
+ mUidObserver.onUidStateChanged(receiverGreenApp.info.uid,
+ ActivityManager.PROCESS_STATE_TOP, 0, ActivityManager.PROCESS_CAPABILITY_NONE);
+
+ final Intent airplane = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
+ final Intent timeTick = new Intent(Intent.ACTION_TIME_TICK);
+
+ final BroadcastFilter receiverBlue = makeRegisteredReceiver(receiverBlueApp);
+ final BroadcastFilter receiverGreen = makeRegisteredReceiver(receiverGreenApp);
+ final BroadcastRecord airplaneRecord = makeBroadcastRecord(airplane, callerApp,
+ List.of(receiverBlue));
+ final BroadcastRecord timeTickRecord = makeBroadcastRecord(timeTick, callerApp,
+ List.of(receiverBlue, receiverGreen));
+
+ enqueueBroadcast(airplaneRecord);
+ enqueueBroadcast(timeTickRecord);
+
+ waitForIdle();
+ // Verify that broadcasts to receiverGreenApp gets scheduled first.
+ assertThat(getReceiverScheduledTime(timeTickRecord, receiverGreen))
+ .isLessThan(getReceiverScheduledTime(airplaneRecord, receiverBlue));
+ assertThat(getReceiverScheduledTime(timeTickRecord, receiverGreen))
+ .isLessThan(getReceiverScheduledTime(timeTickRecord, receiverBlue));
+ }
+
+ @Test
+ public void testPrioritizedBroadcastDelivery_uidForeground() throws Exception {
+ // Legacy stack doesn't support prioritization to foreground app.
+ Assume.assumeTrue(mImpl == Impl.MODERN);
+
+ final ProcessRecord callerApp = makeActiveProcessRecord(PACKAGE_RED);
+ final ProcessRecord receiverBlueApp = makeActiveProcessRecord(PACKAGE_BLUE);
+ final ProcessRecord receiverGreenApp = makeActiveProcessRecord(PACKAGE_GREEN);
+
+ mUidObserver.onUidStateChanged(receiverGreenApp.info.uid,
+ ActivityManager.PROCESS_STATE_TOP, 0, ActivityManager.PROCESS_CAPABILITY_NONE);
+
+ final Intent timeTick = new Intent(Intent.ACTION_TIME_TICK);
+
+ final BroadcastFilter receiverBlue = makeRegisteredReceiver(receiverBlueApp, 10);
+ final BroadcastFilter receiverGreen = makeRegisteredReceiver(receiverGreenApp, 5);
+ final BroadcastRecord prioritizedRecord = makeBroadcastRecord(timeTick, callerApp,
+ List.of(receiverBlue, receiverGreen));
+
+ enqueueBroadcast(prioritizedRecord);
+
+ waitForIdle();
+ // Verify that uid foreground-ness does not impact that delivery of prioritized broadcast.
+ // That is, broadcast to receiverBlueApp gets scheduled before the one to receiverGreenApp.
+ assertThat(getReceiverScheduledTime(prioritizedRecord, receiverGreen))
+ .isGreaterThan(getReceiverScheduledTime(prioritizedRecord, receiverBlue));
+ }
+
+ private long getReceiverScheduledTime(@NonNull BroadcastRecord r, @NonNull Object receiver) {
+ for (int i = 0; i < r.receivers.size(); ++i) {
+ if (isReceiverEquals(receiver, r.receivers.get(i))) {
+ return r.scheduledTime[i];
+ }
+ }
+ fail(receiver + "not found in " + r);
+ return -1;
+ }
}
diff --git a/services/tests/mockingservicestests/src/com/android/server/job/JobNotificationCoordinatorTest.java b/services/tests/mockingservicestests/src/com/android/server/job/JobNotificationCoordinatorTest.java
index e24354f..27a3adc 100644
--- a/services/tests/mockingservicestests/src/com/android/server/job/JobNotificationCoordinatorTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/job/JobNotificationCoordinatorTest.java
@@ -90,7 +90,7 @@
@Test
public void testParameterValidation() {
final JobNotificationCoordinator coordinator = new JobNotificationCoordinator();
- final JobServiceContext jsc = mock(JobServiceContext.class);
+ final JobServiceContext jsc = createJobServiceContext();
final int uid = 10123;
final int pid = 42;
final int notificationId = 23;
@@ -137,7 +137,7 @@
@Test
public void testSingleJob_DetachOnStop() {
final JobNotificationCoordinator coordinator = new JobNotificationCoordinator();
- final JobServiceContext jsc = mock(JobServiceContext.class);
+ final JobServiceContext jsc = createJobServiceContext();
final Notification notification = createValidNotification();
final int uid = 10123;
final int pid = 42;
@@ -159,7 +159,7 @@
@Test
public void testSingleJob_RemoveOnStop() {
final JobNotificationCoordinator coordinator = new JobNotificationCoordinator();
- final JobServiceContext jsc = mock(JobServiceContext.class);
+ final JobServiceContext jsc = createJobServiceContext();
final Notification notification = createValidNotification();
final int uid = 10123;
final int pid = 42;
@@ -181,7 +181,7 @@
@Test
public void testSingleJob_EnqueueDifferentNotificationId_DetachOnStop() {
final JobNotificationCoordinator coordinator = new JobNotificationCoordinator();
- final JobServiceContext jsc = mock(JobServiceContext.class);
+ final JobServiceContext jsc = createJobServiceContext();
final Notification notification1 = createValidNotification();
final Notification notification2 = createValidNotification();
final int uid = 10123;
@@ -210,7 +210,7 @@
@Test
public void testSingleJob_EnqueueDifferentNotificationId_RemoveOnStop() {
final JobNotificationCoordinator coordinator = new JobNotificationCoordinator();
- final JobServiceContext jsc = mock(JobServiceContext.class);
+ final JobServiceContext jsc = createJobServiceContext();
final Notification notification1 = createValidNotification();
final Notification notification2 = createValidNotification();
final int uid = 10123;
@@ -239,7 +239,7 @@
@Test
public void testSingleJob_EnqueueSameNotificationId() {
final JobNotificationCoordinator coordinator = new JobNotificationCoordinator();
- final JobServiceContext jsc = mock(JobServiceContext.class);
+ final JobServiceContext jsc = createJobServiceContext();
final Notification notification1 = createValidNotification();
final Notification notification2 = createValidNotification();
final int uid = 10123;
@@ -267,8 +267,8 @@
@Test
public void testMultipleJobs_sameApp_EnqueueDifferentNotificationId() {
final JobNotificationCoordinator coordinator = new JobNotificationCoordinator();
- final JobServiceContext jsc1 = mock(JobServiceContext.class);
- final JobServiceContext jsc2 = mock(JobServiceContext.class);
+ final JobServiceContext jsc1 = createJobServiceContext();
+ final JobServiceContext jsc2 = createJobServiceContext();
final Notification notification1 = createValidNotification();
final Notification notification2 = createValidNotification();
final int uid = 10123;
@@ -313,8 +313,8 @@
@Test
public void testMultipleJobs_sameApp_EnqueueSameNotificationId() {
final JobNotificationCoordinator coordinator = new JobNotificationCoordinator();
- final JobServiceContext jsc1 = mock(JobServiceContext.class);
- final JobServiceContext jsc2 = mock(JobServiceContext.class);
+ final JobServiceContext jsc1 = createJobServiceContext();
+ final JobServiceContext jsc2 = createJobServiceContext();
final Notification notification1 = createValidNotification();
final Notification notification2 = createValidNotification();
final int uid = 10123;
@@ -355,8 +355,8 @@
@Test
public void testMultipleJobs_sameApp_DifferentUsers() {
final JobNotificationCoordinator coordinator = new JobNotificationCoordinator();
- final JobServiceContext jsc1 = mock(JobServiceContext.class);
- final JobServiceContext jsc2 = mock(JobServiceContext.class);
+ final JobServiceContext jsc1 = createJobServiceContext();
+ final JobServiceContext jsc2 = createJobServiceContext();
final Notification notification1 = createValidNotification();
final Notification notification2 = createValidNotification();
final int uid1 = 10123;
@@ -403,8 +403,8 @@
final JobNotificationCoordinator coordinator = new JobNotificationCoordinator();
final String pkg1 = "pkg1";
final String pkg2 = "pkg2";
- final JobServiceContext jsc1 = mock(JobServiceContext.class);
- final JobServiceContext jsc2 = mock(JobServiceContext.class);
+ final JobServiceContext jsc1 = createJobServiceContext();
+ final JobServiceContext jsc2 = createJobServiceContext();
final Notification notification1 = createValidNotification();
final Notification notification2 = createValidNotification();
final int uid = 10123;
@@ -448,7 +448,7 @@
@Test
public void testUserStop_SingleJob_DetachOnStop() {
final JobNotificationCoordinator coordinator = new JobNotificationCoordinator();
- final JobServiceContext jsc = mock(JobServiceContext.class);
+ final JobServiceContext jsc = createJobServiceContext();
final Notification notification = createValidNotification();
final int uid = 10123;
final int pid = 42;
@@ -470,8 +470,8 @@
@Test
public void testUserStop_MultipleJobs_sameApp_EnqueueSameNotificationId_DetachOnStop() {
final JobNotificationCoordinator coordinator = new JobNotificationCoordinator();
- final JobServiceContext jsc1 = mock(JobServiceContext.class);
- final JobServiceContext jsc2 = mock(JobServiceContext.class);
+ final JobServiceContext jsc1 = createJobServiceContext();
+ final JobServiceContext jsc2 = createJobServiceContext();
final Notification notification1 = createValidNotification();
final Notification notification2 = createValidNotification();
final int uid = 10123;
@@ -512,10 +512,9 @@
@Test
public void testUserInitiatedJob_hasNotificationFlag() {
final JobNotificationCoordinator coordinator = new JobNotificationCoordinator();
- final JobServiceContext jsc = mock(JobServiceContext.class);
- final JobStatus js = mock(JobStatus.class);
+ final JobServiceContext jsc = createJobServiceContext();
+ final JobStatus js = jsc.getRunningJobLocked();
js.startedAsUserInitiatedJob = true;
- doReturn(js).when(jsc).getRunningJobLocked();
final Notification notification = createValidNotification();
final int uid = 10123;
final int pid = 42;
@@ -532,8 +531,7 @@
@Test
public void testNonUserInitiatedJob_doesNotHaveNotificationFlag() {
final JobNotificationCoordinator coordinator = new JobNotificationCoordinator();
- final JobServiceContext jsc = mock(JobServiceContext.class);
- doReturn(mock(JobStatus.class)).when(jsc).getRunningJobLocked();
+ final JobServiceContext jsc = createJobServiceContext();
final Notification notification = createValidNotification();
final int uid = 10123;
final int pid = 42;
@@ -547,6 +545,12 @@
assertEquals(notification.flags & Notification.FLAG_USER_INITIATED_JOB, 0);
}
+ private JobServiceContext createJobServiceContext() {
+ final JobServiceContext jsc = mock(JobServiceContext.class);
+ doReturn(mock(JobStatus.class)).when(jsc).getRunningJobLocked();
+ return jsc;
+ }
+
private Notification createValidNotification() {
final Notification notification = mock(Notification.class);
doReturn(mock(Icon.class)).when(notification).getSmallIcon();
diff --git a/services/tests/mockingservicestests/src/com/android/server/wallpaper/WallpaperManagerServiceTests.java b/services/tests/mockingservicestests/src/com/android/server/wallpaper/WallpaperManagerServiceTests.java
index f8955ed..3d0163d 100644
--- a/services/tests/mockingservicestests/src/com/android/server/wallpaper/WallpaperManagerServiceTests.java
+++ b/services/tests/mockingservicestests/src/com/android/server/wallpaper/WallpaperManagerServiceTests.java
@@ -172,12 +172,12 @@
sImageWallpaperComponentName = ComponentName.unflattenFromString(
sContext.getResources().getString(R.string.image_wallpaper_component));
// Mock default wallpaper as image wallpaper if there is no pre-defined default wallpaper.
- sDefaultWallpaperComponent = WallpaperManager.getDefaultWallpaperComponent(sContext);
+ sDefaultWallpaperComponent = WallpaperManager.getCmfDefaultWallpaperComponent(sContext);
if (sDefaultWallpaperComponent == null) {
sDefaultWallpaperComponent = sImageWallpaperComponentName;
doReturn(sImageWallpaperComponentName).when(() ->
- WallpaperManager.getDefaultWallpaperComponent(any()));
+ WallpaperManager.getCmfDefaultWallpaperComponent(any()));
} else {
sContext.addMockService(sDefaultWallpaperComponent, sWallpaperService);
}
diff --git a/services/tests/servicestests/src/com/android/server/accessibility/AccessibilitySecurityPolicyTest.java b/services/tests/servicestests/src/com/android/server/accessibility/AccessibilitySecurityPolicyTest.java
index eb6670e..72758c9 100644
--- a/services/tests/servicestests/src/com/android/server/accessibility/AccessibilitySecurityPolicyTest.java
+++ b/services/tests/servicestests/src/com/android/server/accessibility/AccessibilitySecurityPolicyTest.java
@@ -16,6 +16,8 @@
package com.android.server.accessibility;
+import static android.content.pm.PackageManager.MATCH_ANY_USER;
+
import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
import static junit.framework.Assert.assertFalse;
@@ -146,7 +148,7 @@
@Mock
private PolicyWarningUIController mPolicyWarningUIController;
@Mock
- private PackageManagerInternal mPackageManagerInternal;
+ private PackageManagerInternal mMockPackageManagerInternal;
@Before
public void setUp() {
@@ -158,7 +160,8 @@
R.dimen.accessibility_focus_highlight_stroke_width, 1);
mA11ySecurityPolicy = new AccessibilitySecurityPolicy(
- mPolicyWarningUIController, mContext, mMockA11yUserManager);
+ mPolicyWarningUIController, mContext, mMockA11yUserManager,
+ mMockPackageManagerInternal);
mA11ySecurityPolicy.setSendingNonA11yToolNotificationLocked(true);
mA11ySecurityPolicy.setAccessibilityWindowManager(mMockA11yWindowManager);
mA11ySecurityPolicy.setAppWidgetManager(mMockAppWidgetManager);
@@ -237,8 +240,9 @@
@Test
public void resolveValidReportedPackage_uidAndPkgNameMatched_returnPkgName()
throws PackageManager.NameNotFoundException {
- when(mMockPackageManager.getPackageUidAsUser(PACKAGE_NAME,
- PackageManager.MATCH_ANY_USER, TEST_USER_ID)).thenReturn(APP_UID);
+ when(mMockPackageManagerInternal.isSameApp(
+ PACKAGE_NAME, MATCH_ANY_USER, APP_UID, TEST_USER_ID))
+ .thenReturn(true);
assertEquals(mA11ySecurityPolicy.resolveValidReportedPackageLocked(
PACKAGE_NAME, APP_UID, TEST_USER_ID, APP_PID),
@@ -257,8 +261,9 @@
when(mMockAppWidgetManager.getHostedWidgetPackages(widgetHostUid))
.thenReturn(widgetPackages);
- when(mMockPackageManager.getPackageUidAsUser(hostPackageName, TEST_USER_ID))
- .thenReturn(widgetHostUid);
+ when(mMockPackageManagerInternal.isSameApp(
+ hostPackageName, MATCH_ANY_USER, widgetHostUid, TEST_USER_ID))
+ .thenReturn(true);
assertEquals(mA11ySecurityPolicy.resolveValidReportedPackageLocked(
widgetPackageName, widgetHostUid, TEST_USER_ID, widgetHostPid),
@@ -272,8 +277,9 @@
final String[] uidPackages = {PACKAGE_NAME, PACKAGE_NAME2};
when(mMockPackageManager.getPackagesForUid(APP_UID))
.thenReturn(uidPackages);
- when(mMockPackageManager.getPackageUidAsUser(invalidPackageName, TEST_USER_ID))
- .thenThrow(PackageManager.NameNotFoundException.class);
+ when(mMockPackageManagerInternal.isSameApp(
+ invalidPackageName, MATCH_ANY_USER, APP_UID, TEST_USER_ID))
+ .thenReturn(false);
when(mMockAppWidgetManager.getHostedWidgetPackages(APP_UID))
.thenReturn(new ArraySet<>());
mContext.getTestablePermissions().setPermission(
@@ -292,8 +298,9 @@
final String[] uidPackages = {PACKAGE_NAME};
when(mMockPackageManager.getPackagesForUid(APP_UID))
.thenReturn(uidPackages);
- when(mMockPackageManager.getPackageUidAsUser(wantedPackageName, TEST_USER_ID))
- .thenReturn(wantedUid);
+ when(mMockPackageManagerInternal.isSameApp(
+ wantedPackageName, MATCH_ANY_USER, wantedUid, TEST_USER_ID))
+ .thenReturn(true);
when(mMockAppWidgetManager.getHostedWidgetPackages(APP_UID))
.thenReturn(new ArraySet<>());
mContext.getTestablePermissions().setPermission(
@@ -312,8 +319,9 @@
final String[] uidPackages = {PACKAGE_NAME};
when(mMockPackageManager.getPackagesForUid(APP_UID))
.thenReturn(uidPackages);
- when(mMockPackageManager.getPackageUidAsUser(wantedPackageName, TEST_USER_ID))
- .thenReturn(wantedUid);
+ when(mMockPackageManagerInternal.isSameApp(
+ wantedPackageName, MATCH_ANY_USER, wantedUid, TEST_USER_ID))
+ .thenReturn(true);
when(mMockAppWidgetManager.getHostedWidgetPackages(APP_UID))
.thenReturn(new ArraySet<>());
mContext.getTestablePermissions().setPermission(
diff --git a/services/tests/servicestests/src/com/android/server/accessibility/magnification/MagnificationControllerTest.java b/services/tests/servicestests/src/com/android/server/accessibility/magnification/MagnificationControllerTest.java
index 11e4120..37ebdda 100644
--- a/services/tests/servicestests/src/com/android/server/accessibility/magnification/MagnificationControllerTest.java
+++ b/services/tests/servicestests/src/com/android/server/accessibility/magnification/MagnificationControllerTest.java
@@ -208,8 +208,8 @@
mMockConnection = new MockWindowMagnificationConnection(true);
mWindowMagnificationManager.setConnection(mMockConnection.getConnection());
- mMagnificationController = new MagnificationController(mService, globalLock, mContext,
- mScreenMagnificationController, mWindowMagnificationManager, mScaleProvider);
+ mMagnificationController = spy(new MagnificationController(mService, globalLock, mContext,
+ mScreenMagnificationController, mWindowMagnificationManager, mScaleProvider));
mMagnificationController.setMagnificationCapabilities(
Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_ALL);
@@ -593,6 +593,10 @@
// The second time is triggered when magnification spec is changed.
verify(mWindowMagnificationManager, times(2)).showMagnificationButton(eq(TEST_DISPLAY),
eq(MODE_FULLSCREEN));
+ // Never call removeMagnificationSettingsPanel if it is allowed to show the settings panel
+ // in current capability and mode, and the magnification is activated.
+ verify(mWindowMagnificationManager, never()).removeMagnificationSettingsPanel(
+ eq(TEST_DISPLAY));
}
@Test
@@ -758,6 +762,10 @@
// The second time is triggered when accessibility action performed.
verify(mWindowMagnificationManager, times(2)).showMagnificationButton(eq(TEST_DISPLAY),
eq(MODE_WINDOW));
+ // Never call removeMagnificationSettingsPanel if it is allowed to show the settings panel
+ // in current capability and mode, and the magnification is activated.
+ verify(mWindowMagnificationManager, never()).removeMagnificationSettingsPanel(
+ eq(TEST_DISPLAY));
}
@Test
@@ -772,17 +780,27 @@
// The first time is triggered when window mode is activated.
// The second time is triggered when accessibility action performed.
verify(mWindowMagnificationManager, times(2)).removeMagnificationButton(eq(TEST_DISPLAY));
+ // Never call removeMagnificationSettingsPanel if it is allowed to show the settings panel
+ // in current capability and mode, and the magnification is activated.
+ verify(mWindowMagnificationManager, never()).removeMagnificationSettingsPanel(
+ eq(TEST_DISPLAY));
}
+ @Test public void activateWindowMagnification_triggerCallback() throws RemoteException {
+ setMagnificationEnabled(MODE_WINDOW);
+ verify(mMagnificationController).onWindowMagnificationActivationState(
+ eq(TEST_DISPLAY), eq(true));
+ }
@Test
- public void onWindowMagnificationActivationState_windowActivated_logWindowDuration() {
- MagnificationController spyController = spy(mMagnificationController);
- spyController.onWindowMagnificationActivationState(TEST_DISPLAY, true);
+ public void deactivateWindowMagnification_windowActivated_triggerCallbackAndLogUsage()
+ throws RemoteException {
+ setMagnificationEnabled(MODE_WINDOW);
+ mWindowMagnificationManager.disableWindowMagnification(TEST_DISPLAY, /* clear= */ true);
- spyController.onWindowMagnificationActivationState(TEST_DISPLAY, false);
-
- verify(spyController).logMagnificationUsageState(
- eq(ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW), anyLong());
+ verify(mMagnificationController).onWindowMagnificationActivationState(
+ eq(TEST_DISPLAY), eq(false));
+ verify(mMagnificationController).logMagnificationUsageState(
+ eq(ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW), anyLong(), eq(DEFAULT_SCALE));
}
@Test
@@ -906,15 +924,22 @@
assertEquals(ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN, lastActivatedMode);
}
+ @Test public void activateFullScreenMagnification_triggerCallback() throws RemoteException {
+ setMagnificationEnabled(MODE_FULLSCREEN);
+ verify(mMagnificationController).onFullScreenMagnificationActivationState(
+ eq(TEST_DISPLAY), eq(true));
+ }
+
@Test
- public void onFullScreenMagnificationActivationState_fullScreenEnabled_logFullScreenDuration() {
- MagnificationController spyController = spy(mMagnificationController);
- spyController.onFullScreenMagnificationActivationState(TEST_DISPLAY, true);
+ public void deactivateFullScreenMagnification_fullScreenEnabled_triggerCallbackAndLogUsage()
+ throws RemoteException {
+ setMagnificationEnabled(MODE_FULLSCREEN);
+ mScreenMagnificationController.reset(TEST_DISPLAY, /* animate= */ false);
- spyController.onFullScreenMagnificationActivationState(TEST_DISPLAY, false);
-
- verify(spyController).logMagnificationUsageState(
- eq(ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN), anyLong());
+ verify(mMagnificationController).onFullScreenMagnificationActivationState(
+ eq(TEST_DISPLAY), eq(false));
+ verify(mMagnificationController).logMagnificationUsageState(
+ eq(ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN), anyLong(), eq(DEFAULT_SCALE));
}
@Test
@@ -939,6 +964,10 @@
// The third time is triggered when user interaction changed.
verify(mWindowMagnificationManager, times(3)).showMagnificationButton(eq(TEST_DISPLAY),
eq(MODE_FULLSCREEN));
+ // Never call removeMagnificationSettingsPanel if it is allowed to show the settings panel
+ // in current capability and mode, and the magnification is activated.
+ verify(mWindowMagnificationManager, never()).removeMagnificationSettingsPanel(
+ eq(TEST_DISPLAY));
}
@Test
@@ -953,6 +982,10 @@
// The third time is triggered when user interaction changed.
verify(mWindowMagnificationManager, times(3)).showMagnificationButton(eq(TEST_DISPLAY),
eq(MODE_FULLSCREEN));
+ // Never call removeMagnificationSettingsPanel if it is allowed to show the settings panel
+ // in current capability and mode, and the magnification is activated.
+ verify(mWindowMagnificationManager, never()).removeMagnificationSettingsPanel(
+ eq(TEST_DISPLAY));
}
@Test
@@ -966,6 +999,10 @@
// The second time is triggered when user interaction changed.
verify(mWindowMagnificationManager, times(2)).showMagnificationButton(eq(TEST_DISPLAY),
eq(MODE_WINDOW));
+ // Never call removeMagnificationSettingsPanel if it is allowed to show the settings panel
+ // in current capability and mode, and the magnification is activated.
+ verify(mWindowMagnificationManager, never()).removeMagnificationSettingsPanel(
+ eq(TEST_DISPLAY));
}
@Test
@@ -979,6 +1016,10 @@
// The second time is triggered when user interaction changed.
verify(mWindowMagnificationManager, times(2)).showMagnificationButton(eq(TEST_DISPLAY),
eq(MODE_WINDOW));
+ // Never call removeMagnificationSettingsPanel if it is allowed to show the settings panel
+ // in current capability and mode, and the magnification is activated.
+ verify(mWindowMagnificationManager, never()).removeMagnificationSettingsPanel(
+ eq(TEST_DISPLAY));
}
@Test
@@ -993,11 +1034,16 @@
verify(mWindowMagnificationManager, never()).showMagnificationButton(eq(TEST_DISPLAY),
eq(MODE_FULLSCREEN));
+ // The first time is triggered when fullscreen mode is activated.
+ // The second time is triggered when magnification spec is changed.
+ verify(mWindowMagnificationManager, times(2)).removeMagnificationSettingsPanel(
+ eq(TEST_DISPLAY));
}
@Test
- public void onTouchInteractionChanged_fullscreenNotActivated_notShowMagnificationButton()
+ public void
+ onTouchInteractionChanged_fullscreenNotActivated_notShowMagnificationButton()
throws RemoteException {
setMagnificationModeSettings(MODE_FULLSCREEN);
@@ -1006,6 +1052,8 @@
verify(mWindowMagnificationManager, never()).showMagnificationButton(eq(TEST_DISPLAY),
eq(MODE_FULLSCREEN));
+ verify(mWindowMagnificationManager, times(2)).removeMagnificationSettingsPanel(
+ eq(TEST_DISPLAY));
}
@Test
@@ -1015,6 +1063,10 @@
verify(mWindowMagnificationManager).showMagnificationButton(eq(TEST_DISPLAY),
eq(MODE_WINDOW));
+ // Never call removeMagnificationSettingsPanel if it is allowed to show the settings panel
+ // in current capability and mode, and the magnification is activated.
+ verify(mWindowMagnificationManager, never()).removeMagnificationSettingsPanel(
+ eq(TEST_DISPLAY));
}
@Test
@@ -1029,25 +1081,32 @@
// The third time is triggered when fullscreen mode activation state is updated.
verify(mWindowMagnificationManager, times(3)).showMagnificationButton(eq(TEST_DISPLAY),
eq(MODE_FULLSCREEN));
+ // Never call removeMagnificationSettingsPanel if it is allowed to show the settings panel
+ // in current capability and mode, and the magnification is activated.
+ verify(mWindowMagnificationManager, never()).removeMagnificationSettingsPanel(
+ eq(TEST_DISPLAY));
}
@Test
- public void disableWindowMode_windowEnabled_removeMagnificationButton()
+ public void disableWindowMode_windowEnabled_removeMagnificationButtonAndSettingsPanel()
throws RemoteException {
setMagnificationEnabled(MODE_WINDOW);
mWindowMagnificationManager.disableWindowMagnification(TEST_DISPLAY, false);
verify(mWindowMagnificationManager).removeMagnificationButton(eq(TEST_DISPLAY));
+ verify(mWindowMagnificationManager).removeMagnificationSettingsPanel(eq(TEST_DISPLAY));
}
@Test
- public void onFullScreenDeactivated_fullScreenEnabled_removeMagnificationButton()
+ public void
+ onFullScreenDeactivated_fullScreenEnabled_removeMagnificationButtonAneSettingsPanel()
throws RemoteException {
setMagnificationEnabled(MODE_FULLSCREEN);
mScreenMagnificationController.reset(TEST_DISPLAY, /* animate= */ true);
verify(mWindowMagnificationManager).removeMagnificationButton(eq(TEST_DISPLAY));
+ verify(mWindowMagnificationManager).removeMagnificationSettingsPanel(eq(TEST_DISPLAY));
}
@Test
@@ -1064,6 +1123,8 @@
// The third time is triggered when the disable-magnification callback is triggered.
verify(mWindowMagnificationManager, times(3)).showMagnificationButton(eq(TEST_DISPLAY),
eq(MODE_FULLSCREEN));
+ // It is triggered when the disable-magnification callback is triggered.
+ verify(mWindowMagnificationManager).removeMagnificationSettingsPanel(eq(TEST_DISPLAY));
}
@Test
@@ -1083,6 +1144,8 @@
// The second time is triggered when the disable-magnification callback is triggered.
verify(mWindowMagnificationManager, times(2)).showMagnificationButton(eq(TEST_DISPLAY),
eq(MODE_WINDOW));
+ // It is triggered when the disable-magnification callback is triggered.
+ verify(mWindowMagnificationManager).removeMagnificationSettingsPanel(eq(TEST_DISPLAY));
}
@Test
@@ -1106,48 +1169,44 @@
@Test
public void imeWindowStateShown_windowMagnifying_logWindowMode() {
- MagnificationController spyController = spy(mMagnificationController);
- spyController.onWindowMagnificationActivationState(TEST_DISPLAY, true);
+ mMagnificationController.onWindowMagnificationActivationState(TEST_DISPLAY, true);
- spyController.onImeWindowVisibilityChanged(TEST_DISPLAY, true);
+ mMagnificationController.onImeWindowVisibilityChanged(TEST_DISPLAY, true);
- verify(spyController).logMagnificationModeWithIme(
+ verify(mMagnificationController).logMagnificationModeWithIme(
eq(ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW));
}
@Test
public void imeWindowStateShown_fullScreenMagnifying_logFullScreenMode() {
- MagnificationController spyController = spy(mMagnificationController);
- spyController.onFullScreenMagnificationActivationState(TEST_DISPLAY, true);
+ mMagnificationController.onFullScreenMagnificationActivationState(TEST_DISPLAY, true);
- spyController.onImeWindowVisibilityChanged(TEST_DISPLAY, true);
+ mMagnificationController.onImeWindowVisibilityChanged(TEST_DISPLAY, true);
- verify(spyController).logMagnificationModeWithIme(
+ verify(mMagnificationController).logMagnificationModeWithIme(
eq(ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN));
}
@Test
public void imeWindowStateShown_noMagnifying_noLogAnyMode() {
- MagnificationController spyController = spy(mMagnificationController);
- spyController.onImeWindowVisibilityChanged(TEST_DISPLAY, true);
+ mMagnificationController.onImeWindowVisibilityChanged(TEST_DISPLAY, true);
- verify(spyController, never()).logMagnificationModeWithIme(anyInt());
+ verify(mMagnificationController, never()).logMagnificationModeWithIme(anyInt());
}
@Test
public void imeWindowStateHidden_windowMagnifying_noLogAnyMode() {
- MagnificationController spyController = spy(mMagnificationController);
- spyController.onFullScreenMagnificationActivationState(TEST_DISPLAY, true);
+ mMagnificationController.onFullScreenMagnificationActivationState(
+ TEST_DISPLAY, true);
- verify(spyController, never()).logMagnificationModeWithIme(anyInt());
+ verify(mMagnificationController, never()).logMagnificationModeWithIme(anyInt());
}
@Test
public void imeWindowStateHidden_fullScreenMagnifying_noLogAnyMode() {
- MagnificationController spyController = spy(mMagnificationController);
- spyController.onWindowMagnificationActivationState(TEST_DISPLAY, true);
+ mMagnificationController.onWindowMagnificationActivationState(TEST_DISPLAY, true);
- verify(spyController, never()).logMagnificationModeWithIme(anyInt());
+ verify(mMagnificationController, never()).logMagnificationModeWithIme(anyInt());
}
@Test
diff --git a/services/tests/servicestests/src/com/android/server/am/UidObserverControllerTest.java b/services/tests/servicestests/src/com/android/server/am/UidObserverControllerTest.java
index 46974cf7..37afc7f 100644
--- a/services/tests/servicestests/src/com/android/server/am/UidObserverControllerTest.java
+++ b/services/tests/servicestests/src/com/android/server/am/UidObserverControllerTest.java
@@ -217,7 +217,8 @@
private void registerObserver(IUidObserver observer, int which, int cutpoint,
String callingPackage, int callingUid) {
when(observer.asBinder()).thenReturn((IBinder) observer);
- mUidObserverController.register(observer, which, cutpoint, callingPackage, callingUid);
+ mUidObserverController.register(observer, which, cutpoint, callingPackage, callingUid,
+ /*uids*/null);
Mockito.reset(observer);
}
diff --git a/services/tests/servicestests/src/com/android/server/companion/virtual/SensorControllerTest.java b/services/tests/servicestests/src/com/android/server/companion/virtual/SensorControllerTest.java
index aea8b86..6a45d5f 100644
--- a/services/tests/servicestests/src/com/android/server/companion/virtual/SensorControllerTest.java
+++ b/services/tests/servicestests/src/com/android/server/companion/virtual/SensorControllerTest.java
@@ -70,8 +70,7 @@
LocalServices.removeServiceForTest(SensorManagerInternal.class);
LocalServices.addService(SensorManagerInternal.class, mSensorManagerInternalMock);
- mSensorController =
- new SensorController(new Object(), VIRTUAL_DEVICE_ID, mVirtualSensorCallback);
+ mSensorController = new SensorController(VIRTUAL_DEVICE_ID, mVirtualSensorCallback);
mSensorEvent = new VirtualSensorEvent.Builder(new float[] { 1f, 2f, 3f}).build();
mVirtualSensorConfig =
new VirtualSensorConfig.Builder(Sensor.TYPE_ACCELEROMETER, VIRTUAL_SENSOR_NAME)
diff --git a/services/tests/servicestests/src/com/android/server/companion/virtual/VirtualDeviceManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/companion/virtual/VirtualDeviceManagerServiceTest.java
index c8c1d6f..8884dba 100644
--- a/services/tests/servicestests/src/com/android/server/companion/virtual/VirtualDeviceManagerServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/companion/virtual/VirtualDeviceManagerServiceTest.java
@@ -359,8 +359,7 @@
mInputController = new InputController(mNativeWrapperMock,
new Handler(TestableLooper.get(this).getLooper()),
mContext.getSystemService(WindowManager.class), threadVerifier);
- mSensorController =
- new SensorController(new Object(), VIRTUAL_DEVICE_ID_1, mVirtualSensorCallback);
+ mSensorController = new SensorController(VIRTUAL_DEVICE_ID_1, mVirtualSensorCallback);
mCameraAccessController =
new CameraAccessController(mContext, mLocalService, mCameraAccessBlockedCallback);
diff --git a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java
index 57755a9..39de2cf 100644
--- a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java
+++ b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java
@@ -7497,6 +7497,7 @@
* Tests the case when the user turns the profile back on when the apps are already suspended.
*/
@Test
+ @Ignore("b/277916462")
public void testMaximumProfileTimeOff_turnOnAfterDeadline() throws Exception {
prepareMocksForSetMaximumProfileTimeOff();
@@ -8599,6 +8600,8 @@
private void setUserUnlocked(int userHandle, boolean unlocked) {
when(getServices().userManager.isUserUnlocked(eq(userHandle))).thenReturn(unlocked);
+ when(getServices().userManagerInternal.isUserUnlockingOrUnlocked(eq(userHandle)))
+ .thenReturn(unlocked);
}
private void prepareMocksForSetMaximumProfileTimeOff() throws Exception {
diff --git a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManagerTest.java b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManagerTest.java
index 8b178dd..7641fb9 100644
--- a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManagerTest.java
+++ b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManagerTest.java
@@ -373,6 +373,7 @@
assertThat(mRecoverableKeyStoreDb.getShouldCreateSnapshot(userId, uid)).isFalse();
}
+ @Ignore("Causing breakages so ignoring to resolve, b/281583079")
@Test
public void initRecoveryService_succeedsWithCertFile() throws Exception {
int uid = Binder.getCallingUid();
@@ -394,6 +395,7 @@
assertThat(mRecoverableKeyStoreDb.getRecoveryServicePublicKey(userId, uid)).isNull();
}
+ @Ignore("Causing breakages so ignoring to resolve, b/281583079")
@Test
public void initRecoveryService_updatesShouldCreatesnapshotOnCertUpdate() throws Exception {
int uid = Binder.getCallingUid();
@@ -421,6 +423,7 @@
assertThat(mRecoverableKeyStoreDb.getShouldCreateSnapshot(userId, uid)).isTrue();
}
+ @Ignore("Causing breakages so ignoring to resolve, b/281583079")
@Test
public void initRecoveryService_triesToFilterRootAlias() throws Exception {
int uid = Binder.getCallingUid();
@@ -442,6 +445,7 @@
}
+ @Ignore("Causing breakages so ignoring to resolve, b/281583079")
@Test
public void initRecoveryService_usesProdCertificateForEmptyRootAlias() throws Exception {
int uid = Binder.getCallingUid();
@@ -462,6 +466,7 @@
assertThat(activeRootAlias).isEqualTo(DEFAULT_ROOT_CERT_ALIAS);
}
+ @Ignore("Causing breakages so ignoring to resolve, b/281583079")
@Test
public void initRecoveryService_usesProdCertificateForNullRootAlias() throws Exception {
int uid = Binder.getCallingUid();
@@ -482,6 +487,7 @@
assertThat(activeRootAlias).isEqualTo(DEFAULT_ROOT_CERT_ALIAS);
}
+ @Ignore("Causing breakages so ignoring to resolve, b/281583079")
@Test
public void initRecoveryService_regeneratesCounterId() throws Exception {
int uid = Binder.getCallingUid();
@@ -512,6 +518,7 @@
}
}
+ @Ignore("Causing breakages so ignoring to resolve, b/281583079")
@Test
public void initRecoveryService_updatesWithLargerSerial() throws Exception {
int uid = Binder.getCallingUid();
@@ -529,6 +536,7 @@
assertThat(mRecoverableKeyStoreDb.getShouldCreateSnapshot(userId, uid)).isFalse();
}
+ @Ignore("Causing breakages so ignoring to resolve, b/281583079")
@Test
public void initRecoveryService_throwsExceptionOnSmallerSerial() throws Exception {
long certSerial = 1000L;
@@ -592,6 +600,7 @@
TestData.getInsecureCertPathForEndpoint1());
}
+ @Ignore("Causing breakages so ignoring to resolve, b/281583079")
@Test
public void initRecoveryService_ignoresTheSameSerial() throws Exception {
int uid = Binder.getCallingUid();
@@ -642,6 +651,7 @@
}
}
+ @Ignore("Causing breakages so ignoring to resolve, b/281583079")
@Test
public void initRecoveryServiceWithSigFile_succeeds() throws Exception {
int uid = Binder.getCallingUid();
@@ -657,6 +667,7 @@
assertThat(mRecoverableKeyStoreDb.getRecoveryServicePublicKey(userId, uid)).isNull();
}
+ @Ignore("Causing breakages so ignoring to resolve, b/281583079")
@Test
public void initRecoveryServiceWithSigFile_usesProdCertificateForNullRootAlias()
throws Exception {
@@ -749,6 +760,7 @@
eq(Manifest.permission.RECOVER_KEYSTORE), any());
}
+ @Ignore("Causing breakages so ignoring to resolve, b/281583079")
@Test
public void startRecoverySessionWithCertPath_storesTheSessionInfo() throws Exception {
mRecoverableKeyStoreManager.startRecoverySessionWithCertPath(
@@ -766,6 +778,7 @@
assertEquals(KEY_CLAIMANT_LENGTH_BYTES, entry.getKeyClaimant().length);
}
+ @Ignore("Causing breakages so ignoring to resolve, b/281583079")
@Test
public void startRecoverySessionWithCertPath_checksPermissionFirst() throws Exception {
mRecoverableKeyStoreManager.startRecoverySessionWithCertPath(
@@ -869,6 +882,7 @@
}
}
+ @Ignore("Causing breakages so ignoring to resolve, b/281583079")
@Test
public void startRecoverySessionWithCertPath_throwsIfBadNumberOfSecrets() throws Exception {
try {
@@ -886,6 +900,7 @@
}
}
+ @Ignore("Causing breakages so ignoring to resolve, b/281583079")
@Test
public void startRecoverySessionWithCertPath_throwsIfPublicKeysMismatch() throws Exception {
byte[] vaultParams = TEST_VAULT_PARAMS.clone();
diff --git a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDbHelperTest.java b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDbHelperTest.java
index 2a9c18c..bbd9223 100644
--- a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDbHelperTest.java
+++ b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDbHelperTest.java
@@ -104,7 +104,7 @@
@Before
public void setUp() throws Exception {
Context context = InstrumentationRegistry.getTargetContext();
- mDatabaseHelper = new RecoverableKeyStoreDbHelper(context, 7);
+ mDatabaseHelper = new RecoverableKeyStoreDbHelper(context);
mDatabase = SQLiteDatabase.create(null);
}
diff --git a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDbTest.java b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDbTest.java
index e223a97..8bc14fc 100644
--- a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDbTest.java
+++ b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDbTest.java
@@ -67,7 +67,7 @@
public void setUp() {
Context context = InstrumentationRegistry.getTargetContext();
mDatabaseFile = context.getDatabasePath(DATABASE_FILE_NAME);
- mRecoverableKeyStoreDb = RecoverableKeyStoreDb.newInstance(context, 7);
+ mRecoverableKeyStoreDb = RecoverableKeyStoreDb.newInstance(context);
}
@After
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/wakeups/WakingActivityHistoryTest.java b/services/tests/servicestests/src/com/android/server/power/stats/wakeups/WakingActivityHistoryTest.java
new file mode 100644
index 0000000..cba7dbe
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/power/stats/wakeups/WakingActivityHistoryTest.java
@@ -0,0 +1,154 @@
+/*
+ * 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.server.power.stats.wakeups;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.util.SparseIntArray;
+import android.util.TimeSparseArray;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import com.android.server.power.stats.wakeups.CpuWakeupStats.WakingActivityHistory;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+public class WakingActivityHistoryTest {
+
+ private static boolean areSame(SparseIntArray a, SparseIntArray b) {
+ if (a == b) {
+ return true;
+ }
+ if (a == null || b == null) {
+ return false;
+ }
+ final int lenA = a.size();
+ if (b.size() != lenA) {
+ return false;
+ }
+ for (int i = 0; i < lenA; i++) {
+ if (a.keyAt(i) != b.keyAt(i)) {
+ return false;
+ }
+ if (a.valueAt(i) != b.valueAt(i)) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ @Test
+ public void recordActivityAppendsUids() {
+ final WakingActivityHistory history = new WakingActivityHistory();
+ final int subsystem = 42;
+ final long timestamp = 54;
+
+ final SparseIntArray uids = new SparseIntArray();
+ uids.put(1, 3);
+ uids.put(5, 2);
+
+ history.recordActivity(subsystem, timestamp, uids);
+
+ assertThat(history.mWakingActivity.size()).isEqualTo(1);
+ assertThat(history.mWakingActivity.contains(subsystem)).isTrue();
+ assertThat(history.mWakingActivity.contains(subsystem + 1)).isFalse();
+ assertThat(history.mWakingActivity.contains(subsystem - 1)).isFalse();
+
+ final TimeSparseArray<SparseIntArray> recordedHistory = history.mWakingActivity.get(
+ subsystem);
+
+ assertThat(recordedHistory.size()).isEqualTo(1);
+ assertThat(recordedHistory.indexOfKey(timestamp - 1)).isLessThan(0);
+ assertThat(recordedHistory.indexOfKey(timestamp)).isAtLeast(0);
+ assertThat(recordedHistory.indexOfKey(timestamp + 1)).isLessThan(0);
+
+ SparseIntArray recordedUids = recordedHistory.get(timestamp);
+ assertThat(recordedUids).isNotSameInstanceAs(uids);
+ assertThat(areSame(recordedUids, uids)).isTrue();
+
+ uids.put(1, 7);
+ uids.clear();
+ uids.put(10, 12);
+ uids.put(17, 53);
+
+ history.recordActivity(subsystem, timestamp, uids);
+
+ recordedUids = recordedHistory.get(timestamp);
+
+ assertThat(recordedUids.size()).isEqualTo(4);
+ assertThat(recordedUids.indexOfKey(1)).isAtLeast(0);
+ assertThat(recordedUids.get(5, -1)).isEqualTo(2);
+ assertThat(recordedUids.get(10, -1)).isEqualTo(12);
+ assertThat(recordedUids.get(17, -1)).isEqualTo(53);
+ }
+
+ @Test
+ public void recordActivityDoesNotDeleteExistingUids() {
+ final WakingActivityHistory history = new WakingActivityHistory();
+ final int subsystem = 42;
+ long timestamp = 101;
+
+ final SparseIntArray uids = new SparseIntArray();
+ uids.put(1, 17);
+ uids.put(15, 2);
+ uids.put(62, 31);
+
+ history.recordActivity(subsystem, timestamp, uids);
+
+ assertThat(history.mWakingActivity.size()).isEqualTo(1);
+ assertThat(history.mWakingActivity.contains(subsystem)).isTrue();
+ assertThat(history.mWakingActivity.contains(subsystem + 1)).isFalse();
+ assertThat(history.mWakingActivity.contains(subsystem - 1)).isFalse();
+
+ final TimeSparseArray<SparseIntArray> recordedHistory = history.mWakingActivity.get(
+ subsystem);
+
+ assertThat(recordedHistory.size()).isEqualTo(1);
+ assertThat(recordedHistory.indexOfKey(timestamp - 1)).isLessThan(0);
+ assertThat(recordedHistory.indexOfKey(timestamp)).isAtLeast(0);
+ assertThat(recordedHistory.indexOfKey(timestamp + 1)).isLessThan(0);
+
+ SparseIntArray recordedUids = recordedHistory.get(timestamp);
+ assertThat(recordedUids).isNotSameInstanceAs(uids);
+ assertThat(areSame(recordedUids, uids)).isTrue();
+
+ uids.delete(1);
+ uids.delete(15);
+ uids.put(85, 39);
+
+ history.recordActivity(subsystem, timestamp, uids);
+ recordedUids = recordedHistory.get(timestamp);
+
+ assertThat(recordedUids.size()).isEqualTo(4);
+ assertThat(recordedUids.get(1, -1)).isEqualTo(17);
+ assertThat(recordedUids.get(15, -1)).isEqualTo(2);
+ assertThat(recordedUids.get(62, -1)).isEqualTo(31);
+ assertThat(recordedUids.get(85, -1)).isEqualTo(39);
+
+ uids.clear();
+ history.recordActivity(subsystem, timestamp, uids);
+ recordedUids = recordedHistory.get(timestamp);
+
+ assertThat(recordedUids.size()).isEqualTo(4);
+ assertThat(recordedUids.get(1, -1)).isEqualTo(17);
+ assertThat(recordedUids.get(15, -1)).isEqualTo(2);
+ assertThat(recordedUids.get(62, -1)).isEqualTo(31);
+ assertThat(recordedUids.get(85, -1)).isEqualTo(39);
+ }
+}
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 e31eed2..7d028d2 100755
--- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java
@@ -141,6 +141,7 @@
import android.app.PendingIntent;
import android.app.Person;
import android.app.RemoteInput;
+import android.app.RemoteInputHistoryItem;
import android.app.StatsManager;
import android.app.admin.DevicePolicyManagerInternal;
import android.app.usage.UsageStatsManagerInternal;
@@ -5554,10 +5555,65 @@
public void testVisitUris() throws Exception {
final Uri audioContents = Uri.parse("content://com.example/audio");
final Uri backgroundImage = Uri.parse("content://com.example/background");
+ final Icon smallIcon = Icon.createWithContentUri("content://media/small/icon");
+ final Icon largeIcon = Icon.createWithContentUri("content://media/large/icon");
+ final Icon personIcon1 = Icon.createWithContentUri("content://media/person1");
+ final Icon personIcon2 = Icon.createWithContentUri("content://media/person2");
+ final Icon personIcon3 = Icon.createWithContentUri("content://media/person3");
+ final Person person1 = new Person.Builder()
+ .setName("Messaging Person")
+ .setIcon(personIcon1)
+ .build();
+ final Person person2 = new Person.Builder()
+ .setName("People List Person 1")
+ .setIcon(personIcon2)
+ .build();
+ final Person person3 = new Person.Builder()
+ .setName("People List Person 2")
+ .setIcon(personIcon3)
+ .build();
+ final Uri historyUri1 = Uri.parse("content://com.example/history1");
+ final Uri historyUri2 = Uri.parse("content://com.example/history2");
+ final RemoteInputHistoryItem historyItem1 = new RemoteInputHistoryItem(null, historyUri1,
+ "a");
+ final RemoteInputHistoryItem historyItem2 = new RemoteInputHistoryItem(null, historyUri2,
+ "b");
Bundle extras = new Bundle();
extras.putParcelable(Notification.EXTRA_AUDIO_CONTENTS_URI, audioContents);
extras.putString(Notification.EXTRA_BACKGROUND_IMAGE_URI, backgroundImage.toString());
+ extras.putParcelable(Notification.EXTRA_MESSAGING_PERSON, person1);
+ extras.putParcelableArrayList(Notification.EXTRA_PEOPLE_LIST,
+ new ArrayList<>(Arrays.asList(person2, person3)));
+ extras.putParcelableArray(Notification.EXTRA_REMOTE_INPUT_HISTORY_ITEMS,
+ new RemoteInputHistoryItem[]{historyItem1, historyItem2});
+
+ Notification n = new Notification.Builder(mContext, "a")
+ .setContentTitle("notification with uris")
+ .setSmallIcon(smallIcon)
+ .setLargeIcon(largeIcon)
+ .addExtras(extras)
+ .build();
+
+ Consumer<Uri> visitor = (Consumer<Uri>) spy(Consumer.class);
+ n.visitUris(visitor);
+ verify(visitor, times(1)).accept(eq(audioContents));
+ verify(visitor, times(1)).accept(eq(backgroundImage));
+ verify(visitor, times(1)).accept(eq(smallIcon.getUri()));
+ verify(visitor, times(1)).accept(eq(largeIcon.getUri()));
+ verify(visitor, times(1)).accept(eq(personIcon1.getUri()));
+ verify(visitor, times(1)).accept(eq(personIcon2.getUri()));
+ verify(visitor, times(1)).accept(eq(personIcon3.getUri()));
+ verify(visitor, times(1)).accept(eq(historyUri1));
+ verify(visitor, times(1)).accept(eq(historyUri2));
+ }
+
+ @Test
+ public void testVisitUris_audioContentsString() throws Exception {
+ final Uri audioContents = Uri.parse("content://com.example/audio");
+
+ Bundle extras = new Bundle();
+ extras.putString(Notification.EXTRA_AUDIO_CONTENTS_URI, audioContents.toString());
Notification n = new Notification.Builder(mContext, "a")
.setContentTitle("notification with uris")
@@ -5568,7 +5624,50 @@
Consumer<Uri> visitor = (Consumer<Uri>) spy(Consumer.class);
n.visitUris(visitor);
verify(visitor, times(1)).accept(eq(audioContents));
- verify(visitor, times(1)).accept(eq(backgroundImage));
+ }
+
+ @Test
+ public void testVisitUris_messagingStyle() {
+ final Icon personIcon1 = Icon.createWithContentUri("content://media/person1");
+ final Icon personIcon2 = Icon.createWithContentUri("content://media/person2");
+ final Icon personIcon3 = Icon.createWithContentUri("content://media/person3");
+ final Person person1 = new Person.Builder()
+ .setName("Messaging Person 1")
+ .setIcon(personIcon1)
+ .build();
+ final Person person2 = new Person.Builder()
+ .setName("Messaging Person 2")
+ .setIcon(personIcon2)
+ .build();
+ final Person person3 = new Person.Builder()
+ .setName("Messaging Person 3")
+ .setIcon(personIcon3)
+ .build();
+ Icon shortcutIcon = Icon.createWithContentUri("content://media/shortcut");
+
+ Notification.Builder builder = new Notification.Builder(mContext, "a")
+ .setCategory(Notification.CATEGORY_MESSAGE)
+ .setContentTitle("new message!")
+ .setContentText("Conversation Notification")
+ .setSmallIcon(android.R.drawable.sym_def_app_icon);
+ Notification.MessagingStyle.Message message1 = new Notification.MessagingStyle.Message(
+ "Marco?", System.currentTimeMillis(), person2);
+ Notification.MessagingStyle.Message message2 = new Notification.MessagingStyle.Message(
+ "Polo!", System.currentTimeMillis(), person3);
+ Notification.MessagingStyle style = new Notification.MessagingStyle(person1)
+ .addMessage(message1)
+ .addMessage(message2)
+ .setShortcutIcon(shortcutIcon);
+ builder.setStyle(style);
+ Notification n = builder.build();
+
+ Consumer<Uri> visitor = (Consumer<Uri>) spy(Consumer.class);
+ n.visitUris(visitor);
+
+ verify(visitor, times(1)).accept(eq(shortcutIcon.getUri()));
+ verify(visitor, times(1)).accept(eq(personIcon1.getUri()));
+ verify(visitor, times(1)).accept(eq(personIcon2.getUri()));
+ verify(visitor, times(1)).accept(eq(personIcon3.getUri()));
}
@Test
@@ -5595,24 +5694,6 @@
}
@Test
- public void testVisitUris_audioContentsString() throws Exception {
- final Uri audioContents = Uri.parse("content://com.example/audio");
-
- Bundle extras = new Bundle();
- extras.putString(Notification.EXTRA_AUDIO_CONTENTS_URI, audioContents.toString());
-
- Notification n = new Notification.Builder(mContext, "a")
- .setContentTitle("notification with uris")
- .setSmallIcon(android.R.drawable.sym_def_app_icon)
- .addExtras(extras)
- .build();
-
- Consumer<Uri> visitor = (Consumer<Uri>) spy(Consumer.class);
- n.visitUris(visitor);
- verify(visitor, times(1)).accept(eq(audioContents));
- }
-
- @Test
public void testSetNotificationPolicy_preP_setOldFields() {
ZenModeHelper mZenModeHelper = mock(ZenModeHelper.class);
mService.mZenModeHelper = mZenModeHelper;
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationVisitUrisTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationVisitUrisTest.java
new file mode 100644
index 0000000..27677e1
--- /dev/null
+++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationVisitUrisTest.java
@@ -0,0 +1,778 @@
+/*
+ * 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.server.notification;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkState;
+import static com.google.common.truth.Truth.assertThat;
+
+import android.app.Notification;
+import android.app.PendingIntent;
+import android.app.Person;
+import android.content.Context;
+import android.content.Intent;
+import android.content.res.Resources;
+import android.graphics.Bitmap;
+import android.graphics.drawable.Icon;
+import android.media.session.MediaSession;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.IBinder;
+import android.os.Parcel;
+import android.util.Log;
+import android.view.View;
+import android.widget.RemoteViews;
+
+import androidx.annotation.NonNull;
+import androidx.test.InstrumentationRegistry;
+import androidx.test.runner.AndroidJUnit4;
+
+import com.android.server.UiServiceTestCase;
+
+import com.google.common.base.Strings;
+import com.google.common.collect.ArrayListMultimap;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableMultimap;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.ListMultimap;
+import com.google.common.collect.Multimap;
+import com.google.common.truth.Expect;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mockito;
+
+import java.io.PrintWriter;
+import java.lang.reflect.Array;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Executable;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Optional;
+import java.util.Set;
+import java.util.function.Consumer;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import javax.annotation.Nullable;
+
+@RunWith(AndroidJUnit4.class)
+public class NotificationVisitUrisTest extends UiServiceTestCase {
+
+ private static final String TAG = "VisitUrisTest";
+
+ // Methods that are known to add Uris that are *NOT* verified.
+ // This list should be emptied! Items can be removed as bugs are fixed.
+ private static final Multimap<Class<?>, String> KNOWN_BAD =
+ ImmutableMultimap.<Class<?>, String>builder()
+ .put(Notification.Builder.class, "setPublicVersion") // b/276294099
+ .putAll(RemoteViews.class, "addView", "addStableView") // b/277740082
+ .put(RemoteViews.class, "setIcon") // b/281018094
+ .put(Notification.WearableExtender.class, "addAction") // TODO: b/281044385
+ .put(Person.Builder.class, "setUri") // TODO: b/281044385
+ .put(RemoteViews.class, "setRemoteAdapter") // TODO: b/281044385
+ .build();
+
+ // Types that we can't really produce. No methods receiving these parameters will be invoked.
+ private static final ImmutableSet<Class<?>> UNUSABLE_TYPES =
+ ImmutableSet.of(Consumer.class, IBinder.class, MediaSession.Token.class, Parcel.class,
+ PrintWriter.class, Resources.Theme.class, View.class);
+
+ // Maximum number of times we allow generating the same class recursively.
+ // E.g. new RemoteViews.addView(new RemoteViews()) but stop there.
+ private static final int MAX_RECURSION = 2;
+
+ // Number of times a method called addX(X) will be called.
+ private static final int NUM_ADD_CALLS = 2;
+
+ // Number of elements to put in a generated array, e.g. for calling setGloops(Gloop[] gloops).
+ private static final int NUM_ELEMENTS_IN_ARRAY = 3;
+
+ // Constructors that should be used to create instances of specific classes. Overrides scoring.
+ private static final ImmutableMap<Class<?>, Constructor<?>> PREFERRED_CONSTRUCTORS;
+
+ static {
+ try {
+ PREFERRED_CONSTRUCTORS = ImmutableMap.of(
+ Notification.Builder.class,
+ Notification.Builder.class.getConstructor(Context.class, String.class));
+ } catch (NoSuchMethodException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ private static final Multimap<Class<?>, String> EXCLUDED_SETTERS =
+ ImmutableMultimap.<Class<?>, String>builder()
+ // Handled by testAllStyles().
+ .put(Notification.Builder.class, "setStyle")
+ // Handled by testAllExtenders().
+ .put(Notification.Builder.class, "extend")
+ // Handled by testAllActionExtenders().
+ .put(Notification.Action.Builder.class, "extend")
+ // Overwrites icon supplied to constructor.
+ .put(Notification.BubbleMetadata.Builder.class, "setIcon")
+ // Discards previously-added actions.
+ .put(RemoteViews.class, "mergeRemoteViews")
+ .build();
+
+ private Context mContext;
+
+ @Rule
+ public final Expect expect = Expect.create();
+
+ @Before
+ public void setUp() {
+ mContext = InstrumentationRegistry.getInstrumentation().getContext();
+ }
+
+ @Test // This is a meta-test, checks that the generators are not broken.
+ public void verifyTest() {
+ Generated<Notification> notification = buildNotification(mContext, /* styleClass= */ null,
+ /* extenderClass= */ null, /* actionExtenderClass= */ null,
+ /* includeRemoteViews= */ true);
+ assertThat(notification.includedUris.size()).isAtLeast(20);
+ }
+
+ @Test
+ public void testPlainNotification() throws Exception {
+ Generated<Notification> notification = buildNotification(mContext, /* styleClass= */ null,
+ /* extenderClass= */ null, /* actionExtenderClass= */ null,
+ /* includeRemoteViews= */ false);
+ verifyAllUrisAreVisited(notification.value, notification.includedUris,
+ "Plain Notification");
+ }
+
+ @Test
+ public void testRemoteViews() throws Exception {
+ Generated<Notification> notification = buildNotification(mContext, /* styleClass= */ null,
+ /* extenderClass= */ null, /* actionExtenderClass= */ null,
+ /* includeRemoteViews= */ true);
+ verifyAllUrisAreVisited(notification.value, notification.includedUris,
+ "Notification with Remote Views");
+ }
+
+ @Test
+ public void testAllStyles() throws Exception {
+ for (Class<?> styleClass : ReflectionUtils.getConcreteSubclasses(Notification.Style.class,
+ Notification.class)) {
+ Generated<Notification> notification = buildNotification(mContext, styleClass,
+ /* extenderClass= */ null, /* actionExtenderClass= */ null,
+ /* includeRemoteViews= */ false);
+ verifyAllUrisAreVisited(notification.value, notification.includedUris,
+ String.format("Style (%s)", styleClass.getSimpleName()));
+ }
+ }
+
+ @Test
+ public void testAllExtenders() throws Exception {
+ for (Class<?> extenderClass : ReflectionUtils.getConcreteSubclasses(
+ Notification.Extender.class, Notification.class)) {
+ Generated<Notification> notification = buildNotification(mContext,
+ /* styleClass= */ null, extenderClass, /* actionExtenderClass= */ null,
+ /* includeRemoteViews= */ false);
+ verifyAllUrisAreVisited(notification.value, notification.includedUris,
+ String.format("Extender (%s)", extenderClass.getSimpleName()));
+ }
+ }
+
+ @Test
+ public void testAllActionExtenders() throws Exception {
+ for (Class<?> actionExtenderClass : ReflectionUtils.getConcreteSubclasses(
+ Notification.Action.Extender.class, Notification.Action.class)) {
+ Generated<Notification> notification = buildNotification(mContext,
+ /* styleClass= */ null, /* extenderClass= */ null, actionExtenderClass,
+ /* includeRemoteViews= */ false);
+ verifyAllUrisAreVisited(notification.value, notification.includedUris,
+ String.format("Action.Extender (%s)", actionExtenderClass.getSimpleName()));
+ }
+ }
+
+ private void verifyAllUrisAreVisited(Notification notification, List<Uri> includedUris,
+ String notificationTypeMessage) throws Exception {
+ Consumer<Uri> visitor = (Consumer<Uri>) Mockito.mock(Consumer.class);
+ ArgumentCaptor<Uri> visitedUriCaptor = ArgumentCaptor.forClass(Uri.class);
+
+ notification.visitUris(visitor);
+
+ Mockito.verify(visitor, Mockito.atLeastOnce()).accept(visitedUriCaptor.capture());
+ List<Uri> visitedUris = new ArrayList<>(visitedUriCaptor.getAllValues());
+ visitedUris.remove(null);
+
+ expect.withMessage(notificationTypeMessage)
+ .that(visitedUris)
+ .containsAtLeastElementsIn(includedUris);
+ expect.that(KNOWN_BAD).isNotEmpty(); // Once empty, switch to containsExactlyElementsIn()
+ }
+
+ private static Generated<Notification> buildNotification(Context context,
+ @Nullable Class<?> styleClass, @Nullable Class<?> extenderClass,
+ @Nullable Class<?> actionExtenderClass, boolean includeRemoteViews) {
+ SpecialParameterGenerator specialGenerator = new SpecialParameterGenerator(context);
+ Set<Class<?>> excludedClasses = includeRemoteViews
+ ? ImmutableSet.of()
+ : ImmutableSet.of(RemoteViews.class);
+ Location location = Location.root(Notification.Builder.class);
+
+ Notification.Builder builder = new Notification.Builder(context, "channelId");
+ invokeAllSetters(builder, location, /* allOverloads= */ false,
+ /* includingVoidMethods= */ false, excludedClasses, specialGenerator);
+
+ if (styleClass != null) {
+ builder.setStyle((Notification.Style) generateObject(styleClass,
+ location.plus("setStyle", Notification.Style.class),
+ excludedClasses, specialGenerator));
+ }
+ if (extenderClass != null) {
+ builder.extend((Notification.Extender) generateObject(extenderClass,
+ location.plus("extend", Notification.Extender.class),
+ excludedClasses, specialGenerator));
+ }
+ if (actionExtenderClass != null) {
+ Location actionLocation = location.plus("addAction", Notification.Action.class);
+ Notification.Action.Builder actionBuilder =
+ (Notification.Action.Builder) generateObject(
+ Notification.Action.Builder.class, actionLocation, excludedClasses,
+ specialGenerator);
+ actionBuilder.extend((Notification.Action.Extender) generateObject(actionExtenderClass,
+ actionLocation.plus(
+ Notification.Action.Builder.class).plus("extend",
+ Notification.Action.Extender.class),
+ excludedClasses, specialGenerator));
+ builder.addAction(actionBuilder.build());
+ }
+
+ return new Generated<>(builder.build(), specialGenerator.getGeneratedUris());
+ }
+
+ private static Object generateObject(Class<?> clazz, Location where,
+ Set<Class<?>> excludingClasses, SpecialParameterGenerator specialGenerator) {
+ if (excludingClasses.contains(clazz)) {
+ throw new IllegalArgumentException(
+ String.format("Asked to generate a %s but it's part of the excluded set (%s)",
+ clazz, excludingClasses));
+ }
+
+ if (SpecialParameterGenerator.canGenerate(clazz)) {
+ return specialGenerator.generate(clazz, where);
+ }
+ if (clazz.isEnum()) {
+ return clazz.getEnumConstants()[0];
+ }
+ if (clazz.isArray()) {
+ Object arrayValue = Array.newInstance(clazz.getComponentType(), NUM_ELEMENTS_IN_ARRAY);
+ for (int i = 0; i < Array.getLength(arrayValue); i++) {
+ Array.set(arrayValue, i,
+ generateObject(clazz.getComponentType(), where, excludingClasses,
+ specialGenerator));
+ }
+ return arrayValue;
+ }
+
+ Log.i(TAG, "About to generate a(n)" + clazz.getName());
+
+ // Need to construct one of these. Look for a Builder inner class... and also look for a
+ // Builder as a "sibling" class; CarExtender.UnreadConversation does this :(
+ Stream<Class<?>> maybeBuilders =
+ Stream.concat(Arrays.stream(clazz.getDeclaredClasses()),
+ clazz.getDeclaringClass() != null
+ ? Arrays.stream(clazz.getDeclaringClass().getDeclaredClasses())
+ : Stream.empty());
+ Optional<Class<?>> clazzBuilder =
+ maybeBuilders
+ .filter(maybeBuilder -> maybeBuilder.getSimpleName().equals("Builder"))
+ .filter(maybeBuilder ->
+ Arrays.stream(maybeBuilder.getMethods()).anyMatch(
+ m -> m.getName().equals("build")
+ && m.getParameterCount() == 0
+ && m.getReturnType().equals(clazz)))
+ .findFirst();
+
+
+ if (clazzBuilder.isPresent()) {
+ try {
+ // Found a Builder! Create an instance of it, call its setters, and call build()
+ // on it.
+ Object builder = constructEmpty(clazzBuilder.get(), where.plus(clazz),
+ excludingClasses, specialGenerator);
+ invokeAllSetters(builder, where.plus(clazz).plus(clazzBuilder.get()),
+ /* allOverloads= */ false, /* includingVoidMethods= */ false,
+ excludingClasses, specialGenerator);
+
+ Method buildMethod = builder.getClass().getMethod("build");
+ Object built = buildMethod.invoke(builder);
+ assertThat(built).isInstanceOf(clazz);
+ return built;
+ } catch (Exception e) {
+ throw new UnsupportedOperationException(
+ "Error using Builder " + clazzBuilder.get().getName(), e);
+ }
+ }
+
+ // If no X.Builder, look for X() constructor.
+ try {
+ Object instance = constructEmpty(clazz, where, excludingClasses, specialGenerator);
+ invokeAllSetters(instance, where.plus(clazz), /* allOverloads= */ false,
+ /* includingVoidMethods= */ false, excludingClasses, specialGenerator);
+ return instance;
+ } catch (Exception e) {
+ throw new UnsupportedOperationException("Error generating a(n) " + clazz.getName(), e);
+ }
+ }
+
+ private static Object constructEmpty(Class<?> clazz, Location where,
+ Set<Class<?>> excludingClasses, SpecialParameterGenerator specialGenerator) {
+ Constructor<?> bestConstructor;
+ if (PREFERRED_CONSTRUCTORS.containsKey(clazz)) {
+ // Use the preferred constructor.
+ bestConstructor = PREFERRED_CONSTRUCTORS.get(clazz);
+ } else if (Notification.Extender.class.isAssignableFrom(clazz)
+ || Notification.Action.Extender.class.isAssignableFrom(clazz)) {
+ // For extenders, prefer the empty constructors. The others are "partial-copy"
+ // constructors and do not read all fields from the supplied Notification/Action.
+ try {
+ bestConstructor = clazz.getConstructor();
+ } catch (Exception e) {
+ throw new UnsupportedOperationException(
+ String.format("Extender class %s doesn't have a zero-parameter constructor",
+ clazz.getName()));
+ }
+ } else {
+ // Look for a non-deprecated constructor using any of the "interesting" parameters.
+ List<Constructor<?>> allConstructors = Arrays.stream(clazz.getConstructors())
+ .filter(c -> c.getAnnotation(Deprecated.class) == null)
+ .collect(Collectors.toList());
+ bestConstructor = ReflectionUtils.chooseBestOverload(allConstructors, where);
+ }
+ if (bestConstructor != null) {
+ try {
+ Object[] constructorParameters = generateParameters(bestConstructor,
+ where.plus(clazz), excludingClasses, specialGenerator);
+ Log.i(TAG, "Invoking " + ReflectionUtils.methodToString(bestConstructor) + " with "
+ + Arrays.toString(constructorParameters));
+ return bestConstructor.newInstance(constructorParameters);
+ } catch (Exception e) {
+ throw new UnsupportedOperationException(
+ String.format("Error invoking constructor %s",
+ ReflectionUtils.methodToString(bestConstructor)), e);
+ }
+ }
+
+ // Look for a "static constructor", i.e. some factory method on the same class.
+ List<Method> factoryMethods = Arrays.stream(clazz.getMethods())
+ .filter(m -> Modifier.isStatic(m.getModifiers()) && clazz.equals(m.getReturnType()))
+ .collect(Collectors.toList());
+ Method bestFactoryMethod = ReflectionUtils.chooseBestOverload(factoryMethods, where);
+ if (bestFactoryMethod != null) {
+ try {
+ Object[] methodParameters = generateParameters(bestFactoryMethod, where.plus(clazz),
+ excludingClasses, specialGenerator);
+ Log.i(TAG,
+ "Invoking " + ReflectionUtils.methodToString(bestFactoryMethod) + " with "
+ + Arrays.toString(methodParameters));
+ return bestFactoryMethod.invoke(null, methodParameters);
+ } catch (Exception e) {
+ throw new UnsupportedOperationException(
+ "Error invoking constructor-like static method "
+ + bestFactoryMethod.getName() + " for " + clazz.getName(), e);
+ }
+ }
+
+ throw new UnsupportedOperationException(
+ "Couldn't find a way to construct a(n) " + clazz.getName());
+ }
+
+ private static void invokeAllSetters(Object instance, Location where, boolean allOverloads,
+ boolean includingVoidMethods, Set<Class<?>> excludingParameterTypes,
+ SpecialParameterGenerator specialGenerator) {
+ for (Method setter : ReflectionUtils.getAllSetters(instance.getClass(), where,
+ allOverloads, includingVoidMethods, excludingParameterTypes)) {
+ try {
+ int numInvocations = setter.getName().startsWith("add") ? NUM_ADD_CALLS : 1;
+ for (int i = 0; i < numInvocations; i++) {
+
+ // If the method is a "known bad" (i.e. adds Uris that aren't visited later)
+ // then still call it, but don't add to list of generated Uris. Easiest way is
+ // to use a throw-away SpecialParameterGenerator instead of the accumulating
+ // one.
+ SpecialParameterGenerator specialGeneratorForThisSetter =
+ KNOWN_BAD.containsEntry(instance.getClass(), setter.getName())
+ ? new SpecialParameterGenerator(specialGenerator.mContext)
+ : specialGenerator;
+
+ Object[] setterParam = generateParameters(setter, where,
+ excludingParameterTypes, specialGeneratorForThisSetter);
+ Log.i(TAG, "Invoking " + ReflectionUtils.methodToString(setter) + " with "
+ + setterParam[0]);
+ setter.invoke(instance, setterParam);
+ }
+ } catch (Exception e) {
+ throw new UnsupportedOperationException(
+ "Error invoking setter " + ReflectionUtils.methodToString(setter), e);
+ }
+ }
+ }
+
+ private static Object[] generateParameters(Executable executable, Location where,
+ Set<Class<?>> excludingClasses, SpecialParameterGenerator specialGenerator) {
+ Log.i(TAG, "About to generate parameters for " + ReflectionUtils.methodToString(executable)
+ + " in " + where);
+ Class<?>[] parameterTypes = executable.getParameterTypes();
+ Object[] parameterValues = new Object[parameterTypes.length];
+ for (int i = 0; i < parameterTypes.length; i++) {
+ parameterValues[i] = generateObject(
+ parameterTypes[i],
+ where.plus(executable,
+ String.format("[%d,%s]", i, parameterTypes[i].getName())),
+ excludingClasses,
+ specialGenerator);
+ }
+ return parameterValues;
+ }
+
+ private static class ReflectionUtils {
+ static Set<Class<?>> getConcreteSubclasses(Class<?> clazz, Class<?> containerClass) {
+ return Arrays.stream(containerClass.getDeclaredClasses())
+ .filter(
+ innerClass -> clazz.isAssignableFrom(innerClass)
+ && !Modifier.isAbstract(innerClass.getModifiers()))
+ .collect(Collectors.toSet());
+ }
+
+ static String methodToString(Executable executable) {
+ return String.format("%s::%s(%s)",
+ executable.getDeclaringClass().getName(),
+ executable.getName(),
+ Arrays.stream(executable.getParameterTypes()).map(Class::getSimpleName)
+ .collect(Collectors.joining(", "))
+ );
+ }
+
+ static List<Method> getAllSetters(Class<?> clazz, Location where, boolean allOverloads,
+ boolean includingVoidMethods, Set<Class<?>> excludingParameterTypes) {
+ ListMultimap<String, Method> methods = ArrayListMultimap.create();
+ // Candidate "setters" are any methods that receive one at least parameter and are
+ // either void (if acceptable) or return the same type being built.
+ for (Method method : clazz.getDeclaredMethods()) {
+ if (Modifier.isPublic(method.getModifiers())
+ && !Modifier.isStatic(method.getModifiers())
+ && method.getAnnotation(Deprecated.class) == null
+ && ((includingVoidMethods && method.getReturnType().equals(Void.TYPE))
+ || method.getReturnType().equals(clazz))
+ && method.getParameterCount() >= 1
+ && !EXCLUDED_SETTERS.containsEntry(clazz, method.getName())
+ && Arrays.stream(method.getParameterTypes())
+ .noneMatch(excludingParameterTypes::contains)) {
+ methods.put(method.getName(), method);
+ }
+ }
+
+ // In case of overloads, prefer those with the most interesting parameters.
+ List<Method> setters = new ArrayList<>();
+ for (String methodName : methods.keySet()) {
+ setters.addAll(chooseOverloads(methods.get(methodName), where, allOverloads));
+ }
+
+ // Exclude set(x[]) when there exists add(x).
+ List<Method> excludedSetters = setters.stream().filter(
+ m1 -> m1.getName().startsWith("set")
+ && setters.stream().anyMatch(
+ m2 -> {
+ Class<?> param1 = m1.getParameterTypes()[0];
+ Class<?> param2 = m2.getParameterTypes()[0];
+ return m2.getName().startsWith("add")
+ && param1.isArray()
+ && !param2.isArray() && !param2.isPrimitive()
+ && param1.getComponentType().equals(param2);
+ })).toList();
+
+ setters.removeAll(excludedSetters);
+ return setters;
+ }
+
+ @Nullable
+ static <T extends Executable> T chooseBestOverload(List<T> executables, Location where) {
+ ImmutableList<T> chosen = chooseOverloads(executables, where,
+ /* chooseMultiple= */ false);
+ return (chosen.isEmpty() ? null : chosen.get(0));
+ }
+
+ static <T extends Executable> ImmutableList<T> chooseOverloads(List<T> executables,
+ Location where, boolean chooseMultiple) {
+ // Exclude variants with non-usable parameters and too-deep recursions.
+ executables = executables.stream()
+ .filter(e -> Arrays.stream(e.getParameterTypes()).noneMatch(
+ p -> UNUSABLE_TYPES.contains(p)
+ || where.getClassOccurrenceCount(p) >= MAX_RECURSION))
+ .collect(Collectors.toList());
+
+ if (executables.size() <= 1) {
+ return ImmutableList.copyOf(executables);
+ }
+
+ // Overloads in "builders" usually set the same thing in two different ways (e.g.
+ // x(Bitmap) and x(Icon)). We choose the one with the most "interesting" parameters
+ // (from the point of view of containing Uris). In case of ties, LEAST parameters win,
+ // to use the simplest.
+ ArrayList<T> sortedCopy = new ArrayList<>(executables);
+ sortedCopy.sort(
+ Comparator.comparingInt(ReflectionUtils::getMethodScore)
+ .thenComparing(Executable::getParameterCount)
+ .reversed());
+
+ return chooseMultiple
+ ? ImmutableList.copyOf(sortedCopy)
+ : ImmutableList.of(sortedCopy.get(0));
+ }
+
+ /**
+ * Counts the number of "interesting" parameters in a method. Used to choose the constructor
+ * or builder-setter overload most suited to this test (e.g. prefer
+ * {@link Notification.Builder#setLargeIcon(Icon)} to
+ * {@link Notification.Builder#setLargeIcon(Bitmap)}.
+ */
+ static int getMethodScore(Executable executable) {
+ return Arrays.stream(executable.getParameterTypes())
+ .mapToInt(SpecialParameterGenerator::getParameterScore).sum();
+ }
+ }
+
+ private static class SpecialParameterGenerator {
+ private static final ImmutableSet<Class<?>> INTERESTING_CLASSES =
+ ImmutableSet.of(
+ Person.class, Uri.class, Icon.class, Intent.class, PendingIntent.class,
+ RemoteViews.class);
+ private static final ImmutableSet<Class<?>> MOCKED_CLASSES = ImmutableSet.of();
+
+ private static final ImmutableMap<Class<?>, Object> PRIMITIVE_VALUES =
+ ImmutableMap.<Class<?>, Object>builder()
+ .put(boolean.class, false)
+ .put(byte.class, (byte) 4)
+ .put(short.class, (short) 44)
+ .put(int.class, 1)
+ .put(long.class, 44444444L)
+ .put(float.class, 33.33f)
+ .put(double.class, 3333.3333d)
+ .put(char.class, 'N')
+ .build();
+
+ private final Context mContext;
+ private final List<Uri> mGeneratedUris = new ArrayList<>();
+ private int mNextUriCounter = 1;
+
+ SpecialParameterGenerator(Context context) {
+ mContext = context;
+ }
+
+ static boolean canGenerate(Class<?> clazz) {
+ return (INTERESTING_CLASSES.contains(clazz) && !clazz.equals(Person.class))
+ || MOCKED_CLASSES.contains(clazz)
+ || clazz.equals(Context.class)
+ || clazz.equals(Bundle.class)
+ || clazz.equals(Bitmap.class)
+ || clazz.isPrimitive()
+ || clazz.equals(CharSequence.class) || clazz.equals(String.class);
+ }
+
+ static int getParameterScore(Class<?> parameterClazz) {
+ if (parameterClazz.isArray()) {
+ return getParameterScore(parameterClazz.getComponentType());
+ } else if (INTERESTING_CLASSES.contains(parameterClazz)) {
+ return 10;
+ } else if (parameterClazz.isPrimitive() || parameterClazz.equals(CharSequence.class)
+ || parameterClazz.equals(String.class)) {
+ return 0;
+ } else {
+ // No idea. We don't deep inspect, but score them as better than known-useless.
+ return 1;
+ }
+ }
+
+ Object generate(Class<?> clazz, Location where) {
+ if (clazz == Uri.class) {
+ return generateUri(where);
+ }
+
+ // Interesting parameters
+ if (clazz == Icon.class) {
+ Uri iconUri = generateUri(
+ where.plus(Icon.class).plus("createWithContentUri", Uri.class));
+ return Icon.createWithContentUri(iconUri);
+ }
+
+ if (clazz == Intent.class) {
+ // TODO(b/281044385): Are Intent Uris (new Intent(String,Uri)) relevant?
+ return new Intent("action");
+ }
+
+ if (clazz == PendingIntent.class) {
+ // PendingIntent can have an Intent with a Uri but those are inaccessible and
+ // not inspected.
+ return PendingIntent.getActivity(mContext, 0, new Intent("action"),
+ PendingIntent.FLAG_IMMUTABLE);
+ }
+
+ if (clazz == RemoteViews.class) {
+ RemoteViews rv = new RemoteViews(mContext.getPackageName(), /* layoutId= */ 10);
+ invokeAllSetters(rv, where.plus(RemoteViews.class),
+ /* allOverloads= */ true, /* includingVoidMethods= */ true,
+ /* excludingParameterTypes= */ ImmutableSet.of(), this);
+ return rv;
+ }
+
+ if (MOCKED_CLASSES.contains(clazz)) {
+ return Mockito.mock(clazz);
+ }
+ if (clazz.equals(Context.class)) {
+ return mContext;
+ }
+ if (clazz.equals(Bundle.class)) {
+ return new Bundle();
+ }
+ if (clazz.equals(Bitmap.class)) {
+ return Bitmap.createBitmap(10, 10, Bitmap.Config.ARGB_8888);
+ }
+
+ // ~Primitives
+ if (PRIMITIVE_VALUES.containsKey(clazz)) {
+ return PRIMITIVE_VALUES.get(clazz);
+ }
+ if (clazz.equals(CharSequence.class) || clazz.equals(String.class)) {
+ return where + "->string";
+ }
+
+ throw new IllegalArgumentException(
+ "I have no idea how to produce a(n) " + clazz + ", sorry");
+ }
+
+ private Uri generateUri(Location where) {
+ Uri uri = Uri.parse(String.format("%s - %s", mNextUriCounter++, where));
+ mGeneratedUris.add(uri);
+ return uri;
+ }
+
+ public List<Uri> getGeneratedUris() {
+ return mGeneratedUris;
+ }
+ }
+
+ private static class Location {
+
+ private static class Item {
+ @Nullable private final Class<?> mMaybeClass;
+ @Nullable private final Executable mMaybeMethod;
+ @Nullable private final String mExtra;
+
+ Item(@NonNull Class<?> clazz) {
+ mMaybeClass = checkNotNull(clazz);
+ mMaybeMethod = null;
+ mExtra = null;
+ }
+
+ Item(@NonNull Executable executable, @Nullable String extra) {
+ mMaybeClass = null;
+ mMaybeMethod = checkNotNull(executable);
+ mExtra = extra;
+ }
+
+ @NonNull
+ @Override
+ public String toString() {
+ String name = mMaybeClass != null
+ ? "CLASS:" + mMaybeClass.getName()
+ : "METHOD:" + mMaybeMethod.getName() + "/"
+ + mMaybeMethod.getParameterCount();
+ return name + Strings.nullToEmpty(mExtra);
+ }
+ }
+
+ private final ImmutableList<Item> mComponents;
+
+ private Location(Iterable<Item> components) {
+ mComponents = ImmutableList.copyOf(components);
+ }
+
+ private Location(Location soFar, Item next) {
+ // Verify the class->method->class->method ordering.
+ if (!soFar.mComponents.isEmpty()) {
+ Item previous = soFar.getLastItem();
+ if (previous.mMaybeMethod != null && next.mMaybeMethod != null) {
+ throw new IllegalArgumentException(
+ String.format("Unexpected sequence: %s ===> %s", soFar, next));
+ }
+ }
+ mComponents = ImmutableList.<Item>builder().addAll(soFar.mComponents).add(next).build();
+ }
+
+ public static Location root(Class<?> clazz) {
+ return new Location(ImmutableList.of(new Item(clazz)));
+ }
+
+ Location plus(Class<?> clazz) {
+ return new Location(this, new Item(clazz));
+ }
+
+ Location plus(Executable executable, String extra) {
+ return new Location(this, new Item(executable, extra));
+ }
+
+ public Location plus(String methodName, Class<?>... methodParameters) {
+ Item lastClass = getLastItem();
+ try {
+ checkNotNull(lastClass.mMaybeClass, "Last item is not a class but %s", lastClass);
+ Method method = lastClass.mMaybeClass.getMethod(methodName, methodParameters);
+ return new Location(this, new Item(method, null));
+ } catch (NoSuchMethodException e) {
+ throw new IllegalArgumentException(
+ String.format("Method %s not found in class %s",
+ methodName, lastClass.mMaybeClass.getName()));
+ }
+ }
+
+ Item getLastItem() {
+ checkState(!mComponents.isEmpty());
+ return mComponents.get(mComponents.size() - 1);
+ }
+
+ @NonNull
+ @Override
+ public String toString() {
+ return mComponents.stream().map(Item::toString).collect(Collectors.joining(" -> "));
+ }
+
+ public long getClassOccurrenceCount(Class<?> clazz) {
+ return mComponents.stream().filter(c -> clazz.equals(c.mMaybeClass)).count();
+ }
+ }
+
+ private static class Generated<T> {
+ public final T value;
+ public final ImmutableList<Uri> includedUris;
+
+ private Generated(T value, Iterable<Uri> includedUris) {
+ this.value = value;
+ this.includedUris = ImmutableList.copyOf(includedUris);
+ }
+ }
+}
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/RoleObserverTest.java b/services/tests/uiservicestests/src/com/android/server/notification/RoleObserverTest.java
index d4a2e9a..66c1e35 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/RoleObserverTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/RoleObserverTest.java
@@ -55,6 +55,7 @@
import android.telephony.TelephonyManager;
import android.test.suitebuilder.annotation.SmallTest;
import android.testing.AndroidTestingRunner;
+import android.testing.TestableLooper;
import android.testing.TestableLooper.RunWithLooper;
import android.util.ArraySet;
import android.util.AtomicFile;
@@ -103,6 +104,7 @@
private RoleManager mRoleManager;
@Mock
private Looper mMainLooper;
+ private TestableLooper mTestableLooper;
NotificationRecordLoggerFake mNotificationRecordLogger = new NotificationRecordLoggerFake();
private InstanceIdSequence mNotificationInstanceIdSequence = new InstanceIdSequenceFake(
1 << 30);
@@ -144,9 +146,10 @@
mService = new TestableNotificationManagerService(mContext, mNotificationRecordLogger,
mNotificationInstanceIdSequence);
mRoleObserver = mService.new RoleObserver(mContext, mRoleManager, mPm, mMainLooper);
+ mTestableLooper = TestableLooper.get(this);
try {
- mService.init(mService.new WorkerHandler(mock(Looper.class)),
+ mService.init(mService.new WorkerHandler(mTestableLooper.getLooper()),
mock(RankingHandler.class),
mock(IPackageManager.class), mock(PackageManager.class),
mock(LightsManager.class),
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java b/services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java
index cb41769..2c95bde 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java
@@ -175,6 +175,7 @@
mConditionProviders = new ConditionProviders(mContext, new UserProfiles(),
AppGlobals.getPackageManager());
mConditionProviders.addSystemProvider(new CountdownConditionProvider());
+ mConditionProviders.addSystemProvider(new ScheduleConditionProvider());
mZenModeHelper = new ZenModeHelper(mContext, mTestableLooper.getLooper(),
mConditionProviders, mStatsEventBuilderFactory);
@@ -816,6 +817,32 @@
}
@Test
+ public void testSetConfig_updatesAudioEventually() {
+ AudioManagerInternal mAudioManager = mock(AudioManagerInternal.class);
+ mZenModeHelper.mAudioManager = mAudioManager;
+ setupZenConfig();
+
+ // Change the config a little bit, but enough that it would turn zen mode on
+ ZenModeConfig newConfig = mZenModeHelper.mConfig.copy();
+ newConfig.manualRule = new ZenModeConfig.ZenRule();
+ newConfig.manualRule.zenMode = ZEN_MODE_IMPORTANT_INTERRUPTIONS;
+ newConfig.manualRule.enabled = true;
+ mZenModeHelper.setConfig(newConfig, null, "test");
+
+ // audio manager shouldn't do anything until the handler processes its messagse
+ verify(mAudioManager, never()).updateRingerModeAffectedStreamsInternal();
+
+ // now process the looper's messages
+ mTestableLooper.processAllMessages();
+
+ // Expect calls to audio manager
+ verify(mAudioManager, times(1)).updateRingerModeAffectedStreamsInternal();
+
+ // called during applyZenToRingerMode(), which should be true since zen changed
+ verify(mAudioManager, atLeastOnce()).getRingerModeInternal();
+ }
+
+ @Test
public void testParcelConfig() {
mZenModeHelper.mZenMode = ZEN_MODE_IMPORTANT_INTERRUPTIONS;
mZenModeHelper.mConfig.allowAlarms = false;
@@ -1827,7 +1854,11 @@
@Test
public void testRulesWithSameUri() {
- Uri sharedUri = ZenModeConfig.toScheduleConditionId(new ScheduleInfo());
+ // needs to be a valid schedule info object for the subscription to happen properly
+ ScheduleInfo scheduleInfo = new ScheduleInfo();
+ scheduleInfo.days = new int[]{1, 2};
+ scheduleInfo.endHour = 1;
+ Uri sharedUri = ZenModeConfig.toScheduleConditionId(scheduleInfo);
AutomaticZenRule zenRule = new AutomaticZenRule("name",
new ComponentName("android", "ScheduleConditionProvider"),
sharedUri,
@@ -1874,14 +1905,12 @@
// note that caller=null because that's how it comes in from NMS.setZenMode
mZenModeHelper.setManualZenMode(ZEN_MODE_IMPORTANT_INTERRUPTIONS, null, null, "");
- mTestableLooper.processAllMessages();
// confirm that setting zen mode via setManualZenMode changed the zen mode correctly
assertEquals(ZEN_MODE_IMPORTANT_INTERRUPTIONS, mZenModeHelper.mZenMode);
// and also that it works to turn it back off again
mZenModeHelper.setManualZenMode(Global.ZEN_MODE_OFF, null, null, "");
- mTestableLooper.processAllMessages();
assertEquals(Global.ZEN_MODE_OFF, mZenModeHelper.mZenMode);
}
diff --git a/services/tests/voiceinteractiontests/src/com/android/server/soundtrigger/SoundTriggerTest.java b/services/tests/voiceinteractiontests/src/com/android/server/soundtrigger/SoundTriggerTest.java
index e6a1be8..35170b3 100644
--- a/services/tests/voiceinteractiontests/src/com/android/server/soundtrigger/SoundTriggerTest.java
+++ b/services/tests/voiceinteractiontests/src/com/android/server/soundtrigger/SoundTriggerTest.java
@@ -28,6 +28,7 @@
import android.test.InstrumentationTestCase;
import android.test.suitebuilder.annotation.LargeTest;
import android.test.suitebuilder.annotation.SmallTest;
+import android.os.Binder;
import java.util.Arrays;
import java.util.Locale;
@@ -346,7 +347,8 @@
.build(),
null /* data */,
null /* keyphraseExtras */,
- 12345678 /* halEventReceivedMillis */);
+ 12345678 /* halEventReceivedMillis */,
+ new Binder() /* token */);
// Write to a parcel
Parcel parcel = Parcel.obtain();
@@ -379,7 +381,8 @@
.build(),
new byte[1] /* data */,
kpExtra,
- 12345678 /* halEventReceivedMillis */);
+ 12345678 /* halEventReceivedMillis */,
+ new Binder() /* token */);
// Write to a parcel
Parcel parcel = Parcel.obtain();
@@ -428,7 +431,8 @@
.build(),
data,
kpExtra,
- 12345678 /* halEventReceivedMillis */);
+ 12345678 /* halEventReceivedMillis */,
+ new Binder() /* token */);
// Write to a parcel
Parcel parcel = Parcel.obtain();
diff --git a/services/tests/voiceinteractiontests/src/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewareImplTest.java b/services/tests/voiceinteractiontests/src/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewareImplTest.java
index 5a2451f..56bd192 100644
--- a/services/tests/voiceinteractiontests/src/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewareImplTest.java
+++ b/services/tests/voiceinteractiontests/src/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewareImplTest.java
@@ -164,7 +164,7 @@
public void testAttachDetach() throws Exception {
// Normal attachment / detachment.
ISoundTriggerCallback callback = createCallbackMock();
- ISoundTriggerModule module = mService.attach(0, callback);
+ ISoundTriggerModule module = mService.attach(0, callback, false);
assertNotNull(module);
module.detach();
}
@@ -172,7 +172,7 @@
@Test
public void testLoadUnloadModel() throws Exception {
ISoundTriggerCallback callback = createCallbackMock();
- ISoundTriggerModule module = mService.attach(0, callback);
+ ISoundTriggerModule module = mService.attach(0, callback, false);
final int hwHandle = 7;
int handle = loadGenericModel(module, hwHandle).first;
@@ -183,7 +183,7 @@
@Test
public void testLoadPreemptModel() throws Exception {
ISoundTriggerCallback callback = createCallbackMock();
- ISoundTriggerModule module = mService.attach(0, callback);
+ ISoundTriggerModule module = mService.attach(0, callback, false);
final int hwHandle = 7;
Pair<Integer, SoundTriggerHwCallback> loadResult = loadGenericModel(module, hwHandle);
@@ -202,7 +202,7 @@
@Test
public void testLoadUnloadPhraseModel() throws Exception {
ISoundTriggerCallback callback = createCallbackMock();
- ISoundTriggerModule module = mService.attach(0, callback);
+ ISoundTriggerModule module = mService.attach(0, callback, false);
final int hwHandle = 73;
int handle = loadPhraseModel(module, hwHandle).first;
@@ -213,7 +213,7 @@
@Test
public void testStartStopRecognition() throws Exception {
ISoundTriggerCallback callback = createCallbackMock();
- ISoundTriggerModule module = mService.attach(0, callback);
+ ISoundTriggerModule module = mService.attach(0, callback, false);
// Load the model.
final int hwHandle = 7;
@@ -225,13 +225,6 @@
// Stop the recognition.
stopRecognition(module, handle, hwHandle);
- ArgumentCaptor<RecognitionEventSys> eventCaptor = ArgumentCaptor.forClass(
- RecognitionEventSys.class);
- verify(callback).onRecognition(eq(handle), eventCaptor.capture(), eq(101));
- RecognitionEventSys lastEvent = eventCaptor.getValue();
- assertEquals(-1, lastEvent.halEventReceivedMillis);
- assertEquals(RecognitionStatus.ABORTED, lastEvent.recognitionEvent.status);
-
// Unload the model.
unloadModel(module, handle, hwHandle);
module.detach();
@@ -240,7 +233,7 @@
@Test
public void testStartRecognitionBusy() throws Exception {
ISoundTriggerCallback callback = createCallbackMock();
- ISoundTriggerModule module = mService.attach(0, callback);
+ ISoundTriggerModule module = mService.attach(0, callback, false);
// Load the model.
final int hwHandle = 7;
@@ -264,7 +257,7 @@
@Test
public void testStartStopPhraseRecognition() throws Exception {
ISoundTriggerCallback callback = createCallbackMock();
- ISoundTriggerModule module = mService.attach(0, callback);
+ ISoundTriggerModule module = mService.attach(0, callback, false);
// Load the model.
final int hwHandle = 67;
@@ -276,13 +269,6 @@
// Stop the recognition.
stopRecognition(module, handle, hwHandle);
- ArgumentCaptor<PhraseRecognitionEventSys> eventCaptor = ArgumentCaptor.forClass(
- PhraseRecognitionEventSys.class);
- verify(callback).onPhraseRecognition(eq(handle), eventCaptor.capture(), eq(101));
- PhraseRecognitionEventSys lastEvent = eventCaptor.getValue();
- assertEquals(-1, lastEvent.halEventReceivedMillis);
- assertEquals(RecognitionStatus.ABORTED, lastEvent.phraseRecognitionEvent.common.status);
-
// Unload the model.
unloadModel(module, handle, hwHandle);
module.detach();
@@ -291,7 +277,7 @@
@Test
public void testRecognition() throws Exception {
ISoundTriggerCallback callback = createCallbackMock();
- ISoundTriggerModule module = mService.attach(0, callback);
+ ISoundTriggerModule module = mService.attach(0, callback, false);
// Load the model.
final int hwHandle = 7;
@@ -336,7 +322,7 @@
@Test
public void testPhraseRecognition() throws Exception {
ISoundTriggerCallback callback = createCallbackMock();
- ISoundTriggerModule module = mService.attach(0, callback);
+ ISoundTriggerModule module = mService.attach(0, callback, false);
// Load the model.
final int hwHandle = 7;
@@ -366,7 +352,7 @@
@Test
public void testForceRecognition() throws Exception {
ISoundTriggerCallback callback = createCallbackMock();
- ISoundTriggerModule module = mService.attach(0, callback);
+ ISoundTriggerModule module = mService.attach(0, callback, false);
// Load the model.
final int hwHandle = 17;
@@ -403,7 +389,7 @@
@Test
public void testForceRecognitionNotSupported() throws Exception {
ISoundTriggerCallback callback = createCallbackMock();
- ISoundTriggerModule module = mService.attach(0, callback);
+ ISoundTriggerModule module = mService.attach(0, callback, false);
// Load the model.
final int hwHandle = 17;
@@ -434,7 +420,7 @@
@Test
public void testForcePhraseRecognition() throws Exception {
ISoundTriggerCallback callback = createCallbackMock();
- ISoundTriggerModule module = mService.attach(0, callback);
+ ISoundTriggerModule module = mService.attach(0, callback, false);
// Load the model.
final int hwHandle = 17;
@@ -471,7 +457,7 @@
@Test
public void testForcePhraseRecognitionNotSupported() throws Exception {
ISoundTriggerCallback callback = createCallbackMock();
- ISoundTriggerModule module = mService.attach(0, callback);
+ ISoundTriggerModule module = mService.attach(0, callback, false);
// Load the model.
final int hwHandle = 17;
@@ -503,7 +489,7 @@
public void testAbortRecognition() throws Exception {
// Make sure the HAL doesn't support concurrent capture.
ISoundTriggerCallback callback = createCallbackMock();
- ISoundTriggerModule module = mService.attach(0, callback);
+ ISoundTriggerModule module = mService.attach(0, callback, false);
// Load the model.
final int hwHandle = 11;
@@ -535,7 +521,7 @@
public void testAbortPhraseRecognition() throws Exception {
// Make sure the HAL doesn't support concurrent capture.
ISoundTriggerCallback callback = createCallbackMock();
- ISoundTriggerModule module = mService.attach(0, callback);
+ ISoundTriggerModule module = mService.attach(0, callback, false);
// Load the model.
final int hwHandle = 11;
@@ -566,7 +552,7 @@
@Test
public void testParameterSupported() throws Exception {
ISoundTriggerCallback callback = createCallbackMock();
- ISoundTriggerModule module = mService.attach(0, callback);
+ ISoundTriggerModule module = mService.attach(0, callback, false);
final int hwHandle = 12;
int modelHandle = loadGenericModel(module, hwHandle).first;
@@ -588,7 +574,7 @@
@Test
public void testParameterNotSupported() throws Exception {
ISoundTriggerCallback callback = createCallbackMock();
- ISoundTriggerModule module = mService.attach(0, callback);
+ ISoundTriggerModule module = mService.attach(0, callback, false);
final int hwHandle = 13;
int modelHandle = loadGenericModel(module, hwHandle).first;
@@ -606,7 +592,7 @@
@Test
public void testGetParameter() throws Exception {
ISoundTriggerCallback callback = createCallbackMock();
- ISoundTriggerModule module = mService.attach(0, callback);
+ ISoundTriggerModule module = mService.attach(0, callback, false);
final int hwHandle = 14;
int modelHandle = loadGenericModel(module, hwHandle).first;
@@ -623,7 +609,7 @@
@Test
public void testSetParameter() throws Exception {
ISoundTriggerCallback callback = createCallbackMock();
- ISoundTriggerModule module = mService.attach(0, callback);
+ ISoundTriggerModule module = mService.attach(0, callback, false);
final int hwHandle = 17;
int modelHandle = loadGenericModel(module, hwHandle).first;
diff --git a/services/tests/voiceinteractiontests/src/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLoggingLatencyTest.java b/services/tests/voiceinteractiontests/src/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLoggingLatencyTest.java
index cc357d7..6a1674b 100644
--- a/services/tests/voiceinteractiontests/src/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLoggingLatencyTest.java
+++ b/services/tests/voiceinteractiontests/src/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLoggingLatencyTest.java
@@ -20,6 +20,7 @@
import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.verify;
@@ -37,7 +38,6 @@
import android.os.Process;
import android.os.RemoteException;
-import androidx.test.filters.FlakyTest;
import androidx.test.platform.app.InstrumentationRegistry;
import com.android.internal.util.FakeLatencyTracker;
@@ -91,18 +91,17 @@
}
@Test
- @FlakyTest(bugId = 275113847)
public void testSetUpAndTearDown() {
}
@Test
- @FlakyTest(bugId = 275113847)
public void testOnPhraseRecognitionStartsLatencyTrackerWithSuccessfulPhraseIdTrigger()
throws RemoteException {
ArgumentCaptor<ISoundTriggerCallback> soundTriggerCallbackCaptor = ArgumentCaptor.forClass(
ISoundTriggerCallback.class);
- mSoundTriggerMiddlewareLogging.attach(0, mISoundTriggerCallback);
- verify(mDelegateMiddleware).attach(anyInt(), soundTriggerCallbackCaptor.capture());
+ mSoundTriggerMiddlewareLogging.attach(0, mISoundTriggerCallback, false);
+ verify(mDelegateMiddleware).attach(anyInt(), soundTriggerCallbackCaptor.capture(),
+ anyBoolean());
triggerPhraseRecognitionEvent(soundTriggerCallbackCaptor.getValue(),
RecognitionStatus.SUCCESS, 100 /* keyphraseId */);
@@ -112,12 +111,12 @@
}
@Test
- @FlakyTest(bugId = 275113847)
public void testOnPhraseRecognitionRestartsActiveSession() throws RemoteException {
ArgumentCaptor<ISoundTriggerCallback> soundTriggerCallbackCaptor = ArgumentCaptor.forClass(
ISoundTriggerCallback.class);
- mSoundTriggerMiddlewareLogging.attach(0, mISoundTriggerCallback);
- verify(mDelegateMiddleware).attach(anyInt(), soundTriggerCallbackCaptor.capture());
+ mSoundTriggerMiddlewareLogging.attach(0, mISoundTriggerCallback, false);
+ verify(mDelegateMiddleware).attach(anyInt(), soundTriggerCallbackCaptor.capture(),
+ anyBoolean());
triggerPhraseRecognitionEvent(soundTriggerCallbackCaptor.getValue(),
RecognitionStatus.SUCCESS, 100 /* keyphraseId */);
@@ -132,13 +131,13 @@
}
@Test
- @FlakyTest(bugId = 275113847)
public void testOnPhraseRecognitionNeverStartsLatencyTrackerWithNonSuccessEvent()
throws RemoteException {
ArgumentCaptor<ISoundTriggerCallback> soundTriggerCallbackCaptor = ArgumentCaptor.forClass(
ISoundTriggerCallback.class);
- mSoundTriggerMiddlewareLogging.attach(0, mISoundTriggerCallback);
- verify(mDelegateMiddleware).attach(anyInt(), soundTriggerCallbackCaptor.capture());
+ mSoundTriggerMiddlewareLogging.attach(0, mISoundTriggerCallback, false);
+ verify(mDelegateMiddleware).attach(anyInt(), soundTriggerCallbackCaptor.capture(),
+ anyBoolean());
triggerPhraseRecognitionEvent(soundTriggerCallbackCaptor.getValue(),
RecognitionStatus.ABORTED, 100 /* keyphraseId */);
@@ -149,13 +148,13 @@
}
@Test
- @FlakyTest(bugId = 275113847)
public void testOnPhraseRecognitionNeverStartsLatencyTrackerWithNoKeyphraseId()
throws RemoteException {
ArgumentCaptor<ISoundTriggerCallback> soundTriggerCallbackCaptor = ArgumentCaptor.forClass(
ISoundTriggerCallback.class);
- mSoundTriggerMiddlewareLogging.attach(0, mISoundTriggerCallback);
- verify(mDelegateMiddleware).attach(anyInt(), soundTriggerCallbackCaptor.capture());
+ mSoundTriggerMiddlewareLogging.attach(0, mISoundTriggerCallback, false);
+ verify(mDelegateMiddleware).attach(anyInt(), soundTriggerCallbackCaptor.capture(),
+ anyBoolean());
triggerPhraseRecognitionEvent(soundTriggerCallbackCaptor.getValue(),
RecognitionStatus.SUCCESS);
diff --git a/services/tests/wmtests/src/com/android/server/policy/ModifierShortcutTests.java b/services/tests/wmtests/src/com/android/server/policy/ModifierShortcutTests.java
index bf6901e..9029bc4 100644
--- a/services/tests/wmtests/src/com/android/server/policy/ModifierShortcutTests.java
+++ b/services/tests/wmtests/src/com/android/server/policy/ModifierShortcutTests.java
@@ -18,6 +18,7 @@
import static android.view.KeyEvent.KEYCODE_ALT_LEFT;
import static android.view.KeyEvent.KEYCODE_B;
+import static android.view.KeyEvent.KEYCODE_BRIGHTNESS_DOWN;
import static android.view.KeyEvent.KEYCODE_C;
import static android.view.KeyEvent.KEYCODE_CTRL_LEFT;
import static android.view.KeyEvent.KEYCODE_E;
@@ -186,4 +187,19 @@
sendKeyCombination(new int[]{KEYCODE_META_LEFT, KEYCODE_ENTER}, 0);
mPhoneWindowManager.assertGoToHomescreen();
}
+
+ /**
+ * Sends a KEYCODE_BRIGHTNESS_DOWN event and validates the brightness is decreased as expected;
+ */
+ @Test
+ public void testKeyCodeBrightnessDown() {
+ float[] currentBrightness = new float[]{0.1f, 0.05f, 0.0f};
+ float[] newBrightness = new float[]{0.065738f, 0.0275134f, 0.0f};
+
+ for (int i = 0; i < currentBrightness.length; i++) {
+ mPhoneWindowManager.prepareBrightnessDecrease(currentBrightness[i]);
+ sendKey(KEYCODE_BRIGHTNESS_DOWN);
+ mPhoneWindowManager.verifyNewBrightness(newBrightness[i]);
+ }
+ }
}
diff --git a/services/tests/wmtests/src/com/android/server/policy/PhoneWindowManagerTests.java b/services/tests/wmtests/src/com/android/server/policy/PhoneWindowManagerTests.java
index fc24f5e..5363583 100644
--- a/services/tests/wmtests/src/com/android/server/policy/PhoneWindowManagerTests.java
+++ b/services/tests/wmtests/src/com/android/server/policy/PhoneWindowManagerTests.java
@@ -34,6 +34,7 @@
import androidx.test.filters.SmallTest;
+import com.android.server.pm.UserManagerInternal;
import com.android.server.wm.ActivityTaskManagerInternal;
import org.junit.After;
@@ -91,5 +92,6 @@
when(mMockActivityTaskManagerInternal.startHomeOnDisplay(
anyInt(), anyString(), anyInt(), anyBoolean(), anyBoolean())).thenReturn(false);
mPhoneWindowManager.mActivityTaskManagerInternal = mMockActivityTaskManagerInternal;
+ mPhoneWindowManager.mUserManagerInternal = mock(UserManagerInternal.class);
}
}
diff --git a/services/tests/wmtests/src/com/android/server/policy/TestPhoneWindowManager.java b/services/tests/wmtests/src/com/android/server/policy/TestPhoneWindowManager.java
index 3513557..d383024 100644
--- a/services/tests/wmtests/src/com/android/server/policy/TestPhoneWindowManager.java
+++ b/services/tests/wmtests/src/com/android/server/policy/TestPhoneWindowManager.java
@@ -78,6 +78,7 @@
import com.android.server.LocalServices;
import com.android.server.input.InputManagerInternal;
import com.android.server.inputmethod.InputMethodManagerInternal;
+import com.android.server.pm.UserManagerInternal;
import com.android.server.statusbar.StatusBarManagerInternal;
import com.android.server.vr.VrManagerInternal;
import com.android.server.wm.ActivityTaskManagerInternal;
@@ -88,6 +89,7 @@
import junit.framework.Assert;
+import org.mockito.AdditionalMatchers;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.MockSettings;
@@ -118,6 +120,7 @@
@Mock private PowerManager mPowerManager;
@Mock private WindowManagerPolicy.WindowManagerFuncs mWindowManagerFuncsImpl;
@Mock private InputMethodManagerInternal mInputMethodManagerInternal;
+ @Mock private UserManagerInternal mUserManagerInternal;
@Mock private AudioManagerInternal mAudioManagerInternal;
@Mock private SearchManager mSearchManager;
@@ -186,6 +189,8 @@
() -> LocalServices.getService(eq(DisplayManagerInternal.class)));
doReturn(mGestureLauncherService).when(
() -> LocalServices.getService(eq(GestureLauncherService.class)));
+ doReturn(mUserManagerInternal).when(
+ () -> LocalServices.getService(eq(UserManagerInternal.class)));
doReturn(null).when(() -> LocalServices.getService(eq(VrManagerInternal.class)));
doReturn(null).when(() -> LocalServices.getService(eq(AutofillManagerInternal.class)));
LocalServices.removeServiceForTest(InputMethodManagerInternal.class);
@@ -335,6 +340,20 @@
setPhoneCallIsInProgress();
}
+ void prepareBrightnessDecrease(float currentBrightness) {
+ doReturn(0.0f).when(mPowerManager)
+ .getBrightnessConstraint(PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_MINIMUM);
+ doReturn(1.0f).when(mPowerManager)
+ .getBrightnessConstraint(PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_MAXIMUM);
+ doReturn(currentBrightness).when(mDisplayManager)
+ .getBrightness(0);
+ }
+
+ void verifyNewBrightness(float newBrightness) {
+ verify(mDisplayManager).setBrightness(Mockito.eq(0),
+ AdditionalMatchers.eq(newBrightness, 0.001f));
+ }
+
void setPhoneCallIsInProgress() {
// Let device has an ongoing phone call.
doReturn(false).when(mTelecomManager).isRinging();
diff --git a/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java b/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java
index 7330411..340b591 100644
--- a/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java
@@ -53,6 +53,8 @@
import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_NO_MOVE_ANIMATION;
import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_UNRESTRICTED_GESTURE_EXCLUSION;
+import static android.view.WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN;
+import static android.view.WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN;
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION;
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG;
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
@@ -2827,6 +2829,26 @@
mDisplayContent.getKeepClearAreas());
}
+ @Test
+ public void testMayImeShowOnLaunchingActivity_negativeWhenSoftInputModeHidden() {
+ final ActivityRecord app = createActivityRecord(mDisplayContent);
+ final WindowState appWin = createWindow(null, TYPE_BASE_APPLICATION, app, "appWin");
+ createWindow(null, TYPE_APPLICATION_STARTING, app, "startingWin");
+ app.mStartingData = mock(SnapshotStartingData.class);
+ // Assume the app has shown IME before and warm launching with a snapshot window.
+ doReturn(true).when(app.mStartingData).hasImeSurface();
+
+ // Expect true when this IME focusable activity will show IME during launching.
+ assertTrue(WindowManager.LayoutParams.mayUseInputMethod(appWin.mAttrs.flags));
+ assertTrue(mDisplayContent.mayImeShowOnLaunchingActivity(app));
+
+ // Not expect IME will be shown during launching if the app's softInputMode is hidden.
+ appWin.mAttrs.softInputMode = SOFT_INPUT_STATE_ALWAYS_HIDDEN;
+ assertFalse(mDisplayContent.mayImeShowOnLaunchingActivity(app));
+ appWin.mAttrs.softInputMode = SOFT_INPUT_STATE_HIDDEN;
+ assertFalse(mDisplayContent.mayImeShowOnLaunchingActivity(app));
+ }
+
private void removeRootTaskTests(Runnable runnable) {
final TaskDisplayArea taskDisplayArea = mRootWindowContainer.getDefaultTaskDisplayArea();
final Task rootTask1 = taskDisplayArea.createRootTask(WINDOWING_MODE_FULLSCREEN,
diff --git a/services/tests/wmtests/src/com/android/server/wm/DisplayPolicyTests.java b/services/tests/wmtests/src/com/android/server/wm/DisplayPolicyTests.java
index 353a8ec..8ac6b0f 100644
--- a/services/tests/wmtests/src/com/android/server/wm/DisplayPolicyTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/DisplayPolicyTests.java
@@ -22,6 +22,7 @@
import static android.view.Surface.ROTATION_0;
import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
+import static android.view.ViewRootImpl.CLIENT_TRANSIENT;
import static android.view.WindowInsets.Type.navigationBars;
import static android.view.WindowInsetsController.APPEARANCE_LIGHT_NAVIGATION_BARS;
import static android.view.WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE;
@@ -63,6 +64,7 @@
import androidx.test.filters.SmallTest;
+import org.junit.Assume;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -388,6 +390,7 @@
@SetupWindows(addWindows = { W_ACTIVITY, W_NAVIGATION_BAR })
@Test
public void testCanSystemBarsBeShownByUser() {
+ Assume.assumeFalse(CLIENT_TRANSIENT);
((TestWindowManagerPolicy) mWm.mPolicy).mIsUserSetupComplete = true;
mAppWindow.mAttrs.insetsFlags.behavior = BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE;
mAppWindow.setRequestedVisibleTypes(0, navigationBars());
@@ -409,6 +412,7 @@
@UseTestDisplay(addWindows = { W_NAVIGATION_BAR })
@Test
public void testTransientBarsSuppressedOnDreams() {
+ Assume.assumeFalse(CLIENT_TRANSIENT);
final WindowState win = createDreamWindow();
((TestWindowManagerPolicy) mWm.mPolicy).mIsUserSetupComplete = true;
diff --git a/services/tests/wmtests/src/com/android/server/wm/DisplayRotationTests.java b/services/tests/wmtests/src/com/android/server/wm/DisplayRotationTests.java
index 8e80485..04e1d9c 100644
--- a/services/tests/wmtests/src/com/android/server/wm/DisplayRotationTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/DisplayRotationTests.java
@@ -940,8 +940,6 @@
@Test
public void testIgnoresDeskDockRotation_whenNoSensorAndLockedRespected() throws Exception {
mBuilder.setDeskDockRotation(Surface.ROTATION_270).build();
- when(mMockDisplayPolicy.isDeskDockRespectsNoSensorAndLockedWithoutAccelerometer())
- .thenReturn(true);
configureDisplayRotation(SCREEN_ORIENTATION_LANDSCAPE, false, false);
when(mMockDisplayPolicy.getDockMode()).thenReturn(Intent.EXTRA_DOCK_STATE_DESK);
diff --git a/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java b/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java
index de943d2..06bcbf3 100644
--- a/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java
@@ -179,44 +179,6 @@
}
@Test
- public void testActivityInHistoryAndNotVisibleIsNotUsedAsOpaqueForTranslucentActivities() {
- mWm.mLetterboxConfiguration.setTranslucentLetterboxingOverrideEnabled(true);
- setUpDisplaySizeWithApp(2000, 1000);
- prepareUnresizable(mActivity, SCREEN_ORIENTATION_PORTRAIT);
- mActivity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */);
- mActivity.nowVisible = false;
- // Translucent Activity
- final ActivityRecord translucentActivity = new ActivityBuilder(mAtm)
- .setLaunchedFromUid(mActivity.getUid())
- .setScreenOrientation(SCREEN_ORIENTATION_PORTRAIT)
- .build();
- doReturn(false).when(translucentActivity).fillsParent();
-
- mTask.addChild(translucentActivity);
-
- assertFalse(translucentActivity.mLetterboxUiController.hasInheritedLetterboxBehavior());
- }
-
- @Test
- public void testActivityInHistoryAndVisibleIsUsedAsOpaqueForTranslucentActivities() {
- mWm.mLetterboxConfiguration.setTranslucentLetterboxingOverrideEnabled(true);
- setUpDisplaySizeWithApp(2000, 1000);
- prepareUnresizable(mActivity, SCREEN_ORIENTATION_PORTRAIT);
- mActivity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */);
- mActivity.nowVisible = true;
- // Translucent Activity
- final ActivityRecord translucentActivity = new ActivityBuilder(mAtm)
- .setLaunchedFromUid(mActivity.getUid())
- .setScreenOrientation(SCREEN_ORIENTATION_PORTRAIT)
- .build();
- doReturn(false).when(translucentActivity).fillsParent();
-
- mTask.addChild(translucentActivity);
-
- assertTrue(translucentActivity.mLetterboxUiController.hasInheritedLetterboxBehavior());
- }
-
- @Test
public void testCleanLetterboxConfigListenerWhenTranslucentIsDestroyed() {
mWm.mLetterboxConfiguration.setTranslucentLetterboxingOverrideEnabled(true);
setUpDisplaySizeWithApp(2000, 1000);
@@ -240,7 +202,6 @@
public void testHorizontalReachabilityEnabledForTranslucentActivities() {
setUpDisplaySizeWithApp(2500, 1000);
mActivity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */);
- mActivity.nowVisible = true;
final LetterboxConfiguration config = mWm.mLetterboxConfiguration;
config.setTranslucentLetterboxingOverrideEnabled(true);
config.setLetterboxHorizontalPositionMultiplier(0.5f);
@@ -316,7 +277,6 @@
public void testVerticalReachabilityEnabledForTranslucentActivities() {
setUpDisplaySizeWithApp(1000, 2500);
mActivity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */);
- mActivity.nowVisible = true;
final LetterboxConfiguration config = mWm.mLetterboxConfiguration;
config.setTranslucentLetterboxingOverrideEnabled(true);
config.setLetterboxVerticalPositionMultiplier(0.5f);
@@ -389,13 +349,110 @@
}
@Test
+ public void testApplyStrategyAgainWhenOpaqueIsDestroyed() {
+ mWm.mLetterboxConfiguration.setTranslucentLetterboxingOverrideEnabled(true);
+ setUpDisplaySizeWithApp(2000, 1000);
+ prepareUnresizable(mActivity, SCREEN_ORIENTATION_PORTRAIT);
+ mActivity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */);
+ // Launch another opaque activity
+ final ActivityRecord opaqueActivity = new ActivityBuilder(mAtm)
+ .setLaunchedFromUid(mActivity.getUid())
+ .setScreenOrientation(SCREEN_ORIENTATION_PORTRAIT)
+ .build();
+ mTask.addChild(opaqueActivity);
+ // Transparent activity strategy not applied
+ assertFalse(opaqueActivity.mLetterboxUiController.hasInheritedLetterboxBehavior());
+
+ // Launch translucent Activity
+ final ActivityRecord translucentActivity = new ActivityBuilder(mAtm)
+ .setLaunchedFromUid(mActivity.getUid())
+ .setScreenOrientation(SCREEN_ORIENTATION_PORTRAIT)
+ .build();
+ doReturn(false).when(translucentActivity).fillsParent();
+ mTask.addChild(translucentActivity);
+ // Transparent strategy applied
+ assertTrue(translucentActivity.mLetterboxUiController.hasInheritedLetterboxBehavior());
+
+ spyOn(translucentActivity.mLetterboxUiController);
+ clearInvocations(translucentActivity.mLetterboxUiController);
+
+ // We destroy the first opaque activity
+ opaqueActivity.setState(DESTROYED, "testing");
+ opaqueActivity.removeImmediately();
+
+ // Check that updateInheritedLetterbox() is invoked again
+ verify(translucentActivity.mLetterboxUiController).updateInheritedLetterbox();
+ }
+
+ @Test
+ public void testResetOpaqueReferenceWhenOpaqueIsDestroyed() {
+ mWm.mLetterboxConfiguration.setTranslucentLetterboxingOverrideEnabled(true);
+ setUpDisplaySizeWithApp(2000, 1000);
+ prepareUnresizable(mActivity, SCREEN_ORIENTATION_PORTRAIT);
+ mActivity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */);
+
+ // Launch translucent Activity
+ final ActivityRecord translucentActivity = new ActivityBuilder(mAtm)
+ .setLaunchedFromUid(mActivity.getUid())
+ .setScreenOrientation(SCREEN_ORIENTATION_PORTRAIT)
+ .build();
+ doReturn(false).when(translucentActivity).fillsParent();
+ mTask.addChild(translucentActivity);
+ // Transparent strategy applied
+ assertTrue(translucentActivity.mLetterboxUiController.hasInheritedLetterboxBehavior());
+ assertNotNull(translucentActivity.mLetterboxUiController.mFirstOpaqueActivityBeneath);
+
+ spyOn(translucentActivity.mLetterboxUiController);
+ clearInvocations(translucentActivity.mLetterboxUiController);
+
+ // We destroy the first opaque activity
+ mActivity.setState(DESTROYED, "testing");
+ mActivity.removeImmediately();
+
+ // Check that updateInheritedLetterbox() is invoked again
+ verify(translucentActivity.mLetterboxUiController).updateInheritedLetterbox();
+ assertNull(translucentActivity.mLetterboxUiController.mFirstOpaqueActivityBeneath);
+ }
+
+ @Test
+ public void testNotApplyStrategyAgainWhenOpaqueIsNotDestroyed() {
+ mWm.mLetterboxConfiguration.setTranslucentLetterboxingOverrideEnabled(true);
+ setUpDisplaySizeWithApp(2000, 1000);
+ prepareUnresizable(mActivity, SCREEN_ORIENTATION_PORTRAIT);
+ mActivity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */);
+ // Launch another opaque activity
+ final ActivityRecord opaqueActivity = new ActivityBuilder(mAtm)
+ .setLaunchedFromUid(mActivity.getUid())
+ .setScreenOrientation(SCREEN_ORIENTATION_PORTRAIT)
+ .build();
+ mTask.addChild(opaqueActivity);
+ // Transparent activity strategy not applied
+ assertFalse(opaqueActivity.mLetterboxUiController.hasInheritedLetterboxBehavior());
+
+ // Launch translucent Activity
+ final ActivityRecord translucentActivity = new ActivityBuilder(mAtm)
+ .setLaunchedFromUid(mActivity.getUid())
+ .setScreenOrientation(SCREEN_ORIENTATION_PORTRAIT)
+ .build();
+ doReturn(false).when(translucentActivity).fillsParent();
+ mTask.addChild(translucentActivity);
+ // Transparent strategy applied
+ assertTrue(translucentActivity.mLetterboxUiController.hasInheritedLetterboxBehavior());
+
+ spyOn(translucentActivity.mLetterboxUiController);
+ clearInvocations(translucentActivity.mLetterboxUiController);
+
+ // Check that updateInheritedLetterbox() is invoked again
+ verify(translucentActivity.mLetterboxUiController, never()).updateInheritedLetterbox();
+ }
+
+ @Test
public void testApplyStrategyToTranslucentActivities() {
mWm.mLetterboxConfiguration.setTranslucentLetterboxingOverrideEnabled(true);
setUpDisplaySizeWithApp(2000, 1000);
prepareUnresizable(mActivity, 1.5f /* maxAspect */, SCREEN_ORIENTATION_PORTRAIT);
mActivity.info.setMinAspectRatio(1.2f);
mActivity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */);
- mActivity.nowVisible = true;
// Translucent Activity
final ActivityRecord translucentActivity = new ActivityBuilder(mAtm)
.setLaunchedFromUid(mActivity.getUid())
@@ -456,7 +513,6 @@
prepareUnresizable(mActivity, 1.5f /* maxAspect */, SCREEN_ORIENTATION_PORTRAIT);
mActivity.info.setMinAspectRatio(1.2f);
mActivity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */);
- mActivity.nowVisible = true;
// Translucent Activity
final ActivityRecord translucentActivity = new ActivityBuilder(mAtm)
.setLaunchedFromUid(mActivity.getUid())
@@ -550,7 +606,6 @@
true /* ignoreOrientationRequest */);
mActivity.mWmService.mLetterboxConfiguration.setLetterboxHorizontalPositionMultiplier(
1.0f /*letterboxVerticalPositionMultiplier*/);
- mActivity.nowVisible = true;
prepareUnresizable(mActivity, SCREEN_ORIENTATION_PORTRAIT);
// We launch a transparent activity
final ActivityRecord translucentActivity = new ActivityBuilder(mAtm)
@@ -583,7 +638,6 @@
mWm.mLetterboxConfiguration.setTranslucentLetterboxingOverrideEnabled(true);
setUpDisplaySizeWithApp(2800, 1400);
mActivity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */);
- mActivity.nowVisible = true;
prepareUnresizable(mActivity, -1f /* maxAspect */, SCREEN_ORIENTATION_PORTRAIT);
// Rotate to put activity in size compat mode.
rotateDisplay(mActivity.mDisplayContent, ROTATION_90);
diff --git a/services/tests/wmtests/src/com/android/server/wm/SyncEngineTests.java b/services/tests/wmtests/src/com/android/server/wm/SyncEngineTests.java
index a3a3684..5eebe74 100644
--- a/services/tests/wmtests/src/com/android/server/wm/SyncEngineTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/SyncEngineTests.java
@@ -26,6 +26,7 @@
import static com.android.server.wm.WindowContainer.POSITION_BOTTOM;
import static com.android.server.wm.WindowContainer.POSITION_TOP;
import static com.android.server.wm.WindowContainer.SYNC_STATE_NONE;
+import static com.android.server.wm.WindowContainer.SYNC_STATE_READY;
import static com.android.server.wm.WindowState.BLAST_TIMEOUT_DURATION;
import static org.junit.Assert.assertEquals;
@@ -38,7 +39,9 @@
import static org.mockito.Mockito.spy;
import android.platform.test.annotations.Presubmit;
+import android.util.MergedConfiguration;
import android.view.SurfaceControl;
+import android.window.ClientWindowFrames;
import androidx.test.filters.SmallTest;
@@ -306,6 +309,19 @@
assertEquals(SYNC_STATE_NONE, parentWC.mSyncState);
assertEquals(SYNC_STATE_NONE, topChildWC.mSyncState);
assertEquals(SYNC_STATE_NONE, botChildWC.mSyncState);
+
+ // If the appearance of window won't change after reparenting, its sync state can be kept.
+ final WindowState w = createWindow(null, TYPE_BASE_APPLICATION, "win");
+ parentWC.onRequestedOverrideConfigurationChanged(w.getConfiguration());
+ w.reparent(botChildWC, POSITION_TOP);
+ parentWC.prepareSync();
+ // Assume the window has drawn with the latest configuration.
+ w.fillClientWindowFramesAndConfiguration(new ClientWindowFrames(),
+ new MergedConfiguration(), true /* useLatestConfig */, true /* relayoutVisible */);
+ assertTrue(w.onSyncFinishedDrawing());
+ assertEquals(SYNC_STATE_READY, w.mSyncState);
+ w.reparent(topChildWC, POSITION_TOP);
+ assertEquals(SYNC_STATE_READY, w.mSyncState);
}
@Test
diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java
index 58bf184..d3f6818 100644
--- a/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java
@@ -67,7 +67,6 @@
import static org.mockito.Mockito.when;
import android.content.pm.ActivityInfo;
-import android.content.res.Resources;
import android.graphics.Point;
import android.graphics.Rect;
import android.hardware.display.VirtualDisplay;
@@ -515,12 +514,8 @@
@Test
public void testSetInTouchMode_instrumentedProcessGetPermissionToSwitchTouchMode() {
- // Disable global touch mode (config_perDisplayFocusEnabled set to true)
- Resources mockResources = mock(Resources.class);
- spyOn(mContext);
- when(mContext.getResources()).thenReturn(mockResources);
- doReturn(true).when(mockResources).getBoolean(
- com.android.internal.R.bool.config_perDisplayFocusEnabled);
+ // Enable global touch mode
+ mWm.mPerDisplayFocusEnabled = true;
// Get current touch mode state and setup WMS to run setInTouchMode
boolean currentTouchMode = mWm.isInTouchMode(DEFAULT_DISPLAY);
@@ -539,12 +534,8 @@
@Test
public void testSetInTouchMode_nonInstrumentedProcessDontGetPermissionToSwitchTouchMode() {
- // Disable global touch mode (config_perDisplayFocusEnabled set to true)
- Resources mockResources = mock(Resources.class);
- spyOn(mContext);
- when(mContext.getResources()).thenReturn(mockResources);
- doReturn(true).when(mockResources).getBoolean(
- com.android.internal.R.bool.config_perDisplayFocusEnabled);
+ // Enable global touch mode
+ mWm.mPerDisplayFocusEnabled = true;
// Get current touch mode state and setup WMS to run setInTouchMode
boolean currentTouchMode = mWm.isInTouchMode(DEFAULT_DISPLAY);
@@ -563,6 +554,9 @@
@Test
public void testSetInTouchMode_multiDisplay_globalTouchModeUpdate() {
+ // Disable global touch mode
+ mWm.mPerDisplayFocusEnabled = false;
+
// Create one extra display
final VirtualDisplay virtualDisplay = createVirtualDisplay(/* ownFocus= */ false);
final VirtualDisplay virtualDisplayOwnTouchMode =
@@ -570,17 +564,10 @@
final int numberOfDisplays = mWm.mRoot.mChildren.size();
assertThat(numberOfDisplays).isAtLeast(3);
final int numberOfGlobalTouchModeDisplays = (int) mWm.mRoot.mChildren.stream()
- .filter(d -> (d.getDisplay().getFlags() & FLAG_OWN_FOCUS) == 0)
- .count();
+ .filter(d -> (d.getDisplay().getFlags() & FLAG_OWN_FOCUS) == 0)
+ .count();
assertThat(numberOfGlobalTouchModeDisplays).isAtLeast(2);
- // Enable global touch mode (config_perDisplayFocusEnabled set to false)
- Resources mockResources = mock(Resources.class);
- spyOn(mContext);
- when(mContext.getResources()).thenReturn(mockResources);
- doReturn(false).when(mockResources).getBoolean(
- com.android.internal.R.bool.config_perDisplayFocusEnabled);
-
// Get current touch mode state and setup WMS to run setInTouchMode
boolean currentTouchMode = mWm.isInTouchMode(DEFAULT_DISPLAY);
int callingPid = Binder.getCallingPid();
@@ -598,18 +585,14 @@
@Test
public void testSetInTouchMode_multiDisplay_perDisplayFocus_singleDisplayTouchModeUpdate() {
+ // Enable global touch mode
+ mWm.mPerDisplayFocusEnabled = true;
+
// Create one extra display
final VirtualDisplay virtualDisplay = createVirtualDisplay(/* ownFocus= */ false);
final int numberOfDisplays = mWm.mRoot.mChildren.size();
assertThat(numberOfDisplays).isAtLeast(2);
- // Disable global touch mode (config_perDisplayFocusEnabled set to true)
- Resources mockResources = mock(Resources.class);
- spyOn(mContext);
- when(mContext.getResources()).thenReturn(mockResources);
- doReturn(true).when(mockResources).getBoolean(
- com.android.internal.R.bool.config_perDisplayFocusEnabled);
-
// Get current touch mode state and setup WMS to run setInTouchMode
boolean currentTouchMode = mWm.isInTouchMode(DEFAULT_DISPLAY);
int callingPid = Binder.getCallingPid();
@@ -628,18 +611,14 @@
@Test
public void testSetInTouchMode_multiDisplay_ownTouchMode_singleDisplayTouchModeUpdate() {
+ // Disable global touch mode
+ mWm.mPerDisplayFocusEnabled = false;
+
// Create one extra display
final VirtualDisplay virtualDisplay = createVirtualDisplay(/* ownFocus= */ true);
final int numberOfDisplays = mWm.mRoot.mChildren.size();
assertThat(numberOfDisplays).isAtLeast(2);
- // Enable global touch mode (config_perDisplayFocusEnabled set to false)
- Resources mockResources = mock(Resources.class);
- spyOn(mContext);
- when(mContext.getResources()).thenReturn(mockResources);
- doReturn(false).when(mockResources).getBoolean(
- com.android.internal.R.bool.config_perDisplayFocusEnabled);
-
// Get current touch mode state and setup WMS to run setInTouchMode
boolean currentTouchMode = mWm.isInTouchMode(DEFAULT_DISPLAY);
int callingPid = Binder.getCallingPid();
@@ -667,19 +646,14 @@
}
private void testSetInTouchModeOnAllDisplays(boolean perDisplayFocusEnabled) {
+ // Set global touch mode with the value passed as argument.
+ mWm.mPerDisplayFocusEnabled = perDisplayFocusEnabled;
+
// Create a couple of extra displays.
// setInTouchModeOnAllDisplays should ignore the ownFocus setting.
final VirtualDisplay virtualDisplay = createVirtualDisplay(/* ownFocus= */ false);
final VirtualDisplay virtualDisplayOwnFocus = createVirtualDisplay(/* ownFocus= */ true);
- // Enable or disable global touch mode (config_perDisplayFocusEnabled setting).
- // setInTouchModeOnAllDisplays should ignore this value.
- Resources mockResources = mock(Resources.class);
- spyOn(mContext);
- when(mContext.getResources()).thenReturn(mockResources);
- doReturn(perDisplayFocusEnabled).when(mockResources).getBoolean(
- com.android.internal.R.bool.config_perDisplayFocusEnabled);
-
int callingPid = Binder.getCallingPid();
int callingUid = Binder.getCallingUid();
doReturn(false).when(mWm).checkCallingPermission(anyString(), anyString(), anyBoolean());
diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java
index ee1afcf..0ddd31355 100644
--- a/services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java
@@ -1390,7 +1390,8 @@
private boolean mIsVisibleForImeInputTarget;
@Override
- public void onImeTargetOverlayVisibilityChanged(IBinder overlayWindowToken, boolean visible,
+ public void onImeTargetOverlayVisibilityChanged(IBinder overlayWindowToken,
+ @WindowManager.LayoutParams.WindowType int windowType, boolean visible,
boolean removed) {
mImeTargetToken = overlayWindowToken;
mIsVisibleForImeTargetOverlay = visible;
diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java b/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java
index a4cad5e..863523f 100644
--- a/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java
+++ b/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java
@@ -197,6 +197,8 @@
*/
private static boolean sOverridesCheckedTestDisplay;
+ private boolean mOriginalPerDisplayFocusEnabled;
+
@BeforeClass
public static void setUpOnceBase() {
AttributeCache.init(getInstrumentation().getTargetContext());
@@ -208,6 +210,7 @@
mSupervisor = mAtm.mTaskSupervisor;
mRootWindowContainer = mAtm.mRootWindowContainer;
mWm = mSystemServicesTestRule.getWindowManagerService();
+ mOriginalPerDisplayFocusEnabled = mWm.mPerDisplayFocusEnabled;
SystemServicesTestRule.checkHoldsLock(mWm.mGlobalLock);
mDefaultDisplay = mWm.mRoot.getDefaultDisplay();
@@ -279,6 +282,7 @@
if (mUseFakeSettingsProvider) {
FakeSettingsProvider.clearSettingsProvider();
}
+ mWm.mPerDisplayFocusEnabled = mOriginalPerDisplayFocusEnabled;
}
/**
diff --git a/services/usb/java/com/android/server/usb/UsbAlsaManager.java b/services/usb/java/com/android/server/usb/UsbAlsaManager.java
index 99881e1..fd0d540 100644
--- a/services/usb/java/com/android/server/usb/UsbAlsaManager.java
+++ b/services/usb/java/com/android/server/usb/UsbAlsaManager.java
@@ -89,6 +89,7 @@
private static final int USB_VENDORID_SONY = 0x054C;
private static final int USB_PRODUCTID_PS4CONTROLLER_ZCT1 = 0x05C4;
private static final int USB_PRODUCTID_PS4CONTROLLER_ZCT2 = 0x09CC;
+ private static final int USB_PRODUCTID_PS5CONTROLLER = 0x0CE6;
private static final int USB_DENYLIST_OUTPUT = 0x0001;
private static final int USB_DENYLIST_INPUT = 0x0002;
@@ -111,6 +112,9 @@
USB_DENYLIST_OUTPUT),
new DenyListEntry(USB_VENDORID_SONY,
USB_PRODUCTID_PS4CONTROLLER_ZCT2,
+ USB_DENYLIST_OUTPUT),
+ new DenyListEntry(USB_VENDORID_SONY,
+ USB_PRODUCTID_PS5CONTROLLER,
USB_DENYLIST_OUTPUT));
private static boolean isDeviceDenylisted(int vendorId, int productId, int flags) {
diff --git a/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerHelper.java b/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerHelper.java
index b4066ab..f1e1a5a 100644
--- a/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerHelper.java
+++ b/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerHelper.java
@@ -40,6 +40,7 @@
import android.os.Binder;
import android.os.DeadObjectException;
import android.os.Handler;
+import android.os.IBinder;
import android.os.Looper;
import android.os.Message;
import android.os.RemoteException;
@@ -118,6 +119,9 @@
@GuardedBy("mLock")
private SoundTriggerDeviceState mDeviceState = SoundTriggerDeviceState.DISABLE;
+ @GuardedBy("mLock")
+ private boolean mIsAppOpPermitted = true;
+
SoundTriggerHelper(Context context, EventLogger eventLogger,
@NonNull Function<SoundTrigger.StatusListener, SoundTriggerModule> moduleProvider,
int moduleId,
@@ -322,12 +326,31 @@
modelData.setRunInBatterySaverMode(runInBatterySaverMode);
modelData.setSoundModel(soundModel);
- if (!isRecognitionAllowedByDeviceState(modelData)) {
- return STATUS_OK;
+ if (isRecognitionAllowed(modelData)) {
+ int startRecoResult = updateRecognitionLocked(modelData,
+ false /* Don't notify for synchronous calls */);
+ if (startRecoResult == SoundTrigger.STATUS_OK) {
+ return startRecoResult;
+ } else if (startRecoResult != SoundTrigger.STATUS_BUSY) {
+ // If we are returning an unexpected error, don't mark the model as requested
+ modelData.setRequested(false);
+ return startRecoResult;
+ }
}
-
- return updateRecognitionLocked(modelData,
- false /* Don't notify for synchronous calls */);
+ // Either recognition isn't allowed by device state, or the module is busy.
+ // Dispatch a pause.
+ try {
+ if (callback != null) {
+ mEventLogger.enqueue(new SessionEvent(Type.PAUSE, modelData.getModelId()));
+ callback.onRecognitionPaused();
+ }
+ } catch (RemoteException e) {
+ mEventLogger.enqueue(new SessionEvent(
+ Type.PAUSE, modelData.getModelId(), "RemoteException")
+ .printLog(ALOGW, TAG));
+ forceStopAndUnloadModelLocked(modelData, e);
+ }
+ return STATUS_OK;
}
}
@@ -468,7 +491,7 @@
}
}
- if (unloadModel && (modelData.isModelLoaded() || modelData.isStopPending())) {
+ if (unloadModel && modelData.isModelLoaded()) {
Slog.d(TAG, "Unloading previously loaded stale model.");
if (mModule == null) {
return STATUS_ERROR;
@@ -593,6 +616,16 @@
}
}
+ public void onAppOpStateChanged(boolean isPermitted) {
+ synchronized (mLock) {
+ if (mIsAppOpPermitted == isPermitted) {
+ return;
+ }
+ mIsAppOpPermitted = isPermitted;
+ updateAllRecognitionsLocked();
+ }
+ }
+
public int getGenericModelState(UUID modelId) {
synchronized (mLock) {
MetricsLogger.count(mContext, "sth_get_generic_model_state", 1);
@@ -762,6 +795,7 @@
return event instanceof KeyphraseRecognitionEvent;
}
+ @GuardedBy("mLock")
private void onGenericRecognitionLocked(GenericRecognitionEvent event) {
MetricsLogger.count(mContext, "sth_generic_recognition_event", 1);
if (event.status != SoundTrigger.RECOGNITION_STATUS_SUCCESS
@@ -774,6 +808,10 @@
+ event.soundModelHandle);
return;
}
+ if (!Objects.equals(event.getToken(), model.getToken())) {
+ // Stale event, do nothing
+ return;
+ }
IRecognitionStatusCallback callback = model.getCallback();
if (callback == null) {
@@ -842,6 +880,7 @@
}
}
+ @GuardedBy("mLock")
private void onResourcesAvailableLocked() {
mEventLogger.enqueue(new SessionEvent(Type.RESOURCES_AVAILABLE, null));
updateAllRecognitionsLocked();
@@ -851,7 +890,11 @@
Slog.w(TAG, "Recognition aborted");
MetricsLogger.count(mContext, "sth_recognition_aborted", 1);
ModelData modelData = getModelDataForLocked(event.soundModelHandle);
- if (modelData != null && (modelData.isModelStarted() || modelData.isStopPending())) {
+ if (modelData != null && modelData.isModelStarted()) {
+ if (!Objects.equals(event.getToken(), modelData.getToken())) {
+ // Stale event, do nothing
+ return;
+ }
modelData.setStopped();
try {
IRecognitionStatusCallback callback = modelData.getCallback();
@@ -865,7 +908,6 @@
.printLog(ALOGW, TAG));
forceStopAndUnloadModelLocked(modelData, e);
}
- updateRecognitionLocked(modelData, true);
}
}
@@ -884,6 +926,7 @@
return keyphraseExtras[0].id;
}
+ @GuardedBy("mLock")
private void onKeyphraseRecognitionLocked(KeyphraseRecognitionEvent event) {
Slog.i(TAG, "Recognition success");
MetricsLogger.count(mContext, "sth_keyphrase_recognition_event", 1);
@@ -894,7 +937,10 @@
Slog.e(TAG, "Keyphase model data does not exist for ID:" + keyphraseId);
return;
}
-
+ if (!Objects.equals(event.getToken(), modelData.getToken())) {
+ // Stale event, do nothing
+ return;
+ }
if (modelData.getCallback() == null) {
Slog.w(TAG, "Received onRecognition event without callback for keyphrase model.");
return;
@@ -926,6 +972,7 @@
}
}
+ @GuardedBy("mLock")
private void updateAllRecognitionsLocked() {
// updateRecognitionLocked can possibly update the list of models
ArrayList<ModelData> modelDatas = new ArrayList<ModelData>(mModelDataMap.values());
@@ -934,9 +981,10 @@
}
}
+ @GuardedBy("mLock")
private int updateRecognitionLocked(ModelData model, boolean notifyClientOnError) {
- boolean shouldStartModel = model.isRequested() && isRecognitionAllowedByDeviceState(model);
- if (shouldStartModel == model.isModelStarted() || model.isStopPending()) {
+ boolean shouldStartModel = model.isRequested() && isRecognitionAllowed(model);
+ if (shouldStartModel == model.isModelStarted()) {
// No-op.
return STATUS_OK;
}
@@ -1041,10 +1089,7 @@
if (mModule == null) {
return;
}
- if (modelData.isStopPending()) {
- // No need to wait for the stop to be confirmed.
- modelData.setStopped();
- } else if (modelData.isModelStarted()) {
+ if (modelData.isModelStarted()) {
Slog.d(TAG, "Stopping previously started dangling model " + modelData.getHandle());
if (mModule.stopRecognition(modelData.getHandle()) == STATUS_OK) {
modelData.setStopped();
@@ -1157,7 +1202,10 @@
* @return True if recognition is allowed to run at this time. False if not.
*/
@GuardedBy("mLock")
- private boolean isRecognitionAllowedByDeviceState(ModelData modelData) {
+ private boolean isRecognitionAllowed(ModelData modelData) {
+ if (!mIsAppOpPermitted) {
+ return false;
+ }
return switch (mDeviceState) {
case DISABLE -> false;
case CRITICAL -> modelData.shouldRunInBatterySaverMode();
@@ -1168,6 +1216,7 @@
// A single routine that implements the start recognition logic for both generic and keyphrase
// models.
+ @GuardedBy("mLock")
private int startRecognitionLocked(ModelData modelData, boolean notifyClientOnError) {
IRecognitionStatusCallback callback = modelData.getCallback();
RecognitionConfig config = modelData.getRecognitionConfig();
@@ -1178,7 +1227,7 @@
return STATUS_ERROR;
}
- if (!isRecognitionAllowedByDeviceState(modelData)) {
+ if (!isRecognitionAllowed(modelData)) {
// Nothing to do here.
Slog.w(TAG, "startRecognition requested but not allowed.");
MetricsLogger.count(mContext, "sth_start_recognition_not_allowed", 1);
@@ -1188,7 +1237,12 @@
if (mModule == null) {
return STATUS_ERROR;
}
- int status = mModule.startRecognition(modelData.getHandle(), config);
+ int status = STATUS_OK;
+ try {
+ modelData.setToken(mModule.startRecognitionWithToken(modelData.getHandle(), config));
+ } catch (Exception e) {
+ status = SoundTrigger.handleException(e);
+ }
if (status != SoundTrigger.STATUS_OK) {
Slog.w(TAG, "startRecognition failed with " + status);
MetricsLogger.count(mContext, "sth_start_recognition_error", 1);
@@ -1256,7 +1310,7 @@
}
}
} else {
- modelData.setStopPending();
+ modelData.setStopped();
MetricsLogger.count(mContext, "sth_stop_recognition_success", 1);
// Notify of pause if needed.
if (notify) {
@@ -1303,9 +1357,6 @@
// Started implies model was successfully loaded and start was called.
static final int MODEL_STARTED = 2;
- // Model stop request has been sent. Waiting for an event to signal model being stopped.
- static final int MODEL_STOP_PENDING = 3;
-
// One of MODEL_NOTLOADED, MODEL_LOADED, MODEL_STARTED (which implies loaded).
private int mModelState;
private UUID mModelId;
@@ -1346,6 +1397,9 @@
// The SoundModel instance, one of KeyphraseSoundModel or GenericSoundModel.
private SoundModel mSoundModel = null;
+ // Token used to disambiguate recognition sessions.
+ private IBinder mRecognitionToken = null;
+
private ModelData(UUID modelId, int modelType) {
mModelId = modelId;
// Private constructor, since we require modelType to be one of TYPE_GENERIC,
@@ -1383,22 +1437,17 @@
return mModelState == MODEL_NOTLOADED;
}
- synchronized boolean isStopPending() {
- return mModelState == MODEL_STOP_PENDING;
- }
-
synchronized void setStarted() {
mModelState = MODEL_STARTED;
}
synchronized void setStopped() {
+ // If we are moving to the stopped state, we should clear out our
+ // startRecognition token
+ mRecognitionToken = null;
mModelState = MODEL_LOADED;
}
- synchronized void setStopPending() {
- mModelState = MODEL_STOP_PENDING;
- }
-
synchronized void setLoaded() {
mModelState = MODEL_LOADED;
}
@@ -1467,6 +1516,14 @@
return mSoundModel;
}
+ synchronized IBinder getToken() {
+ return mRecognitionToken;
+ }
+
+ synchronized void setToken(IBinder token) {
+ mRecognitionToken = token;
+ }
+
synchronized int getModelType() {
return mModelType;
}
diff --git a/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java b/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java
index 3151781..9fb5509 100644
--- a/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java
+++ b/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java
@@ -42,6 +42,7 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.ActivityThread;
+import android.app.AppOpsManager;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
@@ -99,6 +100,7 @@
import com.android.internal.annotations.GuardedBy;
import com.android.internal.app.ISoundTriggerService;
import com.android.internal.app.ISoundTriggerSession;
+import com.android.internal.util.DumpUtils;
import com.android.server.SoundTriggerInternal;
import com.android.server.SystemService;
import com.android.server.soundtrigger.SoundTriggerEvent.ServiceEvent;
@@ -110,6 +112,7 @@
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.function.Consumer;
import java.util.List;
import java.util.Set;
import java.util.Deque;
@@ -235,6 +238,8 @@
private final DeviceStateHandler mDeviceStateHandler;
private final Executor mDeviceStateHandlerExecutor = Executors.newSingleThreadExecutor();
private PhoneCallStateHandler mPhoneCallStateHandler;
+ private AppOpsManager mAppOpsManager;
+ private PackageManager mPackageManager;
public SoundTriggerService(Context context) {
super(context);
@@ -257,6 +262,8 @@
Slog.d(TAG, "onBootPhase: " + phase + " : " + isSafeMode());
if (PHASE_THIRD_PARTY_APPS_CAN_START == phase) {
mDbHelper = new SoundTriggerDbHelper(mContext);
+ mAppOpsManager = mContext.getSystemService(AppOpsManager.class);
+ mPackageManager = mContext.getPackageManager();
final PowerManager powerManager = mContext.getSystemService(PowerManager.class);
// Hook up power state listener
mContext.registerReceiver(
@@ -303,6 +310,10 @@
private SoundTriggerHelper newSoundTriggerHelper(
ModuleProperties moduleProperties, EventLogger eventLogger) {
+ return newSoundTriggerHelper(moduleProperties, eventLogger, false);
+ }
+ private SoundTriggerHelper newSoundTriggerHelper(
+ ModuleProperties moduleProperties, EventLogger eventLogger, boolean isTrusted) {
Identity middlemanIdentity = new Identity();
middlemanIdentity.packageName = ActivityThread.currentOpPackageName();
@@ -325,7 +336,7 @@
eventLogger,
(SoundTrigger.StatusListener statusListener) -> new SoundTriggerModule(
mMiddlewareService, moduleId, statusListener,
- Looper.getMainLooper(), middlemanIdentity, originatorIdentity),
+ Looper.getMainLooper(), middlemanIdentity, originatorIdentity, isTrusted),
moduleId,
() -> listUnderlyingModuleProperties(originatorIdentity)
);
@@ -344,6 +355,44 @@
}
}
+ class MyAppOpsListener implements AppOpsManager.OnOpChangedListener {
+ private final Identity mOriginatorIdentity;
+ private final Consumer<Boolean> mOnOpModeChanged;
+
+ MyAppOpsListener(Identity originatorIdentity, Consumer<Boolean> onOpModeChanged) {
+ mOriginatorIdentity = Objects.requireNonNull(originatorIdentity);
+ mOnOpModeChanged = Objects.requireNonNull(onOpModeChanged);
+ // Validate package name
+ try {
+ int uid = mPackageManager.getPackageUid(mOriginatorIdentity.packageName,
+ PackageManager.PackageInfoFlags.of(0));
+ if (uid != mOriginatorIdentity.uid) {
+ throw new SecurityException("Package name: " +
+ mOriginatorIdentity.packageName + "with uid: " + uid
+ + "attempted to spoof as: " + mOriginatorIdentity.uid);
+ }
+ } catch (PackageManager.NameNotFoundException e) {
+ throw new SecurityException("Package name not found: "
+ + mOriginatorIdentity.packageName);
+ }
+ }
+
+ @Override
+ public void onOpChanged(String op, String packageName) {
+ if (!Objects.equals(op, AppOpsManager.OPSTR_RECORD_AUDIO)) {
+ return;
+ }
+ final int mode = mAppOpsManager.checkOpNoThrow(
+ AppOpsManager.OPSTR_RECORD_AUDIO, mOriginatorIdentity.uid,
+ mOriginatorIdentity.packageName);
+ mOnOpModeChanged.accept(mode == AppOpsManager.MODE_ALLOWED);
+ }
+
+ void forceOpChangeRefresh() {
+ onOpChanged(AppOpsManager.OPSTR_RECORD_AUDIO, mOriginatorIdentity.packageName);
+ }
+ }
+
class SoundTriggerServiceStub extends ISoundTriggerService.Stub {
@Override
public ISoundTriggerSession attachAsOriginator(@NonNull Identity originatorIdentity,
@@ -413,7 +462,14 @@
}
@Override
+ public void setInPhoneCallState(boolean isInPhoneCall) {
+ Slog.i(TAG, "Overriding phone call state: " + isInPhoneCall);
+ mDeviceStateHandler.onPhoneCallStateChanged(isInPhoneCall);
+ }
+
+ @Override
public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
+ if (!DumpUtils.checkDumpPermission(mContext, TAG, pw)) return;
// Event loggers
pw.println("##Service-Wide logs:");
mServiceEventLogger.dump(pw, /* indent = */ " ");
@@ -451,6 +507,7 @@
private final Object mCallbacksLock = new Object();
private final TreeMap<UUID, IRecognitionStatusCallback> mCallbacks = new TreeMap<>();
private final EventLogger mEventLogger;
+ private final MyAppOpsListener mAppOpsListener;
SoundTriggerSessionStub(@NonNull IBinder client,
SoundTriggerHelper soundTriggerHelper, EventLogger eventLogger) {
@@ -467,6 +524,12 @@
}
mListener = (SoundTriggerDeviceState state)
-> mSoundTriggerHelper.onDeviceStateChanged(state);
+ mAppOpsListener = new MyAppOpsListener(mOriginatorIdentity,
+ mSoundTriggerHelper::onAppOpStateChanged);
+ mAppOpsListener.forceOpChangeRefresh();
+ mAppOpsManager.startWatchingMode(AppOpsManager.OPSTR_RECORD_AUDIO,
+ mOriginatorIdentity.packageName, AppOpsManager.WATCH_FOREGROUND_CHANGES,
+ mAppOpsListener);
mDeviceStateHandler.registerListener(mListener);
}
@@ -918,6 +981,9 @@
}
private void detach() {
+ if (mAppOpsListener != null) {
+ mAppOpsManager.stopWatchingMode(mAppOpsListener);
+ }
mDeviceStateHandler.unregisterListener(mListener);
mSoundTriggerHelper.detach();
detachSessionLogger(mEventLogger);
@@ -933,9 +999,8 @@
}
private void enforceDetectionPermissions(ComponentName detectionService) {
- PackageManager packageManager = mContext.getPackageManager();
String packageName = detectionService.getPackageName();
- if (packageManager.checkPermission(
+ if (mPackageManager.checkPermission(
Manifest.permission.CAPTURE_AUDIO_HOTWORD, packageName)
!= PackageManager.PERMISSION_GRANTED) {
throw new SecurityException(detectionService.getPackageName() + " does not have"
@@ -1623,6 +1688,7 @@
private final EventLogger mEventLogger;
private final Identity mOriginatorIdentity;
private final @NonNull DeviceStateListener mListener;
+ private final MyAppOpsListener mAppOpsListener;
private final SparseArray<UUID> mModelUuid = new SparseArray<>(1);
@@ -1643,6 +1709,12 @@
}
mListener = (SoundTriggerDeviceState state)
-> mSoundTriggerHelper.onDeviceStateChanged(state);
+ mAppOpsListener = new MyAppOpsListener(mOriginatorIdentity,
+ mSoundTriggerHelper::onAppOpStateChanged);
+ mAppOpsListener.forceOpChangeRefresh();
+ mAppOpsManager.startWatchingMode(AppOpsManager.OPSTR_RECORD_AUDIO,
+ mOriginatorIdentity.packageName, AppOpsManager.WATCH_FOREGROUND_CHANGES,
+ mAppOpsListener);
mDeviceStateHandler.registerListener(mListener);
}
@@ -1710,6 +1782,9 @@
}
private void detachInternal() {
+ if (mAppOpsListener != null) {
+ mAppOpsManager.stopWatchingMode(mAppOpsListener);
+ }
mEventLogger.enqueue(new SessionEvent(Type.DETACH, null));
detachSessionLogger(mEventLogger);
mDeviceStateHandler.unregisterListener(mListener);
@@ -1718,7 +1793,8 @@
}
@Override
- public Session attach(@NonNull IBinder client, ModuleProperties underlyingModule) {
+ public Session attach(@NonNull IBinder client, ModuleProperties underlyingModule,
+ boolean isTrusted) {
var identity = IdentityContext.getNonNull();
int sessionId = mSessionIdCounter.getAndIncrement();
mServiceEventLogger.enqueue(new ServiceEvent(
@@ -1727,7 +1803,7 @@
"LocalSoundTriggerEventLogger for package: " +
identity.packageName + "#" + sessionId);
- return new SessionImpl(newSoundTriggerHelper(underlyingModule, eventLogger),
+ return new SessionImpl(newSoundTriggerHelper(underlyingModule, eventLogger, isTrusted),
client, eventLogger, identity);
}
diff --git a/services/voiceinteraction/java/com/android/server/soundtrigger_middleware/ISoundTriggerMiddlewareInternal.java b/services/voiceinteraction/java/com/android/server/soundtrigger_middleware/ISoundTriggerMiddlewareInternal.java
index 60f89da..ca35b51 100644
--- a/services/voiceinteraction/java/com/android/server/soundtrigger_middleware/ISoundTriggerMiddlewareInternal.java
+++ b/services/voiceinteraction/java/com/android/server/soundtrigger_middleware/ISoundTriggerMiddlewareInternal.java
@@ -38,7 +38,10 @@
*
* listModules() must be called prior to calling this method and the provided handle must be
* one of the handles from the returned list.
+ * @param isTrusted - {@code true} if this service should not note AppOps for recognitions,
+ * and should delegate these checks to the **trusted** client.
*/
public ISoundTriggerModule attach(int handle,
- ISoundTriggerCallback callback);
+ ISoundTriggerCallback callback,
+ boolean isTrusted);
}
diff --git a/services/voiceinteraction/java/com/android/server/soundtrigger_middleware/SoundTriggerHalEnforcer.java b/services/voiceinteraction/java/com/android/server/soundtrigger_middleware/SoundTriggerHalEnforcer.java
index bac2466..c3e0a3c 100644
--- a/services/voiceinteraction/java/com/android/server/soundtrigger_middleware/SoundTriggerHalEnforcer.java
+++ b/services/voiceinteraction/java/com/android/server/soundtrigger_middleware/SoundTriggerHalEnforcer.java
@@ -256,7 +256,7 @@
public void recognitionCallback(int model, RecognitionEventSys event) {
synchronized (mModelStates) {
ModelState state = mModelStates.get(model);
- if (state == null || state == ModelState.INACTIVE) {
+ if (state == null) {
Log.wtfStack(TAG, "Unexpected recognition event for model: " + model);
reboot();
return;
@@ -282,7 +282,7 @@
public void phraseRecognitionCallback(int model, PhraseRecognitionEventSys event) {
synchronized (mModelStates) {
ModelState state = mModelStates.get(model);
- if (state == null || state == ModelState.INACTIVE) {
+ if (state == null) {
Log.wtfStack(TAG, "Unexpected recognition event for model: " + model);
reboot();
return;
diff --git a/services/voiceinteraction/java/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewareImpl.java b/services/voiceinteraction/java/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewareImpl.java
index c8c0f3d..3b800de 100644
--- a/services/voiceinteraction/java/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewareImpl.java
+++ b/services/voiceinteraction/java/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewareImpl.java
@@ -116,7 +116,8 @@
@Override
public @NonNull
- ISoundTriggerModule attach(int handle, @NonNull ISoundTriggerCallback callback) {
+ ISoundTriggerModule attach(int handle, @NonNull ISoundTriggerCallback callback,
+ boolean isTrusted) {
return mModules[handle].attach(callback);
}
}
diff --git a/services/voiceinteraction/java/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLogging.java b/services/voiceinteraction/java/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLogging.java
index 2ee4e3c..e3366f8 100644
--- a/services/voiceinteraction/java/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLogging.java
+++ b/services/voiceinteraction/java/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLogging.java
@@ -149,22 +149,22 @@
@Override
public @NonNull
- ISoundTriggerModule attach(int handle, ISoundTriggerCallback callback) {
+ ISoundTriggerModule attach(int handle, ISoundTriggerCallback callback, boolean isTrusted) {
try {
var originatorIdentity = IdentityContext.getNonNull();
String packageIdentification = originatorIdentity.packageName
- + mSessionCount.getAndIncrement();
+ + mSessionCount.getAndIncrement() + (isTrusted ? "trusted" : "");
ModuleLogging result = new ModuleLogging();
var eventLogger = new EventLogger(SESSION_MAX_EVENT_SIZE,
"Session logger for: " + packageIdentification);
var callbackWrapper = new CallbackLogging(callback, eventLogger, originatorIdentity);
- result.attach(mDelegate.attach(handle, callbackWrapper), eventLogger);
+ result.attach(mDelegate.attach(handle, callbackWrapper, isTrusted), eventLogger);
mServiceEventLogger.enqueue(ServiceEvent.createForReturn(
ServiceEvent.Type.ATTACH,
- packageIdentification, result, handle, callback)
+ packageIdentification, result, handle, callback, isTrusted)
.printLog(ALOGI, TAG));
mSessionEventLoggers.add(eventLogger);
@@ -241,13 +241,14 @@
}
@Override
- public void startRecognition(int modelHandle, RecognitionConfig config)
+ public IBinder startRecognition(int modelHandle, RecognitionConfig config)
throws RemoteException {
try {
- mDelegate.startRecognition(modelHandle, config);
- mEventLogger.enqueue(SessionEvent.createForVoid(
- START_RECOGNITION, modelHandle, config)
+ var result = mDelegate.startRecognition(modelHandle, config);
+ mEventLogger.enqueue(SessionEvent.createForReturn(
+ START_RECOGNITION, result, modelHandle, config)
.printLog(ALOGI, TAG));
+ return result;
} catch (Exception e) {
mEventLogger.enqueue(SessionEvent.createForException(
START_RECOGNITION, e, modelHandle, config)
diff --git a/services/voiceinteraction/java/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewarePermission.java b/services/voiceinteraction/java/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewarePermission.java
index 00b894e..2e641a2 100644
--- a/services/voiceinteraction/java/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewarePermission.java
+++ b/services/voiceinteraction/java/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewarePermission.java
@@ -85,11 +85,11 @@
@Override
public @NonNull
ISoundTriggerModule attach(int handle,
- @NonNull ISoundTriggerCallback callback) {
+ @NonNull ISoundTriggerCallback callback, boolean isTrusted) {
Identity identity = getIdentity();
enforcePermissionsForPreflight(identity);
- ModuleWrapper wrapper = new ModuleWrapper(identity, callback);
- return wrapper.attach(mDelegate.attach(handle, wrapper.getCallbackWrapper()));
+ ModuleWrapper wrapper = new ModuleWrapper(identity, callback, isTrusted);
+ return wrapper.attach(mDelegate.attach(handle, wrapper.getCallbackWrapper(), isTrusted));
}
// Override toString() in order to have the delegate's ID in it.
@@ -204,11 +204,14 @@
private ISoundTriggerModule mDelegate;
private final @NonNull Identity mOriginatorIdentity;
private final @NonNull CallbackWrapper mCallbackWrapper;
+ private final boolean mIsTrusted;
ModuleWrapper(@NonNull Identity originatorIdentity,
- @NonNull ISoundTriggerCallback callback) {
+ @NonNull ISoundTriggerCallback callback,
+ boolean isTrusted) {
mOriginatorIdentity = originatorIdentity;
mCallbackWrapper = new CallbackWrapper(callback);
+ mIsTrusted = isTrusted;
}
ModuleWrapper attach(@NonNull ISoundTriggerModule delegate) {
@@ -241,10 +244,10 @@
}
@Override
- public void startRecognition(int modelHandle, @NonNull RecognitionConfig config)
+ public IBinder startRecognition(int modelHandle, @NonNull RecognitionConfig config)
throws RemoteException {
enforcePermissions();
- mDelegate.startRecognition(modelHandle, config);
+ return mDelegate.startRecognition(modelHandle, config);
}
@Override
@@ -347,7 +350,11 @@
}
private void enforcePermissions(String reason) {
- enforcePermissionsForDataDelivery(mOriginatorIdentity, reason);
+ if (mIsTrusted) {
+ enforcePermissionsForPreflight(mOriginatorIdentity);
+ } else {
+ enforcePermissionsForDataDelivery(mOriginatorIdentity, reason);
+ }
}
}
}
diff --git a/services/voiceinteraction/java/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService.java b/services/voiceinteraction/java/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService.java
index 91e5466..9de2438 100644
--- a/services/voiceinteraction/java/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService.java
+++ b/services/voiceinteraction/java/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService.java
@@ -34,6 +34,7 @@
import android.media.soundtrigger_middleware.ISoundTriggerMiddlewareService;
import android.media.soundtrigger_middleware.ISoundTriggerModule;
import android.media.soundtrigger_middleware.SoundTriggerModuleDescriptor;
+import android.os.IBinder;
import android.os.RemoteException;
import com.android.server.SystemService;
@@ -104,17 +105,17 @@
public ISoundTriggerModule attachAsOriginator(int handle, Identity identity,
ISoundTriggerCallback callback) {
try (SafeCloseable ignored = establishIdentityDirect(Objects.requireNonNull(identity))) {
- return new ModuleService(mDelegate.attach(handle, callback));
+ return new ModuleService(mDelegate.attach(handle, callback, /* isTrusted= */ false));
}
}
@Override
public ISoundTriggerModule attachAsMiddleman(int handle, Identity middlemanIdentity,
- Identity originatorIdentity, ISoundTriggerCallback callback) {
+ Identity originatorIdentity, ISoundTriggerCallback callback, boolean isTrusted) {
try (SafeCloseable ignored = establishIdentityIndirect(
Objects.requireNonNull(middlemanIdentity),
Objects.requireNonNull(originatorIdentity))) {
- return new ModuleService(mDelegate.attach(handle, callback));
+ return new ModuleService(mDelegate.attach(handle, callback, isTrusted));
}
}
@@ -176,10 +177,10 @@
}
@Override
- public void startRecognition(int modelHandle, RecognitionConfig config)
+ public IBinder startRecognition(int modelHandle, RecognitionConfig config)
throws RemoteException {
try (SafeCloseable ignored = ClearCallingIdentityContext.create()) {
- mDelegate.startRecognition(modelHandle, config);
+ return mDelegate.startRecognition(modelHandle, config);
}
}
diff --git a/services/voiceinteraction/java/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation.java b/services/voiceinteraction/java/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation.java
index f208c03..7ec2d9f 100644
--- a/services/voiceinteraction/java/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation.java
+++ b/services/voiceinteraction/java/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation.java
@@ -191,7 +191,7 @@
@Override
public @NonNull ISoundTriggerModule attach(int handle,
- @NonNull ISoundTriggerCallback callback) {
+ @NonNull ISoundTriggerCallback callback, boolean isTrusted) {
// Input validation.
Objects.requireNonNull(callback);
Objects.requireNonNull(callback.asBinder());
@@ -209,7 +209,7 @@
// From here on, every exception isn't client's fault.
try {
Session session = new Session(handle, callback);
- session.attach(mDelegate.attach(handle, session.getCallbackWrapper()));
+ session.attach(mDelegate.attach(handle, session.getCallbackWrapper(), isTrusted));
return session;
} catch (Exception e) {
throw handleException(e);
@@ -265,13 +265,6 @@
/** Model is loaded, recognition is active. */
ACTIVE,
/**
- * Model is active as far as the client is concerned, but loaded as far as the
- * layers are concerned. This condition occurs when a recognition event that indicates
- * the recognition for this model arrived from the underlying layer, but had not been
- * delivered to the caller (most commonly, for permission reasons).
- */
- INTERCEPTED,
- /**
* Model has been preemptively unloaded by the HAL.
*/
PREEMPTED,
@@ -434,7 +427,7 @@
}
@Override
- public void startRecognition(int modelHandle, @NonNull RecognitionConfig config) {
+ public IBinder startRecognition(int modelHandle, @NonNull RecognitionConfig config) {
// Input validation.
ValidationUtil.validateRecognitionConfig(config);
@@ -458,9 +451,10 @@
// From here on, every exception isn't client's fault.
try {
- mDelegate.startRecognition(modelHandle, config);
+ var result = mDelegate.startRecognition(modelHandle, config);
modelState.config = config;
modelState.activityState = ModelState.Activity.ACTIVE;
+ return result;
} catch (Exception e) {
throw handleException(e);
}
@@ -482,18 +476,6 @@
throw new IllegalStateException("Invalid handle: " + modelHandle);
}
// stopRecognition is idempotent - no need to check model state.
-
- // From here on, every exception isn't client's fault.
- try {
- // If the activity state is INTERCEPTED, we skip delegating the command, but
- // still consider the call valid.
- if (modelState.activityState == ModelState.Activity.INTERCEPTED) {
- modelState.activityState = ModelState.Activity.LOADED;
- return;
- }
- } catch (Exception e) {
- throw handleException(e);
- }
}
// Calling the delegate's stop must be done without the lock.
@@ -517,27 +499,6 @@
}
}
- private void restartIfIntercepted(int modelHandle) {
- synchronized (SoundTriggerMiddlewareValidation.this) {
- // State validation.
- if (mState == ModuleStatus.DETACHED) {
- return;
- }
- ModelState modelState = mLoadedModels.get(modelHandle);
- if (modelState == null
- || modelState.activityState != ModelState.Activity.INTERCEPTED) {
- return;
- }
- try {
- mDelegate.startRecognition(modelHandle, modelState.config);
- modelState.activityState = ModelState.Activity.ACTIVE;
- Log.i(TAG, "Restarted intercepted model " + modelHandle);
- } catch (Exception e) {
- Log.i(TAG, "Failed to restart intercepted model " + modelHandle, e);
- }
- }
- }
-
@Override
public void forceRecognitionEvent(int modelHandle) {
// Input validation (always valid).
@@ -741,18 +702,7 @@
mCallback.onRecognition(modelHandle, event, captureSession);
} catch (Exception e) {
Log.w(TAG, "Client callback exception.", e);
- synchronized (SoundTriggerMiddlewareValidation.this) {
- ModelState modelState = mLoadedModels.get(modelHandle);
- if (event.recognitionEvent.status != RecognitionStatus.FORCED) {
- modelState.activityState = ModelState.Activity.INTERCEPTED;
- // If we failed to deliver an actual event to the client, they would
- // never know to restart it whenever circumstances change. Thus, we
- // restart it here. We do this from a separate thread to avoid any
- // race conditions.
- new Thread(() -> restartIfIntercepted(modelHandle)).start();
- }
- }
- }
+ }
}
@Override
@@ -770,18 +720,7 @@
mCallback.onPhraseRecognition(modelHandle, event, captureSession);
} catch (Exception e) {
Log.w(TAG, "Client callback exception.", e);
- synchronized (SoundTriggerMiddlewareValidation.this) {
- ModelState modelState = mLoadedModels.get(modelHandle);
- if (!event.phraseRecognitionEvent.common.recognitionStillActive) {
- modelState.activityState = ModelState.Activity.INTERCEPTED;
- // If we failed to deliver an actual event to the client, they would
- // never know to restart it whenever circumstances change. Thus, we
- // restart it here. We do this from a separate thread to avoid any
- // race conditions.
- new Thread(() -> restartIfIntercepted(modelHandle)).start();
- }
- }
- }
+ }
}
@Override
diff --git a/services/voiceinteraction/java/com/android/server/soundtrigger_middleware/SoundTriggerModule.java b/services/voiceinteraction/java/com/android/server/soundtrigger_middleware/SoundTriggerModule.java
index 84cec55..f70268e 100644
--- a/services/voiceinteraction/java/com/android/server/soundtrigger_middleware/SoundTriggerModule.java
+++ b/services/voiceinteraction/java/com/android/server/soundtrigger_middleware/SoundTriggerModule.java
@@ -23,7 +23,6 @@
import android.media.soundtrigger.Properties;
import android.media.soundtrigger.RecognitionConfig;
import android.media.soundtrigger.SoundModel;
-import android.media.soundtrigger.SoundModelType;
import android.media.soundtrigger.Status;
import android.media.soundtrigger_middleware.ISoundTriggerCallback;
import android.media.soundtrigger_middleware.ISoundTriggerModule;
@@ -304,10 +303,10 @@
}
@Override
- public void startRecognition(int modelHandle, @NonNull RecognitionConfig config) {
+ public IBinder startRecognition(int modelHandle, @NonNull RecognitionConfig config) {
synchronized (SoundTriggerModule.this) {
checkValid();
- mLoadedModels.get(modelHandle).startRecognition(config);
+ return mLoadedModels.get(modelHandle).startRecognition(config);
}
}
@@ -385,8 +384,9 @@
private class Model implements ISoundTriggerHal.ModelCallback {
public int mHandle;
private ModelState mState = ModelState.INIT;
- private int mType = SoundModelType.INVALID;
private SoundTriggerMiddlewareImpl.AudioSessionProvider.AudioSession mSession;
+ private IBinder mRecognitionToken = null;
+ private boolean mIsStopping = false;
private @NonNull
ModelState getState() {
@@ -402,7 +402,6 @@
SoundTriggerMiddlewareImpl.AudioSessionProvider.AudioSession audioSession) {
mSession = audioSession;
mHandle = mHalService.loadSoundModel(model, this);
- mType = SoundModelType.GENERIC;
setState(ModelState.LOADED);
mLoadedModels.put(mHandle, this);
return mHandle;
@@ -412,7 +411,7 @@
SoundTriggerMiddlewareImpl.AudioSessionProvider.AudioSession audioSession) {
mSession = audioSession;
mHandle = mHalService.loadPhraseSoundModel(model, this);
- mType = SoundModelType.KEYPHRASE;
+
setState(ModelState.LOADED);
mLoadedModels.put(mHandle, this);
return mHandle;
@@ -428,10 +427,15 @@
return mSession.mSessionHandle;
}
- private void startRecognition(@NonNull RecognitionConfig config) {
+ private IBinder startRecognition(@NonNull RecognitionConfig config) {
+ if (mIsStopping == true) {
+ throw new RecoverableException(Status.INTERNAL_ERROR, "Race occurred");
+ }
mHalService.startRecognition(mHandle, mSession.mDeviceHandle,
mSession.mIoHandle, config);
+ mRecognitionToken = new Binder();
setState(ModelState.ACTIVE);
+ return mRecognitionToken;
}
private void stopRecognition() {
@@ -440,35 +444,13 @@
// This call is idempotent in order to avoid races.
return;
}
+ mRecognitionToken = null;
+ mIsStopping = true;
}
- // This must be invoked outside the lock.
mHalService.stopRecognition(mHandle);
-
- // No more callbacks for this model after this point.
synchronized (SoundTriggerModule.this) {
- // Generate an abortion callback to the client if the model is still active.
- if (getState() == ModelState.ACTIVE) {
- if (mCallback != null) {
- try {
- switch (mType) {
- case SoundModelType.GENERIC:
- mCallback.onRecognition(mHandle, AidlUtil.newAbortEvent(),
- mSession.mSessionHandle);
- break;
- case SoundModelType.KEYPHRASE:
- mCallback.onPhraseRecognition(mHandle,
- AidlUtil.newAbortPhraseEvent(),
- mSession.mSessionHandle);
- break;
- default:
- throw new RuntimeException(
- "Unexpected model type: " + mType);
- }
- } catch (RemoteException e) {
- }
- }
- setState(ModelState.LOADED);
- }
+ mIsStopping = false;
+ setState(ModelState.LOADED);
}
}
@@ -502,8 +484,13 @@
@NonNull RecognitionEventSys event) {
ISoundTriggerCallback callback;
synchronized (SoundTriggerModule.this) {
+ if (mRecognitionToken == null) {
+ return;
+ }
+ event.token = mRecognitionToken;
if (!event.recognitionEvent.recognitionStillActive) {
setState(ModelState.LOADED);
+ mRecognitionToken = null;
}
callback = mCallback;
}
@@ -523,12 +510,16 @@
@NonNull PhraseRecognitionEventSys event) {
ISoundTriggerCallback callback;
synchronized (SoundTriggerModule.this) {
+ if (mRecognitionToken == null) {
+ return;
+ }
+ event.token = mRecognitionToken;
if (!event.phraseRecognitionEvent.common.recognitionStillActive) {
setState(ModelState.LOADED);
+ mRecognitionToken = null;
}
callback = mCallback;
}
-
// The callback must be invoked outside of the lock.
try {
if (callback != null) {
@@ -559,5 +550,4 @@
}
}
}
-
}
diff --git a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java
index 27f3fb3..423a81a 100644
--- a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java
+++ b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java
@@ -381,51 +381,21 @@
@NonNull Identity originatorIdentity, IBinder client,
ModuleProperties moduleProperties) {
Objects.requireNonNull(originatorIdentity);
- boolean forHotwordDetectionService;
+ boolean forHotwordDetectionService = false;
synchronized (VoiceInteractionManagerServiceStub.this) {
enforceIsCurrentVoiceInteractionService();
forHotwordDetectionService =
mImpl != null && mImpl.mHotwordDetectionConnection != null;
}
- IVoiceInteractionSoundTriggerSession session;
- if (forHotwordDetectionService) {
- // Use our own identity and handle the permission checks ourselves. This allows
- // properly checking/noting against the voice interactor or hotword detection
- // service as needed.
- if (HotwordDetectionConnection.DEBUG) {
- Slog.d(TAG, "Creating a SoundTriggerSession for a HotwordDetectionService");
- }
- originatorIdentity.uid = Binder.getCallingUid();
- originatorIdentity.pid = Binder.getCallingPid();
- session = new SoundTriggerSessionPermissionsDecorator(
- createSoundTriggerSessionForSelfIdentity(client, moduleProperties),
- mContext,
- originatorIdentity);
- } else {
- if (HotwordDetectionConnection.DEBUG) {
- Slog.d(TAG, "Creating a SoundTriggerSession");
- }
- try (SafeCloseable ignored = PermissionUtil.establishIdentityDirect(
- originatorIdentity)) {
- session = new SoundTriggerSession(mSoundTriggerInternal.attach(client,
- moduleProperties));
- }
+ if (HotwordDetectionConnection.DEBUG) {
+ Slog.d(TAG, "Creating a SoundTriggerSession, for HDS: "
+ + forHotwordDetectionService);
}
- return new SoundTriggerSessionBinderProxy(session);
- }
-
- private IVoiceInteractionSoundTriggerSession createSoundTriggerSessionForSelfIdentity(
- IBinder client, ModuleProperties moduleProperties) {
- Identity identity = new Identity();
- identity.uid = Process.myUid();
- identity.pid = Process.myPid();
- identity.packageName = ActivityThread.currentOpPackageName();
- return Binder.withCleanCallingIdentity(() -> {
- try (SafeCloseable ignored = IdentityContext.create(identity)) {
- return new SoundTriggerSession(
- mSoundTriggerInternal.attach(client, moduleProperties));
- }
- });
+ try (SafeCloseable ignored = PermissionUtil.establishIdentityDirect(
+ originatorIdentity)) {
+ return new SoundTriggerSession(mSoundTriggerInternal.attach(client,
+ moduleProperties, forHotwordDetectionService));
+ }
}
@Override
@@ -1700,11 +1670,7 @@
return null;
}
- /**
- * Implementation of SoundTriggerSession. Does not implement {@link #asBinder()} as it's
- * intended to be wrapped by an {@link IVoiceInteractionSoundTriggerSession.Stub} object.
- */
- private class SoundTriggerSession implements IVoiceInteractionSoundTriggerSession {
+ private class SoundTriggerSession extends IVoiceInteractionSoundTriggerSession.Stub {
final SoundTriggerInternal.Session mSession;
private IHotwordRecognitionStatusCallback mSessionExternalCallback;
private IRecognitionStatusCallback mSessionInternalCallback;
@@ -1851,12 +1817,6 @@
}
@Override
- public IBinder asBinder() {
- throw new UnsupportedOperationException(
- "This object isn't intended to be used as a Binder.");
- }
-
- @Override
public void detach() {
mSession.detach();
}
diff --git a/telecomm/java/android/telecom/CallStreamingService.java b/telecomm/java/android/telecom/CallStreamingService.java
index df48cd6..581cd7e 100644
--- a/telecomm/java/android/telecom/CallStreamingService.java
+++ b/telecomm/java/android/telecom/CallStreamingService.java
@@ -73,22 +73,26 @@
@Override
public void handleMessage(Message msg) {
if (mStreamingCallAdapter == null && msg.what != MSG_SET_STREAMING_CALL_ADAPTER) {
+ Log.i(this, "handleMessage: null adapter!");
return;
}
switch (msg.what) {
case MSG_SET_STREAMING_CALL_ADAPTER:
if (msg.obj != null) {
+ Log.i(this, "MSG_SET_STREAMING_CALL_ADAPTER");
mStreamingCallAdapter = new StreamingCallAdapter(
(IStreamingCallAdapter) msg.obj);
}
break;
case MSG_CALL_STREAMING_STARTED:
+ Log.i(this, "MSG_CALL_STREAMING_STARTED");
mCall = (StreamingCall) msg.obj;
mCall.setAdapter(mStreamingCallAdapter);
CallStreamingService.this.onCallStreamingStarted(mCall);
break;
case MSG_CALL_STREAMING_STOPPED:
+ Log.i(this, "MSG_CALL_STREAMING_STOPPED");
mCall = null;
mStreamingCallAdapter = null;
CallStreamingService.this.onCallStreamingStopped();
@@ -109,6 +113,7 @@
@Nullable
@Override
public IBinder onBind(@NonNull Intent intent) {
+ Log.i(this, "onBind");
return new CallStreamingServiceBinder();
}
@@ -117,12 +122,14 @@
@Override
public void setStreamingCallAdapter(IStreamingCallAdapter streamingCallAdapter)
throws RemoteException {
- mHandler.obtainMessage(MSG_SET_STREAMING_CALL_ADAPTER, mStreamingCallAdapter)
+ Log.i(this, "setCallStreamingAdapter");
+ mHandler.obtainMessage(MSG_SET_STREAMING_CALL_ADAPTER, streamingCallAdapter)
.sendToTarget();
}
@Override
public void onCallStreamingStarted(StreamingCall call) throws RemoteException {
+ Log.i(this, "onCallStreamingStarted");
mHandler.obtainMessage(MSG_CALL_STREAMING_STARTED, call).sendToTarget();
}
diff --git a/telecomm/java/android/telecom/DisconnectCause.java b/telecomm/java/android/telecom/DisconnectCause.java
index b003f59..331caa1 100644
--- a/telecomm/java/android/telecom/DisconnectCause.java
+++ b/telecomm/java/android/telecom/DisconnectCause.java
@@ -43,8 +43,8 @@
/** Disconnected because of a local user-initiated action, such as hanging up. */
public static final int LOCAL = TelecomProtoEnums.LOCAL; // = 2
/**
- * Disconnected because of a remote user-initiated action, such as the other party hanging up
- * up.
+ * Disconnected because the remote party hung up an ongoing call, or because an outgoing call
+ * was not answered by the remote party.
*/
public static final int REMOTE = TelecomProtoEnums.REMOTE; // = 3
/** Disconnected because it has been canceled. */
diff --git a/telecomm/java/android/telecom/StreamingCall.java b/telecomm/java/android/telecom/StreamingCall.java
index d4f4322..3319fc1 100644
--- a/telecomm/java/android/telecom/StreamingCall.java
+++ b/telecomm/java/android/telecom/StreamingCall.java
@@ -55,6 +55,12 @@
public static final int STATE_DISCONNECTED = 3;
/**
+ * The ID associated with this call. This is the same value as {@link CallControl#getCallId()}.
+ * @hide
+ */
+ public static final String EXTRA_CALL_ID = "android.telecom.extra.CALL_ID";
+
+ /**
* @hide
*/
private StreamingCall(@NonNull Parcel in) {
diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java
index c4a501d..2a6099a 100644
--- a/telephony/java/android/telephony/TelephonyManager.java
+++ b/telephony/java/android/telephony/TelephonyManager.java
@@ -13297,6 +13297,29 @@
}
/**
+ * Test API to verify carrier restriction status allow list i.e.
+ * packages/services/Telephony/assets/CarrierRestrictionOperatorDetails.json.
+ *
+ * @param pkgName : packaga name of the entry to verify
+ * @param carrierId : carrier Id of the entry
+ * @return {@code List<String>} : list of registered shaIds
+ * @hide
+ */
+ @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
+ public List<String> getShaIdFromAllowList(String pkgName, int carrierId) {
+ try {
+ ITelephony service = getITelephony();
+ if (service != null) {
+ return service.getShaIdFromAllowList(pkgName, carrierId);
+ }
+ } catch (RemoteException ex) {
+ Rlog.e(TAG, "getShaIdFromAllowList: RemoteException = " + ex);
+ throw ex.rethrowAsRuntimeException();
+ }
+ return Collections.EMPTY_LIST;
+ }
+
+ /**
* Used to enable or disable carrier data by the system based on carrier signalling or
* carrier privileged apps. Different from {@link #setDataEnabled(boolean)} which is linked to
* user settings, carrier data on/off won't affect user settings but will bypass the
diff --git a/telephony/java/android/telephony/satellite/SatelliteManager.java b/telephony/java/android/telephony/satellite/SatelliteManager.java
index fb46ff9..2021ac7 100644
--- a/telephony/java/android/telephony/satellite/SatelliteManager.java
+++ b/telephony/java/android/telephony/satellite/SatelliteManager.java
@@ -278,6 +278,11 @@
*/
public static final int SATELLITE_REQUEST_IN_PROGRESS = 21;
+ /**
+ * Satellite modem is currently busy due to which current request cannot be processed.
+ */
+ public static final int SATELLITE_MODEM_BUSY = 22;
+
/** @hide */
@IntDef(prefix = {"SATELLITE_"}, value = {
SATELLITE_ERROR_NONE,
@@ -301,7 +306,8 @@
SATELLITE_NOT_REACHABLE,
SATELLITE_NOT_AUTHORIZED,
SATELLITE_NOT_SUPPORTED,
- SATELLITE_REQUEST_IN_PROGRESS
+ SATELLITE_REQUEST_IN_PROGRESS,
+ SATELLITE_MODEM_BUSY
})
@Retention(RetentionPolicy.SOURCE)
public @interface SatelliteError {}
diff --git a/telephony/java/com/android/internal/telephony/ITelephony.aidl b/telephony/java/com/android/internal/telephony/ITelephony.aidl
index 21aad73..23f4217 100644
--- a/telephony/java/com/android/internal/telephony/ITelephony.aidl
+++ b/telephony/java/com/android/internal/telephony/ITelephony.aidl
@@ -3037,4 +3037,11 @@
* @return {@code true} if the timeout duration is set successfully, {@code false} otherwise.
*/
boolean setSatelliteDeviceAlignedTimeoutDuration(long timeoutMillis);
+
+ /**
+ * Test method to confirm the file contents are not altered.
+ */
+ @JavaPassthrough(annotation="@android.annotation.RequiresPermission("
+ + "android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE)")
+ List<String> getShaIdFromAllowList(String pkgName, int carrierId);
}
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/GestureHelper.java b/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/GestureHelper.java
index 6b24598..a8f1b3d 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/GestureHelper.java
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/GestureHelper.java
@@ -20,7 +20,6 @@
import android.app.Instrumentation;
import android.app.UiAutomation;
import android.os.SystemClock;
-import android.util.Log;
import android.view.InputDevice;
import android.view.InputEvent;
import android.view.MotionEvent;
@@ -33,7 +32,6 @@
* Injects gestures given an {@link Instrumentation} object.
*/
public class GestureHelper {
- private static final String TAG = GestureHelper.class.getSimpleName();
// Inserted after each motion event injection.
private static final int MOTION_EVENT_INJECTION_DELAY_MILLIS = 5;
@@ -210,9 +208,6 @@
for (int j = 0; j < coords.length; j++) {
coords[j].x += (endPoints[j].x - startPoints[j].x) / steps;
coords[j].y += (endPoints[j].y - startPoints[j].y) / steps;
-
- // TODO: remove logging once b/269505548 is resolved
- Log.d(TAG, "(" + coords[j].x + ", " + coords[j].y + ")");
}
eventTime = SystemClock.uptimeMillis();
diff --git a/tests/Internal/src/com/android/internal/app/AppLocaleCollectorTest.java b/tests/Internal/src/com/android/internal/app/AppLocaleCollectorTest.java
index b24ac3c..7d9a6a5 100644
--- a/tests/Internal/src/com/android/internal/app/AppLocaleCollectorTest.java
+++ b/tests/Internal/src/com/android/internal/app/AppLocaleCollectorTest.java
@@ -19,11 +19,14 @@
import static com.android.internal.app.AppLocaleStore.AppLocaleResult.LocaleStatus.GET_SUPPORTED_LANGUAGE_FROM_LOCAL_CONFIG;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.anyObject;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
+import android.os.LocaleList;
+
import androidx.test.InstrumentationRegistry;
import androidx.test.filters.SmallTest;
import androidx.test.runner.AndroidJUnit4;
@@ -62,6 +65,9 @@
private static final int CURRENT = LocaleInfo.SUGGESTION_TYPE_CURRENT;
private static final int SYSTEM = LocaleInfo.SUGGESTION_TYPE_SYSTEM_LANGUAGE;
private static final int OTHERAPP = LocaleInfo.SUGGESTION_TYPE_OTHER_APP_LANGUAGE;
+ private static final int IME = LocaleInfo.SUGGESTION_TYPE_IME_LANGUAGE;
+ private static final int SYSTEM_AVAILABLE =
+ LocaleInfo.SUGGESTION_TYPE_SYSTEM_AVAILABLE_LANGUAGE;
@Before
public void setUp() throws Exception {
@@ -78,6 +84,21 @@
}
@Test
+ public void testGetSystemCurrentLocales() {
+ LocaleList.setDefault(
+ LocaleList.forLanguageTags("en-US-u-mu-fahrenhe,ar-JO-u-mu-fahrenhe-nu-latn"));
+
+ List<LocaleStore.LocaleInfo> list =
+ mAppLocaleCollector.getSystemCurrentLocales();
+
+ LocaleList expected = LocaleList.forLanguageTags("en-US,ar-JO-u-nu-latn");
+ assertEquals(list.size(), expected.size());
+ for (LocaleStore.LocaleInfo info : list) {
+ assertTrue(expected.indexOf(info.getLocale()) != -1);
+ }
+ }
+
+ @Test
public void testGetSupportedLocaleList() {
doReturn(mAppCurrentLocale).when(mAppLocaleCollector).getAppCurrentLocale();
doReturn(mResult).when(mAppLocaleCollector).getAppSupportedLocales();
@@ -85,7 +106,8 @@
doReturn(mImeLocales).when(mAppLocaleCollector).getActiveImeLocales();
doReturn(mSystemSupportedLocales).when(mAppLocaleCollector).getSystemSupportedLocale(
anyObject(), eq(null), eq(true));
- doReturn(mSystemCurrentLocales).when(mAppLocaleCollector).getSystemCurrentLocale();
+ doReturn(mSystemCurrentLocales).when(
+ mAppLocaleCollector).getSystemCurrentLocales();
Set<LocaleInfo> result = mAppLocaleCollector.getSupportedLocaleList(null, true, false);
@@ -106,8 +128,10 @@
map.put("ko", NONE); // The locale App and system support.
map.put("en-AU", OTHERAPP); // The locale other App activates and current App supports.
map.put("en-CA", OTHERAPP); // The locale other App activates and current App supports.
- map.put("ja-JP", OTHERAPP); // The locale other App activates and current App supports.
- map.put("zh-Hant-TW", SIM); // The locale system activates.
+ map.put("en-IN", IME); // The locale IME supports.
+ map.put("ja-JP",
+ OTHERAPP | SYSTEM_AVAILABLE | IME); // The locale exists in OTHERAPP, SYSTEM and IME
+ map.put("zh-Hant-TW", SYSTEM_AVAILABLE); // The locale system activates.
map.put(createLocaleInfo("", SYSTEM).getId(), SYSTEM); // System language title
return map;
}
@@ -124,9 +148,10 @@
}
private List<LocaleInfo> initSystemCurrentLocales() {
- return List.of(createLocaleInfo("zh-Hant-TW", SIM),
+ return List.of(createLocaleInfo("zh-Hant-TW", SYSTEM_AVAILABLE),
+ createLocaleInfo("ja-JP", SYSTEM_AVAILABLE),
// will be filtered because current App activates this locale.
- createLocaleInfo("en-US", SIM));
+ createLocaleInfo("en-US", SYSTEM_AVAILABLE));
}
private Set<LocaleInfo> initAllAppActivatedLocales() {
@@ -141,9 +166,11 @@
private Set<LocaleInfo> initImeLocales() {
return Set.of(
// will be filtered because system activates zh-Hant-TW.
- createLocaleInfo("zh-TW", OTHERAPP),
+ createLocaleInfo("zh-TW", IME),
// will be filtered because current App's activats this locale.
- createLocaleInfo("en-US", OTHERAPP));
+ createLocaleInfo("en-US", IME),
+ createLocaleInfo("ja-JP", IME),
+ createLocaleInfo("en-IN", IME));
}
private HashSet<Locale> initAppSupportedLocale() {
diff --git a/tests/Internal/src/com/android/internal/app/LocaleStoreTest.java b/tests/Internal/src/com/android/internal/app/LocaleStoreTest.java
index 46ebfed..f656881 100644
--- a/tests/Internal/src/com/android/internal/app/LocaleStoreTest.java
+++ b/tests/Internal/src/com/android/internal/app/LocaleStoreTest.java
@@ -57,7 +57,7 @@
Set<String> expectedLanguageTag = Set.of("en-US", "zh-TW", "ja-JP");
assertEquals(localeSet.size(), expectedLanguageTag.size());
for (LocaleInfo info : localeSet) {
- assertEquals(info.mSuggestionFlags, LocaleInfo.SUGGESTION_TYPE_OTHER_APP_LANGUAGE);
+ assertEquals(info.mSuggestionFlags, LocaleInfo.SUGGESTION_TYPE_IME_LANGUAGE);
assertTrue(expectedLanguageTag.contains(info.getId()));
}
}
diff --git a/tests/SilkFX/res/layout/gainmap_metadata.xml b/tests/SilkFX/res/layout/gainmap_metadata.xml
index 0dabaca..4cc3e0c 100644
--- a/tests/SilkFX/res/layout/gainmap_metadata.xml
+++ b/tests/SilkFX/res/layout/gainmap_metadata.xml
@@ -21,8 +21,8 @@
android:layout_height="wrap_content">
<LinearLayout
- android:layout_width="350dp"
- android:layout_height="300dp"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:padding="8dp"
android:orientation="vertical"
diff --git a/tests/TrustTests/src/android/trust/test/UserUnlockRequestTest.kt b/tests/TrustTests/src/android/trust/test/UserUnlockRequestTest.kt
index 6a8752a..501b9d3 100644
--- a/tests/TrustTests/src/android/trust/test/UserUnlockRequestTest.kt
+++ b/tests/TrustTests/src/android/trust/test/UserUnlockRequestTest.kt
@@ -79,6 +79,16 @@
.isEqualTo(oldCount + 1)
}
+ @Test
+ fun reportUserMayRequestUnlock_differentUserId_doesNotPropagateToAgent() {
+ val oldCount = trustAgentRule.agent.onUserMayRequestUnlockCallCount
+ trustManager.reportUserMayRequestUnlock(userId + 1)
+ await()
+
+ assertThat(trustAgentRule.agent.onUserMayRequestUnlockCallCount)
+ .isEqualTo(oldCount)
+ }
+
companion object {
private const val TAG = "UserUnlockRequestTest"
private fun await() = Thread.sleep(250)
diff --git a/tools/aapt2/cmd/Link.h b/tools/aapt2/cmd/Link.h
index 2ce2167..1b1e93bd 100644
--- a/tools/aapt2/cmd/Link.h
+++ b/tools/aapt2/cmd/Link.h
@@ -209,6 +209,11 @@
AddOptionalFlag("--compile-sdk-version-name",
"Version name to inject into the AndroidManifest.xml if none is present.",
&options_.manifest_fixer_options.compile_sdk_version_codename);
+ AddOptionalSwitch(
+ "--no-compile-sdk-metadata",
+ "Suppresses output of compile SDK-related attributes in AndroidManifest.xml,\n"
+ "including android:compileSdkVersion and platformBuildVersion.",
+ &options_.manifest_fixer_options.no_compile_sdk_metadata);
AddOptionalFlagList("--fingerprint-prefix", "Fingerprint prefix to add to install constraints.",
&options_.manifest_fixer_options.fingerprint_prefixes);
AddOptionalSwitch("--shared-lib", "Generates a shared Android runtime library.",
diff --git a/tools/aapt2/link/ManifestFixer.cpp b/tools/aapt2/link/ManifestFixer.cpp
index 53f0abe..c4f6e70 100644
--- a/tools/aapt2/link/ManifestFixer.cpp
+++ b/tools/aapt2/link/ManifestFixer.cpp
@@ -719,7 +719,7 @@
root->InsertChild(0, std::move(uses_sdk));
}
- if (options_.compile_sdk_version) {
+ if (!options_.no_compile_sdk_metadata && options_.compile_sdk_version) {
xml::Attribute* attr = root->FindOrCreateAttribute(xml::kSchemaAndroid, "compileSdkVersion");
// Make sure we un-compile the value if it was set to something else.
@@ -731,10 +731,9 @@
// Make sure we un-compile the value if it was set to something else.
attr->compiled_value = {};
attr->value = options_.compile_sdk_version.value();
-
}
- if (options_.compile_sdk_version_codename) {
+ if (!options_.no_compile_sdk_metadata && options_.compile_sdk_version_codename) {
xml::Attribute* attr =
root->FindOrCreateAttribute(xml::kSchemaAndroid, "compileSdkVersionCodename");
diff --git a/tools/aapt2/link/ManifestFixer.h b/tools/aapt2/link/ManifestFixer.h
index 175ab6f..42938a4 100644
--- a/tools/aapt2/link/ManifestFixer.h
+++ b/tools/aapt2/link/ManifestFixer.h
@@ -67,11 +67,12 @@
std::optional<std::string> revision_code_default;
// The version of the framework being compiled against to set for 'android:compileSdkVersion' in
- // the <manifest> tag.
+ // the <manifest> tag. Not used if no_compile_sdk_metadata is set.
std::optional<std::string> compile_sdk_version;
// The version codename of the framework being compiled against to set for
- // 'android:compileSdkVersionCodename' in the <manifest> tag.
+ // 'android:compileSdkVersionCodename' in the <manifest> tag. Not used if no_compile_sdk_metadata
+ // is set.
std::optional<std::string> compile_sdk_version_codename;
// The fingerprint prefixes to be added to the <install-constraints> tag.
@@ -87,6 +88,9 @@
// Whether to replace the manifest version with the the command line version
bool replace_version = false;
+
+ // Whether to suppress `android:compileSdkVersion*` and `platformBuildVersion*` attributes.
+ bool no_compile_sdk_metadata = false;
};
// Verifies that the manifest is correctly formed and inserts defaults where specified with
diff --git a/tools/aapt2/link/ManifestFixer_test.cpp b/tools/aapt2/link/ManifestFixer_test.cpp
index 1b8f05b..6151a8e 100644
--- a/tools/aapt2/link/ManifestFixer_test.cpp
+++ b/tools/aapt2/link/ManifestFixer_test.cpp
@@ -892,6 +892,35 @@
EXPECT_THAT(attr->value, StrEq("P"));
}
+TEST_F(ManifestFixerTest, DoNotInsertCompileSdkVersions) {
+ std::string input = R"(<manifest package="com.pkg" />)";
+ ManifestFixerOptions options;
+ options.no_compile_sdk_metadata = true;
+ options.compile_sdk_version = {"28"};
+ options.compile_sdk_version_codename = {"P"};
+
+ std::unique_ptr<xml::XmlResource> manifest = VerifyWithOptions(input, options);
+ ASSERT_THAT(manifest, NotNull());
+
+ // There should be a declaration of kSchemaAndroid, even when the input
+ // didn't have one.
+ EXPECT_EQ(manifest->root->namespace_decls.size(), 1);
+ EXPECT_EQ(manifest->root->namespace_decls[0].prefix, "android");
+ EXPECT_EQ(manifest->root->namespace_decls[0].uri, xml::kSchemaAndroid);
+
+ xml::Attribute* attr = manifest->root->FindAttribute(xml::kSchemaAndroid, "compileSdkVersion");
+ ASSERT_THAT(attr, IsNull());
+
+ attr = manifest->root->FindAttribute(xml::kSchemaAndroid, "compileSdkVersionCodename");
+ ASSERT_THAT(attr, IsNull());
+
+ attr = manifest->root->FindAttribute("", "platformBuildVersionCode");
+ ASSERT_THAT(attr, IsNull());
+
+ attr = manifest->root->FindAttribute("", "platformBuildVersionName");
+ ASSERT_THAT(attr, IsNull());
+}
+
TEST_F(ManifestFixerTest, OverrideCompileSdkVersions) {
std::string input = R"(
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="android"
diff --git a/wifi/java/src/android/net/wifi/sharedconnectivity/app/KnownNetwork.java b/wifi/java/src/android/net/wifi/sharedconnectivity/app/KnownNetwork.java
index c390e42..33f4d46 100644
--- a/wifi/java/src/android/net/wifi/sharedconnectivity/app/KnownNetwork.java
+++ b/wifi/java/src/android/net/wifi/sharedconnectivity/app/KnownNetwork.java
@@ -275,7 +275,12 @@
dest.writeInt(mNetworkSource);
dest.writeString(mSsid);
dest.writeArraySet(mSecurityTypes);
- mNetworkProviderInfo.writeToParcel(dest, flags);
+ if (mNetworkProviderInfo != null) {
+ dest.writeBoolean(true);
+ mNetworkProviderInfo.writeToParcel(dest, flags);
+ } else {
+ dest.writeBoolean(false);
+ }
dest.writeBundle(mExtras);
}
@@ -286,9 +291,15 @@
*/
@NonNull
public static KnownNetwork readFromParcel(@NonNull Parcel in) {
- return new KnownNetwork(in.readInt(), in.readString(),
- (ArraySet<Integer>) in.readArraySet(null),
- NetworkProviderInfo.readFromParcel(in), in.readBundle());
+ int networkSource = in.readInt();
+ String mSsid = in.readString();
+ ArraySet<Integer> securityTypes = (ArraySet<Integer>) in.readArraySet(null);
+ if (in.readBoolean()) {
+ return new KnownNetwork(networkSource, mSsid, securityTypes,
+ NetworkProviderInfo.readFromParcel(in), in.readBundle());
+ }
+ return new KnownNetwork(networkSource, mSsid, securityTypes, null,
+ in.readBundle());
}
@NonNull
diff --git a/wifi/java/src/android/net/wifi/sharedconnectivity/app/SharedConnectivitySettingsState.java b/wifi/java/src/android/net/wifi/sharedconnectivity/app/SharedConnectivitySettingsState.java
index af3afa8..5ad3ede 100644
--- a/wifi/java/src/android/net/wifi/sharedconnectivity/app/SharedConnectivitySettingsState.java
+++ b/wifi/java/src/android/net/wifi/sharedconnectivity/app/SharedConnectivitySettingsState.java
@@ -161,7 +161,7 @@
@Override
public void writeToParcel(@NonNull Parcel dest, int flags) {
- mInstantTetherSettingsPendingIntent.writeToParcel(dest, 0);
+ PendingIntent.writePendingIntentOrNullToParcel(mInstantTetherSettingsPendingIntent, dest);
dest.writeBoolean(mInstantTetherEnabled);
dest.writeBundle(mExtras);
}
@@ -173,7 +173,7 @@
*/
@NonNull
public static SharedConnectivitySettingsState readFromParcel(@NonNull Parcel in) {
- PendingIntent pendingIntent = PendingIntent.CREATOR.createFromParcel(in);
+ PendingIntent pendingIntent = PendingIntent.readPendingIntentOrNullFromParcel(in);
boolean instantTetherEnabled = in.readBoolean();
Bundle extras = in.readBundle();
return new SharedConnectivitySettingsState(instantTetherEnabled, pendingIntent, extras);