Merge "Scale the leash for PIP User-started resizing." into rvc-dev
diff --git a/Android.bp b/Android.bp
index ce2729d..3f06ffd 100644
--- a/Android.bp
+++ b/Android.bp
@@ -239,6 +239,7 @@
":framework-sax-sources",
":framework-telecomm-sources",
":framework-telephony-common-sources",
+ ":framework-telephony-sources",
":framework-wifi-annotations",
":framework-wifi-non-updatable-sources",
":PacProcessor-aidl-sources",
@@ -285,7 +286,6 @@
":framework-permission-sources",
":framework-sdkextensions-sources",
":framework-statsd-sources",
- ":framework-telephony-sources",
":framework-tethering-srcs",
":framework-wifi-updatable-sources",
":updatable-media-srcs",
@@ -300,7 +300,6 @@
"framework-permission-stubs-module_libs_api",
"framework-sdkextensions-stubs-module_libs_api",
"framework-statsd-stubs-module_libs_api",
- "framework-telephony-stubs", // TODO: Update to module_libs_api when there is one.
"framework-tethering-stubs-module_libs_api",
"framework-wifi-stubs-module_libs_api",
],
@@ -523,9 +522,8 @@
defaults: ["framework-aidl-export-defaults"],
installable: false, // this lib is a build-only library
static_libs: [
+ "app-compat-annotations",
"framework-minus-apex",
- // TODO (b/147688669) should be removed
- "framework-telephony",
"framework-updatable-stubs-module_libs_api",
],
sdk_version: "core_platform",
@@ -565,7 +563,6 @@
installable: false,
plugins: [
- "unsupportedappusage-annotation-processor",
"compat-changeid-annotation-processor",
],
static_libs: [
@@ -1324,41 +1321,6 @@
libs: ["android_system_stubs_current"],
}
-java_library {
- name: "framework-telephony",
- srcs: [
- ":framework-telephony-sources",
- ":framework-telephony-shared-srcs",
- ],
- // TODO: change to framework-system-stub to build against system APIs.
- libs: [
- "framework-minus-apex",
- "unsupportedappusage",
- ],
- static_libs: [
- "libphonenumber-platform",
- "app-compat-annotations",
- ],
- sdk_version: "core_platform",
- aidl: {
- export_include_dirs: ["telephony/java"],
- include_dirs: [
- "frameworks/native/aidl/binder",
- "frameworks/native/aidl/gui",
- ]
- },
- jarjar_rules: ":framework-telephony-jarjar-rules",
- dxflags: [
- "--core-library",
- "--multi-dex",
- ],
- // This is to break the dependency from boot jars.
- dex_preopt: {
- enabled: false,
- },
- installable: true,
-}
-
filegroup {
// TODO (b/147690217): move to frameworks/base/telephony/common.
name: "framework-telephony-annotations",
diff --git a/Android.mk b/Android.mk
index beb09b9..aea0c95 100644
--- a/Android.mk
+++ b/Android.mk
@@ -77,12 +77,6 @@
# Run this for checkbuild
checkbuild: doc-comment-check-docs
-# ==== hiddenapi lists =======================================
-ifneq ($(UNSAFE_DISABLE_HIDDENAPI_FLAGS),true)
-$(call dist-for-goals,droidcore,$(INTERNAL_PLATFORM_HIDDENAPI_FLAGS))
-$(call dist-for-goals,droidcore,$(INTERNAL_PLATFORM_HIDDENAPI_GREYLIST_METADATA))
-endif # UNSAFE_DISABLE_HIDDENAPI_FLAGS
-
# Include subdirectory makefiles
# ============================================================
diff --git a/apex/Android.bp b/apex/Android.bp
index 1943940..88c43f9 100644
--- a/apex/Android.bp
+++ b/apex/Android.bp
@@ -26,8 +26,10 @@
"--hide Typo " +
"--hide UnavailableSymbol "
-// TODO: remove this server classes are cleaned up.
-mainline_stubs_args += "--hide-package com.android.server "
+// TODO: remove the hiding when server classes are cleaned up.
+mainline_framework_stubs_args =
+ mainline_stubs_args +
+ "--hide-package com.android.server "
priv_apps = " " +
"--show-annotation android.annotation.SystemApi\\(" +
@@ -39,9 +41,17 @@
"client=android.annotation.SystemApi.Client.MODULE_LIBRARIES" +
"\\) "
+mainline_service_stubs_args =
+ mainline_stubs_args +
+ "--show-annotation android.annotation.SystemApi\\(" +
+ "client=android.annotation.SystemApi.Client.SYSTEM_SERVER" +
+ "\\) " +
+ "--hide-annotation android.annotation.Hide " +
+ "--hide InternalClasses " // com.android.* classes are okay in this interface
+
stubs_defaults {
name: "framework-module-stubs-defaults-publicapi",
- args: mainline_stubs_args,
+ args: mainline_framework_stubs_args,
installable: false,
sdk_version: "current",
check_api: {
@@ -54,7 +64,7 @@
stubs_defaults {
name: "framework-module-stubs-defaults-systemapi",
- args: mainline_stubs_args + priv_apps,
+ args: mainline_framework_stubs_args + priv_apps,
libs: ["framework-annotations-lib"],
installable: false,
sdk_version: "system_current",
@@ -73,7 +83,7 @@
stubs_defaults {
name: "framework-module-api-defaults-module_libs_api",
- args: mainline_stubs_args + module_libs,
+ args: mainline_framework_stubs_args + module_libs,
libs: ["framework-annotations-lib"],
installable: false,
sdk_version: "module_current",
@@ -87,8 +97,26 @@
stubs_defaults {
name: "framework-module-stubs-defaults-module_libs_api",
- args: mainline_stubs_args + module_libs + priv_apps,
+ args: mainline_framework_stubs_args + module_libs + priv_apps,
libs: ["framework-annotations-lib"],
installable: false,
sdk_version: "module_current",
}
+
+stubs_defaults {
+ name: "service-module-stubs-srcs-defaults",
+ args: mainline_service_stubs_args,
+ installable: false,
+ check_api: {
+ current: {
+ api_file: "api/current.txt",
+ removed_api_file: "api/removed.txt",
+ },
+ },
+}
+
+// Empty for now, but a convenient place to add rules for all
+// module java_library system_server stub libs.
+java_defaults {
+ name: "service-module-stubs-defaults",
+}
diff --git a/apex/blobstore/framework/java/android/app/blob/BlobStoreManager.java b/apex/blobstore/framework/java/android/app/blob/BlobStoreManager.java
index c339351..cb87c6c 100644
--- a/apex/blobstore/framework/java/android/app/blob/BlobStoreManager.java
+++ b/apex/blobstore/framework/java/android/app/blob/BlobStoreManager.java
@@ -25,6 +25,7 @@
import android.annotation.SystemService;
import android.annotation.TestApi;
import android.content.Context;
+import android.os.LimitExceededException;
import android.os.ParcelFileDescriptor;
import android.os.ParcelableException;
import android.os.RemoteCallback;
@@ -167,6 +168,12 @@
* finalized (either committed or abandoned) within a reasonable period of
* time, typically about a week.
*
+ * <p> If an app is planning to acquire a lease on this data (using
+ * {@link #acquireLease(BlobHandle, int)} or one of it's other variants) after committing
+ * this data (using {@link Session#commit(Executor, Consumer)}), it is recommended that
+ * the app checks the remaining quota for acquiring a lease first using
+ * {@link #getRemainingLeaseQuotaBytes()} and can skip contributing this data if needed.
+ *
* @param blobHandle the {@link BlobHandle} identifier for which a new session
* needs to be created.
* @return positive, non-zero unique id that represents the created session.
@@ -294,8 +301,11 @@
* @throws IllegalArgumentException when {@code blobHandle} is invalid or
* if the {@code leaseExpiryTimeMillis} is greater than the
* {@link BlobHandle#getExpiryTimeMillis()}.
- * @throws IllegalStateException when a lease could not be acquired, such as when the
- * caller is trying to acquire too many leases.
+ * @throws LimitExceededException when a lease could not be acquired, such as when the
+ * caller is trying to acquire leases on too much data. Apps
+ * can avoid this by checking the remaining quota using
+ * {@link #getRemainingLeaseQuotaBytes()} before trying to
+ * acquire a lease.
*
* @see {@link #acquireLease(BlobHandle, int)}
* @see {@link #acquireLease(BlobHandle, CharSequence)}
@@ -307,6 +317,7 @@
mContext.getOpPackageName());
} catch (ParcelableException e) {
e.maybeRethrow(IOException.class);
+ e.maybeRethrow(LimitExceededException.class);
throw new RuntimeException(e);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
@@ -350,8 +361,11 @@
* @throws IllegalArgumentException when {@code blobHandle} is invalid or
* if the {@code leaseExpiryTimeMillis} is greater than the
* {@link BlobHandle#getExpiryTimeMillis()}.
- * @throws IllegalStateException when a lease could not be acquired, such as when the
- * caller is trying to acquire too many leases.
+ * @throws LimitExceededException when a lease could not be acquired, such as when the
+ * caller is trying to acquire leases on too much data. Apps
+ * can avoid this by checking the remaining quota using
+ * {@link #getRemainingLeaseQuotaBytes()} before trying to
+ * acquire a lease.
*
* @see {@link #acquireLease(BlobHandle, int, long)}
* @see {@link #acquireLease(BlobHandle, CharSequence)}
@@ -363,6 +377,7 @@
mContext.getOpPackageName());
} catch (ParcelableException e) {
e.maybeRethrow(IOException.class);
+ e.maybeRethrow(LimitExceededException.class);
throw new RuntimeException(e);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
@@ -399,8 +414,11 @@
* @throws SecurityException when the blob represented by the {@code blobHandle} does not
* exist or the caller does not have access to it.
* @throws IllegalArgumentException when {@code blobHandle} is invalid.
- * @throws IllegalStateException when a lease could not be acquired, such as when the
- * caller is trying to acquire too many leases.
+ * @throws LimitExceededException when a lease could not be acquired, such as when the
+ * caller is trying to acquire leases on too much data. Apps
+ * can avoid this by checking the remaining quota using
+ * {@link #getRemainingLeaseQuotaBytes()} before trying to
+ * acquire a lease.
*
* @see {@link #acquireLease(BlobHandle, int, long)}
* @see {@link #acquireLease(BlobHandle, CharSequence, long)}
@@ -443,8 +461,11 @@
* @throws SecurityException when the blob represented by the {@code blobHandle} does not
* exist or the caller does not have access to it.
* @throws IllegalArgumentException when {@code blobHandle} is invalid.
- * @throws IllegalStateException when a lease could not be acquired, such as when the
- * caller is trying to acquire too many leases.
+ * @throws LimitExceededException when a lease could not be acquired, such as when the
+ * caller is trying to acquire leases on too much data. Apps
+ * can avoid this by checking the remaining quota using
+ * {@link #getRemainingLeaseQuotaBytes()} before trying to
+ * acquire a lease.
*
* @see {@link #acquireLease(BlobHandle, int)}
* @see {@link #acquireLease(BlobHandle, CharSequence, long)}
@@ -478,6 +499,24 @@
}
/**
+ * Return the remaining quota size for acquiring a lease (in bytes) which indicates the
+ * remaining amount of data that an app can acquire a lease on before the System starts
+ * rejecting lease requests.
+ *
+ * If an app wants to acquire a lease on a blob but the remaining quota size is not sufficient,
+ * then it can try releasing leases on any older blobs which are not needed anymore.
+ *
+ * @return the remaining quota size for acquiring a lease.
+ */
+ public @IntRange(from = 0) long getRemainingLeaseQuotaBytes() {
+ try {
+ return mService.getRemainingLeaseQuotaBytes(mContext.getOpPackageName());
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
* Wait until any pending tasks (like persisting data to disk) have finished.
*
* @hide
diff --git a/apex/blobstore/framework/java/android/app/blob/IBlobStoreManager.aidl b/apex/blobstore/framework/java/android/app/blob/IBlobStoreManager.aidl
index 20c15ab..39a9fb4 100644
--- a/apex/blobstore/framework/java/android/app/blob/IBlobStoreManager.aidl
+++ b/apex/blobstore/framework/java/android/app/blob/IBlobStoreManager.aidl
@@ -31,6 +31,7 @@
void acquireLease(in BlobHandle handle, int descriptionResId, in CharSequence description,
long leaseTimeoutMillis, in String packageName);
void releaseLease(in BlobHandle handle, in String packageName);
+ long getRemainingLeaseQuotaBytes(String packageName);
void waitForIdle(in RemoteCallback callback);
diff --git a/apex/blobstore/service/java/com/android/server/blob/BlobStoreManagerService.java b/apex/blobstore/service/java/com/android/server/blob/BlobStoreManagerService.java
index 15c069f..65ccb99 100644
--- a/apex/blobstore/service/java/com/android/server/blob/BlobStoreManagerService.java
+++ b/apex/blobstore/service/java/com/android/server/blob/BlobStoreManagerService.java
@@ -62,7 +62,9 @@
import android.os.Binder;
import android.os.Handler;
import android.os.HandlerThread;
+import android.os.LimitExceededException;
import android.os.ParcelFileDescriptor;
+import android.os.ParcelableException;
import android.os.Process;
import android.os.RemoteCallback;
import android.os.SystemClock;
@@ -394,9 +396,9 @@
throw new IllegalArgumentException(
"Lease expiry cannot be later than blobs expiry time");
}
- if (getTotalUsageBytesLocked(callingUid, callingPackage)
- + blobMetadata.getSize() > BlobStoreConfig.getAppDataBytesLimit()) {
- throw new IllegalStateException("Total amount of data with an active lease"
+ if (blobMetadata.getSize()
+ > getRemainingLeaseQuotaBytesInternal(callingUid, callingPackage)) {
+ throw new LimitExceededException("Total amount of data with an active lease"
+ " is exceeding the max limit");
}
blobMetadata.addLeasee(callingPackage, callingUid,
@@ -445,6 +447,14 @@
}
}
+ private long getRemainingLeaseQuotaBytesInternal(int callingUid, String callingPackage) {
+ synchronized (mBlobsLock) {
+ final long remainingQuota = BlobStoreConfig.getAppDataBytesLimit()
+ - getTotalUsageBytesLocked(callingUid, callingPackage);
+ return remainingQuota > 0 ? remainingQuota : 0;
+ }
+ }
+
private List<BlobInfo> queryBlobsForUserInternal(int userId) {
final ArrayList<BlobInfo> blobInfos = new ArrayList<>();
synchronized (mBlobsLock) {
@@ -1302,6 +1312,8 @@
leaseExpiryTimeMillis, callingUid, packageName);
} catch (Resources.NotFoundException e) {
throw new IllegalArgumentException(e);
+ } catch (LimitExceededException e) {
+ throw new ParcelableException(e);
}
}
@@ -1324,6 +1336,14 @@
}
@Override
+ public long getRemainingLeaseQuotaBytes(@NonNull String packageName) {
+ final int callingUid = Binder.getCallingUid();
+ verifyCallingPackage(callingUid, packageName);
+
+ return getRemainingLeaseQuotaBytesInternal(callingUid, packageName);
+ }
+
+ @Override
public void waitForIdle(@NonNull RemoteCallback remoteCallback) {
Objects.requireNonNull(remoteCallback, "remoteCallback must not be null");
diff --git a/apex/permission/service/Android.bp b/apex/permission/service/Android.bp
index 8d66431..679c98d 100644
--- a/apex/permission/service/Android.bp
+++ b/apex/permission/service/Android.bp
@@ -35,3 +35,17 @@
],
installable: true,
}
+
+droidstubs {
+ name: "service-permission-stubs-srcs",
+ srcs: [ ":service-permission-sources" ],
+ defaults: ["service-module-stubs-srcs-defaults"],
+ visibility: ["//visibility:private"]
+}
+
+java_library {
+ name: "service-permission-stubs",
+ srcs: [":service-permission-stubs-srcs"],
+ defaults: ["service-module-stubs-defaults"],
+ visibility: ["//visibility:private"]
+}
diff --git a/apex/permission/service/api/current.txt b/apex/permission/service/api/current.txt
new file mode 100644
index 0000000..c76cc32
--- /dev/null
+++ b/apex/permission/service/api/current.txt
@@ -0,0 +1,46 @@
+// Signature format: 2.0
+package com.android.permission.persistence {
+
+ public interface RuntimePermissionsPersistence {
+ method @NonNull public static com.android.permission.persistence.RuntimePermissionsPersistence createInstance();
+ method public void deleteForUser(@NonNull android.os.UserHandle);
+ method @Nullable public com.android.permission.persistence.RuntimePermissionsState readForUser(@NonNull android.os.UserHandle);
+ method public void writeForUser(@NonNull com.android.permission.persistence.RuntimePermissionsState, @NonNull android.os.UserHandle);
+ }
+
+ public final class RuntimePermissionsState {
+ ctor public RuntimePermissionsState(int, @Nullable String, @NonNull java.util.Map<java.lang.String,java.util.List<com.android.permission.persistence.RuntimePermissionsState.PermissionState>>, @NonNull java.util.Map<java.lang.String,java.util.List<com.android.permission.persistence.RuntimePermissionsState.PermissionState>>);
+ method @Nullable public String getFingerprint();
+ method @NonNull public java.util.Map<java.lang.String,java.util.List<com.android.permission.persistence.RuntimePermissionsState.PermissionState>> getPackagePermissions();
+ method @NonNull public java.util.Map<java.lang.String,java.util.List<com.android.permission.persistence.RuntimePermissionsState.PermissionState>> getSharedUserPermissions();
+ method public int getVersion();
+ field public static final int NO_VERSION = -1; // 0xffffffff
+ }
+
+ public static final class RuntimePermissionsState.PermissionState {
+ ctor public RuntimePermissionsState.PermissionState(@NonNull String, boolean, int);
+ method public int getFlags();
+ method @NonNull public String getName();
+ method public boolean isGranted();
+ }
+
+}
+
+package com.android.role.persistence {
+
+ public interface RolesPersistence {
+ method @NonNull public static com.android.role.persistence.RolesPersistence createInstance();
+ method public void deleteForUser(@NonNull android.os.UserHandle);
+ method @Nullable public com.android.role.persistence.RolesState readForUser(@NonNull android.os.UserHandle);
+ method public void writeForUser(@NonNull com.android.role.persistence.RolesState, @NonNull android.os.UserHandle);
+ }
+
+ public final class RolesState {
+ ctor public RolesState(int, @Nullable String, @NonNull java.util.Map<java.lang.String,java.util.Set<java.lang.String>>);
+ method @Nullable public String getPackagesHash();
+ method @NonNull public java.util.Map<java.lang.String,java.util.Set<java.lang.String>> getRoles();
+ method public int getVersion();
+ }
+
+}
+
diff --git a/apex/permission/service/api/removed.txt b/apex/permission/service/api/removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/apex/permission/service/api/removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/apex/statsd/framework/test/TEST_MAPPING b/apex/statsd/TEST_MAPPING
similarity index 60%
rename from apex/statsd/framework/test/TEST_MAPPING
rename to apex/statsd/TEST_MAPPING
index f387958..93f1087 100644
--- a/apex/statsd/framework/test/TEST_MAPPING
+++ b/apex/statsd/TEST_MAPPING
@@ -2,6 +2,9 @@
"presubmit" : [
{
"name" : "FrameworkStatsdTest"
+ },
+ {
+ "name" : "LibStatsPullTests"
}
]
}
diff --git a/apex/statsd/aidl/android/os/IStatsd.aidl b/apex/statsd/aidl/android/os/IStatsd.aidl
index 445ae1d..d5b5949 100644
--- a/apex/statsd/aidl/android/os/IStatsd.aidl
+++ b/apex/statsd/aidl/android/os/IStatsd.aidl
@@ -196,7 +196,7 @@
*
* Enforces the REGISTER_STATS_PULL_ATOM permission.
*/
- oneway void registerNativePullAtomCallback(int atomTag, long coolDownNs, long timeoutNs,
+ oneway void registerNativePullAtomCallback(int atomTag, long coolDownMillis, long timeoutMillis,
in int[] additiveFields, IPullAtomCallback pullerCallback);
/**
diff --git a/apex/statsd/tests/libstatspull/TEST_MAPPING b/apex/statsd/tests/libstatspull/TEST_MAPPING
deleted file mode 100644
index 5e1178cf..0000000
--- a/apex/statsd/tests/libstatspull/TEST_MAPPING
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "presubmit" : [
- {
- "name" : "LibStatsPullTests"
- }
- ]
-}
\ No newline at end of file
diff --git a/apex/statsd/tests/libstatspull/jni/stats_pull_helper.cpp b/apex/statsd/tests/libstatspull/jni/stats_pull_helper.cpp
index 9e5aa95..166592d 100644
--- a/apex/statsd/tests/libstatspull/jni/stats_pull_helper.cpp
+++ b/apex/statsd/tests/libstatspull/jni/stats_pull_helper.cpp
@@ -44,30 +44,27 @@
return sPullReturnVal;
}
-extern "C"
-JNIEXPORT void JNICALL
-Java_com_android_internal_os_statsd_libstats_LibStatsPullTests_registerStatsPuller(
- JNIEnv* /*env*/, jobject /* this */, jint atomTag, jlong timeoutNs, jlong coolDownNs,
- jint pullRetVal, jlong latencyMillis, int atomsPerPull)
-{
+extern "C" JNIEXPORT void JNICALL
+Java_com_android_internal_os_statsd_libstats_LibStatsPullTests_setStatsPuller(
+ JNIEnv* /*env*/, jobject /* this */, jint atomTag, jlong timeoutMillis,
+ jlong coolDownMillis, jint pullRetVal, jlong latencyMillis, int atomsPerPull) {
sAtomTag = atomTag;
sPullReturnVal = pullRetVal;
sLatencyMillis = latencyMillis;
sAtomsPerPull = atomsPerPull;
sNumPulls = 0;
AStatsManager_PullAtomMetadata* metadata = AStatsManager_PullAtomMetadata_obtain();
- AStatsManager_PullAtomMetadata_setCoolDownNs(metadata, coolDownNs);
- AStatsManager_PullAtomMetadata_setTimeoutNs(metadata, timeoutNs);
+ AStatsManager_PullAtomMetadata_setCoolDownMillis(metadata, coolDownMillis);
+ AStatsManager_PullAtomMetadata_setTimeoutMillis(metadata, timeoutMillis);
- AStatsManager_registerPullAtomCallback(sAtomTag, &pullAtomCallback, metadata, nullptr);
+ AStatsManager_setPullAtomCallback(sAtomTag, metadata, &pullAtomCallback, nullptr);
AStatsManager_PullAtomMetadata_release(metadata);
}
-extern "C"
-JNIEXPORT void JNICALL
-Java_com_android_internal_os_statsd_libstats_LibStatsPullTests_unregisterStatsPuller(
- JNIEnv* /*env*/, jobject /* this */, jint /*atomTag*/)
-{
- AStatsManager_unregisterPullAtomCallback(sAtomTag);
+extern "C" JNIEXPORT void JNICALL
+Java_com_android_internal_os_statsd_libstats_LibStatsPullTests_clearStatsPuller(JNIEnv* /*env*/,
+ jobject /* this */,
+ jint /*atomTag*/) {
+ AStatsManager_clearPullAtomCallback(sAtomTag);
}
} // namespace
diff --git a/apex/statsd/tests/libstatspull/src/com/android/internal/os/statsd/libstats/LibStatsPullTests.java b/apex/statsd/tests/libstatspull/src/com/android/internal/os/statsd/libstats/LibStatsPullTests.java
index d4e51e0..3f199e8 100644
--- a/apex/statsd/tests/libstatspull/src/com/android/internal/os/statsd/libstats/LibStatsPullTests.java
+++ b/apex/statsd/tests/libstatspull/src/com/android/internal/os/statsd/libstats/LibStatsPullTests.java
@@ -58,8 +58,8 @@
private static int sPullReturnValue;
private static long sConfigId;
private static long sPullLatencyMillis;
- private static long sPullTimeoutNs;
- private static long sCoolDownNs;
+ private static long sPullTimeoutMillis;
+ private static long sCoolDownMillis;
private static int sAtomsPerPull;
static {
@@ -75,8 +75,8 @@
assertThat(InstrumentationRegistry.getInstrumentation()).isNotNull();
sPullReturnValue = StatsManager.PULL_SUCCESS;
sPullLatencyMillis = 0;
- sPullTimeoutNs = 10_000_000_000L;
- sCoolDownNs = 1_000_000_000L;
+ sPullTimeoutMillis = 10_000L;
+ sCoolDownMillis = 1_000L;
sAtomsPerPull = 1;
}
@@ -85,7 +85,7 @@
*/
@After
public void tearDown() throws Exception {
- unregisterStatsPuller(PULL_ATOM_TAG);
+ clearStatsPuller(PULL_ATOM_TAG);
StatsManager statsManager = (StatsManager) mContext.getSystemService(
Context.STATS_MANAGER);
statsManager.removeConfig(sConfigId);
@@ -102,14 +102,14 @@
createAndAddConfigToStatsd(statsManager);
// Add the puller.
- registerStatsPuller(PULL_ATOM_TAG, sPullTimeoutNs, sCoolDownNs, sPullReturnValue,
+ setStatsPuller(PULL_ATOM_TAG, sPullTimeoutMillis, sCoolDownMillis, sPullReturnValue,
sPullLatencyMillis, sAtomsPerPull);
Thread.sleep(SHORT_SLEEP_MILLIS);
StatsLog.logStart(APP_BREADCRUMB_LABEL);
// Let the current bucket finish.
Thread.sleep(LONG_SLEEP_MILLIS);
List<Atom> data = StatsConfigUtils.getGaugeMetricDataList(statsManager, sConfigId);
- unregisterStatsPuller(PULL_ATOM_TAG);
+ clearStatsPuller(PULL_ATOM_TAG);
assertThat(data.size()).isEqualTo(1);
TestAtoms.PullCallbackAtomWrapper atomWrapper = null;
try {
@@ -135,14 +135,14 @@
createAndAddConfigToStatsd(statsManager);
sPullReturnValue = StatsManager.PULL_SKIP;
// Add the puller.
- registerStatsPuller(PULL_ATOM_TAG, sPullTimeoutNs, sCoolDownNs, sPullReturnValue,
+ setStatsPuller(PULL_ATOM_TAG, sPullTimeoutMillis, sCoolDownMillis, sPullReturnValue,
sPullLatencyMillis, sAtomsPerPull);
Thread.sleep(SHORT_SLEEP_MILLIS);
StatsLog.logStart(APP_BREADCRUMB_LABEL);
// Let the current bucket finish.
Thread.sleep(LONG_SLEEP_MILLIS);
List<Atom> data = StatsConfigUtils.getGaugeMetricDataList(statsManager, sConfigId);
- unregisterStatsPuller(PULL_ATOM_TAG);
+ clearStatsPuller(PULL_ATOM_TAG);
assertThat(data.size()).isEqualTo(0);
}
@@ -157,17 +157,17 @@
// The puller will sleep for 1.5 sec.
sPullLatencyMillis = 1_500;
// 1 second timeout
- sPullTimeoutNs = 1_000_000_000;
+ sPullTimeoutMillis = 1_000;
// Add the puller.
- registerStatsPuller(PULL_ATOM_TAG, sPullTimeoutNs, sCoolDownNs, sPullReturnValue,
+ setStatsPuller(PULL_ATOM_TAG, sPullTimeoutMillis, sCoolDownMillis, sPullReturnValue,
sPullLatencyMillis, sAtomsPerPull);
Thread.sleep(SHORT_SLEEP_MILLIS);
StatsLog.logStart(APP_BREADCRUMB_LABEL);
// Let the current bucket finish and the pull timeout.
Thread.sleep(sPullLatencyMillis * 2);
List<Atom> data = StatsConfigUtils.getGaugeMetricDataList(statsManager, sConfigId);
- unregisterStatsPuller(PULL_ATOM_TAG);
+ clearStatsPuller(PULL_ATOM_TAG);
assertThat(data.size()).isEqualTo(0);
}
@@ -181,9 +181,9 @@
createAndAddConfigToStatsd(statsManager);
// Set the cooldown to 10 seconds
- sCoolDownNs = 10_000_000_000L;
+ sCoolDownMillis = 10_000L;
// Add the puller.
- registerStatsPuller(PULL_ATOM_TAG, sPullTimeoutNs, sCoolDownNs, sPullReturnValue,
+ setStatsPuller(PULL_ATOM_TAG, sPullTimeoutMillis, sCoolDownMillis, sPullReturnValue,
sPullLatencyMillis, sAtomsPerPull);
Thread.sleep(SHORT_SLEEP_MILLIS);
@@ -192,7 +192,7 @@
StatsLog.logStart(APP_BREADCRUMB_LABEL);
Thread.sleep(LONG_SLEEP_MILLIS);
List<Atom> data = StatsConfigUtils.getGaugeMetricDataList(statsManager, sConfigId);
- unregisterStatsPuller(PULL_ATOM_TAG);
+ clearStatsPuller(PULL_ATOM_TAG);
assertThat(data.size()).isEqualTo(2);
for (int i = 0; i < data.size(); i++) {
TestAtoms.PullCallbackAtomWrapper atomWrapper = null;
@@ -221,7 +221,7 @@
createAndAddConfigToStatsd(statsManager);
sAtomsPerPull = 1000;
// Add the puller.
- registerStatsPuller(PULL_ATOM_TAG, sPullTimeoutNs, sCoolDownNs, sPullReturnValue,
+ setStatsPuller(PULL_ATOM_TAG, sPullTimeoutMillis, sCoolDownMillis, sPullReturnValue,
sPullLatencyMillis, sAtomsPerPull);
Thread.sleep(SHORT_SLEEP_MILLIS);
@@ -229,7 +229,7 @@
// Let the current bucket finish.
Thread.sleep(LONG_SLEEP_MILLIS);
List<Atom> data = StatsConfigUtils.getGaugeMetricDataList(statsManager, sConfigId);
- unregisterStatsPuller(PULL_ATOM_TAG);
+ clearStatsPuller(PULL_ATOM_TAG);
assertThat(data.size()).isEqualTo(sAtomsPerPull);
for (int i = 0; i < data.size(); i++) {
@@ -276,9 +276,9 @@
assertThat(StatsConfigUtils.verifyValidConfigExists(statsManager, sConfigId)).isTrue();
}
- private native void registerStatsPuller(int atomTag, long timeoutNs, long coolDownNs,
+ private native void setStatsPuller(int atomTag, long timeoutMillis, long coolDownMillis,
int pullReturnVal, long latencyMillis, int atomPerPull);
- private native void unregisterStatsPuller(int atomTag);
+ private native void clearStatsPuller(int atomTag);
}
diff --git a/api/current.txt b/api/current.txt
index 377ecdd..c19a70c 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -278,6 +278,7 @@
field public static final int activityCloseExitAnimation = 16842939; // 0x10100bb
field public static final int activityOpenEnterAnimation = 16842936; // 0x10100b8
field public static final int activityOpenExitAnimation = 16842937; // 0x10100b9
+ field public static final int actor = 16844313; // 0x1010619
field public static final int addPrintersActivity = 16843750; // 0x10103e6
field public static final int addStatesFromChildren = 16842992; // 0x10100f0
field public static final int adjustViewBounds = 16843038; // 0x101011e
@@ -7604,6 +7605,7 @@
method public void acquireLease(@NonNull android.app.blob.BlobHandle, @IdRes int) throws java.io.IOException;
method public void acquireLease(@NonNull android.app.blob.BlobHandle, @NonNull CharSequence) throws java.io.IOException;
method @IntRange(from=1) public long createSession(@NonNull android.app.blob.BlobHandle) throws java.io.IOException;
+ method @IntRange(from=0) public long getRemainingLeaseQuotaBytes();
method @NonNull public android.os.ParcelFileDescriptor openBlob(@NonNull android.app.blob.BlobHandle) throws java.io.IOException;
method @NonNull public android.app.blob.BlobStoreManager.Session openSession(@IntRange(from=1) long) throws java.io.IOException;
method public void releaseLease(@NonNull android.app.blob.BlobHandle) throws java.io.IOException;
@@ -17229,8 +17231,8 @@
field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Rational> CONTROL_AE_COMPENSATION_STEP;
field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Boolean> CONTROL_AE_LOCK_AVAILABLE;
field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AF_AVAILABLE_MODES;
- field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.Capability[]> CONTROL_AVAILABLE_BOKEH_CAPABILITIES;
field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AVAILABLE_EFFECTS;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.Capability[]> CONTROL_AVAILABLE_EXTENDED_SCENE_MODE_CAPABILITIES;
field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AVAILABLE_MODES;
field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AVAILABLE_SCENE_MODES;
field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES;
@@ -17451,9 +17453,6 @@
field public static final int CONTROL_AWB_STATE_INACTIVE = 0; // 0x0
field public static final int CONTROL_AWB_STATE_LOCKED = 3; // 0x3
field public static final int CONTROL_AWB_STATE_SEARCHING = 1; // 0x1
- field public static final int CONTROL_BOKEH_MODE_CONTINUOUS = 2; // 0x2
- field public static final int CONTROL_BOKEH_MODE_OFF = 0; // 0x0
- field public static final int CONTROL_BOKEH_MODE_STILL_CAPTURE = 1; // 0x1
field public static final int CONTROL_CAPTURE_INTENT_CUSTOM = 0; // 0x0
field public static final int CONTROL_CAPTURE_INTENT_MANUAL = 6; // 0x6
field public static final int CONTROL_CAPTURE_INTENT_MOTION_TRACKING = 7; // 0x7
@@ -17471,9 +17470,13 @@
field public static final int CONTROL_EFFECT_MODE_SEPIA = 4; // 0x4
field public static final int CONTROL_EFFECT_MODE_SOLARIZE = 3; // 0x3
field public static final int CONTROL_EFFECT_MODE_WHITEBOARD = 6; // 0x6
+ field public static final int CONTROL_EXTENDED_SCENE_MODE_BOKEH_CONTINUOUS = 2; // 0x2
+ field public static final int CONTROL_EXTENDED_SCENE_MODE_BOKEH_STILL_CAPTURE = 1; // 0x1
+ field public static final int CONTROL_EXTENDED_SCENE_MODE_DISABLED = 0; // 0x0
field public static final int CONTROL_MODE_AUTO = 1; // 0x1
field public static final int CONTROL_MODE_OFF = 0; // 0x0
field public static final int CONTROL_MODE_OFF_KEEP_STATE = 3; // 0x3
+ field public static final int CONTROL_MODE_USE_EXTENDED_SCENE_MODE = 4; // 0x4
field public static final int CONTROL_MODE_USE_SCENE_MODE = 2; // 0x2
field public static final int CONTROL_SCENE_MODE_ACTION = 2; // 0x2
field public static final int CONTROL_SCENE_MODE_BARCODE = 16; // 0x10
@@ -17665,10 +17668,10 @@
field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Boolean> CONTROL_AWB_LOCK;
field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_AWB_MODE;
field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<android.hardware.camera2.params.MeteringRectangle[]> CONTROL_AWB_REGIONS;
- field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_BOKEH_MODE;
field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_CAPTURE_INTENT;
field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_EFFECT_MODE;
field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Boolean> CONTROL_ENABLE_ZSL;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_EXTENDED_SCENE_MODE;
field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_MODE;
field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_POST_RAW_SENSITIVITY_BOOST;
field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_SCENE_MODE;
@@ -17752,10 +17755,10 @@
field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AWB_MODE;
field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.hardware.camera2.params.MeteringRectangle[]> CONTROL_AWB_REGIONS;
field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AWB_STATE;
- field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_BOKEH_MODE;
field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_CAPTURE_INTENT;
field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_EFFECT_MODE;
field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Boolean> CONTROL_ENABLE_ZSL;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_EXTENDED_SCENE_MODE;
field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_MODE;
field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_POST_RAW_SENSITIVITY_BOOST;
field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_SCENE_MODE;
@@ -26869,9 +26872,11 @@
field public static final int CONNECTION_STATE_CONNECTING = 1; // 0x1
field public static final int CONNECTION_STATE_DISCONNECTED = 0; // 0x0
field @NonNull public static final android.os.Parcelable.Creator<android.media.MediaRoute2Info> CREATOR;
- field public static final String FEATURE_LIVE_AUDIO = "android.media.intent.category.LIVE_AUDIO";
- field public static final String FEATURE_LIVE_VIDEO = "android.media.intent.category.LIVE_VIDEO";
- field public static final String FEATURE_REMOTE_PLAYBACK = "android.media.intent.category.REMOTE_PLAYBACK";
+ field public static final String FEATURE_LIVE_AUDIO = "android.media.route.feature.LIVE_AUDIO";
+ field public static final String FEATURE_LIVE_VIDEO = "android.media.route.feature.LIVE_VIDEO";
+ field public static final String FEATURE_REMOTE_AUDIO_PLAYBACK = "android.media.route.feature.REMOTE_AUDIO_PLAYBACK";
+ field public static final String FEATURE_REMOTE_PLAYBACK = "android.media.route.feature.REMOTE_PLAYBACK";
+ field public static final String FEATURE_REMOTE_VIDEO_PLAYBACK = "android.media.route.feature.REMOTE_VIDEO_PLAYBACK";
field public static final int PLAYBACK_VOLUME_FIXED = 0; // 0x0
field public static final int PLAYBACK_VOLUME_VARIABLE = 1; // 0x1
}
@@ -27093,9 +27098,9 @@
public abstract static class MediaRouter2.TransferCallback {
ctor public MediaRouter2.TransferCallback();
- method public void onStopped(@NonNull android.media.MediaRouter2.RoutingController);
- method public void onTransferFailed(@NonNull android.media.MediaRoute2Info);
- method public void onTransferred(@NonNull android.media.MediaRouter2.RoutingController, @NonNull android.media.MediaRouter2.RoutingController);
+ method public void onStop(@NonNull android.media.MediaRouter2.RoutingController);
+ method public void onTransfer(@NonNull android.media.MediaRouter2.RoutingController, @NonNull android.media.MediaRouter2.RoutingController);
+ method public void onTransferFailure(@NonNull android.media.MediaRoute2Info);
}
public class MediaScannerConnection implements android.content.ServiceConnection {
@@ -36313,6 +36318,11 @@
method public android.os.IBinder asBinder();
}
+ public class LimitExceededException extends java.lang.IllegalStateException {
+ ctor public LimitExceededException();
+ ctor public LimitExceededException(@NonNull String);
+ }
+
public final class LocaleList implements android.os.Parcelable {
ctor public LocaleList(@NonNull java.util.Locale...);
method public int describeContents();
@@ -46996,7 +47006,6 @@
method public abstract int getAsuLevel();
method public abstract int getDbm();
method @IntRange(from=android.telephony.CellSignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN, to=android.telephony.CellSignalStrength.SIGNAL_STRENGTH_GREAT) public abstract int getLevel();
- method public static final int getNumSignalStrengthLevels();
method public abstract int hashCode();
field public static final int SIGNAL_STRENGTH_GOOD = 3; // 0x3
field public static final int SIGNAL_STRENGTH_GREAT = 4; // 0x4
@@ -47577,12 +47586,6 @@
field public static final int SCAN_TYPE_PERIODIC = 1; // 0x1
}
- public final class PhoneCapability implements android.os.Parcelable {
- method public int describeContents();
- method public void writeToParcel(@NonNull android.os.Parcel, int);
- field @NonNull public static final android.os.Parcelable.Creator<android.telephony.PhoneCapability> CREATOR;
- }
-
public class PhoneNumberFormattingTextWatcher implements android.text.TextWatcher {
ctor public PhoneNumberFormattingTextWatcher();
ctor public PhoneNumberFormattingTextWatcher(String);
@@ -47787,7 +47790,7 @@
method @Deprecated public void sendMultimediaMessage(android.content.Context, android.net.Uri, String, android.os.Bundle, android.app.PendingIntent);
method public void sendMultipartTextMessage(String, String, java.util.ArrayList<java.lang.String>, java.util.ArrayList<android.app.PendingIntent>, java.util.ArrayList<android.app.PendingIntent>);
method public void sendMultipartTextMessage(@NonNull String, @Nullable String, @NonNull java.util.List<java.lang.String>, @Nullable java.util.List<android.app.PendingIntent>, @Nullable java.util.List<android.app.PendingIntent>, long);
- method public void sendMultipartTextMessage(@NonNull String, @Nullable String, @NonNull java.util.List<java.lang.String>, @Nullable java.util.List<android.app.PendingIntent>, @Nullable java.util.List<android.app.PendingIntent>, @NonNull String);
+ method public void sendMultipartTextMessage(@NonNull String, @Nullable String, @NonNull java.util.List<java.lang.String>, @Nullable java.util.List<android.app.PendingIntent>, @Nullable java.util.List<android.app.PendingIntent>, @NonNull String, @Nullable String);
method public void sendTextMessage(String, String, String, android.app.PendingIntent, android.app.PendingIntent);
method public void sendTextMessage(@NonNull String, @Nullable String, @NonNull String, @Nullable android.app.PendingIntent, @Nullable android.app.PendingIntent, long);
method @RequiresPermission(allOf={android.Manifest.permission.MODIFY_PHONE_STATE, android.Manifest.permission.SEND_SMS}) public void sendTextMessageWithoutPersisting(String, String, String, android.app.PendingIntent, android.app.PendingIntent);
@@ -48078,6 +48081,7 @@
method public android.telephony.SubscriptionPlan build();
method public static android.telephony.SubscriptionPlan.Builder createNonrecurring(java.time.ZonedDateTime, java.time.ZonedDateTime);
method public static android.telephony.SubscriptionPlan.Builder createRecurring(java.time.ZonedDateTime, java.time.Period);
+ method @NonNull public android.telephony.SubscriptionPlan.Builder resetNetworkTypes();
method public android.telephony.SubscriptionPlan.Builder setDataLimit(long, int);
method public android.telephony.SubscriptionPlan.Builder setDataUsage(long, long);
method @NonNull public android.telephony.SubscriptionPlan.Builder setNetworkTypes(@NonNull int[]);
@@ -48105,7 +48109,6 @@
method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public boolean doesSwitchMultiSimConfigTriggerReboot();
method public int getActiveModemCount();
method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public java.util.List<android.telephony.CellInfo> getAllCellInfo();
- method @NonNull public static int[] getAllNetworkTypes();
method public int getCallState();
method public int getCardIdForDefaultEuicc();
method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) @WorkerThread public android.os.PersistableBundle getCarrierConfig();
@@ -56769,6 +56772,19 @@
package android.view.inline {
+ public class InlineContentView extends android.view.ViewGroup {
+ method @Nullable public android.view.SurfaceControl getSurfaceControl();
+ method public boolean isZOrderedOnTop();
+ method public void onLayout(boolean, int, int, int, int);
+ method public void setSurfaceControlCallback(@Nullable android.view.inline.InlineContentView.SurfaceControlCallback);
+ method public boolean setZOrderedOnTop(boolean);
+ }
+
+ public static interface InlineContentView.SurfaceControlCallback {
+ method public void onCreated(@NonNull android.view.SurfaceControl);
+ method public void onDestroyed(@NonNull android.view.SurfaceControl);
+ }
+
public final class InlinePresentationSpec implements android.os.Parcelable {
method public int describeContents();
method @NonNull public android.util.Size getMaxSize();
@@ -56957,7 +56973,7 @@
public final class InlineSuggestion implements android.os.Parcelable {
method public int describeContents();
method @NonNull public android.view.inputmethod.InlineSuggestionInfo getInfo();
- method public void inflate(@NonNull android.content.Context, @NonNull android.util.Size, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.view.View>);
+ method public void inflate(@NonNull android.content.Context, @NonNull android.util.Size, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.view.inline.InlineContentView>);
method public void writeToParcel(@NonNull android.os.Parcel, int);
field @NonNull public static final android.os.Parcelable.Creator<android.view.inputmethod.InlineSuggestion> CREATOR;
}
diff --git a/api/module-lib-current.txt b/api/module-lib-current.txt
index cfb9b83..a1d9967 100644
--- a/api/module-lib-current.txt
+++ b/api/module-lib-current.txt
@@ -120,16 +120,16 @@
}
public static class TetheringManager.TetheringRequest {
- }
-
- public static class TetheringManager.TetheringRequest.Builder {
- ctor public TetheringManager.TetheringRequest.Builder(int);
- method @NonNull public android.net.TetheringManager.TetheringRequest build();
method @Nullable public android.net.LinkAddress getClientStaticIpv4Address();
method @Nullable public android.net.LinkAddress getLocalIpv4Address();
method public boolean getShouldShowEntitlementUi();
method public int getTetheringType();
method public boolean isExemptFromEntitlementCheck();
+ }
+
+ public static class TetheringManager.TetheringRequest.Builder {
+ ctor public TetheringManager.TetheringRequest.Builder(int);
+ method @NonNull public android.net.TetheringManager.TetheringRequest build();
method @NonNull @RequiresPermission("android.permission.TETHER_PRIVILEGED") public android.net.TetheringManager.TetheringRequest.Builder setExemptFromEntitlementCheck(boolean);
method @NonNull @RequiresPermission("android.permission.TETHER_PRIVILEGED") public android.net.TetheringManager.TetheringRequest.Builder setShouldShowEntitlementUi(boolean);
method @NonNull @RequiresPermission("android.permission.TETHER_PRIVILEGED") public android.net.TetheringManager.TetheringRequest.Builder setStaticIpv4Addresses(@NonNull android.net.LinkAddress, @NonNull android.net.LinkAddress);
diff --git a/api/system-current.txt b/api/system-current.txt
index 0a7892c..369012c 100755
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -341,12 +341,10 @@
method @RequiresPermission(android.Manifest.permission.PACKAGE_USAGE_STATS) public int getUidImportance(int);
method @RequiresPermission(android.Manifest.permission.FORCE_STOP_PACKAGES) public void killProcessesWhenImperceptible(@NonNull int[], @NonNull String);
method @RequiresPermission(android.Manifest.permission.KILL_UID) public void killUid(int, String);
- method public void registerHomeVisibilityObserver(@NonNull android.app.HomeVisibilityObserver);
method @RequiresPermission(android.Manifest.permission.PACKAGE_USAGE_STATS) public void removeOnUidImportanceListener(android.app.ActivityManager.OnUidImportanceListener);
method public void setDeviceLocales(@NonNull android.os.LocaleList);
method @RequiresPermission(android.Manifest.permission.RESTRICTED_VR_ACCESS) public static void setPersistentVrThread(int);
method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public boolean switchUser(@NonNull android.os.UserHandle);
- method public void unregisterHomeVisibilityObserver(@NonNull android.app.HomeVisibilityObserver);
}
public static interface ActivityManager.OnUidImportanceListener {
@@ -599,11 +597,6 @@
field public static final String ACTION_DOWNLOAD_COMPLETED = "android.intent.action.DOWNLOAD_COMPLETED";
}
- public abstract class HomeVisibilityObserver {
- ctor public HomeVisibilityObserver();
- method public abstract void onHomeVisibilityChanged(boolean);
- }
-
public abstract class InstantAppResolverService extends android.app.Service {
ctor public InstantAppResolverService();
method public final void attachBaseContext(android.content.Context);
@@ -868,7 +861,6 @@
method @Nullable public android.content.ComponentName getProfileOwner() throws java.lang.IllegalArgumentException;
method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public String getProfileOwnerNameAsUser(int) throws java.lang.IllegalArgumentException;
method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public int getUserProvisioningState();
- method public boolean hasDeviceIdentifierAccess(@NonNull String, int, int);
method public boolean isDeviceManaged();
method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public boolean isDeviceProvisioned();
method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public boolean isDeviceProvisioningConfigApplied();
@@ -1459,16 +1451,8 @@
package android.bluetooth {
public final class BluetoothA2dp implements android.bluetooth.BluetoothProfile {
- method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public void disableOptionalCodecs(@NonNull android.bluetooth.BluetoothDevice);
- method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public void enableOptionalCodecs(@NonNull android.bluetooth.BluetoothDevice);
- method @Nullable @RequiresPermission(android.Manifest.permission.BLUETOOTH) public android.bluetooth.BluetoothDevice getActiveDevice();
- method @Nullable @RequiresPermission(android.Manifest.permission.BLUETOOTH) public android.bluetooth.BluetoothCodecStatus getCodecStatus(@NonNull android.bluetooth.BluetoothDevice);
- method @RequiresPermission(android.Manifest.permission.BLUETOOTH) public int getConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice);
- method @RequiresPermission(android.Manifest.permission.BLUETOOTH_ADMIN) public int isOptionalCodecsEnabled(@NonNull android.bluetooth.BluetoothDevice);
- method @RequiresPermission(android.Manifest.permission.BLUETOOTH_ADMIN) public int isOptionalCodecsSupported(@NonNull android.bluetooth.BluetoothDevice);
- method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public void setCodecConfigPreference(@NonNull android.bluetooth.BluetoothDevice, @NonNull android.bluetooth.BluetoothCodecConfig);
- method @RequiresPermission(android.Manifest.permission.BLUETOOTH_ADMIN) public boolean setConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice, int);
- method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public void setOptionalCodecsEnabled(@NonNull android.bluetooth.BluetoothDevice, int);
+ method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public int getConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice);
+ method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public boolean setConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice, int);
field public static final int OPTIONAL_CODECS_NOT_SUPPORTED = 0; // 0x0
field public static final int OPTIONAL_CODECS_PREF_DISABLED = 0; // 0x0
field public static final int OPTIONAL_CODECS_PREF_ENABLED = 1; // 0x1
@@ -1479,28 +1463,23 @@
public final class BluetoothA2dpSink implements android.bluetooth.BluetoothProfile {
method public void finalize();
- method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public int getConnectionPolicy(@Nullable android.bluetooth.BluetoothDevice);
- method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public boolean isAudioPlaying(@Nullable android.bluetooth.BluetoothDevice);
- method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public boolean setConnectionPolicy(@Nullable android.bluetooth.BluetoothDevice, int);
+ method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public int getConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice);
+ method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public boolean isAudioPlaying(@NonNull android.bluetooth.BluetoothDevice);
+ method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public boolean setConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice, int);
field @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public static final String ACTION_CONNECTION_STATE_CHANGED = "android.bluetooth.a2dp-sink.profile.action.CONNECTION_STATE_CHANGED";
}
public final class BluetoothAdapter {
method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public boolean addOnMetadataChangedListener(@NonNull android.bluetooth.BluetoothDevice, @NonNull java.util.concurrent.Executor, @NonNull android.bluetooth.BluetoothAdapter.OnMetadataChangedListener);
- method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public boolean connectAllEnabledProfiles(@NonNull android.bluetooth.BluetoothDevice);
method public boolean disableBLE();
- method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public boolean disconnectAllEnabledProfiles(@NonNull android.bluetooth.BluetoothDevice);
method public boolean enableBLE();
method @RequiresPermission(android.Manifest.permission.BLUETOOTH_ADMIN) public boolean enableNoAutoConnect();
- method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public boolean factoryReset();
- method @RequiresPermission(android.Manifest.permission.BLUETOOTH) public long getDiscoveryEndMillis();
+ method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public long getDiscoveryEndMillis();
method public boolean isBleScanAlwaysAvailable();
method public boolean isLeEnabled();
method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public boolean removeActiveDevice(int);
method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public boolean removeOnMetadataChangedListener(@NonNull android.bluetooth.BluetoothDevice, @NonNull android.bluetooth.BluetoothAdapter.OnMetadataChangedListener);
method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public boolean setActiveDevice(@NonNull android.bluetooth.BluetoothDevice, int);
- method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public boolean setScanMode(int, long);
- method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public boolean setScanMode(int);
field public static final String ACTION_BLE_STATE_CHANGED = "android.bluetooth.adapter.action.BLE_STATE_CHANGED";
field public static final String ACTION_REQUEST_BLE_SCAN_ALWAYS_AVAILABLE = "android.bluetooth.adapter.action.REQUEST_BLE_SCAN_ALWAYS_AVAILABLE";
field public static final int ACTIVE_DEVICE_ALL = 2; // 0x2
@@ -1512,70 +1491,17 @@
method public void onMetadataChanged(@NonNull android.bluetooth.BluetoothDevice, int, @Nullable byte[]);
}
- public final class BluetoothCodecConfig implements android.os.Parcelable {
- ctor public BluetoothCodecConfig(int, int, int, int, int, long, long, long, long);
- ctor public BluetoothCodecConfig(int);
- method public int getBitsPerSample();
- method @NonNull public String getCodecName();
- method public int getCodecPriority();
- method public long getCodecSpecific1();
- method public int getCodecType();
- method public int getSampleRate();
- method public boolean isMandatoryCodec();
- field public static final int BITS_PER_SAMPLE_16 = 1; // 0x1
- field public static final int BITS_PER_SAMPLE_24 = 2; // 0x2
- field public static final int BITS_PER_SAMPLE_32 = 4; // 0x4
- field public static final int BITS_PER_SAMPLE_NONE = 0; // 0x0
- field public static final int CHANNEL_MODE_MONO = 1; // 0x1
- field public static final int CHANNEL_MODE_NONE = 0; // 0x0
- field public static final int CHANNEL_MODE_STEREO = 2; // 0x2
- field public static final int CODEC_PRIORITY_DEFAULT = 0; // 0x0
- field public static final int CODEC_PRIORITY_DISABLED = -1; // 0xffffffff
- field public static final int CODEC_PRIORITY_HIGHEST = 1000000; // 0xf4240
- field @NonNull public static final android.os.Parcelable.Creator<android.bluetooth.BluetoothCodecConfig> CREATOR;
- field public static final int SAMPLE_RATE_176400 = 16; // 0x10
- field public static final int SAMPLE_RATE_192000 = 32; // 0x20
- field public static final int SAMPLE_RATE_44100 = 1; // 0x1
- field public static final int SAMPLE_RATE_48000 = 2; // 0x2
- field public static final int SAMPLE_RATE_88200 = 4; // 0x4
- field public static final int SAMPLE_RATE_96000 = 8; // 0x8
- field public static final int SAMPLE_RATE_NONE = 0; // 0x0
- field public static final int SOURCE_CODEC_TYPE_AAC = 1; // 0x1
- field public static final int SOURCE_CODEC_TYPE_APTX = 2; // 0x2
- field public static final int SOURCE_CODEC_TYPE_APTX_HD = 3; // 0x3
- field public static final int SOURCE_CODEC_TYPE_INVALID = 1000000; // 0xf4240
- field public static final int SOURCE_CODEC_TYPE_LDAC = 4; // 0x4
- field public static final int SOURCE_CODEC_TYPE_MAX = 5; // 0x5
- field public static final int SOURCE_CODEC_TYPE_SBC = 0; // 0x0
- }
-
- public final class BluetoothCodecStatus implements android.os.Parcelable {
- ctor public BluetoothCodecStatus(@Nullable android.bluetooth.BluetoothCodecConfig, @Nullable android.bluetooth.BluetoothCodecConfig[], @Nullable android.bluetooth.BluetoothCodecConfig[]);
- method @Nullable public android.bluetooth.BluetoothCodecConfig getCodecConfig();
- method @Nullable public android.bluetooth.BluetoothCodecConfig[] getCodecsLocalCapabilities();
- method @Nullable public android.bluetooth.BluetoothCodecConfig[] getCodecsSelectableCapabilities();
- field @NonNull public static final android.os.Parcelable.Creator<android.bluetooth.BluetoothCodecStatus> CREATOR;
- field public static final String EXTRA_CODEC_STATUS = "android.bluetooth.extra.CODEC_STATUS";
- }
-
public final class BluetoothDevice implements android.os.Parcelable {
method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public boolean cancelBondProcess();
- method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public boolean cancelPairing();
- method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public int getBatteryLevel();
- method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public int getMessageAccessPermission();
method @Nullable @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public byte[] getMetadata(int);
- method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public int getPhonebookAccessPermission();
- method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public int getSimAccessPermission();
- method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public boolean isBondingInitiatedLocally();
+ method @RequiresPermission(android.Manifest.permission.BLUETOOTH) public int getSimAccessPermission();
method @RequiresPermission(android.Manifest.permission.BLUETOOTH) public boolean isConnected();
method @RequiresPermission(android.Manifest.permission.BLUETOOTH) public boolean isEncrypted();
method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public boolean isInSilenceMode();
method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public boolean removeBond();
- method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public boolean setAlias(@NonNull String);
method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public boolean setMessageAccessPermission(int);
method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public boolean setMetadata(int, @NonNull byte[]);
method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public boolean setPhonebookAccessPermission(int);
- method @RequiresPermission(android.Manifest.permission.BLUETOOTH_ADMIN) public boolean setPin(@NonNull String);
method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public boolean setSilenceMode(boolean);
method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public boolean setSimAccessPermission(int);
field public static final int ACCESS_ALLOWED = 1; // 0x1
@@ -1605,17 +1531,15 @@
public final class BluetoothHeadset implements android.bluetooth.BluetoothProfile {
method @RequiresPermission(android.Manifest.permission.BLUETOOTH_ADMIN) public boolean connect(android.bluetooth.BluetoothDevice);
method @RequiresPermission(android.Manifest.permission.BLUETOOTH_ADMIN) public boolean disconnect(android.bluetooth.BluetoothDevice);
- method @Nullable @RequiresPermission(android.Manifest.permission.BLUETOOTH) public android.bluetooth.BluetoothDevice getActiveDevice();
- method @RequiresPermission(android.Manifest.permission.BLUETOOTH) public int getConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice);
- method @RequiresPermission(android.Manifest.permission.BLUETOOTH_ADMIN) public boolean setConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice, int);
+ method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public int getConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice);
+ method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public boolean setConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice, int);
method @Deprecated @RequiresPermission(android.Manifest.permission.BLUETOOTH_ADMIN) public boolean setPriority(android.bluetooth.BluetoothDevice, int);
}
public final class BluetoothHearingAid implements android.bluetooth.BluetoothProfile {
- method @NonNull @RequiresPermission(android.Manifest.permission.BLUETOOTH) public java.util.List<android.bluetooth.BluetoothDevice> getActiveDevices();
- method @RequiresPermission(android.Manifest.permission.BLUETOOTH) public int getConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice);
- method @RequiresPermission(android.Manifest.permission.BLUETOOTH) public long getHiSyncId(@Nullable android.bluetooth.BluetoothDevice);
- method @RequiresPermission(android.Manifest.permission.BLUETOOTH_ADMIN) public boolean setConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice, int);
+ method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public int getConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice);
+ method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public long getHiSyncId(@NonNull android.bluetooth.BluetoothDevice);
+ method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public boolean setConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice, int);
}
public final class BluetoothHidDevice implements android.bluetooth.BluetoothProfile {
@@ -1624,9 +1548,9 @@
public final class BluetoothHidHost implements android.bluetooth.BluetoothProfile {
method @NonNull @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public java.util.List<android.bluetooth.BluetoothDevice> getConnectedDevices();
- method @RequiresPermission(android.Manifest.permission.BLUETOOTH) public int getConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice);
+ method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public int getConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice);
method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public int getConnectionState(@NonNull android.bluetooth.BluetoothDevice);
- method @RequiresPermission(android.Manifest.permission.BLUETOOTH_ADMIN) public boolean setConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice, int);
+ method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public boolean setConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice, int);
field public static final String ACTION_CONNECTION_STATE_CHANGED = "android.bluetooth.input.profile.action.CONNECTION_STATE_CHANGED";
}
@@ -1634,14 +1558,14 @@
method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public void close();
method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) protected void finalize();
method @NonNull @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public java.util.List<android.bluetooth.BluetoothDevice> getConnectedDevices();
- method @RequiresPermission(android.Manifest.permission.BLUETOOTH) public int getConnectionPolicy(@Nullable android.bluetooth.BluetoothDevice);
- method @RequiresPermission(android.Manifest.permission.BLUETOOTH_ADMIN) public boolean setConnectionPolicy(@Nullable android.bluetooth.BluetoothDevice, int);
+ method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public int getConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice);
+ method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public boolean setConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice, int);
field public static final String ACTION_CONNECTION_STATE_CHANGED = "android.bluetooth.map.profile.action.CONNECTION_STATE_CHANGED";
}
- public final class BluetoothPan implements java.lang.AutoCloseable android.bluetooth.BluetoothProfile {
+ public final class BluetoothPan implements android.bluetooth.BluetoothProfile {
method @NonNull @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public java.util.List<android.bluetooth.BluetoothDevice> getConnectedDevices();
- method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public int getConnectionState(@Nullable android.bluetooth.BluetoothDevice);
+ method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public int getConnectionState(@NonNull android.bluetooth.BluetoothDevice);
method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public boolean isTetheringOn();
method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public void setBluetoothTethering(boolean);
method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public boolean setConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice, int);
@@ -1655,7 +1579,7 @@
}
public class BluetoothPbap implements android.bluetooth.BluetoothProfile {
- method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public int getConnectionState(@Nullable android.bluetooth.BluetoothDevice);
+ method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public int getConnectionState(@NonNull android.bluetooth.BluetoothDevice);
method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public boolean setConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice, int);
field @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public static final String ACTION_CONNECTION_STATE_CHANGED = "android.bluetooth.pbap.profile.action.CONNECTION_STATE_CHANGED";
}
@@ -1800,7 +1724,6 @@
field public static final String EUICC_CARD_SERVICE = "euicc_card";
field public static final String HDMI_CONTROL_SERVICE = "hdmi_control";
field public static final String NETD_SERVICE = "netd";
- field public static final String NETWORK_POLICY_SERVICE = "netpolicy";
field public static final String NETWORK_SCORE_SERVICE = "network_score";
field public static final String OEM_LOCK_SERVICE = "oem_lock";
field public static final String PERMISSION_SERVICE = "permission";
@@ -1811,7 +1734,6 @@
field public static final String STATUS_BAR_SERVICE = "statusbar";
field public static final String SYSTEM_CONFIG_SERVICE = "system_config";
field public static final String SYSTEM_UPDATE_SERVICE = "system_update";
- field public static final String TELEPHONY_REGISTRY_SERVICE = "telephony_registry";
field public static final String TETHERING_SERVICE = "tethering";
field public static final String VR_SERVICE = "vrmanager";
field public static final String WIFI_NL80211_SERVICE = "wifinl80211";
@@ -6604,16 +6526,16 @@
}
public static class TetheringManager.TetheringRequest {
- }
-
- public static class TetheringManager.TetheringRequest.Builder {
- ctor public TetheringManager.TetheringRequest.Builder(int);
- method @NonNull public android.net.TetheringManager.TetheringRequest build();
method @Nullable public android.net.LinkAddress getClientStaticIpv4Address();
method @Nullable public android.net.LinkAddress getLocalIpv4Address();
method public boolean getShouldShowEntitlementUi();
method public int getTetheringType();
method public boolean isExemptFromEntitlementCheck();
+ }
+
+ public static class TetheringManager.TetheringRequest.Builder {
+ ctor public TetheringManager.TetheringRequest.Builder(int);
+ method @NonNull public android.net.TetheringManager.TetheringRequest build();
method @NonNull @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public android.net.TetheringManager.TetheringRequest.Builder setExemptFromEntitlementCheck(boolean);
method @NonNull @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public android.net.TetheringManager.TetheringRequest.Builder setShouldShowEntitlementUi(boolean);
method @NonNull @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public android.net.TetheringManager.TetheringRequest.Builder setStaticIpv4Addresses(@NonNull android.net.LinkAddress, @NonNull android.net.LinkAddress);
@@ -8191,7 +8113,7 @@
field public static final String ACTION_UPDATE_CARRIER_PROVISIONING_URLS = "android.intent.action.UPDATE_CARRIER_PROVISIONING_URLS";
field public static final String ACTION_UPDATE_CONVERSATION_ACTIONS = "android.intent.action.UPDATE_CONVERSATION_ACTIONS";
field public static final String ACTION_UPDATE_CT_LOGS = "android.intent.action.UPDATE_CT_LOGS";
- field @RequiresPermission("android.permission.UPDATE_CONFIG") public static final String ACTION_UPDATE_EMERGENCY_NUMBER_DB = "android.os.action.UPDATE_EMERGENCY_NUMBER_DB";
+ field public static final String ACTION_UPDATE_EMERGENCY_NUMBER_DB = "android.os.action.UPDATE_EMERGENCY_NUMBER_DB";
field public static final String ACTION_UPDATE_INTENT_FIREWALL = "android.intent.action.UPDATE_INTENT_FIREWALL";
field public static final String ACTION_UPDATE_LANG_ID = "android.intent.action.UPDATE_LANG_ID";
field public static final String ACTION_UPDATE_NETWORK_WATCHLIST = "android.intent.action.UPDATE_NETWORK_WATCHLIST";
@@ -8553,31 +8475,6 @@
field public static final int STATUS_WAITING_REBOOT = 5; // 0x5
}
- public class TelephonyServiceManager {
- method @NonNull public android.os.TelephonyServiceManager.ServiceRegisterer getCarrierConfigServiceRegisterer();
- method @NonNull public android.os.TelephonyServiceManager.ServiceRegisterer getEuiccCardControllerServiceRegisterer();
- method @NonNull public android.os.TelephonyServiceManager.ServiceRegisterer getEuiccControllerService();
- method @NonNull public android.os.TelephonyServiceManager.ServiceRegisterer getIccPhoneBookServiceRegisterer();
- method @NonNull public android.os.TelephonyServiceManager.ServiceRegisterer getOpportunisticNetworkServiceRegisterer();
- method @NonNull public android.os.TelephonyServiceManager.ServiceRegisterer getPhoneSubServiceRegisterer();
- method @NonNull public android.os.TelephonyServiceManager.ServiceRegisterer getSmsServiceRegisterer();
- method @NonNull public android.os.TelephonyServiceManager.ServiceRegisterer getSubscriptionServiceRegisterer();
- method @NonNull public android.os.TelephonyServiceManager.ServiceRegisterer getTelephonyImsServiceRegisterer();
- method @NonNull public android.os.TelephonyServiceManager.ServiceRegisterer getTelephonyRcsMessageServiceRegisterer();
- method @NonNull public android.os.TelephonyServiceManager.ServiceRegisterer getTelephonyServiceRegisterer();
- }
-
- public static class TelephonyServiceManager.ServiceNotFoundException extends java.lang.Exception {
- ctor public TelephonyServiceManager.ServiceNotFoundException(@NonNull String);
- }
-
- public static final class TelephonyServiceManager.ServiceRegisterer {
- method @Nullable public android.os.IBinder get();
- method @NonNull public android.os.IBinder getOrThrow() throws android.os.TelephonyServiceManager.ServiceNotFoundException;
- method public void register(@NonNull android.os.IBinder);
- method @Nullable public android.os.IBinder tryGet();
- }
-
public class UpdateEngine {
ctor public UpdateEngine();
method @NonNull @WorkerThread public android.os.UpdateEngine.AllocateSpaceResult allocateSpace(@NonNull String, @NonNull String[]);
@@ -8915,6 +8812,7 @@
}
public final class PermissionManager {
+ method public int checkDeviceIdentifierAccess(@Nullable String, @Nullable String, @Nullable String, int, int);
method @NonNull @RequiresPermission(android.Manifest.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY) public java.util.Set<java.lang.String> getAutoRevokeExemptionGrantedPackages();
method @NonNull @RequiresPermission(android.Manifest.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY) public java.util.Set<java.lang.String> getAutoRevokeExemptionRequestedPackages();
method @IntRange(from=0) @RequiresPermission(anyOf={android.Manifest.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY, android.Manifest.permission.UPGRADE_RUNTIME_PERMISSIONS}) public int getRuntimePermissionsVersion();
@@ -9669,6 +9567,7 @@
method @Nullable public final android.os.IBinder onBind(@NonNull android.content.Intent);
method @Nullable public android.os.Bundle onGetInlineSuggestionsRendererInfo();
method @Nullable public android.view.View onRenderSuggestion(@NonNull android.service.autofill.InlinePresentation, int, int);
+ method public final void startIntentSender(@NonNull android.content.IntentSender);
field public static final String SERVICE_INTERFACE = "android.service.autofill.InlineSuggestionRenderService";
}
@@ -10586,9 +10485,6 @@
method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean isInEmergencyCall();
method @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public boolean isRinging();
method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setUserSelectedOutgoingPhoneAccount(@Nullable android.telecom.PhoneAccountHandle);
- field public static final int CALL_SOURCE_EMERGENCY_DIALPAD = 1; // 0x1
- field public static final int CALL_SOURCE_EMERGENCY_SHORTCUT = 2; // 0x2
- field public static final int CALL_SOURCE_UNSPECIFIED = 0; // 0x0
field public static final String EXTRA_CALL_BACK_INTENT = "android.telecom.extra.CALL_BACK_INTENT";
field public static final String EXTRA_CLEAR_MISSED_CALLS_INTENT = "android.telecom.extra.CLEAR_MISSED_CALLS_INTENT";
field public static final String EXTRA_CONNECTION_SERVICE = "android.telecom.extra.CONNECTION_SERVICE";
@@ -10897,30 +10793,6 @@
field public static final String MBMS_STREAMING_SERVICE_ACTION = "android.telephony.action.EmbmsStreaming";
}
- public final class ModemActivityInfo implements android.os.Parcelable {
- ctor public ModemActivityInfo(long, int, int, @NonNull int[], int);
- method public int describeContents();
- method public int getIdleTimeMillis();
- method public int getReceiveTimeMillis();
- method public int getSleepTimeMillis();
- method public long getTimestamp();
- method @NonNull public java.util.List<android.telephony.ModemActivityInfo.TransmitPower> getTransmitPowerInfo();
- method public boolean isValid();
- method public void writeToParcel(android.os.Parcel, int);
- field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ModemActivityInfo> CREATOR;
- field public static final int TX_POWER_LEVELS = 5; // 0x5
- field public static final int TX_POWER_LEVEL_0 = 0; // 0x0
- field public static final int TX_POWER_LEVEL_1 = 1; // 0x1
- field public static final int TX_POWER_LEVEL_2 = 2; // 0x2
- field public static final int TX_POWER_LEVEL_3 = 3; // 0x3
- field public static final int TX_POWER_LEVEL_4 = 4; // 0x4
- }
-
- public class ModemActivityInfo.TransmitPower {
- method @NonNull public android.util.Range<java.lang.Integer> getPowerRangeInDbm();
- method public int getTimeInMillis();
- }
-
public final class NetworkRegistrationInfo implements android.os.Parcelable {
method @Nullable public android.telephony.DataSpecificRegistrationInfo getDataSpecificInfo();
method public int getRegistrationState();
@@ -11145,21 +11017,15 @@
}
public class ServiceState implements android.os.Parcelable {
- method public void fillInNotifierBundle(@NonNull android.os.Bundle);
method @Nullable public android.telephony.NetworkRegistrationInfo getNetworkRegistrationInfo(int, int);
method @NonNull public java.util.List<android.telephony.NetworkRegistrationInfo> getNetworkRegistrationInfoListForDomain(int);
method @NonNull public java.util.List<android.telephony.NetworkRegistrationInfo> getNetworkRegistrationInfoListForTransportType(int);
- method @NonNull public static android.telephony.ServiceState newFromBundle(@NonNull android.os.Bundle);
field public static final int ROAMING_TYPE_DOMESTIC = 2; // 0x2
field public static final int ROAMING_TYPE_INTERNATIONAL = 3; // 0x3
field public static final int ROAMING_TYPE_NOT_ROAMING = 0; // 0x0
field public static final int ROAMING_TYPE_UNKNOWN = 1; // 0x1
}
- public class SignalStrength implements android.os.Parcelable {
- ctor public SignalStrength(@NonNull android.telephony.SignalStrength);
- }
-
public final class SmsCbCmasInfo implements android.os.Parcelable {
ctor public SmsCbCmasInfo(int, int, int, int, int, int);
method public int describeContents();
@@ -11347,11 +11213,6 @@
method @Deprecated public static android.telephony.SubscriptionPlan.Builder createRecurringWeekly(java.time.ZonedDateTime);
}
- public class TelephonyFrameworkInitializer {
- method public static void registerServiceWrappers();
- method public static void setTelephonyServiceManager(@NonNull android.os.TelephonyServiceManager);
- }
-
public final class TelephonyHistogram implements android.os.Parcelable {
ctor public TelephonyHistogram(int, int, int);
ctor public TelephonyHistogram(android.telephony.TelephonyHistogram);
@@ -11436,8 +11297,8 @@
method public boolean isDataConnectivityPossible();
method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isDataEnabledForApn(int);
method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isEmergencyAssistanceEnabled();
+ method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) @WorkerThread public boolean isIccLockEnabled();
method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public boolean isIdle();
- method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isInEmergencySmsMode();
method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isLteCdmaEvdoGsmWcdmaEnabled();
method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public boolean isOffhook();
method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isOpportunisticNetworkEnabled();
@@ -11453,7 +11314,6 @@
method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean rebootRadio();
method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void reportDefaultNetworkStatus(boolean);
method @RequiresPermission(allOf={android.Manifest.permission.ACCESS_FINE_LOCATION, android.Manifest.permission.MODIFY_PHONE_STATE}) public void requestCellInfoUpdate(@NonNull android.os.WorkSource, @NonNull java.util.concurrent.Executor, @NonNull android.telephony.TelephonyManager.CellInfoCallback);
- method public void requestModemActivityInfo(@NonNull android.os.ResultReceiver);
method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void requestNumberVerification(@NonNull android.telephony.PhoneNumberRange, long, @NonNull java.util.concurrent.Executor, @NonNull android.telephony.NumberVerificationCallback);
method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void resetAllCarrierActions();
method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void resetCarrierKeysForImsiEncryption();
@@ -11490,11 +11350,6 @@
method @RequiresPermission(android.Manifest.permission.READ_ACTIVE_EMERGENCY_SESSION) public void updateOtaEmergencyNumberDbFilePath(@NonNull android.os.ParcelFileDescriptor);
method public void updateServiceLocation();
field @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public static final String ACTION_ANOMALY_REPORTED = "android.telephony.action.ANOMALY_REPORTED";
- field public static final String ACTION_CARRIER_SIGNAL_DEFAULT_NETWORK_AVAILABLE = "com.android.internal.telephony.CARRIER_SIGNAL_DEFAULT_NETWORK_AVAILABLE";
- field public static final String ACTION_CARRIER_SIGNAL_PCO_VALUE = "com.android.internal.telephony.CARRIER_SIGNAL_PCO_VALUE";
- field public static final String ACTION_CARRIER_SIGNAL_REDIRECTED = "com.android.internal.telephony.CARRIER_SIGNAL_REDIRECTED";
- field public static final String ACTION_CARRIER_SIGNAL_REQUEST_NETWORK_FAILED = "com.android.internal.telephony.CARRIER_SIGNAL_REQUEST_NETWORK_FAILED";
- field public static final String ACTION_CARRIER_SIGNAL_RESET = "com.android.internal.telephony.CARRIER_SIGNAL_RESET";
field public static final String ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED = "android.intent.action.ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED";
field public static final String ACTION_DEFAULT_VOICE_SUBSCRIPTION_CHANGED = "android.intent.action.ACTION_DEFAULT_VOICE_SUBSCRIPTION_CHANGED";
field public static final String ACTION_EMERGENCY_ASSISTANCE = "android.telephony.action.EMERGENCY_ASSISTANCE";
@@ -11511,34 +11366,14 @@
field public static final int CARRIER_PRIVILEGE_STATUS_RULES_NOT_LOADED = -1; // 0xffffffff
field public static final String EXTRA_ANOMALY_DESCRIPTION = "android.telephony.extra.ANOMALY_DESCRIPTION";
field public static final String EXTRA_ANOMALY_ID = "android.telephony.extra.ANOMALY_ID";
- field @Deprecated public static final String EXTRA_APN_PROTOCOL = "apnProto";
- field public static final String EXTRA_APN_PROTOCOL_INT = "apnProtoInt";
- field @Deprecated public static final String EXTRA_APN_TYPE = "apnType";
- field public static final String EXTRA_APN_TYPE_INT = "apnTypeInt";
- field public static final String EXTRA_DEFAULT_NETWORK_AVAILABLE = "defaultNetworkAvailable";
- field public static final String EXTRA_DEFAULT_SUBSCRIPTION_SELECT_TYPE = "android.telephony.extra.DEFAULT_SUBSCRIPTION_SELECT_TYPE";
- field public static final int EXTRA_DEFAULT_SUBSCRIPTION_SELECT_TYPE_ALL = 4; // 0x4
- field public static final int EXTRA_DEFAULT_SUBSCRIPTION_SELECT_TYPE_DATA = 1; // 0x1
- field public static final int EXTRA_DEFAULT_SUBSCRIPTION_SELECT_TYPE_NONE = 0; // 0x0
- field public static final int EXTRA_DEFAULT_SUBSCRIPTION_SELECT_TYPE_SMS = 3; // 0x3
- field public static final int EXTRA_DEFAULT_SUBSCRIPTION_SELECT_TYPE_VOICE = 2; // 0x2
- field public static final String EXTRA_ERROR_CODE = "errorCode";
- field public static final String EXTRA_PCO_ID = "pcoId";
- field public static final String EXTRA_PCO_VALUE = "pcoValue";
field public static final String EXTRA_PHONE_IN_ECM_STATE = "android.telephony.extra.PHONE_IN_ECM_STATE";
field public static final String EXTRA_PHONE_IN_EMERGENCY_CALL = "android.telephony.extra.PHONE_IN_EMERGENCY_CALL";
- field public static final String EXTRA_REDIRECTION_URL = "redirectionUrl";
- field public static final String EXTRA_SIM_COMBINATION_NAMES = "android.telephony.extra.SIM_COMBINATION_NAMES";
- field public static final String EXTRA_SIM_COMBINATION_WARNING_TYPE = "android.telephony.extra.SIM_COMBINATION_WARNING_TYPE";
- field public static final int EXTRA_SIM_COMBINATION_WARNING_TYPE_DUAL_CDMA = 1; // 0x1
- field public static final int EXTRA_SIM_COMBINATION_WARNING_TYPE_NONE = 0; // 0x0
field public static final String EXTRA_SIM_STATE = "android.telephony.extra.SIM_STATE";
field public static final String EXTRA_VISUAL_VOICEMAIL_ENABLED_BY_USER_BOOL = "android.telephony.extra.VISUAL_VOICEMAIL_ENABLED_BY_USER_BOOL";
field public static final String EXTRA_VOICEMAIL_SCRAMBLED_PIN_STRING = "android.telephony.extra.VOICEMAIL_SCRAMBLED_PIN_STRING";
field public static final int INVALID_EMERGENCY_NUMBER_DB_VERSION = -1; // 0xffffffff
field public static final int KEY_TYPE_EPDG = 1; // 0x1
field public static final int KEY_TYPE_WLAN = 2; // 0x2
- field public static final String MODEM_ACTIVITY_RESULT_KEY = "controller_activity";
field public static final long NETWORK_TYPE_BITMASK_1xRTT = 64L; // 0x40L
field public static final long NETWORK_TYPE_BITMASK_CDMA = 8L; // 0x8L
field public static final long NETWORK_TYPE_BITMASK_EDGE = 2L; // 0x2L
diff --git a/api/test-current.txt b/api/test-current.txt
index c50438a..38cf6a1 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -974,6 +974,7 @@
field public static final String FEATURE_FILE_BASED_ENCRYPTION = "android.software.file_based_encryption";
field public static final int FLAG_PERMISSION_APPLY_RESTRICTION = 16384; // 0x4000
field public static final int FLAG_PERMISSION_GRANTED_BY_ROLE = 32768; // 0x8000
+ field public static final int FLAG_PERMISSION_ONE_TIME = 65536; // 0x10000
field public static final int FLAG_PERMISSION_POLICY_FIXED = 4; // 0x4
field public static final int FLAG_PERMISSION_RESTRICTION_INSTALLER_EXEMPT = 2048; // 0x800
field public static final int FLAG_PERMISSION_RESTRICTION_SYSTEM_EXEMPT = 4096; // 0x1000
@@ -1986,16 +1987,16 @@
}
public static class TetheringManager.TetheringRequest {
- }
-
- public static class TetheringManager.TetheringRequest.Builder {
- ctor public TetheringManager.TetheringRequest.Builder(int);
- method @NonNull public android.net.TetheringManager.TetheringRequest build();
method @Nullable public android.net.LinkAddress getClientStaticIpv4Address();
method @Nullable public android.net.LinkAddress getLocalIpv4Address();
method public boolean getShouldShowEntitlementUi();
method public int getTetheringType();
method public boolean isExemptFromEntitlementCheck();
+ }
+
+ public static class TetheringManager.TetheringRequest.Builder {
+ ctor public TetheringManager.TetheringRequest.Builder(int);
+ method @NonNull public android.net.TetheringManager.TetheringRequest build();
method @NonNull @RequiresPermission("android.permission.TETHER_PRIVILEGED") public android.net.TetheringManager.TetheringRequest.Builder setExemptFromEntitlementCheck(boolean);
method @NonNull @RequiresPermission("android.permission.TETHER_PRIVILEGED") public android.net.TetheringManager.TetheringRequest.Builder setShouldShowEntitlementUi(boolean);
method @NonNull @RequiresPermission("android.permission.TETHER_PRIVILEGED") public android.net.TetheringManager.TetheringRequest.Builder setStaticIpv4Addresses(@NonNull android.net.LinkAddress, @NonNull android.net.LinkAddress);
@@ -3193,6 +3194,7 @@
method @Nullable public final android.os.IBinder onBind(@NonNull android.content.Intent);
method @Nullable public android.os.Bundle onGetInlineSuggestionsRendererInfo();
method @Nullable public android.view.View onRenderSuggestion(@NonNull android.service.autofill.InlinePresentation, int, int);
+ method public final void startIntentSender(@NonNull android.content.IntentSender);
field public static final String SERVICE_INTERFACE = "android.service.autofill.InlineSuggestionRenderService";
}
@@ -3800,43 +3802,6 @@
field public static final int UNKNOWN_CARRIER_ID_LIST_VERSION = -1; // 0xffffffff
}
- public class TelephonyRegistryManager {
- method public void addOnOpportunisticSubscriptionsChangedListener(@NonNull android.telephony.SubscriptionManager.OnOpportunisticSubscriptionsChangedListener, @NonNull java.util.concurrent.Executor);
- method public void addOnSubscriptionsChangedListener(@NonNull android.telephony.SubscriptionManager.OnSubscriptionsChangedListener, @NonNull java.util.concurrent.Executor);
- method public void listenForSubscriber(int, @NonNull String, @NonNull String, @NonNull android.telephony.PhoneStateListener, int, boolean);
- method public void notifyActiveDataSubIdChanged(int);
- method public void notifyBarringInfoChanged(int, int, @NonNull android.telephony.BarringInfo);
- method public void notifyCallForwardingChanged(int, boolean);
- method public void notifyCallQualityChanged(int, int, @NonNull android.telephony.CallQuality, int);
- method public void notifyCallStateChanged(int, int, int, @Nullable String);
- method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void notifyCallStateChangedForAllSubscriptions(int, @Nullable String);
- method public void notifyCarrierNetworkChange(boolean);
- method public void notifyCellInfoChanged(int, @NonNull java.util.List<android.telephony.CellInfo>);
- method public void notifyCellLocation(int, @NonNull android.telephony.CellIdentity);
- method public void notifyDataActivationStateChanged(int, int, int);
- method public void notifyDataActivityChanged(int, int);
- method public void notifyDataConnectionForSubscriber(int, int, int, @Nullable android.telephony.PreciseDataConnectionState);
- method public void notifyDisconnectCause(int, int, int, int);
- method public void notifyDisplayInfoChanged(int, int, @NonNull android.telephony.TelephonyDisplayInfo);
- method public void notifyEmergencyNumberList(int, int);
- method public void notifyImsDisconnectCause(int, @NonNull android.telephony.ims.ImsReasonInfo);
- method public void notifyMessageWaitingChanged(int, int, boolean);
- method public void notifyOutgoingEmergencyCall(int, int, @NonNull android.telephony.emergency.EmergencyNumber);
- method public void notifyOutgoingEmergencySms(int, int, @NonNull android.telephony.emergency.EmergencyNumber);
- method public void notifyPhoneCapabilityChanged(@NonNull android.telephony.PhoneCapability);
- method public void notifyPreciseCallState(int, int, int, int, int);
- method public void notifyPreciseDataConnectionFailed(int, int, int, @Nullable String, int);
- method public void notifyRadioPowerStateChanged(int, int, int);
- method public void notifyRegistrationFailed(int, int, @NonNull android.telephony.CellIdentity, @NonNull String, int, int, int);
- method public void notifyServiceStateChanged(int, int, @NonNull android.telephony.ServiceState);
- method public void notifySignalStrengthChanged(int, int, @NonNull android.telephony.SignalStrength);
- method public void notifySrvccStateChanged(int, int);
- method public void notifyUserMobileDataStateChanged(int, int, boolean);
- method public void notifyVoiceActivationStateChanged(int, int, int);
- method public void removeOnOpportunisticSubscriptionsChangedListener(@NonNull android.telephony.SubscriptionManager.OnOpportunisticSubscriptionsChangedListener);
- method public void removeOnSubscriptionsChangedListener(@NonNull android.telephony.SubscriptionManager.OnSubscriptionsChangedListener);
- }
-
}
package android.telephony.emergency {
diff --git a/cmds/statsd/src/StatsService.cpp b/cmds/statsd/src/StatsService.cpp
index 7ad9826..812d10b 100644
--- a/cmds/statsd/src/StatsService.cpp
+++ b/cmds/statsd/src/StatsService.cpp
@@ -1209,9 +1209,10 @@
return Status::ok();
}
-Status StatsService::registerNativePullAtomCallback(int32_t atomTag, int64_t coolDownNs,
- int64_t timeoutNs, const std::vector<int32_t>& additiveFields,
- const shared_ptr<IPullAtomCallback>& pullerCallback) {
+Status StatsService::registerNativePullAtomCallback(
+ int32_t atomTag, int64_t coolDownMillis, int64_t timeoutMillis,
+ const std::vector<int32_t>& additiveFields,
+ const shared_ptr<IPullAtomCallback>& pullerCallback) {
if (!checkPermission(kPermissionRegisterPullAtom)) {
return exception(
EX_SECURITY,
@@ -1220,7 +1221,8 @@
}
VLOG("StatsService::registerNativePullAtomCallback called.");
int32_t uid = AIBinder_getCallingUid();
- mPullerManager->RegisterPullAtomCallback(uid, atomTag, coolDownNs, timeoutNs, additiveFields,
+ mPullerManager->RegisterPullAtomCallback(uid, atomTag, MillisToNano(coolDownMillis),
+ MillisToNano(timeoutMillis), additiveFields,
pullerCallback);
return Status::ok();
}
diff --git a/cmds/statsd/src/StatsService.h b/cmds/statsd/src/StatsService.h
index c256e1f..114c84f 100644
--- a/cmds/statsd/src/StatsService.h
+++ b/cmds/statsd/src/StatsService.h
@@ -175,8 +175,9 @@
/**
* Binder call to register a callback function for a pulled atom.
*/
- virtual Status registerNativePullAtomCallback(int32_t atomTag, int64_t coolDownNs,
- int64_t timeoutNs, const std::vector<int32_t>& additiveFields,
+ virtual Status registerNativePullAtomCallback(
+ int32_t atomTag, int64_t coolDownMillis, int64_t timeoutMillis,
+ const std::vector<int32_t>& additiveFields,
const shared_ptr<IPullAtomCallback>& pullerCallback) override;
/**
diff --git a/cmds/statsd/src/atoms.proto b/cmds/statsd/src/atoms.proto
index f0a5b51..f9711c3 100644
--- a/cmds/statsd/src/atoms.proto
+++ b/cmds/statsd/src/atoms.proto
@@ -3020,7 +3020,7 @@
optional string process_name = 3;
// The pid if available. -1 means not available.
- optional sint32 pid = 4;
+ optional int32 pid = 4;
optional string package_name = 5;
@@ -3056,7 +3056,7 @@
optional string process_name = 3;
// The pid if available. -1 means not available.
- optional sint32 pid = 4;
+ optional int32 pid = 4;
optional android.server.ErrorSource error_source = 5;
}
diff --git a/cmds/statsd/src/shell/ShellSubscriber.cpp b/cmds/statsd/src/shell/ShellSubscriber.cpp
index 6fa1654..c677222 100644
--- a/cmds/statsd/src/shell/ShellSubscriber.cpp
+++ b/cmds/statsd/src/shell/ShellSubscriber.cpp
@@ -41,7 +41,7 @@
// critical-section
std::unique_lock<std::mutex> lock(mMutex);
- if (myToken < mToken) {
+ if (myToken != mToken) {
// Some other subscription has already come in. Stop.
return;
}
diff --git a/cmds/statsd/src/shell/ShellSubscriber.h b/cmds/statsd/src/shell/ShellSubscriber.h
index 7fd625e..2f9b61a 100644
--- a/cmds/statsd/src/shell/ShellSubscriber.h
+++ b/cmds/statsd/src/shell/ShellSubscriber.h
@@ -108,7 +108,7 @@
std::shared_ptr<SubscriptionInfo> mSubscriptionInfo = nullptr;
- int mToken;
+ int mToken = 0;
};
} // namespace statsd
diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java
index b00f542..556f841 100644
--- a/core/java/android/app/ActivityManager.java
+++ b/core/java/android/app/ActivityManager.java
@@ -73,7 +73,7 @@
import android.util.DisplayMetrics;
import android.util.Singleton;
import android.util.Size;
-import android.view.IWindowContainer;
+import android.window.IWindowContainer;
import android.view.Surface;
import com.android.internal.app.LocalePicker;
@@ -4821,9 +4821,9 @@
/**
* Register with {@link HomeVisibilityObserver} with ActivityManager.
+ * TODO: b/144351078 expose as SystemApi
* @hide
*/
- @SystemApi
public void registerHomeVisibilityObserver(@NonNull HomeVisibilityObserver observer) {
Preconditions.checkNotNull(observer);
try {
@@ -4838,9 +4838,9 @@
/**
* Unregister with {@link HomeVisibilityObserver} with ActivityManager.
+ * TODO: b/144351078 expose as SystemApi
* @hide
*/
- @SystemApi
public void unregisterHomeVisibilityObserver(@NonNull HomeVisibilityObserver observer) {
Preconditions.checkNotNull(observer);
try {
diff --git a/core/java/android/app/ActivityTaskManager.java b/core/java/android/app/ActivityTaskManager.java
index fb315ad..c9673f5 100644
--- a/core/java/android/app/ActivityTaskManager.java
+++ b/core/java/android/app/ActivityTaskManager.java
@@ -30,6 +30,7 @@
import android.os.RemoteException;
import android.os.ServiceManager;
import android.util.Singleton;
+import android.window.ITaskOrganizerController;
import java.util.List;
diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java
index 9c1a861..26db8f3 100644
--- a/core/java/android/app/AppOpsManager.java
+++ b/core/java/android/app/AppOpsManager.java
@@ -776,151 +776,157 @@
/** @hide No operation specified. */
@UnsupportedAppUsage
- public static final int OP_NONE = -1;
+ public static final int OP_NONE = AppProtoEnums.APP_OP_NONE;
/** @hide Access to coarse location information. */
@UnsupportedAppUsage
@TestApi
- public static final int OP_COARSE_LOCATION = 0;
+ public static final int OP_COARSE_LOCATION = AppProtoEnums.APP_OP_COARSE_LOCATION;
/** @hide Access to fine location information. */
@UnsupportedAppUsage
- public static final int OP_FINE_LOCATION = 1;
+ public static final int OP_FINE_LOCATION = AppProtoEnums.APP_OP_FINE_LOCATION;
/** @hide Causing GPS to run. */
@UnsupportedAppUsage
- public static final int OP_GPS = 2;
+ public static final int OP_GPS = AppProtoEnums.APP_OP_GPS;
/** @hide */
@UnsupportedAppUsage
- public static final int OP_VIBRATE = 3;
+ public static final int OP_VIBRATE = AppProtoEnums.APP_OP_VIBRATE;
/** @hide */
@UnsupportedAppUsage
- public static final int OP_READ_CONTACTS = 4;
+ public static final int OP_READ_CONTACTS = AppProtoEnums.APP_OP_READ_CONTACTS;
/** @hide */
@UnsupportedAppUsage
- public static final int OP_WRITE_CONTACTS = 5;
+ public static final int OP_WRITE_CONTACTS = AppProtoEnums.APP_OP_WRITE_CONTACTS;
/** @hide */
@UnsupportedAppUsage
- public static final int OP_READ_CALL_LOG = 6;
+ public static final int OP_READ_CALL_LOG = AppProtoEnums.APP_OP_READ_CALL_LOG;
/** @hide */
@UnsupportedAppUsage
- public static final int OP_WRITE_CALL_LOG = 7;
+ public static final int OP_WRITE_CALL_LOG = AppProtoEnums.APP_OP_WRITE_CALL_LOG;
/** @hide */
@UnsupportedAppUsage
- public static final int OP_READ_CALENDAR = 8;
+ public static final int OP_READ_CALENDAR = AppProtoEnums.APP_OP_READ_CALENDAR;
/** @hide */
@UnsupportedAppUsage
- public static final int OP_WRITE_CALENDAR = 9;
+ public static final int OP_WRITE_CALENDAR = AppProtoEnums.APP_OP_WRITE_CALENDAR;
/** @hide */
@UnsupportedAppUsage
- public static final int OP_WIFI_SCAN = 10;
+ public static final int OP_WIFI_SCAN = AppProtoEnums.APP_OP_WIFI_SCAN;
/** @hide */
@UnsupportedAppUsage
- public static final int OP_POST_NOTIFICATION = 11;
+ public static final int OP_POST_NOTIFICATION = AppProtoEnums.APP_OP_POST_NOTIFICATION;
/** @hide */
@UnsupportedAppUsage
- public static final int OP_NEIGHBORING_CELLS = 12;
+ public static final int OP_NEIGHBORING_CELLS = AppProtoEnums.APP_OP_NEIGHBORING_CELLS;
/** @hide */
@UnsupportedAppUsage
- public static final int OP_CALL_PHONE = 13;
+ public static final int OP_CALL_PHONE = AppProtoEnums.APP_OP_CALL_PHONE;
/** @hide */
@UnsupportedAppUsage
- public static final int OP_READ_SMS = 14;
+ public static final int OP_READ_SMS = AppProtoEnums.APP_OP_READ_SMS;
/** @hide */
@UnsupportedAppUsage
- public static final int OP_WRITE_SMS = 15;
+ public static final int OP_WRITE_SMS = AppProtoEnums.APP_OP_WRITE_SMS;
/** @hide */
@UnsupportedAppUsage
- public static final int OP_RECEIVE_SMS = 16;
+ public static final int OP_RECEIVE_SMS = AppProtoEnums.APP_OP_RECEIVE_SMS;
/** @hide */
@UnsupportedAppUsage
- public static final int OP_RECEIVE_EMERGECY_SMS = 17;
+ public static final int OP_RECEIVE_EMERGECY_SMS =
+ AppProtoEnums.APP_OP_RECEIVE_EMERGENCY_SMS;
/** @hide */
@UnsupportedAppUsage
- public static final int OP_RECEIVE_MMS = 18;
+ public static final int OP_RECEIVE_MMS = AppProtoEnums.APP_OP_RECEIVE_MMS;
/** @hide */
@UnsupportedAppUsage
- public static final int OP_RECEIVE_WAP_PUSH = 19;
+ public static final int OP_RECEIVE_WAP_PUSH = AppProtoEnums.APP_OP_RECEIVE_WAP_PUSH;
/** @hide */
@UnsupportedAppUsage
- public static final int OP_SEND_SMS = 20;
+ public static final int OP_SEND_SMS = AppProtoEnums.APP_OP_SEND_SMS;
/** @hide */
@UnsupportedAppUsage
- public static final int OP_READ_ICC_SMS = 21;
+ public static final int OP_READ_ICC_SMS = AppProtoEnums.APP_OP_READ_ICC_SMS;
/** @hide */
@UnsupportedAppUsage
- public static final int OP_WRITE_ICC_SMS = 22;
+ public static final int OP_WRITE_ICC_SMS = AppProtoEnums.APP_OP_WRITE_ICC_SMS;
/** @hide */
@UnsupportedAppUsage
- public static final int OP_WRITE_SETTINGS = 23;
+ public static final int OP_WRITE_SETTINGS = AppProtoEnums.APP_OP_WRITE_SETTINGS;
/** @hide Required to draw on top of other apps. */
@UnsupportedAppUsage
@TestApi
- public static final int OP_SYSTEM_ALERT_WINDOW = 24;
+ public static final int OP_SYSTEM_ALERT_WINDOW = AppProtoEnums.APP_OP_SYSTEM_ALERT_WINDOW;
/** @hide */
@UnsupportedAppUsage
- public static final int OP_ACCESS_NOTIFICATIONS = 25;
+ public static final int OP_ACCESS_NOTIFICATIONS =
+ AppProtoEnums.APP_OP_ACCESS_NOTIFICATIONS;
/** @hide */
@UnsupportedAppUsage
- public static final int OP_CAMERA = 26;
+ public static final int OP_CAMERA = AppProtoEnums.APP_OP_CAMERA;
/** @hide */
@UnsupportedAppUsage
@TestApi
- public static final int OP_RECORD_AUDIO = 27;
+ public static final int OP_RECORD_AUDIO = AppProtoEnums.APP_OP_RECORD_AUDIO;
/** @hide */
@UnsupportedAppUsage
- public static final int OP_PLAY_AUDIO = 28;
+ public static final int OP_PLAY_AUDIO = AppProtoEnums.APP_OP_PLAY_AUDIO;
/** @hide */
@UnsupportedAppUsage
- public static final int OP_READ_CLIPBOARD = 29;
+ public static final int OP_READ_CLIPBOARD = AppProtoEnums.APP_OP_READ_CLIPBOARD;
/** @hide */
@UnsupportedAppUsage
- public static final int OP_WRITE_CLIPBOARD = 30;
+ public static final int OP_WRITE_CLIPBOARD = AppProtoEnums.APP_OP_WRITE_CLIPBOARD;
/** @hide */
@UnsupportedAppUsage
- public static final int OP_TAKE_MEDIA_BUTTONS = 31;
+ public static final int OP_TAKE_MEDIA_BUTTONS = AppProtoEnums.APP_OP_TAKE_MEDIA_BUTTONS;
/** @hide */
@UnsupportedAppUsage
- public static final int OP_TAKE_AUDIO_FOCUS = 32;
+ public static final int OP_TAKE_AUDIO_FOCUS = AppProtoEnums.APP_OP_TAKE_AUDIO_FOCUS;
/** @hide */
@UnsupportedAppUsage
- public static final int OP_AUDIO_MASTER_VOLUME = 33;
+ public static final int OP_AUDIO_MASTER_VOLUME = AppProtoEnums.APP_OP_AUDIO_MASTER_VOLUME;
/** @hide */
@UnsupportedAppUsage
- public static final int OP_AUDIO_VOICE_VOLUME = 34;
+ public static final int OP_AUDIO_VOICE_VOLUME = AppProtoEnums.APP_OP_AUDIO_VOICE_VOLUME;
/** @hide */
@UnsupportedAppUsage
- public static final int OP_AUDIO_RING_VOLUME = 35;
+ public static final int OP_AUDIO_RING_VOLUME = AppProtoEnums.APP_OP_AUDIO_RING_VOLUME;
/** @hide */
@UnsupportedAppUsage
- public static final int OP_AUDIO_MEDIA_VOLUME = 36;
+ public static final int OP_AUDIO_MEDIA_VOLUME = AppProtoEnums.APP_OP_AUDIO_MEDIA_VOLUME;
/** @hide */
@UnsupportedAppUsage
- public static final int OP_AUDIO_ALARM_VOLUME = 37;
+ public static final int OP_AUDIO_ALARM_VOLUME = AppProtoEnums.APP_OP_AUDIO_ALARM_VOLUME;
/** @hide */
@UnsupportedAppUsage
- public static final int OP_AUDIO_NOTIFICATION_VOLUME = 38;
+ public static final int OP_AUDIO_NOTIFICATION_VOLUME =
+ AppProtoEnums.APP_OP_AUDIO_NOTIFICATION_VOLUME;
/** @hide */
@UnsupportedAppUsage
- public static final int OP_AUDIO_BLUETOOTH_VOLUME = 39;
+ public static final int OP_AUDIO_BLUETOOTH_VOLUME =
+ AppProtoEnums.APP_OP_AUDIO_BLUETOOTH_VOLUME;
/** @hide */
@UnsupportedAppUsage
- public static final int OP_WAKE_LOCK = 40;
+ public static final int OP_WAKE_LOCK = AppProtoEnums.APP_OP_WAKE_LOCK;
/** @hide Continually monitoring location data. */
@UnsupportedAppUsage
- public static final int OP_MONITOR_LOCATION = 41;
+ public static final int OP_MONITOR_LOCATION =
+ AppProtoEnums.APP_OP_MONITOR_LOCATION;
/** @hide Continually monitoring location data with a relatively high power request. */
@UnsupportedAppUsage
- public static final int OP_MONITOR_HIGH_POWER_LOCATION = 42;
+ public static final int OP_MONITOR_HIGH_POWER_LOCATION =
+ AppProtoEnums.APP_OP_MONITOR_HIGH_POWER_LOCATION;
/** @hide Retrieve current usage stats via {@link UsageStatsManager}. */
@UnsupportedAppUsage
- public static final int OP_GET_USAGE_STATS = 43;
+ public static final int OP_GET_USAGE_STATS = AppProtoEnums.APP_OP_GET_USAGE_STATS;
/** @hide */
@UnsupportedAppUsage
- public static final int OP_MUTE_MICROPHONE = 44;
+ public static final int OP_MUTE_MICROPHONE = AppProtoEnums.APP_OP_MUTE_MICROPHONE;
/** @hide */
@UnsupportedAppUsage
- public static final int OP_TOAST_WINDOW = 45;
+ public static final int OP_TOAST_WINDOW = AppProtoEnums.APP_OP_TOAST_WINDOW;
/** @hide Capture the device's display contents and/or audio */
@UnsupportedAppUsage
- public static final int OP_PROJECT_MEDIA = 46;
+ public static final int OP_PROJECT_MEDIA = AppProtoEnums.APP_OP_PROJECT_MEDIA;
/**
* Start (without additional user intervention) a VPN connection, as used by {@link
* android.net.VpnService} along with as Platform VPN connections, as used by {@link
@@ -933,130 +939,142 @@
* @hide
*/
@UnsupportedAppUsage
- public static final int OP_ACTIVATE_VPN = 47;
+ public static final int OP_ACTIVATE_VPN = AppProtoEnums.APP_OP_ACTIVATE_VPN;
/** @hide Access the WallpaperManagerAPI to write wallpapers. */
@UnsupportedAppUsage
- public static final int OP_WRITE_WALLPAPER = 48;
+ public static final int OP_WRITE_WALLPAPER = AppProtoEnums.APP_OP_WRITE_WALLPAPER;
/** @hide Received the assist structure from an app. */
@UnsupportedAppUsage
- public static final int OP_ASSIST_STRUCTURE = 49;
+ public static final int OP_ASSIST_STRUCTURE = AppProtoEnums.APP_OP_ASSIST_STRUCTURE;
/** @hide Received a screenshot from assist. */
@UnsupportedAppUsage
- public static final int OP_ASSIST_SCREENSHOT = 50;
+ public static final int OP_ASSIST_SCREENSHOT = AppProtoEnums.APP_OP_ASSIST_SCREENSHOT;
/** @hide Read the phone state. */
@UnsupportedAppUsage
- public static final int OP_READ_PHONE_STATE = 51;
+ public static final int OP_READ_PHONE_STATE = AppProtoEnums.APP_OP_READ_PHONE_STATE;
/** @hide Add voicemail messages to the voicemail content provider. */
@UnsupportedAppUsage
- public static final int OP_ADD_VOICEMAIL = 52;
+ public static final int OP_ADD_VOICEMAIL = AppProtoEnums.APP_OP_ADD_VOICEMAIL;
/** @hide Access APIs for SIP calling over VOIP or WiFi. */
@UnsupportedAppUsage
- public static final int OP_USE_SIP = 53;
+ public static final int OP_USE_SIP = AppProtoEnums.APP_OP_USE_SIP;
/** @hide Intercept outgoing calls. */
@UnsupportedAppUsage
- public static final int OP_PROCESS_OUTGOING_CALLS = 54;
+ public static final int OP_PROCESS_OUTGOING_CALLS =
+ AppProtoEnums.APP_OP_PROCESS_OUTGOING_CALLS;
/** @hide User the fingerprint API. */
@UnsupportedAppUsage
- public static final int OP_USE_FINGERPRINT = 55;
+ public static final int OP_USE_FINGERPRINT = AppProtoEnums.APP_OP_USE_FINGERPRINT;
/** @hide Access to body sensors such as heart rate, etc. */
@UnsupportedAppUsage
- public static final int OP_BODY_SENSORS = 56;
+ public static final int OP_BODY_SENSORS = AppProtoEnums.APP_OP_BODY_SENSORS;
/** @hide Read previously received cell broadcast messages. */
@UnsupportedAppUsage
- public static final int OP_READ_CELL_BROADCASTS = 57;
+ public static final int OP_READ_CELL_BROADCASTS = AppProtoEnums.APP_OP_READ_CELL_BROADCASTS;
/** @hide Inject mock location into the system. */
@UnsupportedAppUsage
- public static final int OP_MOCK_LOCATION = 58;
+ public static final int OP_MOCK_LOCATION = AppProtoEnums.APP_OP_MOCK_LOCATION;
/** @hide Read external storage. */
@UnsupportedAppUsage
- public static final int OP_READ_EXTERNAL_STORAGE = 59;
+ public static final int OP_READ_EXTERNAL_STORAGE = AppProtoEnums.APP_OP_READ_EXTERNAL_STORAGE;
/** @hide Write external storage. */
@UnsupportedAppUsage
- public static final int OP_WRITE_EXTERNAL_STORAGE = 60;
+ public static final int OP_WRITE_EXTERNAL_STORAGE =
+ AppProtoEnums.APP_OP_WRITE_EXTERNAL_STORAGE;
/** @hide Turned on the screen. */
@UnsupportedAppUsage
- public static final int OP_TURN_SCREEN_ON = 61;
+ public static final int OP_TURN_SCREEN_ON = AppProtoEnums.APP_OP_TURN_SCREEN_ON;
/** @hide Get device accounts. */
@UnsupportedAppUsage
- public static final int OP_GET_ACCOUNTS = 62;
+ public static final int OP_GET_ACCOUNTS = AppProtoEnums.APP_OP_GET_ACCOUNTS;
/** @hide Control whether an application is allowed to run in the background. */
@UnsupportedAppUsage
- public static final int OP_RUN_IN_BACKGROUND = 63;
+ public static final int OP_RUN_IN_BACKGROUND =
+ AppProtoEnums.APP_OP_RUN_ANY_IN_BACKGROUND;
/** @hide */
@UnsupportedAppUsage
- public static final int OP_AUDIO_ACCESSIBILITY_VOLUME = 64;
+ public static final int OP_AUDIO_ACCESSIBILITY_VOLUME =
+ AppProtoEnums.APP_OP_AUDIO_ACCESSIBILITY_VOLUME;
/** @hide Read the phone number. */
@UnsupportedAppUsage
- public static final int OP_READ_PHONE_NUMBERS = 65;
+ public static final int OP_READ_PHONE_NUMBERS = AppProtoEnums.APP_OP_READ_PHONE_NUMBERS;
/** @hide Request package installs through package installer */
@UnsupportedAppUsage
- public static final int OP_REQUEST_INSTALL_PACKAGES = 66;
+ public static final int OP_REQUEST_INSTALL_PACKAGES =
+ AppProtoEnums.APP_OP_REQUEST_INSTALL_PACKAGES;
/** @hide Enter picture-in-picture. */
@UnsupportedAppUsage
- public static final int OP_PICTURE_IN_PICTURE = 67;
+ public static final int OP_PICTURE_IN_PICTURE = AppProtoEnums.APP_OP_PICTURE_IN_PICTURE;
/** @hide Instant app start foreground service. */
@UnsupportedAppUsage
- public static final int OP_INSTANT_APP_START_FOREGROUND = 68;
+ public static final int OP_INSTANT_APP_START_FOREGROUND =
+ AppProtoEnums.APP_OP_INSTANT_APP_START_FOREGROUND;
/** @hide Answer incoming phone calls */
@UnsupportedAppUsage
- public static final int OP_ANSWER_PHONE_CALLS = 69;
+ public static final int OP_ANSWER_PHONE_CALLS = AppProtoEnums.APP_OP_ANSWER_PHONE_CALLS;
/** @hide Run jobs when in background */
@UnsupportedAppUsage
- public static final int OP_RUN_ANY_IN_BACKGROUND = 70;
+ public static final int OP_RUN_ANY_IN_BACKGROUND = AppProtoEnums.APP_OP_RUN_ANY_IN_BACKGROUND;
/** @hide Change Wi-Fi connectivity state */
@UnsupportedAppUsage
- public static final int OP_CHANGE_WIFI_STATE = 71;
+ public static final int OP_CHANGE_WIFI_STATE = AppProtoEnums.APP_OP_CHANGE_WIFI_STATE;
/** @hide Request package deletion through package installer */
@UnsupportedAppUsage
- public static final int OP_REQUEST_DELETE_PACKAGES = 72;
+ public static final int OP_REQUEST_DELETE_PACKAGES =
+ AppProtoEnums.APP_OP_REQUEST_DELETE_PACKAGES;
/** @hide Bind an accessibility service. */
@UnsupportedAppUsage
- public static final int OP_BIND_ACCESSIBILITY_SERVICE = 73;
+ public static final int OP_BIND_ACCESSIBILITY_SERVICE =
+ AppProtoEnums.APP_OP_BIND_ACCESSIBILITY_SERVICE;
/** @hide Continue handover of a call from another app */
@UnsupportedAppUsage
- public static final int OP_ACCEPT_HANDOVER = 74;
+ public static final int OP_ACCEPT_HANDOVER = AppProtoEnums.APP_OP_ACCEPT_HANDOVER;
/** @hide Create and Manage IPsec Tunnels */
@UnsupportedAppUsage
- public static final int OP_MANAGE_IPSEC_TUNNELS = 75;
+ public static final int OP_MANAGE_IPSEC_TUNNELS = AppProtoEnums.APP_OP_MANAGE_IPSEC_TUNNELS;
/** @hide Any app start foreground service. */
@UnsupportedAppUsage
@TestApi
- public static final int OP_START_FOREGROUND = 76;
+ public static final int OP_START_FOREGROUND = AppProtoEnums.APP_OP_START_FOREGROUND;
/** @hide */
@UnsupportedAppUsage
- public static final int OP_BLUETOOTH_SCAN = 77;
+ public static final int OP_BLUETOOTH_SCAN = AppProtoEnums.APP_OP_BLUETOOTH_SCAN;
/** @hide Use the BiometricPrompt/BiometricManager APIs. */
- public static final int OP_USE_BIOMETRIC = 78;
+ public static final int OP_USE_BIOMETRIC = AppProtoEnums.APP_OP_USE_BIOMETRIC;
/** @hide Physical activity recognition. */
- public static final int OP_ACTIVITY_RECOGNITION = 79;
+ public static final int OP_ACTIVITY_RECOGNITION = AppProtoEnums.APP_OP_ACTIVITY_RECOGNITION;
/** @hide Financial app sms read. */
- public static final int OP_SMS_FINANCIAL_TRANSACTIONS = 80;
+ public static final int OP_SMS_FINANCIAL_TRANSACTIONS =
+ AppProtoEnums.APP_OP_SMS_FINANCIAL_TRANSACTIONS;
/** @hide Read media of audio type. */
- public static final int OP_READ_MEDIA_AUDIO = 81;
+ public static final int OP_READ_MEDIA_AUDIO = AppProtoEnums.APP_OP_READ_MEDIA_AUDIO;
/** @hide Write media of audio type. */
- public static final int OP_WRITE_MEDIA_AUDIO = 82;
+ public static final int OP_WRITE_MEDIA_AUDIO = AppProtoEnums.APP_OP_WRITE_MEDIA_AUDIO;
/** @hide Read media of video type. */
- public static final int OP_READ_MEDIA_VIDEO = 83;
+ public static final int OP_READ_MEDIA_VIDEO = AppProtoEnums.APP_OP_READ_MEDIA_VIDEO;
/** @hide Write media of video type. */
- public static final int OP_WRITE_MEDIA_VIDEO = 84;
+ public static final int OP_WRITE_MEDIA_VIDEO = AppProtoEnums.APP_OP_WRITE_MEDIA_VIDEO;
/** @hide Read media of image type. */
- public static final int OP_READ_MEDIA_IMAGES = 85;
+ public static final int OP_READ_MEDIA_IMAGES = AppProtoEnums.APP_OP_READ_MEDIA_IMAGES;
/** @hide Write media of image type. */
- public static final int OP_WRITE_MEDIA_IMAGES = 86;
+ public static final int OP_WRITE_MEDIA_IMAGES = AppProtoEnums.APP_OP_WRITE_MEDIA_IMAGES;
/** @hide Has a legacy (non-isolated) view of storage. */
- public static final int OP_LEGACY_STORAGE = 87;
+ public static final int OP_LEGACY_STORAGE = AppProtoEnums.APP_OP_LEGACY_STORAGE;
/** @hide Accessing accessibility features */
- public static final int OP_ACCESS_ACCESSIBILITY = 88;
+ public static final int OP_ACCESS_ACCESSIBILITY = AppProtoEnums.APP_OP_ACCESS_ACCESSIBILITY;
/** @hide Read the device identifiers (IMEI / MEID, IMSI, SIM / Build serial) */
- public static final int OP_READ_DEVICE_IDENTIFIERS = 89;
+ public static final int OP_READ_DEVICE_IDENTIFIERS =
+ AppProtoEnums.APP_OP_READ_DEVICE_IDENTIFIERS;
/** @hide Read location metadata from media */
- public static final int OP_ACCESS_MEDIA_LOCATION = 90;
+ public static final int OP_ACCESS_MEDIA_LOCATION = AppProtoEnums.APP_OP_ACCESS_MEDIA_LOCATION;
/** @hide Query all apps on device, regardless of declarations in the calling app manifest */
- public static final int OP_QUERY_ALL_PACKAGES = 91;
+ public static final int OP_QUERY_ALL_PACKAGES = AppProtoEnums.APP_OP_QUERY_ALL_PACKAGES;
/** @hide Access all external storage */
- public static final int OP_MANAGE_EXTERNAL_STORAGE = 92;
+ public static final int OP_MANAGE_EXTERNAL_STORAGE =
+ AppProtoEnums.APP_OP_MANAGE_EXTERNAL_STORAGE;
/** @hide Communicate cross-profile within the same profile group. */
- public static final int OP_INTERACT_ACROSS_PROFILES = 93;
+ public static final int OP_INTERACT_ACROSS_PROFILES =
+ AppProtoEnums.APP_OP_INTERACT_ACROSS_PROFILES;
/**
* Start (without additional user intervention) a Platform VPN connection, as used by {@link
* android.net.VpnManager}
@@ -1067,14 +1085,15 @@
*
* @hide
*/
- public static final int OP_ACTIVATE_PLATFORM_VPN = 94;
+ public static final int OP_ACTIVATE_PLATFORM_VPN = AppProtoEnums.APP_OP_ACTIVATE_PLATFORM_VPN;
/** @hide */
- public static final int OP_LOADER_USAGE_STATS = 95;
+ public static final int OP_LOADER_USAGE_STATS = AppProtoEnums.APP_OP_LOADER_USAGE_STATS;
/** @hide Access telephony call audio */
- public static final int OP_ACCESS_CALL_AUDIO = 96;
+ public static final int OP_ACCESS_CALL_AUDIO = AppProtoEnums.APP_OP_ACCESS_CALL_AUDIO;
/** @hide Auto-revoke app permissions if app is unused for an extended period */
- public static final int OP_AUTO_REVOKE_PERMISSIONS_IF_UNUSED = 97;
+ public static final int OP_AUTO_REVOKE_PERMISSIONS_IF_UNUSED =
+ AppProtoEnums.APP_OP_AUTO_REVOKE_PERMISSIONS_IF_UNUSED;
/**
* Whether {@link #OP_AUTO_REVOKE_PERMISSIONS_IF_UNUSED} is allowed to be changed by
@@ -1082,7 +1101,8 @@
*
* @hide
*/
- public static final int OP_AUTO_REVOKE_MANAGED_BY_INSTALLER = 98;
+ public static final int OP_AUTO_REVOKE_MANAGED_BY_INSTALLER =
+ AppProtoEnums.APP_OP_AUTO_REVOKE_MANAGED_BY_INSTALLER;
/** @hide */
@UnsupportedAppUsage
@@ -2339,114 +2359,6 @@
};
/**
- * This maps each operation to its statsd logging code.
- */
- private static int[] sOpToLoggingId = new int[]{
- AppProtoEnums.APP_OP_COARSE_LOCATION, // OP_COARSE_LOCATION
- AppProtoEnums.APP_OP_FINE_LOCATION, // OP_FINE_LOCATION
- AppProtoEnums.APP_OP_GPS, // OP_ID__GPS
- AppProtoEnums.APP_OP_VIBRATE, // OP_VIBRATE
- AppProtoEnums.APP_OP_READ_CONTACTS, // OP_READ_CONTACTS
- AppProtoEnums.APP_OP_WRITE_CONTACTS, // OP_WRITE_CONTACTS
- AppProtoEnums.APP_OP_READ_CALL_LOG, // OP_READ_CALL_LOG
- AppProtoEnums.APP_OP_WRITE_CALL_LOG, // OP_WRITE_CALL_LOG
- AppProtoEnums.APP_OP_READ_CALENDAR, // OP_READ_CALENDAR
- AppProtoEnums.APP_OP_WRITE_CALENDAR, // OP_WRITE_CALENDAR
- AppProtoEnums.APP_OP_WIFI_SCAN, // OP_WIFI_SCAN
- AppProtoEnums.APP_OP_POST_NOTIFICATION, // OP_POST_NOTIFICATION
- AppProtoEnums.APP_OP_NEIGHBORING_CELLS, // OP_NEIGHBORING_CELLS
- AppProtoEnums.APP_OP_CALL_PHONE, // OP_CALL_PHONE
- AppProtoEnums.APP_OP_READ_SMS, // OP_READ_SMS
- AppProtoEnums.APP_OP_WRITE_SMS, // OP_WRITE_SMS
- AppProtoEnums.APP_OP_RECEIVE_SMS, // OP_RECEIVE_SMS
- AppProtoEnums.APP_OP_RECEIVE_EMERGENCY_SMS, // OP_RECEIVE_EMERGENCY_SMS
- AppProtoEnums.APP_OP_RECEIVE_MMS, // OP_RECEIVE_MMS
- AppProtoEnums.APP_OP_RECEIVE_WAP_PUSH, // OP_RECEIVE_WAP_PUSH
- AppProtoEnums.APP_OP_SEND_SMS, // OP_SEND_SMS
- AppProtoEnums.APP_OP_READ_ICC_SMS, // OP_READ_ICC_SMS
- AppProtoEnums.APP_OP_WRITE_ICC_SMS, // OP_WRITE_ICC_SMS
- AppProtoEnums.APP_OP_WRITE_SETTINGS, // OP_WRITE_SETTINGS
- AppProtoEnums.APP_OP_SYSTEM_ALERT_WINDOW, // OP_SYSTEM_ALERT_WINDOW
- AppProtoEnums.APP_OP_ACCESS_NOTIFICATIONS, // OP_ACCESS_NOTIFICATIONS
- AppProtoEnums.APP_OP_CAMERA, // OP_CAMERA
- AppProtoEnums.APP_OP_RECORD_AUDIO, // OP_RECORD_AUDIO
- AppProtoEnums.APP_OP_PLAY_AUDIO, // OP_PLAY_AUDIO
- AppProtoEnums.APP_OP_READ_CLIPBOARD, // OP_READ_CLIPBOARD
- AppProtoEnums.APP_OP_WRITE_CLIPBOARD, // OP_WRITE_CLIPBOARD
- AppProtoEnums.APP_OP_TAKE_MEDIA_BUTTONS, // OP_TAKE_MEDIA_BUTTONS
- AppProtoEnums.APP_OP_TAKE_AUDIO_FOCUS, // OP_TAKE_AUDIO_FOCUS
- AppProtoEnums.APP_OP_AUDIO_MASTER_VOLUME, // OP_AUDIO_MASTER_VOLUME
- AppProtoEnums.APP_OP_AUDIO_VOICE_VOLUME, // OP_AUDIO_VOICE_VOLUME
- AppProtoEnums.APP_OP_AUDIO_RING_VOLUME, // OP_AUDIO_RING_VOLUME
- AppProtoEnums.APP_OP_AUDIO_MEDIA_VOLUME, // OP_AUDIO_MEDIA_VOLUME
- AppProtoEnums.APP_OP_AUDIO_ALARM_VOLUME, // OP_AUDIO_ALARM_VOLUME
- AppProtoEnums.APP_OP_AUDIO_NOTIFICATION_VOLUME, // OP_AUDIO_NOTIFICATION_VOLUME
- AppProtoEnums.APP_OP_AUDIO_BLUETOOTH_VOLUME, // OP_AUDIO_BLUETOOTH_VOLUME
- AppProtoEnums.APP_OP_WAKE_LOCK, // OP_WAKE_LOCK
- AppProtoEnums.APP_OP_MONITOR_LOCATION, // OP_MONITOR_LOCATION
- AppProtoEnums.APP_OP_MONITOR_HIGH_POWER_LOCATION, // OP_MONITOR_HIGH_POWER_LOCATION
- AppProtoEnums.APP_OP_GET_USAGE_STATS, // OP_GET_USAGE_STATS
- AppProtoEnums.APP_OP_MUTE_MICROPHONE, //OP_MUTE_MICROPHONE
- AppProtoEnums.APP_OP_TOAST_WINDOW, // OP_TOAST_WINDOW
- AppProtoEnums.APP_OP_PROJECT_MEDIA, // OP_PROJECT_MEDIA
- AppProtoEnums.APP_OP_ACTIVATE_VPN, // OP_ACTIVATE_VPN
- AppProtoEnums.APP_OP_WRITE_WALLPAPER, // OP_WRITE_WALLPAPER
- AppProtoEnums.APP_OP_ASSIST_STRUCTURE, // OP_ASSIST_STRUCTURE
- AppProtoEnums.APP_OP_ASSIST_SCREENSHOT, // OP_ASSIST_SCREENSHOT
- AppProtoEnums.APP_OP_READ_PHONE_STATE, // OP_READ_PHONE_STATE
- AppProtoEnums.APP_OP_ADD_VOICEMAIL, // OP_ADD_VOICEMAIL
- AppProtoEnums.APP_OP_USE_SIP, // OP_USE_SIP
- AppProtoEnums.APP_OP_PROCESS_OUTGOING_CALLS, // OP_PROCESS_OUTGOING_CALLS
- AppProtoEnums.APP_OP_USE_FINGERPRINT, // OP_USE_FINGERPRINT
- AppProtoEnums.APP_OP_BODY_SENSORS, // OP_BODY_SENSORS
- AppProtoEnums.APP_OP_READ_CELL_BROADCASTS, // OP_READ_CELL_BROADCASTS
- AppProtoEnums.APP_OP_MOCK_LOCATION, // OP_MOCK_LOCATION
- AppProtoEnums.APP_OP_READ_EXTERNAL_STORAGE, // OP_READ_EXTERNAL_STORAGE
- AppProtoEnums.APP_OP_WRITE_EXTERNAL_STORAGE, // OP_WRITE_EXTERNAL_STORAGE
- AppProtoEnums.APP_OP_TURN_SCREEN_ON, // OP_TURN_SCREEN_ON
- AppProtoEnums.APP_OP_GET_ACCOUNTS, // OP_GET_ACCOUNTS
- AppProtoEnums.APP_OP_RUN_IN_BACKGROUND, // OP_RUN_IN_BACKGROUND
- AppProtoEnums.APP_OP_AUDIO_ACCESSIBILITY_VOLUME, // OP_AUDIO_ACCESSIBILITY_VOLUME
- AppProtoEnums.APP_OP_READ_PHONE_NUMBERS, // OP_READ_PHONE_NUMBERS
- AppProtoEnums.APP_OP_REQUEST_INSTALL_PACKAGES, // OP_REQUEST_INSTALL_PACKAGES
- AppProtoEnums.APP_OP_PICTURE_IN_PICTURE, // OP_PICTURE_IN_PICTURE
- AppProtoEnums.APP_OP_INSTANT_APP_START_FOREGROUND, // OP_INSTANT_APP_START_FOREGROUND
- AppProtoEnums.APP_OP_ANSWER_PHONE_CALLS, // OP_ANSWER_PHONE_CALLS
- AppProtoEnums.APP_OP_RUN_ANY_IN_BACKGROUND, // OP_RUN_ANY_IN_BACKGROUND
- AppProtoEnums.APP_OP_CHANGE_WIFI_STATE, // OP_CHANGE_WIFI_STATE
- AppProtoEnums.APP_OP_REQUEST_DELETE_PACKAGES, // OP_REQUEST_DELETE_PACKAGES
- AppProtoEnums.APP_OP_BIND_ACCESSIBILITY_SERVICE, // OP_BIND_ACCESSIBILITY_SERVICE
- AppProtoEnums.APP_OP_ACCEPT_HANDOVER, // OP_ACCEPT_HANDOVER
- AppProtoEnums.APP_OP_MANAGE_IPSEC_TUNNELS, // OP_MANAGE_IPSEC_TUNNELS
- AppProtoEnums.APP_OP_START_FOREGROUND, // OP_START_FOREGROUND
- AppProtoEnums.APP_OP_BLUETOOTH_SCAN, // OP_BLUETOOTH_SCAN
- AppProtoEnums.APP_OP_USE_BIOMETRIC, // OP_USE_BIOMETRIC
- AppProtoEnums.APP_OP_ACTIVITY_RECOGNITION, // OP_ACTIVITY_RECOGNITION
- AppProtoEnums.APP_OP_SMS_FINANCIAL_TRANSACTIONS, // OP_SMS_FINANCIAL_TRANSACTIONS
- AppProtoEnums.APP_OP_READ_MEDIA_AUDIO, // OP_READ_MEDIA_AUDIO
- AppProtoEnums.APP_OP_WRITE_MEDIA_AUDIO, // OP_WRITE_MEDIA_AUDIO
- AppProtoEnums.APP_OP_READ_MEDIA_VIDEO, // OP_READ_MEDIA_VIDEO
- AppProtoEnums.APP_OP_WRITE_MEDIA_VIDEO, // OP_WRITE_MEDIA_VIDEO
- AppProtoEnums.APP_OP_READ_MEDIA_IMAGES, // OP_READ_MEDIA_IMAGES
- AppProtoEnums.APP_OP_WRITE_MEDIA_IMAGES, // OP_WRITE_MEDIA_IMAGES
- AppProtoEnums.APP_OP_LEGACY_STORAGE, // OP_LEGACY_STORAGE
- AppProtoEnums.APP_OP_ACCESS_ACCESSIBILITY, // OP_ACCESS_ACCESSIBILITY
- AppProtoEnums.APP_OP_READ_DEVICE_IDENTIFIERS, // OP_READ_DEVICE_IDENTIFIERS
- AppProtoEnums.APP_OP_ACCESS_MEDIA_LOCATION, // OP_ACCESS_MEDIA_LOCATION
- AppProtoEnums.APP_OP_QUERY_ALL_PACKAGES, // OP_QUERY_ALL_PACKAGES
- AppProtoEnums.APP_OP_MANAGE_EXTERNAL_STORAGE, // OP_MANAGE_EXTERNAL_STORAGE
- AppProtoEnums.APP_OP_INTERACT_ACROSS_PROFILES, // OP_INTERACT_ACROSS_PROFILES
- AppProtoEnums.APP_OP_ACTIVATE_PLATFORM_VPN, // OP_ACTIVATE_PLATFORM_VPN
- AppProtoEnums.APP_OP_LOADER_USAGE_STATS, // OP_LOADER_USAGE_STATS
- AppProtoEnums.APP_OP_ACCESS_CALL_AUDIO, // OP_ACCESS_CALL_AUDIO
- AppProtoEnums.APP_OP_AUTO_REVOKE_PERMISSIONS_IF_UNUSED,
- // OP_AUTO_REVOKE_PERMISSIONS_IF_UNUSED
- AppProtoEnums.APP_OP_AUTO_REVOKE_MANAGED_BY_INSTALLER
- //OP_AUTO_REVOKE_MANAGED_BY_INSTALLER
- };
-
-
- /**
* Mapping from an app op name to the app op code.
*/
private static HashMap<String, Integer> sOpStrToOp = new HashMap<>();
@@ -2487,10 +2399,6 @@
throw new IllegalStateException("sOpToString length " + sOpToString.length
+ " should be " + _NUM_OP);
}
- if (sOpToLoggingId.length != _NUM_OP) {
- throw new IllegalStateException("sOpToLoggingId length " + sOpToLoggingId.length
- + " should be " + _NUM_OP);
- }
if (sOpNames.length != _NUM_OP) {
throw new IllegalStateException("sOpNames length " + sOpNames.length
+ " should be " + _NUM_OP);
@@ -2575,15 +2483,6 @@
}
/**
- * Retrieve a logging id for the operation.
- *
- * @hide
- */
- public static int opToLoggingId(int op) {
- return sOpToLoggingId[op];
- }
-
- /**
* @hide
*/
public static int strDebugOpToOp(String op) {
@@ -6037,11 +5936,6 @@
return mOp;
}
- /** @hide */
- public int getLoggingOpCode() {
- return AppOpsManager.opToLoggingId(mOp);
- }
-
/**
* Gets the number times the op was accessed (performed) in the foreground.
*
diff --git a/core/java/android/app/HomeVisibilityObserver.java b/core/java/android/app/HomeVisibilityObserver.java
index f3465f8..8422c6f 100644
--- a/core/java/android/app/HomeVisibilityObserver.java
+++ b/core/java/android/app/HomeVisibilityObserver.java
@@ -16,7 +16,6 @@
package android.app;
-import android.annotation.SystemApi;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
@@ -28,9 +27,9 @@
* An observer / callback to create and register by
* {@link ActivityManager#registerHomeVisibilityObserver} so that it's triggered when
* visibility of home page changes.
+ * TODO: b/144351078 expose as SystemApi
* @hide
*/
-@SystemApi
public abstract class HomeVisibilityObserver {
private Context mContext;
private ActivityManager mActivityManager;
diff --git a/core/java/android/app/IActivityTaskManager.aidl b/core/java/android/app/IActivityTaskManager.aidl
index 7c89263..ab5c678 100644
--- a/core/java/android/app/IActivityTaskManager.aidl
+++ b/core/java/android/app/IActivityTaskManager.aidl
@@ -29,7 +29,7 @@
import android.app.IRequestFinishCallback;
import android.app.IServiceConnection;
import android.app.IStopUserCallback;
-import android.app.ITaskOrganizerController;
+import android.window.ITaskOrganizerController;
import android.app.ITaskStackListener;
import android.app.IUiAutomationConnection;
import android.app.IUidObserver;
@@ -69,7 +69,7 @@
import android.os.WorkSource;
import android.service.voice.IVoiceInteractionSession;
import android.view.IRecentsAnimationRunner;
-import android.view.ITaskOrganizer;
+import android.window.ITaskOrganizer;
import android.view.RemoteAnimationDefinition;
import android.view.RemoteAnimationAdapter;
import com.android.internal.app.IVoiceInteractor;
diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java
index f6ab9af4..31fc2d0 100644
--- a/core/java/android/app/Notification.java
+++ b/core/java/android/app/Notification.java
@@ -7583,7 +7583,10 @@
isOneToOne = !isGroupConversation();
}
boolean isConversationLayout = mConversationType != CONVERSATION_TYPE_LEGACY;
- Icon largeIcon = isConversationLayout ? mShortcutIcon : mBuilder.mN.mLargeIcon;
+ boolean isImportantConversation = mConversationType == CONVERSATION_TYPE_IMPORTANT;
+ Icon largeIcon = isConversationLayout && mShortcutIcon != null
+ ? mShortcutIcon
+ : mBuilder.mN.mLargeIcon;
TemplateBindResult bindResult = new TemplateBindResult();
StandardTemplateParams p = mBuilder.mParams.reset()
.hasProgress(false)
@@ -7625,6 +7628,10 @@
isOneToOne);
contentView.setCharSequence(R.id.status_bar_latest_event_content,
"setConversationTitle", conversationTitle);
+ if (isConversationLayout) {
+ contentView.setBoolean(R.id.status_bar_latest_event_content,
+ "setIsImportantConversation", isImportantConversation);
+ }
contentView.setIcon(R.id.status_bar_latest_event_content, "setLargeIcon",
largeIcon);
contentView.setBundle(R.id.status_bar_latest_event_content, "setData",
diff --git a/core/java/android/app/ResourcesManager.java b/core/java/android/app/ResourcesManager.java
index 495bb6b..5f75603 100644
--- a/core/java/android/app/ResourcesManager.java
+++ b/core/java/android/app/ResourcesManager.java
@@ -250,6 +250,28 @@
return dm;
}
+ private static void applyNonDefaultDisplayMetricsToConfiguration(
+ @NonNull DisplayMetrics dm, @NonNull Configuration config) {
+ config.touchscreen = Configuration.TOUCHSCREEN_NOTOUCH;
+ config.densityDpi = dm.densityDpi;
+ config.screenWidthDp = (int) (dm.widthPixels / dm.density);
+ config.screenHeightDp = (int) (dm.heightPixels / dm.density);
+ int sl = Configuration.resetScreenLayout(config.screenLayout);
+ if (dm.widthPixels > dm.heightPixels) {
+ config.orientation = Configuration.ORIENTATION_LANDSCAPE;
+ config.screenLayout = Configuration.reduceScreenLayout(sl,
+ config.screenWidthDp, config.screenHeightDp);
+ } else {
+ config.orientation = Configuration.ORIENTATION_PORTRAIT;
+ config.screenLayout = Configuration.reduceScreenLayout(sl,
+ config.screenHeightDp, config.screenWidthDp);
+ }
+ config.smallestScreenWidthDp = Math.min(config.screenWidthDp, config.screenHeightDp);
+ config.compatScreenWidthDp = config.screenWidthDp;
+ config.compatScreenHeightDp = config.screenHeightDp;
+ config.compatSmallestScreenWidthDp = config.smallestScreenWidthDp;
+ }
+
public boolean applyCompatConfigurationLocked(int displayDensity,
@NonNull Configuration compatConfiguration) {
if (mResCompatibilityInfo != null && !mResCompatibilityInfo.supportsScreen()) {
@@ -496,11 +518,17 @@
private Configuration generateConfig(@NonNull ResourcesKey key, @NonNull DisplayMetrics dm) {
Configuration config;
+ final boolean isDefaultDisplay = (key.mDisplayId == Display.DEFAULT_DISPLAY);
final boolean hasOverrideConfig = key.hasOverrideConfiguration();
- if (hasOverrideConfig) {
+ if (!isDefaultDisplay || hasOverrideConfig) {
config = new Configuration(getConfiguration());
- config.updateFrom(key.mOverrideConfiguration);
- if (DEBUG) Slog.v(TAG, "Applied overrideConfig=" + key.mOverrideConfiguration);
+ if (!isDefaultDisplay) {
+ applyNonDefaultDisplayMetricsToConfiguration(dm, config);
+ }
+ if (hasOverrideConfig) {
+ config.updateFrom(key.mOverrideConfiguration);
+ if (DEBUG) Slog.v(TAG, "Applied overrideConfig=" + key.mOverrideConfiguration);
+ }
} else {
config = getConfiguration();
}
@@ -1081,6 +1109,8 @@
+ resourcesImpl + " config to: " + config);
}
int displayId = key.mDisplayId;
+ final boolean hasOverrideConfiguration = key.hasOverrideConfiguration();
+ tmpConfig.setTo(config);
// Get new DisplayMetrics based on the DisplayAdjustments given to the ResourcesImpl. Update
// a copy if the CompatibilityInfo changed, because the ResourcesImpl object will handle the
@@ -1090,12 +1120,15 @@
daj = new DisplayAdjustments(daj);
daj.setCompatibilityInfo(compat);
}
- tmpConfig.setTo(config);
- if (key.hasOverrideConfiguration()) {
+ daj.setConfiguration(config);
+ DisplayMetrics dm = getDisplayMetrics(displayId, daj);
+ if (displayId != Display.DEFAULT_DISPLAY) {
+ applyNonDefaultDisplayMetricsToConfiguration(dm, tmpConfig);
+ }
+
+ if (hasOverrideConfiguration) {
tmpConfig.updateFrom(key.mOverrideConfiguration);
}
- daj.setConfiguration(tmpConfig);
- DisplayMetrics dm = getDisplayMetrics(displayId, daj);
resourcesImpl.updateConfiguration(tmpConfig, dm, compat);
}
diff --git a/core/java/android/app/TaskInfo.java b/core/java/android/app/TaskInfo.java
index b2dd0ef..7c0fc42 100644
--- a/core/java/android/app/TaskInfo.java
+++ b/core/java/android/app/TaskInfo.java
@@ -28,7 +28,7 @@
import android.os.Parcel;
import android.os.RemoteException;
import android.util.Log;
-import android.view.IWindowContainer;
+import android.window.IWindowContainer;
/**
* Stores information about a particular Task.
diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java
index 99b730e..51cfa31 100644
--- a/core/java/android/app/admin/DevicePolicyManager.java
+++ b/core/java/android/app/admin/DevicePolicyManager.java
@@ -7071,7 +7071,6 @@
*
* @hide
*/
- @SystemApi
public boolean hasDeviceIdentifierAccess(@NonNull String packageName, int pid, int uid) {
throwIfParentInstance("hasDeviceIdentifierAccess");
if (packageName == null) {
diff --git a/core/java/android/app/usage/UsageStats.java b/core/java/android/app/usage/UsageStats.java
index d06baed..4d73a61 100644
--- a/core/java/android/app/usage/UsageStats.java
+++ b/core/java/android/app/usage/UsageStats.java
@@ -27,6 +27,7 @@
import static android.app.usage.UsageEvents.Event.FOREGROUND_SERVICE_START;
import static android.app.usage.UsageEvents.Event.FOREGROUND_SERVICE_STOP;
import static android.app.usage.UsageEvents.Event.ROLLOVER_FOREGROUND_SERVICE;
+import static android.app.usage.UsageEvents.Event.USER_INTERACTION;
import android.annotation.SystemApi;
import android.compat.annotation.UnsupportedAppUsage;
@@ -580,6 +581,18 @@
incrementServiceTimeUsed(timeStamp);
}
break;
+ case USER_INTERACTION:
+ if (hasForegroundActivity()) {
+ incrementTimeUsed(timeStamp);
+ } else {
+ mLastTimeUsed = timeStamp;
+ }
+ if (hasVisibleActivity()) {
+ incrementTimeVisible(timeStamp);
+ } else {
+ mLastTimeVisible = timeStamp;
+ }
+ break;
default:
break;
}
diff --git a/core/java/android/appwidget/AppWidgetManager.java b/core/java/android/appwidget/AppWidgetManager.java
index 0d461f5..8441287 100644
--- a/core/java/android/appwidget/AppWidgetManager.java
+++ b/core/java/android/appwidget/AppWidgetManager.java
@@ -1240,4 +1240,18 @@
throw e.rethrowFromSystemServer();
}
}
+
+ /**
+ * Note an app widget is tapped on.
+ * @param uid App UID.
+ * @param packageName App package name.
+ * @hide
+ */
+ public void noteAppWidgetTapped(int uid, @NonNull String packageName) {
+ try {
+ mService.noteAppWidgetTapped(uid, packageName);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
}
diff --git a/core/java/android/bluetooth/BluetoothA2dp.java b/core/java/android/bluetooth/BluetoothA2dp.java
index b672a08..5374d6d 100644
--- a/core/java/android/bluetooth/BluetoothA2dp.java
+++ b/core/java/android/bluetooth/BluetoothA2dp.java
@@ -433,7 +433,7 @@
* is active
* @hide
*/
- @SystemApi
+ @UnsupportedAppUsage
@Nullable
@RequiresPermission(Manifest.permission.BLUETOOTH)
public BluetoothDevice getActiveDevice() {
@@ -462,7 +462,7 @@
* @return true if priority is set, false on error
* @hide
*/
- @RequiresPermission(Manifest.permission.BLUETOOTH_ADMIN)
+ @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
public boolean setPriority(BluetoothDevice device, int priority) {
if (DBG) log("setPriority(" + device + ", " + priority + ")");
return setConnectionPolicy(device, BluetoothAdapter.priorityToConnectionPolicy(priority));
@@ -481,7 +481,7 @@
* @hide
*/
@SystemApi
- @RequiresPermission(Manifest.permission.BLUETOOTH_ADMIN)
+ @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
public boolean setConnectionPolicy(@NonNull BluetoothDevice device,
@ConnectionPolicy int connectionPolicy) {
if (DBG) log("setConnectionPolicy(" + device + ", " + connectionPolicy + ")");
@@ -517,7 +517,18 @@
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023)
public int getPriority(BluetoothDevice device) {
if (VDBG) log("getPriority(" + device + ")");
- return BluetoothAdapter.connectionPolicyToPriority(getConnectionPolicy(device));
+ try {
+ final IBluetoothA2dp service = getService();
+ if (service != null && isEnabled()
+ && isValidDevice(device)) {
+ return BluetoothAdapter.connectionPolicyToPriority(service.getPriority(device));
+ }
+ if (service == null) Log.w(TAG, "Proxy not attached to service");
+ return BluetoothProfile.PRIORITY_OFF;
+ } catch (RemoteException e) {
+ Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
+ return BluetoothProfile.PRIORITY_OFF;
+ }
}
/**
@@ -532,7 +543,7 @@
* @hide
*/
@SystemApi
- @RequiresPermission(Manifest.permission.BLUETOOTH)
+ @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
public @ConnectionPolicy int getConnectionPolicy(@NonNull BluetoothDevice device) {
if (VDBG) log("getConnectionPolicy(" + device + ")");
try {
@@ -640,7 +651,7 @@
* @return the current codec status
* @hide
*/
- @SystemApi
+ @UnsupportedAppUsage
@Nullable
@RequiresPermission(Manifest.permission.BLUETOOTH)
public BluetoothCodecStatus getCodecStatus(@NonNull BluetoothDevice device) {
@@ -669,8 +680,8 @@
* @param codecConfig the codec configuration preference
* @hide
*/
- @SystemApi
- @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
+ @UnsupportedAppUsage
+ @RequiresPermission(Manifest.permission.BLUETOOTH)
public void setCodecConfigPreference(@NonNull BluetoothDevice device,
@NonNull BluetoothCodecConfig codecConfig) {
if (DBG) Log.d(TAG, "setCodecConfigPreference(" + device + ")");
@@ -699,8 +710,8 @@
* active A2DP Bluetooth device.
* @hide
*/
- @SystemApi
- @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
+ @UnsupportedAppUsage
+ @RequiresPermission(Manifest.permission.BLUETOOTH)
public void enableOptionalCodecs(@NonNull BluetoothDevice device) {
if (DBG) Log.d(TAG, "enableOptionalCodecs(" + device + ")");
verifyDeviceNotNull(device, "enableOptionalCodecs");
@@ -714,8 +725,8 @@
* active A2DP Bluetooth device.
* @hide
*/
- @SystemApi
- @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
+ @UnsupportedAppUsage
+ @RequiresPermission(Manifest.permission.BLUETOOTH)
public void disableOptionalCodecs(@NonNull BluetoothDevice device) {
if (DBG) Log.d(TAG, "disableOptionalCodecs(" + device + ")");
verifyDeviceNotNull(device, "disableOptionalCodecs");
@@ -755,7 +766,7 @@
* OPTIONAL_CODECS_SUPPORTED.
* @hide
*/
- @SystemApi
+ @UnsupportedAppUsage
@RequiresPermission(Manifest.permission.BLUETOOTH_ADMIN)
@OptionalCodecsSupportStatus
public int isOptionalCodecsSupported(@NonNull BluetoothDevice device) {
@@ -781,7 +792,7 @@
* OPTIONAL_CODECS_PREF_DISABLED.
* @hide
*/
- @SystemApi
+ @UnsupportedAppUsage
@RequiresPermission(Manifest.permission.BLUETOOTH_ADMIN)
@OptionalCodecsPreferenceStatus
public int isOptionalCodecsEnabled(@NonNull BluetoothDevice device) {
@@ -808,8 +819,8 @@
* OPTIONAL_CODECS_PREF_DISABLED.
* @hide
*/
- @SystemApi
- @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
+ @UnsupportedAppUsage
+ @RequiresPermission(Manifest.permission.BLUETOOTH_ADMIN)
public void setOptionalCodecsEnabled(@NonNull BluetoothDevice device,
@OptionalCodecsPreferenceStatus int value) {
verifyDeviceNotNull(device, "setOptionalCodecsEnabled");
diff --git a/core/java/android/bluetooth/BluetoothA2dpSink.java b/core/java/android/bluetooth/BluetoothA2dpSink.java
index ab49230..53f87e6 100755
--- a/core/java/android/bluetooth/BluetoothA2dpSink.java
+++ b/core/java/android/bluetooth/BluetoothA2dpSink.java
@@ -17,7 +17,7 @@
package android.bluetooth;
import android.Manifest;
-import android.annotation.Nullable;
+import android.annotation.NonNull;
import android.annotation.RequiresPermission;
import android.annotation.SuppressLint;
import android.annotation.SystemApi;
@@ -120,7 +120,7 @@
* @return false on immediate error, true otherwise
* @hide
*/
- @RequiresPermission(Manifest.permission.BLUETOOTH_ADMIN)
+ @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
public boolean connect(BluetoothDevice device) {
if (DBG) log("connect(" + device + ")");
final IBluetoothA2dpSink service = getService();
@@ -277,7 +277,7 @@
* @return true if priority is set, false on error
* @hide
*/
- @RequiresPermission(Manifest.permission.BLUETOOTH_ADMIN)
+ @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
public boolean setPriority(BluetoothDevice device, int priority) {
if (DBG) log("setPriority(" + device + ", " + priority + ")");
return setConnectionPolicy(device, BluetoothAdapter.priorityToConnectionPolicy(priority));
@@ -297,7 +297,7 @@
*/
@SystemApi
@RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
- public boolean setConnectionPolicy(@Nullable BluetoothDevice device,
+ public boolean setConnectionPolicy(@NonNull BluetoothDevice device,
@ConnectionPolicy int connectionPolicy) {
if (DBG) log("setConnectionPolicy(" + device + ", " + connectionPolicy + ")");
final IBluetoothA2dpSink service = getService();
@@ -327,7 +327,7 @@
* @return priority of the device
* @hide
*/
- @RequiresPermission(Manifest.permission.BLUETOOTH)
+ @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
public int getPriority(BluetoothDevice device) {
if (VDBG) log("getPriority(" + device + ")");
return BluetoothAdapter.connectionPolicyToPriority(getConnectionPolicy(device));
@@ -346,7 +346,7 @@
*/
@SystemApi
@RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
- public @ConnectionPolicy int getConnectionPolicy(@Nullable BluetoothDevice device) {
+ public @ConnectionPolicy int getConnectionPolicy(@NonNull BluetoothDevice device) {
if (VDBG) log("getConnectionPolicy(" + device + ")");
final IBluetoothA2dpSink service = getService();
if (service != null && isEnabled() && isValidDevice(device)) {
@@ -371,7 +371,7 @@
*/
@SystemApi
@RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
- public boolean isAudioPlaying(@Nullable BluetoothDevice device) {
+ public boolean isAudioPlaying(@NonNull BluetoothDevice device) {
final IBluetoothA2dpSink service = getService();
if (service != null && isEnabled() && isValidDevice(device)) {
try {
diff --git a/core/java/android/bluetooth/BluetoothAdapter.java b/core/java/android/bluetooth/BluetoothAdapter.java
index 608b563..4aad3cb 100644
--- a/core/java/android/bluetooth/BluetoothAdapter.java
+++ b/core/java/android/bluetooth/BluetoothAdapter.java
@@ -1224,7 +1224,7 @@
* @return true to indicate that the config file was successfully cleared
* @hide
*/
- @SystemApi
+ @UnsupportedAppUsage
@RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
public boolean factoryReset() {
try {
@@ -1517,8 +1517,9 @@
* @return true if the scan mode was set, false otherwise
* @hide
*/
- @SystemApi
- @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
+ @UnsupportedAppUsage(publicAlternatives = "Use {@link #ACTION_REQUEST_DISCOVERABLE}, which "
+ + "shows UI that confirms the user wants to go into discoverable mode.")
+ @RequiresPermission(Manifest.permission.BLUETOOTH)
public boolean setScanMode(@ScanMode int mode, long durationMillis) {
if (getState() != STATE_ON) {
return false;
@@ -1566,8 +1567,8 @@
* @return true if the scan mode was set, false otherwise
* @hide
*/
- @SystemApi
- @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
+ @UnsupportedAppUsage
+ @RequiresPermission(Manifest.permission.BLUETOOTH)
public boolean setScanMode(@ScanMode int mode) {
if (getState() != STATE_ON) {
return false;
@@ -1631,7 +1632,7 @@
* @hide
*/
@SystemApi
- @RequiresPermission(Manifest.permission.BLUETOOTH)
+ @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
public long getDiscoveryEndMillis() {
try {
mServiceLock.readLock().lock();
@@ -1883,7 +1884,6 @@
*
* @hide
*/
- @SystemApi
@RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
public boolean connectAllEnabledProfiles(@NonNull BluetoothDevice device) {
try {
@@ -1912,7 +1912,6 @@
*
* @hide
*/
- @SystemApi
@RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
public boolean disconnectAllEnabledProfiles(@NonNull BluetoothDevice device) {
try {
diff --git a/core/java/android/bluetooth/BluetoothCodecConfig.java b/core/java/android/bluetooth/BluetoothCodecConfig.java
index 93e76fa..d2a1535 100644
--- a/core/java/android/bluetooth/BluetoothCodecConfig.java
+++ b/core/java/android/bluetooth/BluetoothCodecConfig.java
@@ -18,7 +18,6 @@
import android.annotation.IntDef;
import android.annotation.NonNull;
-import android.annotation.SystemApi;
import android.compat.annotation.UnsupportedAppUsage;
import android.os.Parcel;
import android.os.Parcelable;
@@ -34,7 +33,6 @@
*
* {@hide}
*/
-@SystemApi
public final class BluetoothCodecConfig implements Parcelable {
// Add an entry for each source codec here.
// NOTE: The values should be same as those listed in the following file:
diff --git a/core/java/android/bluetooth/BluetoothCodecStatus.java b/core/java/android/bluetooth/BluetoothCodecStatus.java
index b6e7739..1e394b8 100644
--- a/core/java/android/bluetooth/BluetoothCodecStatus.java
+++ b/core/java/android/bluetooth/BluetoothCodecStatus.java
@@ -17,7 +17,6 @@
package android.bluetooth;
import android.annotation.Nullable;
-import android.annotation.SystemApi;
import android.os.Parcel;
import android.os.Parcelable;
@@ -32,7 +31,6 @@
*
* {@hide}
*/
-@SystemApi
public final class BluetoothCodecStatus implements Parcelable {
/**
* Extra for the codec configuration intents of the individual profiles.
diff --git a/core/java/android/bluetooth/BluetoothDevice.java b/core/java/android/bluetooth/BluetoothDevice.java
index eab7a03..594e5ff 100644
--- a/core/java/android/bluetooth/BluetoothDevice.java
+++ b/core/java/android/bluetooth/BluetoothDevice.java
@@ -36,8 +36,6 @@
import android.os.RemoteException;
import android.util.Log;
-import com.android.internal.annotations.VisibleForTesting;
-
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.lang.annotation.Retention;
@@ -1100,8 +1098,8 @@
* @return true on success, false on error
* @hide
*/
- @SystemApi
- @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
+ @UnsupportedAppUsage
+ @RequiresPermission(Manifest.permission.BLUETOOTH)
public boolean setAlias(@NonNull String alias) {
final IBluetooth service = sService;
if (service == null) {
@@ -1124,8 +1122,8 @@
* not have any battery reporting service, or return value is invalid
* @hide
*/
- @SystemApi
- @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
+ @UnsupportedAppUsage
+ @RequiresPermission(Manifest.permission.BLUETOOTH)
public int getBatteryLevel() {
final IBluetooth service = sService;
if (service == null) {
@@ -1215,8 +1213,8 @@
*
* @hide
*/
- @SystemApi
- @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
+ @UnsupportedAppUsage
+ @RequiresPermission(Manifest.permission.BLUETOOTH)
public boolean isBondingInitiatedLocally() {
final IBluetooth service = sService;
if (service == null) {
@@ -1539,7 +1537,7 @@
* @return true pin has been set false for error
* @hide
*/
- @SystemApi
+ @UnsupportedAppUsage
@RequiresPermission(Manifest.permission.BLUETOOTH_ADMIN)
public boolean setPin(@NonNull String pin) {
byte[] pinBytes = convertPinToBytes(pin);
@@ -1576,8 +1574,8 @@
*
* @hide
*/
- @SystemApi
- @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
+ @UnsupportedAppUsage
+ @RequiresPermission(Manifest.permission.BLUETOOTH_ADMIN)
public boolean cancelPairing() {
final IBluetooth service = sService;
if (service == null) {
@@ -1608,8 +1606,8 @@
* #ACCESS_UNKNOWN}, {@link #ACCESS_ALLOWED} or {@link #ACCESS_REJECTED}.
* @hide
*/
- @SystemApi
- @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
+ @UnsupportedAppUsage
+ @RequiresPermission(Manifest.permission.BLUETOOTH)
public @AccessPermission int getPhonebookAccessPermission() {
final IBluetooth service = sService;
if (service == null) {
@@ -1716,8 +1714,8 @@
* @return Whether the message access is allowed to this device.
* @hide
*/
- @SystemApi
- @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
+ @UnsupportedAppUsage
+ @RequiresPermission(Manifest.permission.BLUETOOTH)
public @AccessPermission int getMessageAccessPermission() {
final IBluetooth service = sService;
if (service == null) {
@@ -1766,7 +1764,7 @@
* @hide
*/
@SystemApi
- @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
+ @RequiresPermission(Manifest.permission.BLUETOOTH)
public @AccessPermission int getSimAccessPermission() {
final IBluetooth service = sService;
if (service == null) {
@@ -2021,7 +2019,7 @@
* @return the pin code as a UTF-8 byte array, or null if it is an invalid Bluetooth pin.
* @hide
*/
- @VisibleForTesting
+ @UnsupportedAppUsage
public static byte[] convertPinToBytes(String pin) {
if (pin == null) {
return null;
diff --git a/core/java/android/bluetooth/BluetoothHeadset.java b/core/java/android/bluetooth/BluetoothHeadset.java
index 1ba2bb5..6ce05f9 100644
--- a/core/java/android/bluetooth/BluetoothHeadset.java
+++ b/core/java/android/bluetooth/BluetoothHeadset.java
@@ -572,7 +572,22 @@
@RequiresPermission(android.Manifest.permission.BLUETOOTH_ADMIN)
public boolean setPriority(BluetoothDevice device, int priority) {
if (DBG) log("setPriority(" + device + ", " + priority + ")");
- return setConnectionPolicy(device, BluetoothAdapter.priorityToConnectionPolicy(priority));
+ final IBluetoothHeadset service = mService;
+ if (service != null && isEnabled() && isValidDevice(device)) {
+ if (priority != BluetoothProfile.PRIORITY_OFF
+ && priority != BluetoothProfile.PRIORITY_ON) {
+ return false;
+ }
+ try {
+ return service.setPriority(
+ device, BluetoothAdapter.priorityToConnectionPolicy(priority));
+ } catch (RemoteException e) {
+ Log.e(TAG, Log.getStackTraceString(new Throwable()));
+ return false;
+ }
+ }
+ if (service == null) Log.w(TAG, "Proxy not attached to service");
+ return false;
}
/**
@@ -588,7 +603,7 @@
* @hide
*/
@SystemApi
- @RequiresPermission(Manifest.permission.BLUETOOTH_ADMIN)
+ @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
public boolean setConnectionPolicy(@NonNull BluetoothDevice device,
@ConnectionPolicy int connectionPolicy) {
if (DBG) log("setConnectionPolicy(" + device + ", " + connectionPolicy + ")");
@@ -624,7 +639,17 @@
@RequiresPermission(Manifest.permission.BLUETOOTH)
public int getPriority(BluetoothDevice device) {
if (VDBG) log("getPriority(" + device + ")");
- return BluetoothAdapter.connectionPolicyToPriority(getConnectionPolicy(device));
+ final IBluetoothHeadset service = mService;
+ if (service != null && isEnabled() && isValidDevice(device)) {
+ try {
+ return BluetoothAdapter.connectionPolicyToPriority(service.getPriority(device));
+ } catch (RemoteException e) {
+ Log.e(TAG, Log.getStackTraceString(new Throwable()));
+ return BluetoothProfile.PRIORITY_OFF;
+ }
+ }
+ if (service == null) Log.w(TAG, "Proxy not attached to service");
+ return BluetoothProfile.PRIORITY_OFF;
}
/**
@@ -639,7 +664,7 @@
* @hide
*/
@SystemApi
- @RequiresPermission(Manifest.permission.BLUETOOTH)
+ @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
public @ConnectionPolicy int getConnectionPolicy(@NonNull BluetoothDevice device) {
if (VDBG) log("getConnectionPolicy(" + device + ")");
final IBluetoothHeadset service = mService;
@@ -1126,16 +1151,13 @@
/**
* Get the connected device that is active.
*
- * <p>Requires {@link android.Manifest.permission#BLUETOOTH}
- * permission.
- *
* @return the connected device that is active or null if no device
* is active.
* @hide
*/
- @SystemApi
+ @UnsupportedAppUsage
@Nullable
- @RequiresPermission(android.Manifest.permission.BLUETOOTH)
+ @RequiresPermission(Manifest.permission.BLUETOOTH)
public BluetoothDevice getActiveDevice() {
if (VDBG) {
Log.d(TAG, "getActiveDevice");
diff --git a/core/java/android/bluetooth/BluetoothHeadsetClient.java b/core/java/android/bluetooth/BluetoothHeadsetClient.java
index fbda9e9..85e0e08 100644
--- a/core/java/android/bluetooth/BluetoothHeadsetClient.java
+++ b/core/java/android/bluetooth/BluetoothHeadsetClient.java
@@ -17,6 +17,7 @@
package android.bluetooth;
import android.Manifest;
+import android.annotation.NonNull;
import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
import android.compat.annotation.UnsupportedAppUsage;
@@ -442,6 +443,8 @@
* @param device a remote device we want connect to
* @return <code>true</code> if command has been issued successfully; <code>false</code>
* otherwise; upon completion HFP sends {@link #ACTION_CONNECTION_STATE_CHANGED} intent.
+ *
+ * @hide
*/
@UnsupportedAppUsage
public boolean connect(BluetoothDevice device) {
@@ -466,6 +469,8 @@
* @param device a remote device we want disconnect
* @return <code>true</code> if command has been issued successfully; <code>false</code>
* otherwise; upon completion HFP sends {@link #ACTION_CONNECTION_STATE_CHANGED} intent.
+ *
+ * @hide
*/
@UnsupportedAppUsage
public boolean disconnect(BluetoothDevice device) {
@@ -564,7 +569,7 @@
* @return true if priority is set, false on error
* @hide
*/
- @RequiresPermission(Manifest.permission.BLUETOOTH_ADMIN)
+ @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
public boolean setPriority(BluetoothDevice device, int priority) {
if (DBG) log("setPriority(" + device + ", " + priority + ")");
return setConnectionPolicy(device, BluetoothAdapter.priorityToConnectionPolicy(priority));
@@ -583,8 +588,8 @@
* @hide
*/
@SystemApi
- @RequiresPermission(Manifest.permission.BLUETOOTH_ADMIN)
- public boolean setConnectionPolicy(BluetoothDevice device,
+ @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
+ public boolean setConnectionPolicy(@NonNull BluetoothDevice device,
@ConnectionPolicy int connectionPolicy) {
if (DBG) log("setConnectionPolicy(" + device + ", " + connectionPolicy + ")");
final IBluetoothHeadsetClient service =
@@ -634,7 +639,7 @@
*/
@SystemApi
@RequiresPermission(Manifest.permission.BLUETOOTH)
- public @ConnectionPolicy int getConnectionPolicy(BluetoothDevice device) {
+ public @ConnectionPolicy int getConnectionPolicy(@NonNull BluetoothDevice device) {
if (VDBG) log("getConnectionPolicy(" + device + ")");
final IBluetoothHeadsetClient service =
getService();
diff --git a/core/java/android/bluetooth/BluetoothHearingAid.java b/core/java/android/bluetooth/BluetoothHearingAid.java
index 38498bc..e0674d7 100644
--- a/core/java/android/bluetooth/BluetoothHearingAid.java
+++ b/core/java/android/bluetooth/BluetoothHearingAid.java
@@ -162,13 +162,11 @@
* the state. Users can get the connection state of the profile
* from this intent.
*
- * <p>Requires {@link android.Manifest.permission#BLUETOOTH_ADMIN}
- * permission.
- *
* @param device Remote Bluetooth Device
* @return false on immediate error, true otherwise
* @hide
*/
+ @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
public boolean connect(BluetoothDevice device) {
if (DBG) log("connect(" + device + ")");
final IBluetoothHearingAid service = getService();
@@ -202,13 +200,11 @@
* {@link #STATE_DISCONNECTING} can be used to distinguish between the
* two scenarios.
*
- * <p>Requires {@link android.Manifest.permission#BLUETOOTH_ADMIN}
- * permission.
- *
* @param device Remote Bluetooth Device
* @return false on immediate error, true otherwise
* @hide
*/
+ @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
public boolean disconnect(BluetoothDevice device) {
if (DBG) log("disconnect(" + device + ")");
final IBluetoothHearingAid service = getService();
@@ -327,15 +323,12 @@
/**
* Get the connected physical Hearing Aid devices that are active
*
- * <p>Requires {@link android.Manifest.permission#BLUETOOTH}
- * permission.
- *
* @return the list of active devices. The first element is the left active
* device; the second element is the right active device. If either or both side
* is not active, it will be null on that position. Returns empty list on error.
* @hide
*/
- @SystemApi
+ @UnsupportedAppUsage
@RequiresPermission(Manifest.permission.BLUETOOTH)
public @NonNull List<BluetoothDevice> getActiveDevices() {
if (VDBG) log("getActiveDevices()");
@@ -363,7 +356,7 @@
* @return true if priority is set, false on error
* @hide
*/
- @RequiresPermission(Manifest.permission.BLUETOOTH_ADMIN)
+ @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
public boolean setPriority(BluetoothDevice device, int priority) {
if (DBG) log("setPriority(" + device + ", " + priority + ")");
return setConnectionPolicy(device, BluetoothAdapter.priorityToConnectionPolicy(priority));
@@ -382,7 +375,7 @@
* @hide
*/
@SystemApi
- @RequiresPermission(Manifest.permission.BLUETOOTH_ADMIN)
+ @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
public boolean setConnectionPolicy(@NonNull BluetoothDevice device,
@ConnectionPolicy int connectionPolicy) {
if (DBG) log("setConnectionPolicy(" + device + ", " + connectionPolicy + ")");
@@ -414,7 +407,7 @@
* @return priority of the device
* @hide
*/
- @RequiresPermission(Manifest.permission.BLUETOOTH)
+ @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
public int getPriority(BluetoothDevice device) {
if (VDBG) log("getPriority(" + device + ")");
return BluetoothAdapter.connectionPolicyToPriority(getConnectionPolicy(device));
@@ -432,7 +425,7 @@
* @hide
*/
@SystemApi
- @RequiresPermission(Manifest.permission.BLUETOOTH)
+ @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
public @ConnectionPolicy int getConnectionPolicy(@NonNull BluetoothDevice device) {
if (VDBG) log("getConnectionPolicy(" + device + ")");
final IBluetoothHearingAid service = getService();
@@ -496,17 +489,20 @@
}
/**
- * Get the CustomerId of the device.
+ * Get the HiSyncId (unique hearing aid device identifier) of the device.
+ *
+ * <a href=https://source.android.com/devices/bluetooth/asha#hisyncid>HiSyncId documentation
+ * can be found here</a>
*
* @param device Bluetooth device
- * @return the CustomerId of the device
+ * @return the HiSyncId of the device
* @hide
*/
@SystemApi
- @RequiresPermission(Manifest.permission.BLUETOOTH)
- public long getHiSyncId(@Nullable BluetoothDevice device) {
+ @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
+ public long getHiSyncId(@NonNull BluetoothDevice device) {
if (VDBG) {
- log("getCustomerId(" + device + ")");
+ log("getHiSyncId(" + device + ")");
}
final IBluetoothHearingAid service = getService();
try {
diff --git a/core/java/android/bluetooth/BluetoothHidHost.java b/core/java/android/bluetooth/BluetoothHidHost.java
index e9e1f68..9561d93 100644
--- a/core/java/android/bluetooth/BluetoothHidHost.java
+++ b/core/java/android/bluetooth/BluetoothHidHost.java
@@ -263,13 +263,11 @@
* the state. Users can get the connection state of the profile
* from this intent.
*
- * <p>Requires {@link android.Manifest.permission#BLUETOOTH_ADMIN}
- * permission.
- *
* @param device Remote Bluetooth Device
* @return false on immediate error, true otherwise
* @hide
*/
+ @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
public boolean connect(BluetoothDevice device) {
if (DBG) log("connect(" + device + ")");
final IBluetoothHidHost service = getService();
@@ -303,13 +301,11 @@
* {@link #STATE_DISCONNECTING} can be used to distinguish between the
* two scenarios.
*
- * <p>Requires {@link android.Manifest.permission#BLUETOOTH_ADMIN}
- * permission.
- *
* @param device Remote Bluetooth Device
* @return false on immediate error, true otherwise
* @hide
*/
+ @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
public boolean disconnect(BluetoothDevice device) {
if (DBG) log("disconnect(" + device + ")");
final IBluetoothHidHost service = getService();
@@ -327,7 +323,10 @@
/**
* {@inheritDoc}
+ *
+ * @hide
*/
+ @SystemApi
@Override
@RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
public @NonNull List<BluetoothDevice> getConnectedDevices() {
@@ -368,7 +367,10 @@
/**
* {@inheritDoc}
+ *
+ * @hide
*/
+ @SystemApi
@Override
@RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
public int getConnectionState(@NonNull BluetoothDevice device) {
@@ -400,7 +402,7 @@
* @return true if priority is set, false on error
* @hide
*/
- @RequiresPermission(Manifest.permission.BLUETOOTH_ADMIN)
+ @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
public boolean setPriority(BluetoothDevice device, int priority) {
if (DBG) log("setPriority(" + device + ", " + priority + ")");
return setConnectionPolicy(device, BluetoothAdapter.priorityToConnectionPolicy(priority));
@@ -419,7 +421,7 @@
* @hide
*/
@SystemApi
- @RequiresPermission(Manifest.permission.BLUETOOTH_ADMIN)
+ @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
public boolean setConnectionPolicy(@NonNull BluetoothDevice device,
@ConnectionPolicy int connectionPolicy) {
if (DBG) log("setConnectionPolicy(" + device + ", " + connectionPolicy + ")");
@@ -453,7 +455,7 @@
* @return priority of the device
* @hide
*/
- @RequiresPermission(Manifest.permission.BLUETOOTH)
+ @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
public int getPriority(BluetoothDevice device) {
if (VDBG) log("getPriority(" + device + ")");
return BluetoothAdapter.connectionPolicyToPriority(getConnectionPolicy(device));
@@ -471,7 +473,7 @@
* @hide
*/
@SystemApi
- @RequiresPermission(Manifest.permission.BLUETOOTH)
+ @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
public @ConnectionPolicy int getConnectionPolicy(@NonNull BluetoothDevice device) {
if (VDBG) log("getConnectionPolicy(" + device + ")");
if (device == null) {
diff --git a/core/java/android/bluetooth/BluetoothMap.java b/core/java/android/bluetooth/BluetoothMap.java
index cc2b615..14a71c4 100644
--- a/core/java/android/bluetooth/BluetoothMap.java
+++ b/core/java/android/bluetooth/BluetoothMap.java
@@ -18,7 +18,6 @@
import android.Manifest;
import android.annotation.NonNull;
-import android.annotation.Nullable;
import android.annotation.RequiresPermission;
import android.annotation.SuppressLint;
import android.annotation.SystemApi;
@@ -328,7 +327,7 @@
* @return true if priority is set, false on error
* @hide
*/
- @RequiresPermission(Manifest.permission.BLUETOOTH_ADMIN)
+ @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
public boolean setPriority(BluetoothDevice device, int priority) {
if (DBG) log("setPriority(" + device + ", " + priority + ")");
return setConnectionPolicy(device, BluetoothAdapter.priorityToConnectionPolicy(priority));
@@ -347,8 +346,8 @@
* @hide
*/
@SystemApi
- @RequiresPermission(Manifest.permission.BLUETOOTH_ADMIN)
- public boolean setConnectionPolicy(@Nullable BluetoothDevice device,
+ @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
+ public boolean setConnectionPolicy(@NonNull BluetoothDevice device,
@ConnectionPolicy int connectionPolicy) {
if (DBG) log("setConnectionPolicy(" + device + ", " + connectionPolicy + ")");
final IBluetoothMap service = getService();
@@ -378,7 +377,7 @@
* @return priority of the device
* @hide
*/
- @RequiresPermission(Manifest.permission.BLUETOOTH)
+ @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
public int getPriority(BluetoothDevice device) {
if (VDBG) log("getPriority(" + device + ")");
return BluetoothAdapter.connectionPolicyToPriority(getConnectionPolicy(device));
@@ -396,8 +395,8 @@
* @hide
*/
@SystemApi
- @RequiresPermission(Manifest.permission.BLUETOOTH)
- public @ConnectionPolicy int getConnectionPolicy(@Nullable BluetoothDevice device) {
+ @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
+ public @ConnectionPolicy int getConnectionPolicy(@NonNull BluetoothDevice device) {
if (VDBG) log("getConnectionPolicy(" + device + ")");
final IBluetoothMap service = getService();
if (service != null && isEnabled() && isValidDevice(device)) {
diff --git a/core/java/android/bluetooth/BluetoothMapClient.java b/core/java/android/bluetooth/BluetoothMapClient.java
index 8d2aadd..19240dc 100644
--- a/core/java/android/bluetooth/BluetoothMapClient.java
+++ b/core/java/android/bluetooth/BluetoothMapClient.java
@@ -17,6 +17,7 @@
package android.bluetooth;
import android.Manifest;
+import android.annotation.NonNull;
import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
import android.app.PendingIntent;
@@ -140,7 +141,10 @@
/**
* Initiate connection. Initiation of outgoing connections is not
* supported for MAP server.
+ *
+ * @hide
*/
+ @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
public boolean connect(BluetoothDevice device) {
if (DBG) Log.d(TAG, "connect(" + device + ")" + "for MAPS MCE");
final IBluetoothMapClient service = getService();
@@ -162,7 +166,10 @@
*
* @param device Remote Bluetooth Device
* @return false on error, true otherwise
+ *
+ * @hide
*/
+ @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
public boolean disconnect(BluetoothDevice device) {
if (DBG) Log.d(TAG, "disconnect(" + device + ")");
final IBluetoothMapClient service = getService();
@@ -251,7 +258,7 @@
* @return true if priority is set, false on error
* @hide
*/
- @RequiresPermission(Manifest.permission.BLUETOOTH_ADMIN)
+ @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
public boolean setPriority(BluetoothDevice device, int priority) {
if (DBG) Log.d(TAG, "setPriority(" + device + ", " + priority + ")");
return setConnectionPolicy(device, BluetoothAdapter.priorityToConnectionPolicy(priority));
@@ -270,8 +277,8 @@
* @hide
*/
@SystemApi
- @RequiresPermission(Manifest.permission.BLUETOOTH_ADMIN)
- public boolean setConnectionPolicy(BluetoothDevice device,
+ @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
+ public boolean setConnectionPolicy(@NonNull BluetoothDevice device,
@ConnectionPolicy int connectionPolicy) {
if (DBG) Log.d(TAG, "setConnectionPolicy(" + device + ", " + connectionPolicy + ")");
final IBluetoothMapClient service = getService();
@@ -301,7 +308,7 @@
* @return priority of the device
* @hide
*/
- @RequiresPermission(Manifest.permission.BLUETOOTH)
+ @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
public int getPriority(BluetoothDevice device) {
if (VDBG) Log.d(TAG, "getPriority(" + device + ")");
return BluetoothAdapter.connectionPolicyToPriority(getConnectionPolicy(device));
@@ -319,8 +326,8 @@
* @hide
*/
@SystemApi
- @RequiresPermission(Manifest.permission.BLUETOOTH)
- public @ConnectionPolicy int getConnectionPolicy(BluetoothDevice device) {
+ @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
+ public @ConnectionPolicy int getConnectionPolicy(@NonNull BluetoothDevice device) {
if (VDBG) Log.d(TAG, "getConnectionPolicy(" + device + ")");
final IBluetoothMapClient service = getService();
if (service != null && isEnabled() && isValidDevice(device)) {
diff --git a/core/java/android/bluetooth/BluetoothPan.java b/core/java/android/bluetooth/BluetoothPan.java
index 7af770e..a80f5b7 100644
--- a/core/java/android/bluetooth/BluetoothPan.java
+++ b/core/java/android/bluetooth/BluetoothPan.java
@@ -19,7 +19,6 @@
import android.Manifest;
import android.annotation.IntDef;
import android.annotation.NonNull;
-import android.annotation.Nullable;
import android.annotation.RequiresPermission;
import android.annotation.SdkConstant;
import android.annotation.SdkConstant.SdkConstantType;
@@ -30,7 +29,6 @@
import android.os.Binder;
import android.os.IBinder;
import android.os.RemoteException;
-import android.util.CloseGuard;
import android.util.Log;
import java.lang.annotation.Retention;
@@ -51,11 +49,10 @@
* @hide
*/
@SystemApi
-public final class BluetoothPan implements BluetoothProfile, AutoCloseable {
+public final class BluetoothPan implements BluetoothProfile {
private static final String TAG = "BluetoothPan";
private static final boolean DBG = true;
private static final boolean VDBG = false;
- private CloseGuard mCloseGuard;
/**
* Intent used to broadcast the change in connection state of the Pan
@@ -168,16 +165,13 @@
mAdapter = BluetoothAdapter.getDefaultAdapter();
mContext = context;
mProfileConnector.connect(context, listener);
- mCloseGuard = new CloseGuard();
- mCloseGuard.open("close");
}
/**
* Closes the connection to the service and unregisters callbacks
- *
- * @hide
*/
- public void close() {
+ @UnsupportedAppUsage
+ void close() {
if (VDBG) log("close()");
mProfileConnector.disconnect();
}
@@ -188,9 +182,6 @@
/** @hide */
protected void finalize() {
- if (mCloseGuard != null) {
- mCloseGuard.warnIfOpen();
- }
close();
}
@@ -204,9 +195,6 @@
* the state. Users can get the connection state of the profile
* from this intent.
*
- * <p>Requires {@link android.Manifest.permission#BLUETOOTH_ADMIN}
- * permission.
- *
* @param device Remote Bluetooth Device
* @return false on immediate error, true otherwise
* @hide
@@ -245,9 +233,6 @@
* {@link #STATE_DISCONNECTING} can be used to distinguish between the
* two scenarios.
*
- * <p>Requires {@link android.Manifest.permission#BLUETOOTH_ADMIN}
- * permission.
- *
* @param device Remote Bluetooth Device
* @return false on immediate error, true otherwise
* @hide
@@ -353,7 +338,7 @@
@SystemApi
@Override
@RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
- public int getConnectionState(@Nullable BluetoothDevice device) {
+ public int getConnectionState(@NonNull BluetoothDevice device) {
if (VDBG) log("getState(" + device + ")");
final IBluetoothPan service = getService();
if (service != null && isEnabled() && isValidDevice(device)) {
diff --git a/core/java/android/bluetooth/BluetoothPbap.java b/core/java/android/bluetooth/BluetoothPbap.java
index 277a5a8..d58a893 100644
--- a/core/java/android/bluetooth/BluetoothPbap.java
+++ b/core/java/android/bluetooth/BluetoothPbap.java
@@ -18,7 +18,6 @@
import android.Manifest;
import android.annotation.NonNull;
-import android.annotation.Nullable;
import android.annotation.RequiresPermission;
import android.annotation.SdkConstant;
import android.annotation.SuppressLint;
@@ -239,7 +238,7 @@
@SystemApi
@Override
@RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
- public @BtProfileState int getConnectionState(@Nullable BluetoothDevice device) {
+ public @BtProfileState int getConnectionState(@NonNull BluetoothDevice device) {
log("getConnectionState: device=" + device);
try {
final IBluetoothPbap service = mService;
diff --git a/core/java/android/bluetooth/BluetoothPbapClient.java b/core/java/android/bluetooth/BluetoothPbapClient.java
index 9563c68..d3452ff 100644
--- a/core/java/android/bluetooth/BluetoothPbapClient.java
+++ b/core/java/android/bluetooth/BluetoothPbapClient.java
@@ -17,6 +17,7 @@
package android.bluetooth;
import android.Manifest;
+import android.annotation.NonNull;
import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
import android.content.Context;
@@ -101,7 +102,10 @@
* @param device a remote device we want connect to
* @return <code>true</code> if command has been issued successfully; <code>false</code>
* otherwise;
+ *
+ * @hide
*/
+ @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
public boolean connect(BluetoothDevice device) {
if (DBG) {
log("connect(" + device + ") for PBAP Client.");
@@ -126,7 +130,10 @@
*
* @param device Remote Bluetooth Device
* @return false on error, true otherwise
+ *
+ * @hide
*/
+ @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
public boolean disconnect(BluetoothDevice device) {
if (DBG) {
log("disconnect(" + device + ")" + new Exception());
@@ -251,7 +258,7 @@
* @return true if priority is set, false on error
* @hide
*/
- @RequiresPermission(Manifest.permission.BLUETOOTH_ADMIN)
+ @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
public boolean setPriority(BluetoothDevice device, int priority) {
if (DBG) log("setPriority(" + device + ", " + priority + ")");
return setConnectionPolicy(device, BluetoothAdapter.priorityToConnectionPolicy(priority));
@@ -270,8 +277,8 @@
* @hide
*/
@SystemApi
- @RequiresPermission(Manifest.permission.BLUETOOTH_ADMIN)
- public boolean setConnectionPolicy(BluetoothDevice device,
+ @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
+ public boolean setConnectionPolicy(@NonNull BluetoothDevice device,
@ConnectionPolicy int connectionPolicy) {
if (DBG) {
log("setConnectionPolicy(" + device + ", " + connectionPolicy + ")");
@@ -305,7 +312,7 @@
* @return priority of the device
* @hide
*/
- @RequiresPermission(Manifest.permission.BLUETOOTH)
+ @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
public int getPriority(BluetoothDevice device) {
if (VDBG) log("getPriority(" + device + ")");
return BluetoothAdapter.connectionPolicyToPriority(getConnectionPolicy(device));
@@ -323,8 +330,8 @@
* @hide
*/
@SystemApi
- @RequiresPermission(Manifest.permission.BLUETOOTH)
- public @ConnectionPolicy int getConnectionPolicy(BluetoothDevice device) {
+ @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
+ public @ConnectionPolicy int getConnectionPolicy(@NonNull BluetoothDevice device) {
if (VDBG) {
log("getConnectionPolicy(" + device + ")");
}
diff --git a/core/java/android/bluetooth/BluetoothSap.java b/core/java/android/bluetooth/BluetoothSap.java
index bfc3a4d..6e03481 100644
--- a/core/java/android/bluetooth/BluetoothSap.java
+++ b/core/java/android/bluetooth/BluetoothSap.java
@@ -310,7 +310,7 @@
* @return true if priority is set, false on error
* @hide
*/
- @RequiresPermission(Manifest.permission.BLUETOOTH_ADMIN)
+ @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
public boolean setPriority(BluetoothDevice device, int priority) {
if (DBG) log("setPriority(" + device + ", " + priority + ")");
return setConnectionPolicy(device, BluetoothAdapter.priorityToConnectionPolicy(priority));
@@ -329,7 +329,7 @@
* @hide
*/
@SystemApi
- @RequiresPermission(Manifest.permission.BLUETOOTH_ADMIN)
+ @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
public boolean setConnectionPolicy(BluetoothDevice device,
@ConnectionPolicy int connectionPolicy) {
if (DBG) log("setConnectionPolicy(" + device + ", " + connectionPolicy + ")");
@@ -360,7 +360,7 @@
* @return priority of the device
* @hide
*/
- @RequiresPermission(Manifest.permission.BLUETOOTH)
+ @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
public int getPriority(BluetoothDevice device) {
if (VDBG) log("getPriority(" + device + ")");
return BluetoothAdapter.connectionPolicyToPriority(getConnectionPolicy(device));
@@ -378,7 +378,7 @@
* @hide
*/
@SystemApi
- @RequiresPermission(Manifest.permission.BLUETOOTH)
+ @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
public @ConnectionPolicy int getConnectionPolicy(BluetoothDevice device) {
if (VDBG) log("getConnectionPolicy(" + device + ")");
final IBluetoothSap service = getService();
diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java
index 6f46066..2fe935e 100644
--- a/core/java/android/content/Context.java
+++ b/core/java/android/content/Context.java
@@ -3987,10 +3987,10 @@
public static final String NETWORK_STACK_SERVICE = "network_stack";
/**
- * Use with {@link android.os.ServiceManager.getService()} to retrieve a
- * {@link ITetheringConnector} IBinder for communicating with the tethering service
+ * Use with {@link #getSystemService(String)} to retrieve a {@link android.net.TetheringManager}
+ * for managing tethering functions.
* @hide
- * @see TetheringClient
+ * @see android.net.TetheringManager
*/
@SystemApi
public static final String TETHERING_SERVICE = "tethering";
@@ -4065,8 +4065,6 @@
*/
public static final String NETWORK_STATS_SERVICE = "netstats";
/** {@hide} */
- @SystemApi
- @SuppressLint("ServiceName")
public static final String NETWORK_POLICY_SERVICE = "netpolicy";
/** {@hide} */
public static final String NETWORK_WATCHLIST_SERVICE = "network_watchlist";
@@ -5104,7 +5102,6 @@
* {@link TelephonyRegistryManager}.
* @hide
*/
- @SystemApi
public static final String TELEPHONY_REGISTRY_SERVICE = "telephony_registry";
/**
diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java
index 03b99ed..9f151cf 100644
--- a/core/java/android/content/pm/PackageManager.java
+++ b/core/java/android/content/pm/PackageManager.java
@@ -3399,6 +3399,7 @@
* @hide
*/
@SystemApi
+ @TestApi
public static final int FLAG_PERMISSION_ONE_TIME = 1 << 16;
/**
diff --git a/core/java/android/hardware/camera2/CameraCharacteristics.java b/core/java/android/hardware/camera2/CameraCharacteristics.java
index 6539c68..34a40ae 100644
--- a/core/java/android/hardware/camera2/CameraCharacteristics.java
+++ b/core/java/android/hardware/camera2/CameraCharacteristics.java
@@ -1125,42 +1125,43 @@
new Key<android.util.Range<Integer>>("android.control.postRawSensitivityBoostRange", new TypeReference<android.util.Range<Integer>>() {{ }});
/**
- * <p>The list of bokeh modes for {@link CaptureRequest#CONTROL_BOKEH_MODE android.control.bokehMode} that are supported by this camera
- * device, and each bokeh mode's maximum streaming (non-stall) size with bokeh effect.</p>
- * <p>For OFF mode, the camera behaves normally with no bokeh effect.</p>
- * <p>For STILL_CAPTURE mode, the maximum streaming dimension specifies the limit under which
- * bokeh is effective when capture intent is PREVIEW. Note that when capture intent is
- * PREVIEW, the bokeh effect may not be as high quality compared to STILL_CAPTURE intent
- * in order to maintain reasonable frame rate. The maximum streaming dimension must be one
- * of the YUV_420_888 or PRIVATE resolutions in availableStreamConfigurations, or (0, 0)
- * if preview bokeh is not supported. If the application configures a stream larger than
- * the maximum streaming dimension, bokeh effect may not be applied for this stream for
- * PREVIEW intent.</p>
- * <p>For CONTINUOUS mode, the maximum streaming dimension specifies the limit under which
- * bokeh is effective. This dimension must be one of the YUV_420_888 or PRIVATE resolutions
- * in availableStreamConfigurations, and if the sensor maximum resolution is larger than or
- * equal to 1080p, the maximum streaming dimension must be at least 1080p. If the
- * application configures a stream with larger dimension, the stream may not have bokeh
- * effect applied.</p>
+ * <p>The list of extended scene modes for {@link CaptureRequest#CONTROL_EXTENDED_SCENE_MODE android.control.extendedSceneMode} that are supported
+ * by this camera device, and each extended scene mode's maximum streaming (non-stall) size
+ * with effect.</p>
+ * <p>For DISABLED mode, the camera behaves normally with no extended scene mode enabled.</p>
+ * <p>For BOKEH_STILL_CAPTURE mode, the maximum streaming dimension specifies the limit
+ * under which bokeh is effective when capture intent is PREVIEW. Note that when capture
+ * intent is PREVIEW, the bokeh effect may not be as high in quality compared to
+ * STILL_CAPTURE intent in order to maintain reasonable frame rate. The maximum streaming
+ * dimension must be one of the YUV_420_888 or PRIVATE resolutions in
+ * availableStreamConfigurations, or (0, 0) if preview bokeh is not supported. If the
+ * application configures a stream larger than the maximum streaming dimension, bokeh
+ * effect may not be applied for this stream for PREVIEW intent.</p>
+ * <p>For BOKEH_CONTINUOUS mode, the maximum streaming dimension specifies the limit under
+ * which bokeh is effective. This dimension must be one of the YUV_420_888 or PRIVATE
+ * resolutions in availableStreamConfigurations, and if the sensor maximum resolution is
+ * larger than or equal to 1080p, the maximum streaming dimension must be at least 1080p.
+ * If the application configures a stream with larger dimension, the stream may not have
+ * bokeh effect applied.</p>
* <p><b>Units</b>: (mode, width, height)</p>
* <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
*
- * @see CaptureRequest#CONTROL_BOKEH_MODE
+ * @see CaptureRequest#CONTROL_EXTENDED_SCENE_MODE
* @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL
* @hide
*/
- public static final Key<int[]> CONTROL_AVAILABLE_BOKEH_MAX_SIZES =
- new Key<int[]>("android.control.availableBokehMaxSizes", int[].class);
+ public static final Key<int[]> CONTROL_AVAILABLE_EXTENDED_SCENE_MODE_MAX_SIZES =
+ new Key<int[]>("android.control.availableExtendedSceneModeMaxSizes", int[].class);
/**
- * <p>The ranges of supported zoom ratio for non-OFF {@link CaptureRequest#CONTROL_BOKEH_MODE android.control.bokehMode}.</p>
- * <p>When bokeh mode is enabled, the camera device may have limited range of zoom ratios
- * compared to when bokeh mode is disabled. This tag lists the zoom ratio ranges for all
- * supported non-OFF bokeh modes, in the same order as in
- * {@link CameraCharacteristics#CONTROL_AVAILABLE_BOKEH_CAPABILITIES android.control.availableBokehCapabilities}.</p>
+ * <p>The ranges of supported zoom ratio for non-DISABLED {@link CaptureRequest#CONTROL_EXTENDED_SCENE_MODE android.control.extendedSceneMode}.</p>
+ * <p>When extended scene mode is set, the camera device may have limited range of zoom ratios
+ * compared to when extended scene mode is DISABLED. This tag lists the zoom ratio ranges
+ * for all supported non-DISABLED extended scene modes, in the same order as in
+ * android.control.availableExtended.</p>
* <p>Range [1.0, 1.0] means that no zoom (optical or digital) is supported.</p>
* <p><b>Units</b>: (minZoom, maxZoom)</p>
* <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
@@ -1168,46 +1169,45 @@
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
*
- * @see CameraCharacteristics#CONTROL_AVAILABLE_BOKEH_CAPABILITIES
- * @see CaptureRequest#CONTROL_BOKEH_MODE
+ * @see CaptureRequest#CONTROL_EXTENDED_SCENE_MODE
* @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL
* @hide
*/
- public static final Key<float[]> CONTROL_AVAILABLE_BOKEH_ZOOM_RATIO_RANGES =
- new Key<float[]>("android.control.availableBokehZoomRatioRanges", float[].class);
+ public static final Key<float[]> CONTROL_AVAILABLE_EXTENDED_SCENE_MODE_ZOOM_RATIO_RANGES =
+ new Key<float[]>("android.control.availableExtendedSceneModeZoomRatioRanges", float[].class);
/**
- * <p>The list of bokeh modes for {@link CaptureRequest#CONTROL_BOKEH_MODE android.control.bokehMode} that are supported by
- * this camera device, and each bokeh mode's capabilities such as maximum streaming size
- * with bokeh effect, and supported zoom ratio ranges.</p>
- * <p>For OFF mode, the camera behaves normally with no bokeh effect.</p>
- * <p>For STILL_CAPTURE mode, the maximum streaming dimension specifies the limit under which
- * bokeh is effective when capture intent is PREVIEW. Note that when capture intent is
- * PREVIEW, the bokeh effect may not be as high quality compared to STILL_CAPTURE intent
- * in order to maintain reasonable frame rate. The maximum streaming dimension must be one
- * of the YUV_420_888 or PRIVATE resolutions in availableStreamConfigurations, or (0, 0)
- * if preview bokeh is not supported. If the application configures a stream larger than
- * the maximum streaming dimension, bokeh effect may not be applied for this stream for
- * PREVIEW intent.</p>
- * <p>For CONTINUOUS mode, the maximum streaming dimension specifies the limit under which
- * bokeh is effective. This dimension must be one of the YUV_420_888 or PRIVATE resolutions
- * in availableStreamConfigurations, and if the sensor maximum resolution is larger than or
- * equal to 1080p, the maximum streaming dimension must be at least 1080p. If the
- * application configures a stream with larger dimension, the stream may not have bokeh
- * effect applied.</p>
- * <p>When bokeh mode is enabled, the camera device may have limited range of zoom ratios
- * compared to when bokeh mode is disabled. availableBokehCapabilities lists the zoom
- * ranges for all supported bokeh modes. A range of (1.0, 1.0) means that no zoom
+ * <p>The list of extended scene modes for {@link CaptureRequest#CONTROL_EXTENDED_SCENE_MODE android.control.extendedSceneMode} that
+ * are supported by this camera device, and each extended scene mode's capabilities such
+ * as maximum streaming size, and supported zoom ratio ranges.</p>
+ * <p>For DISABLED mode, the camera behaves normally with no extended scene mdoe enabled.</p>
+ * <p>For BOKEH_STILL_CAPTURE mode, the maximum streaming dimension specifies the limit
+ * under which bokeh is effective when capture intent is PREVIEW. Note that when capture
+ * intent is PREVIEW, the bokeh effect may not be as high quality compared to STILL_CAPTURE
+ * intent in order to maintain reasonable frame rate. The maximum streaming dimension must
+ * be one of the YUV_420_888 or PRIVATE resolutions in availableStreamConfigurations, or
+ * (0, 0) if preview bokeh is not supported. If the application configures a stream
+ * larger than the maximum streaming dimension, bokeh effect may not be applied for this
+ * stream for PREVIEW intent.</p>
+ * <p>For BOKEH_CONTINUOUS mode, the maximum streaming dimension specifies the limit under
+ * which bokeh is effective. This dimension must be one of the YUV_420_888 or PRIVATE
+ * resolutions in availableStreamConfigurations, and if the sensor maximum resolution is
+ * larger than or equal to 1080p, the maximum streaming dimension must be at least 1080p.
+ * If the application configures a stream with larger dimension, the stream may not have
+ * bokeh effect applied.</p>
+ * <p>When extended scene mode is set, the camera device may have limited range of zoom ratios
+ * compared to when the mode is DISABLED. availableExtendedSceneModeCapabilities lists the
+ * zoom ranges for all supported extended modes. A range of (1.0, 1.0) means that no zoom
* (optical or digital) is supported.</p>
* <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
- * @see CaptureRequest#CONTROL_BOKEH_MODE
+ * @see CaptureRequest#CONTROL_EXTENDED_SCENE_MODE
*/
@PublicKey
@NonNull
@SyntheticKey
- public static final Key<android.hardware.camera2.params.Capability[]> CONTROL_AVAILABLE_BOKEH_CAPABILITIES =
- new Key<android.hardware.camera2.params.Capability[]>("android.control.availableBokehCapabilities", android.hardware.camera2.params.Capability[].class);
+ public static final Key<android.hardware.camera2.params.Capability[]> CONTROL_AVAILABLE_EXTENDED_SCENE_MODE_CAPABILITIES =
+ new Key<android.hardware.camera2.params.Capability[]>("android.control.availableExtendedSceneModeCapabilities", android.hardware.camera2.params.Capability[].class);
/**
* <p>Minimum and maximum zoom ratios supported by this camera device.</p>
diff --git a/core/java/android/hardware/camera2/CameraMetadata.java b/core/java/android/hardware/camera2/CameraMetadata.java
index 7bf819f..91dae66 100644
--- a/core/java/android/hardware/camera2/CameraMetadata.java
+++ b/core/java/android/hardware/camera2/CameraMetadata.java
@@ -2190,6 +2190,7 @@
* This setting can only be used if scene mode is supported (i.e.
* {@link CameraCharacteristics#CONTROL_AVAILABLE_SCENE_MODES android.control.availableSceneModes}
* contain some modes other than DISABLED).</p>
+ * <p>For extended scene modes such as BOKEH, please use USE_EXTENDED_SCENE_MODE instead.</p>
*
* @see CameraCharacteristics#CONTROL_AVAILABLE_SCENE_MODES
* @see CaptureRequest#CONTROL_MODE
@@ -2209,6 +2210,19 @@
*/
public static final int CONTROL_MODE_OFF_KEEP_STATE = 3;
+ /**
+ * <p>Use a specific extended scene mode.</p>
+ * <p>When extended scene mode is on, the camera device may override certain control
+ * parameters, such as targetFpsRange, AE, AWB, and AF modes, to achieve best power and
+ * quality tradeoffs. Only the mandatory stream combinations of LIMITED hardware level
+ * are guaranteed.</p>
+ * <p>This setting can only be used if extended scene mode is supported (i.e.
+ * android.control.availableExtendedSceneModes
+ * contains some modes other than DISABLED).</p>
+ * @see CaptureRequest#CONTROL_MODE
+ */
+ public static final int CONTROL_MODE_USE_EXTENDED_SCENE_MODE = 4;
+
//
// Enumeration values for CaptureRequest#CONTROL_SCENE_MODE
//
@@ -2540,32 +2554,39 @@
public static final int CONTROL_VIDEO_STABILIZATION_MODE_ON = 1;
//
- // Enumeration values for CaptureRequest#CONTROL_BOKEH_MODE
+ // Enumeration values for CaptureRequest#CONTROL_EXTENDED_SCENE_MODE
//
/**
- * <p>Bokeh mode is disabled.</p>
- * @see CaptureRequest#CONTROL_BOKEH_MODE
+ * <p>Extended scene mode is disabled.</p>
+ * @see CaptureRequest#CONTROL_EXTENDED_SCENE_MODE
*/
- public static final int CONTROL_BOKEH_MODE_OFF = 0;
+ public static final int CONTROL_EXTENDED_SCENE_MODE_DISABLED = 0;
/**
* <p>High quality bokeh mode is enabled for all non-raw streams (including YUV,
* JPEG, and IMPLEMENTATION_DEFINED) when capture intent is STILL_CAPTURE. Due to the
* extra image processing, this mode may introduce additional stall to non-raw streams.
* This mode should be used in high quality still capture use case.</p>
- * @see CaptureRequest#CONTROL_BOKEH_MODE
+ * @see CaptureRequest#CONTROL_EXTENDED_SCENE_MODE
*/
- public static final int CONTROL_BOKEH_MODE_STILL_CAPTURE = 1;
+ public static final int CONTROL_EXTENDED_SCENE_MODE_BOKEH_STILL_CAPTURE = 1;
/**
* <p>Bokeh effect must not slow down capture rate relative to sensor raw output,
* and the effect is applied to all processed streams no larger than the maximum
* streaming dimension. This mode should be used if performance and power are a
* priority, such as video recording.</p>
- * @see CaptureRequest#CONTROL_BOKEH_MODE
+ * @see CaptureRequest#CONTROL_EXTENDED_SCENE_MODE
*/
- public static final int CONTROL_BOKEH_MODE_CONTINUOUS = 2;
+ public static final int CONTROL_EXTENDED_SCENE_MODE_BOKEH_CONTINUOUS = 2;
+
+ /**
+ * <p>Vendor defined extended scene modes. These depend on vendor implementation.</p>
+ * @see CaptureRequest#CONTROL_EXTENDED_SCENE_MODE
+ * @hide
+ */
+ public static final int CONTROL_EXTENDED_SCENE_MODE_VENDOR_START = 0x40;
//
// Enumeration values for CaptureRequest#EDGE_MODE
diff --git a/core/java/android/hardware/camera2/CaptureRequest.java b/core/java/android/hardware/camera2/CaptureRequest.java
index c1554af..0ee7482 100644
--- a/core/java/android/hardware/camera2/CaptureRequest.java
+++ b/core/java/android/hardware/camera2/CaptureRequest.java
@@ -1911,10 +1911,10 @@
* capture parameters itself.</p>
* <p>When set to AUTO, the individual algorithm controls in
* android.control.* are in effect, such as {@link CaptureRequest#CONTROL_AF_MODE android.control.afMode}.</p>
- * <p>When set to USE_SCENE_MODE, the individual controls in
+ * <p>When set to USE_SCENE_MODE or USE_EXTENDED_SCENE_MODE, the individual controls in
* android.control.* are mostly disabled, and the camera device
- * implements one of the scene mode settings (such as ACTION,
- * SUNSET, or PARTY) as it wishes. The camera device scene mode
+ * implements one of the scene mode or extended scene mode settings (such as ACTION,
+ * SUNSET, PARTY, or BOKEH) as it wishes. The camera device scene mode
* 3A settings are provided by {@link android.hardware.camera2.CaptureResult capture results}.</p>
* <p>When set to OFF_KEEP_STATE, it is similar to OFF mode, the only difference
* is that this frame will not be used by camera device background 3A statistics
@@ -1927,6 +1927,7 @@
* <li>{@link #CONTROL_MODE_AUTO AUTO}</li>
* <li>{@link #CONTROL_MODE_USE_SCENE_MODE USE_SCENE_MODE}</li>
* <li>{@link #CONTROL_MODE_OFF_KEEP_STATE OFF_KEEP_STATE}</li>
+ * <li>{@link #CONTROL_MODE_USE_EXTENDED_SCENE_MODE USE_EXTENDED_SCENE_MODE}</li>
* </ul></p>
* <p><b>Available values for this device:</b><br>
* {@link CameraCharacteristics#CONTROL_AVAILABLE_MODES android.control.availableModes}</p>
@@ -1938,6 +1939,7 @@
* @see #CONTROL_MODE_AUTO
* @see #CONTROL_MODE_USE_SCENE_MODE
* @see #CONTROL_MODE_OFF_KEEP_STATE
+ * @see #CONTROL_MODE_USE_EXTENDED_SCENE_MODE
*/
@PublicKey
@NonNull
@@ -2127,52 +2129,49 @@
new Key<Boolean>("android.control.enableZsl", boolean.class);
/**
- * <p>Whether bokeh mode is enabled for a particular capture request.</p>
+ * <p>Whether extended scene mode is enabled for a particular capture request.</p>
* <p>With bokeh mode, the camera device may blur out the parts of scene that are not in
* focus, creating a bokeh (or shallow depth of field) effect for people or objects.</p>
- * <p>When set to STILL_CAPTURE bokeh mode with STILL_CAPTURE capture intent, due to the extra
+ * <p>When set to BOKEH_STILL_CAPTURE mode with STILL_CAPTURE capture intent, due to the extra
* processing needed for high quality bokeh effect, the stall may be longer than when
* capture intent is not STILL_CAPTURE.</p>
- * <p>When set to STILL_CAPTURE bokeh mode with PREVIEW capture intent,</p>
+ * <p>When set to BOKEH_STILL_CAPTURE mode with PREVIEW capture intent,</p>
* <ul>
* <li>If the camera device has BURST_CAPTURE capability, the frame rate requirement of
* BURST_CAPTURE must still be met.</li>
- * <li>All streams not larger than the maximum streaming dimension for STILL_CAPTURE mode
- * (queried via {@link android.hardware.camera2.CameraCharacteristics#CONTROL_AVAILABLE_BOKEH_CAPABILITIES })
+ * <li>All streams not larger than the maximum streaming dimension for BOKEH_STILL_CAPTURE mode
+ * (queried via {@link android.hardware.camera2.CameraCharacteristics#CONTROL_AVAILABLE_EXTENDED_SCENE_MODE_CAPABILITIES })
* will have preview bokeh effect applied.</li>
* </ul>
- * <p>When set to CONTINUOUS mode, configured streams dimension should not exceed this mode's
+ * <p>When set to BOKEH_CONTINUOUS mode, configured streams dimension should not exceed this mode's
* maximum streaming dimension in order to have bokeh effect applied. Bokeh effect may not
* be available for streams larger than the maximum streaming dimension.</p>
- * <p>Switching between different bokeh modes may involve reconfiguration of the camera
+ * <p>Switching between different extended scene modes may involve reconfiguration of the camera
* pipeline, resulting in long latency. The application should check this key against the
* available session keys queried via
* {@link android.hardware.camera2.CameraCharacteristics#getAvailableSessionKeys }.</p>
- * <p>When bokeh mode is on, the camera device may override certain control parameters, such as
- * reduce frame rate or use face priority scene mode, to achieve best power and quality
- * tradeoffs. When turned on, AE, AWB, and AF run in auto modes, and only the mandatory
- * stream combinations of LIMITED hardware level are guaranteed.</p>
* <p>For a logical multi-camera, bokeh may be implemented by stereo vision from sub-cameras
* with different field of view. As a result, when bokeh mode is enabled, the camera device
- * may override {@link CaptureRequest#SCALER_CROP_REGION android.scaler.cropRegion}, and the field of view will be smaller than when
- * bokeh mode is off.</p>
+ * may override {@link CaptureRequest#SCALER_CROP_REGION android.scaler.cropRegion} or {@link CaptureRequest#CONTROL_ZOOM_RATIO android.control.zoomRatio}, and the field of
+ * view may be smaller than when bokeh mode is off.</p>
* <p><b>Possible values:</b>
* <ul>
- * <li>{@link #CONTROL_BOKEH_MODE_OFF OFF}</li>
- * <li>{@link #CONTROL_BOKEH_MODE_STILL_CAPTURE STILL_CAPTURE}</li>
- * <li>{@link #CONTROL_BOKEH_MODE_CONTINUOUS CONTINUOUS}</li>
+ * <li>{@link #CONTROL_EXTENDED_SCENE_MODE_DISABLED DISABLED}</li>
+ * <li>{@link #CONTROL_EXTENDED_SCENE_MODE_BOKEH_STILL_CAPTURE BOKEH_STILL_CAPTURE}</li>
+ * <li>{@link #CONTROL_EXTENDED_SCENE_MODE_BOKEH_CONTINUOUS BOKEH_CONTINUOUS}</li>
* </ul></p>
* <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
+ * @see CaptureRequest#CONTROL_ZOOM_RATIO
* @see CaptureRequest#SCALER_CROP_REGION
- * @see #CONTROL_BOKEH_MODE_OFF
- * @see #CONTROL_BOKEH_MODE_STILL_CAPTURE
- * @see #CONTROL_BOKEH_MODE_CONTINUOUS
+ * @see #CONTROL_EXTENDED_SCENE_MODE_DISABLED
+ * @see #CONTROL_EXTENDED_SCENE_MODE_BOKEH_STILL_CAPTURE
+ * @see #CONTROL_EXTENDED_SCENE_MODE_BOKEH_CONTINUOUS
*/
@PublicKey
@NonNull
- public static final Key<Integer> CONTROL_BOKEH_MODE =
- new Key<Integer>("android.control.bokehMode", int.class);
+ public static final Key<Integer> CONTROL_EXTENDED_SCENE_MODE =
+ new Key<Integer>("android.control.extendedSceneMode", int.class);
/**
* <p>The desired zoom ratio</p>
diff --git a/core/java/android/hardware/camera2/CaptureResult.java b/core/java/android/hardware/camera2/CaptureResult.java
index b4c1d72..096aa0c 100644
--- a/core/java/android/hardware/camera2/CaptureResult.java
+++ b/core/java/android/hardware/camera2/CaptureResult.java
@@ -2118,10 +2118,10 @@
* capture parameters itself.</p>
* <p>When set to AUTO, the individual algorithm controls in
* android.control.* are in effect, such as {@link CaptureRequest#CONTROL_AF_MODE android.control.afMode}.</p>
- * <p>When set to USE_SCENE_MODE, the individual controls in
+ * <p>When set to USE_SCENE_MODE or USE_EXTENDED_SCENE_MODE, the individual controls in
* android.control.* are mostly disabled, and the camera device
- * implements one of the scene mode settings (such as ACTION,
- * SUNSET, or PARTY) as it wishes. The camera device scene mode
+ * implements one of the scene mode or extended scene mode settings (such as ACTION,
+ * SUNSET, PARTY, or BOKEH) as it wishes. The camera device scene mode
* 3A settings are provided by {@link android.hardware.camera2.CaptureResult capture results}.</p>
* <p>When set to OFF_KEEP_STATE, it is similar to OFF mode, the only difference
* is that this frame will not be used by camera device background 3A statistics
@@ -2134,6 +2134,7 @@
* <li>{@link #CONTROL_MODE_AUTO AUTO}</li>
* <li>{@link #CONTROL_MODE_USE_SCENE_MODE USE_SCENE_MODE}</li>
* <li>{@link #CONTROL_MODE_OFF_KEEP_STATE OFF_KEEP_STATE}</li>
+ * <li>{@link #CONTROL_MODE_USE_EXTENDED_SCENE_MODE USE_EXTENDED_SCENE_MODE}</li>
* </ul></p>
* <p><b>Available values for this device:</b><br>
* {@link CameraCharacteristics#CONTROL_AVAILABLE_MODES android.control.availableModes}</p>
@@ -2145,6 +2146,7 @@
* @see #CONTROL_MODE_AUTO
* @see #CONTROL_MODE_USE_SCENE_MODE
* @see #CONTROL_MODE_OFF_KEEP_STATE
+ * @see #CONTROL_MODE_USE_EXTENDED_SCENE_MODE
*/
@PublicKey
@NonNull
@@ -2357,52 +2359,49 @@
new Key<Integer>("android.control.afSceneChange", int.class);
/**
- * <p>Whether bokeh mode is enabled for a particular capture request.</p>
+ * <p>Whether extended scene mode is enabled for a particular capture request.</p>
* <p>With bokeh mode, the camera device may blur out the parts of scene that are not in
* focus, creating a bokeh (or shallow depth of field) effect for people or objects.</p>
- * <p>When set to STILL_CAPTURE bokeh mode with STILL_CAPTURE capture intent, due to the extra
+ * <p>When set to BOKEH_STILL_CAPTURE mode with STILL_CAPTURE capture intent, due to the extra
* processing needed for high quality bokeh effect, the stall may be longer than when
* capture intent is not STILL_CAPTURE.</p>
- * <p>When set to STILL_CAPTURE bokeh mode with PREVIEW capture intent,</p>
+ * <p>When set to BOKEH_STILL_CAPTURE mode with PREVIEW capture intent,</p>
* <ul>
* <li>If the camera device has BURST_CAPTURE capability, the frame rate requirement of
* BURST_CAPTURE must still be met.</li>
- * <li>All streams not larger than the maximum streaming dimension for STILL_CAPTURE mode
- * (queried via {@link android.hardware.camera2.CameraCharacteristics#CONTROL_AVAILABLE_BOKEH_CAPABILITIES })
+ * <li>All streams not larger than the maximum streaming dimension for BOKEH_STILL_CAPTURE mode
+ * (queried via {@link android.hardware.camera2.CameraCharacteristics#CONTROL_AVAILABLE_EXTENDED_SCENE_MODE_CAPABILITIES })
* will have preview bokeh effect applied.</li>
* </ul>
- * <p>When set to CONTINUOUS mode, configured streams dimension should not exceed this mode's
+ * <p>When set to BOKEH_CONTINUOUS mode, configured streams dimension should not exceed this mode's
* maximum streaming dimension in order to have bokeh effect applied. Bokeh effect may not
* be available for streams larger than the maximum streaming dimension.</p>
- * <p>Switching between different bokeh modes may involve reconfiguration of the camera
+ * <p>Switching between different extended scene modes may involve reconfiguration of the camera
* pipeline, resulting in long latency. The application should check this key against the
* available session keys queried via
* {@link android.hardware.camera2.CameraCharacteristics#getAvailableSessionKeys }.</p>
- * <p>When bokeh mode is on, the camera device may override certain control parameters, such as
- * reduce frame rate or use face priority scene mode, to achieve best power and quality
- * tradeoffs. When turned on, AE, AWB, and AF run in auto modes, and only the mandatory
- * stream combinations of LIMITED hardware level are guaranteed.</p>
* <p>For a logical multi-camera, bokeh may be implemented by stereo vision from sub-cameras
* with different field of view. As a result, when bokeh mode is enabled, the camera device
- * may override {@link CaptureRequest#SCALER_CROP_REGION android.scaler.cropRegion}, and the field of view will be smaller than when
- * bokeh mode is off.</p>
+ * may override {@link CaptureRequest#SCALER_CROP_REGION android.scaler.cropRegion} or {@link CaptureRequest#CONTROL_ZOOM_RATIO android.control.zoomRatio}, and the field of
+ * view may be smaller than when bokeh mode is off.</p>
* <p><b>Possible values:</b>
* <ul>
- * <li>{@link #CONTROL_BOKEH_MODE_OFF OFF}</li>
- * <li>{@link #CONTROL_BOKEH_MODE_STILL_CAPTURE STILL_CAPTURE}</li>
- * <li>{@link #CONTROL_BOKEH_MODE_CONTINUOUS CONTINUOUS}</li>
+ * <li>{@link #CONTROL_EXTENDED_SCENE_MODE_DISABLED DISABLED}</li>
+ * <li>{@link #CONTROL_EXTENDED_SCENE_MODE_BOKEH_STILL_CAPTURE BOKEH_STILL_CAPTURE}</li>
+ * <li>{@link #CONTROL_EXTENDED_SCENE_MODE_BOKEH_CONTINUOUS BOKEH_CONTINUOUS}</li>
* </ul></p>
* <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
+ * @see CaptureRequest#CONTROL_ZOOM_RATIO
* @see CaptureRequest#SCALER_CROP_REGION
- * @see #CONTROL_BOKEH_MODE_OFF
- * @see #CONTROL_BOKEH_MODE_STILL_CAPTURE
- * @see #CONTROL_BOKEH_MODE_CONTINUOUS
+ * @see #CONTROL_EXTENDED_SCENE_MODE_DISABLED
+ * @see #CONTROL_EXTENDED_SCENE_MODE_BOKEH_STILL_CAPTURE
+ * @see #CONTROL_EXTENDED_SCENE_MODE_BOKEH_CONTINUOUS
*/
@PublicKey
@NonNull
- public static final Key<Integer> CONTROL_BOKEH_MODE =
- new Key<Integer>("android.control.bokehMode", int.class);
+ public static final Key<Integer> CONTROL_EXTENDED_SCENE_MODE =
+ new Key<Integer>("android.control.extendedSceneMode", int.class);
/**
* <p>The desired zoom ratio</p>
diff --git a/core/java/android/hardware/camera2/impl/CameraMetadataNative.java b/core/java/android/hardware/camera2/impl/CameraMetadataNative.java
index df77f52..786db6e 100644
--- a/core/java/android/hardware/camera2/impl/CameraMetadataNative.java
+++ b/core/java/android/hardware/camera2/impl/CameraMetadataNative.java
@@ -714,12 +714,12 @@
}
});
sGetCommandMap.put(
- CameraCharacteristics.CONTROL_AVAILABLE_BOKEH_CAPABILITIES.getNativeKey(),
+ CameraCharacteristics.CONTROL_AVAILABLE_EXTENDED_SCENE_MODE_CAPABILITIES.getNativeKey(),
new GetCommand() {
@Override
@SuppressWarnings("unchecked")
public <T> T getValue(CameraMetadataNative metadata, Key<T> key) {
- return (T) metadata.getBokehCapabilities();
+ return (T) metadata.getExtendedSceneModeCapabilities();
}
});
}
@@ -1442,53 +1442,55 @@
return samples;
}
- private Capability[] getBokehCapabilities() {
- int[] bokehMaxSizes = getBase(CameraCharacteristics.CONTROL_AVAILABLE_BOKEH_MAX_SIZES);
- float[] bokehZoomRanges = getBase(
- CameraCharacteristics.CONTROL_AVAILABLE_BOKEH_ZOOM_RATIO_RANGES);
+ private Capability[] getExtendedSceneModeCapabilities() {
+ int[] maxSizes =
+ getBase(CameraCharacteristics.CONTROL_AVAILABLE_EXTENDED_SCENE_MODE_MAX_SIZES);
+ float[] zoomRanges = getBase(
+ CameraCharacteristics.CONTROL_AVAILABLE_EXTENDED_SCENE_MODE_ZOOM_RATIO_RANGES);
Range<Float> zoomRange = getBase(CameraCharacteristics.CONTROL_ZOOM_RATIO_RANGE);
float maxDigitalZoom = getBase(CameraCharacteristics.SCALER_AVAILABLE_MAX_DIGITAL_ZOOM);
- if (bokehMaxSizes == null) {
+ if (maxSizes == null) {
return null;
}
- if (bokehMaxSizes.length % 3 != 0) {
- throw new AssertionError("availableBokehMaxSizes must be tuples of " +
- "[mode, width, height]");
+ if (maxSizes.length % 3 != 0) {
+ throw new AssertionError("availableExtendedSceneModeMaxSizes must be tuples of "
+ + "[mode, width, height]");
}
- int numBokehModes = bokehMaxSizes.length / 3;
- int numBokehZoomRanges = 0;
- if (bokehZoomRanges != null) {
- if (bokehZoomRanges.length % 2 != 0) {
- throw new AssertionError("availableBokehZoomRanges must be tuples of " +
- "[minZoom, maxZoom]");
+ int numExtendedSceneModes = maxSizes.length / 3;
+ int numExtendedSceneModeZoomRanges = 0;
+ if (zoomRanges != null) {
+ if (zoomRanges.length % 2 != 0) {
+ throw new AssertionError("availableExtendedSceneModeZoomRanges must be tuples of "
+ + "[minZoom, maxZoom]");
}
- numBokehZoomRanges = bokehZoomRanges.length / 2;
- if (numBokehModes - numBokehZoomRanges != 1) {
- throw new AssertionError("Number of bokeh zoom ranges must be 1 less than " +
- "number of supported bokeh modes");
+ numExtendedSceneModeZoomRanges = zoomRanges.length / 2;
+ if (numExtendedSceneModes - numExtendedSceneModeZoomRanges != 1) {
+ throw new AssertionError("Number of extended scene mode zoom ranges must be 1 "
+ + "less than number of supported modes");
}
}
- float bokehOffMinZoomRatio = 1.0f;
- float bokehOffMaxZoomRatio = maxDigitalZoom;
+ float modeOffMinZoomRatio = 1.0f;
+ float modeOffMaxZoomRatio = maxDigitalZoom;
if (zoomRange != null) {
- bokehOffMinZoomRatio = zoomRange.getLower();
- bokehOffMaxZoomRatio = zoomRange.getUpper();
+ modeOffMinZoomRatio = zoomRange.getLower();
+ modeOffMaxZoomRatio = zoomRange.getUpper();
}
- Capability[] capabilities = new Capability[numBokehModes];
- for (int i = 0, j = 0; i < numBokehModes; i++) {
- int mode = bokehMaxSizes[3 * i];
- int width = bokehMaxSizes[3 * i + 1];
- int height = bokehMaxSizes[3 * i + 2];
- if (mode != CameraMetadata.CONTROL_BOKEH_MODE_OFF && j < numBokehZoomRanges) {
- capabilities[i] = new Capability(mode, width, height, bokehZoomRanges[2 * j],
- bokehZoomRanges[2 * j + 1]);
+ Capability[] capabilities = new Capability[numExtendedSceneModes];
+ for (int i = 0, j = 0; i < numExtendedSceneModes; i++) {
+ int mode = maxSizes[3 * i];
+ int width = maxSizes[3 * i + 1];
+ int height = maxSizes[3 * i + 2];
+ if (mode != CameraMetadata.CONTROL_EXTENDED_SCENE_MODE_DISABLED
+ && j < numExtendedSceneModeZoomRanges) {
+ capabilities[i] = new Capability(mode, width, height, zoomRanges[2 * j],
+ zoomRanges[2 * j + 1]);
j++;
} else {
- capabilities[i] = new Capability(mode, width, height, bokehOffMinZoomRatio,
- bokehOffMaxZoomRatio);
+ capabilities[i] = new Capability(mode, width, height, modeOffMinZoomRatio,
+ modeOffMaxZoomRatio);
}
}
diff --git a/core/java/android/hardware/camera2/params/Capability.java b/core/java/android/hardware/camera2/params/Capability.java
index 367690c..6f59c5f 100644
--- a/core/java/android/hardware/camera2/params/Capability.java
+++ b/core/java/android/hardware/camera2/params/Capability.java
@@ -30,7 +30,7 @@
* Immutable class to store the camera capability, its corresponding maximum
* streaming dimension and zoom range.
*
- * @see CameraCharacteristics#CONTROL_AVAILABLE_BOKEH_CAPABILITIES
+ * @see CameraCharacteristics#CONTROL_AVAILABLE_EXTENDED_SCENE_MODE_CAPABILITIES
*/
public final class Capability {
@@ -72,10 +72,10 @@
/**
* Return the supported mode for this capability.
*
- * @return One of supported modes for the capability. For example, for available bokeh modes,
- * this will be one of {@link CameraMetadata#CONTROL_BOKEH_MODE_OFF},
- * {@link CameraMetadata#CONTROL_BOKEH_MODE_STILL_CAPTURE}, and
- * {@link CameraMetadata#CONTROL_BOKEH_MODE_CONTINUOUS}.
+ * @return One of supported modes for the capability. For example, for available extended
+ * scene modes, this will be one of {@link CameraMetadata#CONTROL_EXTENDED_SCENE_MODE_DISABLED},
+ * {@link CameraMetadata#CONTROL_EXTENDED_SCENE_MODE_BOKEH_STILL_CAPTURE}, and
+ * {@link CameraMetadata#CONTROL_EXTENDED_SCENE_MODE_BOKEH_CONTINUOUS}.
*/
public int getMode() {
return mMode;
diff --git a/core/java/android/hardware/soundtrigger/KeyphraseEnrollmentInfo.java b/core/java/android/hardware/soundtrigger/KeyphraseEnrollmentInfo.java
index 1aeb76a3..0593545 100644
--- a/core/java/android/hardware/soundtrigger/KeyphraseEnrollmentInfo.java
+++ b/core/java/android/hardware/soundtrigger/KeyphraseEnrollmentInfo.java
@@ -43,7 +43,6 @@
import java.util.List;
import java.util.Locale;
import java.util.Map;
-import java.util.Set;
/**
* Enrollment information about the different available keyphrases.
@@ -120,11 +119,6 @@
private final KeyphraseMetadata[] mKeyphrases;
/**
- * Set of UIDs associated with the detected enrollment applications.
- */
- private final Set<Integer> mEnrollmentApplicationUids;
-
- /**
* Map between KeyphraseMetadata and the package name of the enrollment app that provides it.
*/
final private Map<KeyphraseMetadata, String> mKeyphrasePackageMap;
@@ -142,13 +136,11 @@
mParseError = "No enrollment applications found";
mKeyphrasePackageMap = Collections.<KeyphraseMetadata, String>emptyMap();
mKeyphrases = null;
- mEnrollmentApplicationUids = Collections.emptySet();
return;
}
List<String> parseErrors = new LinkedList<String>();
mKeyphrasePackageMap = new HashMap<KeyphraseMetadata, String>();
- mEnrollmentApplicationUids = new ArraySet<>();
for (ResolveInfo ri : ris) {
try {
ApplicationInfo ai = pm.getApplicationInfo(
@@ -170,7 +162,6 @@
getKeyphraseMetadataFromApplicationInfo(pm, ai, parseErrors);
if (metadata != null) {
mKeyphrasePackageMap.put(metadata, ai.packageName);
- mEnrollmentApplicationUids.add(ai.uid);
}
} catch (PackageManager.NameNotFoundException e) {
String error = "error parsing voice enrollment meta-data for "
@@ -373,21 +364,9 @@
return null;
}
- /**
- * Tests if the input UID matches a supported enrollment application.
- *
- * @param uid UID of the caller to test against.
- * @return Returns true if input uid matches the uid of a supported enrollment application.
- * False if not.
- */
- public boolean isUidSupportedEnrollmentApplication(int uid) {
- return mEnrollmentApplicationUids.contains(uid);
- }
-
@Override
public String toString() {
return "KeyphraseEnrollmentInfo [KeyphrasePackageMap=" + mKeyphrasePackageMap.toString()
- + ", enrollmentApplicationUids=" + mEnrollmentApplicationUids.toString()
+ ", ParseError=" + mParseError + "]";
}
}
diff --git a/core/java/android/inputmethodservice/InputMethodService.java b/core/java/android/inputmethodservice/InputMethodService.java
index 2cafcdb..c2ee21d 100644
--- a/core/java/android/inputmethodservice/InputMethodService.java
+++ b/core/java/android/inputmethodservice/InputMethodService.java
@@ -2284,7 +2284,9 @@
// When insets API is enabled, it is responsible for client and server side
// visibility of IME window.
if (isVisibilityAppliedUsingInsetsConsumer()) {
- mInputView.dispatchWindowVisibilityChanged(View.GONE);
+ if (mInputView != null) {
+ mInputView.dispatchWindowVisibilityChanged(View.GONE);
+ }
} else {
mWindow.hide();
}
diff --git a/core/java/android/os/ConfigUpdate.java b/core/java/android/os/ConfigUpdate.java
index a28f5fb..4908919 100644
--- a/core/java/android/os/ConfigUpdate.java
+++ b/core/java/android/os/ConfigUpdate.java
@@ -16,7 +16,6 @@
package android.os;
-import android.annotation.RequiresPermission;
import android.annotation.SdkConstant;
import android.annotation.SdkConstant.SdkConstantType;
import android.annotation.SystemApi;
@@ -119,14 +118,14 @@
/**
* Update the emergency number database into the devices.
* <p>Extra: {@link #EXTRA_VERSION} the numeric version of the database.
- * <p>Extra: {@link #EXTRA_REQUIRED_HASH} the hash of the database.
+ * <p>Extra: {@link #EXTRA_REQUIRED_HASH} hash of the database, which is encoded by base-16
+ * SHA512.
* <p>Input: {@link android.content.Intent#getData} the URI to download emergency number
* database.
*
* @hide
*/
@SystemApi
- @RequiresPermission(android.Manifest.permission.UPDATE_CONFIG)
@SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
public static final String ACTION_UPDATE_EMERGENCY_NUMBER_DB =
"android.os.action.UPDATE_EMERGENCY_NUMBER_DB";
@@ -141,7 +140,7 @@
public static final String EXTRA_VERSION = "android.os.extra.VERSION";
/**
- * A string to indicate the hash of the data.
+ * Hash of the database, which is encoded by base-16 SHA512.
*
* @hide
*/
diff --git a/core/java/android/os/LimitExceededException.java b/core/java/android/os/LimitExceededException.java
new file mode 100644
index 0000000..d934326
--- /dev/null
+++ b/core/java/android/os/LimitExceededException.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.os;
+
+import android.annotation.NonNull;
+
+/** Indicates that the app has exceeded a limit set by the System. */
+public class LimitExceededException extends IllegalStateException {
+
+ /**
+ * Constructs a new {@code LimitExceededException} with {@code null} as its
+ * detail message. The cause is not initialized, and may subsequently be
+ * initialized by a call to {@link #initCause}.
+ */
+ public LimitExceededException() {
+ super();
+ }
+
+ /**
+ * Constructs a new {@code LimitExceededException} with the specified detail message.
+ * The cause is not initialized, and may subsequently be initialized by a
+ * call to {@link #initCause}.
+ *
+ * @param message the detail message which is saved for later retrieval
+ * by the {@link #getMessage()} method.
+ */
+ public LimitExceededException(@NonNull String message) {
+ super(message);
+ }
+}
diff --git a/core/java/android/os/TelephonyServiceManager.java b/core/java/android/os/TelephonyServiceManager.java
index 1128f4c..6993671 100644
--- a/core/java/android/os/TelephonyServiceManager.java
+++ b/core/java/android/os/TelephonyServiceManager.java
@@ -17,7 +17,6 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
-import android.annotation.SystemApi;
import android.content.Context;
/**
@@ -28,7 +27,6 @@
*
* @hide
*/
-@SystemApi
public class TelephonyServiceManager {
/**
* @hide
@@ -97,7 +95,6 @@
*
* @hide
*/
- @SystemApi
public static class ServiceNotFoundException extends ServiceManager.ServiceNotFoundException {
/**
* Constructor.
diff --git a/core/java/android/permission/IPermissionManager.aidl b/core/java/android/permission/IPermissionManager.aidl
index 09df72c..235b083 100644
--- a/core/java/android/permission/IPermissionManager.aidl
+++ b/core/java/android/permission/IPermissionManager.aidl
@@ -54,6 +54,8 @@
int checkUidPermission(String permName, int uid);
+ int checkDeviceIdentifierAccess(String packageName, String callingFeatureId, String message, int pid, int uid);
+
void addOnPermissionsChangeListener(in IOnPermissionsChangeListener listener);
void removeOnPermissionsChangeListener(in IOnPermissionsChangeListener listener);
diff --git a/core/java/android/permission/PermissionManager.java b/core/java/android/permission/PermissionManager.java
index fc993b8..3dc8e99 100644
--- a/core/java/android/permission/PermissionManager.java
+++ b/core/java/android/permission/PermissionManager.java
@@ -40,6 +40,7 @@
import android.util.Slog;
import com.android.internal.annotations.Immutable;
+import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.CollectionUtils;
import java.util.ArrayList;
@@ -84,10 +85,25 @@
*/
public PermissionManager(@NonNull Context context, IPackageManager packageManager)
throws ServiceManager.ServiceNotFoundException {
+ this(context, packageManager, IPermissionManager.Stub.asInterface(
+ ServiceManager.getServiceOrThrow("permissionmgr")));
+ }
+
+ /**
+ * Creates a new instance with the provided instantiation of the IPermissionManager.
+ *
+ * @param context the current context in which to operate
+ * @param packageManager package manager service to be used for package related permission
+ * requests
+ * @param permissionManager injectable permission manager service
+ * @hide
+ */
+ @VisibleForTesting
+ public PermissionManager(@NonNull Context context, IPackageManager packageManager,
+ IPermissionManager permissionManager) {
mContext = context;
mPackageManager = packageManager;
- mPermissionManager = IPermissionManager.Stub.asInterface(
- ServiceManager.getServiceOrThrow("permissionmgr"));
+ mPermissionManager = permissionManager;
}
/**
@@ -486,6 +502,30 @@
}
}
+ /**
+ * Checks whether the package with the given pid/uid can read device identifiers.
+ *
+ * @param packageName the name of the package to be checked for identifier access
+ * @param message the message to be used for logging during identifier access
+ * verification
+ * @param callingFeatureId the feature in the package
+ * @param pid the process id of the package to be checked
+ * @param uid the uid of the package to be checked
+ * @return {@link PackageManager#PERMISSION_GRANTED} if the package is allowed identifier
+ * access, {@link PackageManager#PERMISSION_DENIED} otherwise
+ * @hide
+ */
+ @SystemApi
+ public int checkDeviceIdentifierAccess(@Nullable String packageName, @Nullable String message,
+ @Nullable String callingFeatureId, int pid, int uid) {
+ try {
+ return mPermissionManager.checkDeviceIdentifierAccess(packageName, message,
+ callingFeatureId, pid, uid);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
/* @hide */
private static int checkPermissionUncached(@Nullable String permission, int pid, int uid) {
final IActivityManager am = ActivityManager.getService();
diff --git a/core/java/android/service/autofill/IInlineSuggestionUiCallback.aidl b/core/java/android/service/autofill/IInlineSuggestionUiCallback.aidl
index 1bcc76b..bed4302 100644
--- a/core/java/android/service/autofill/IInlineSuggestionUiCallback.aidl
+++ b/core/java/android/service/autofill/IInlineSuggestionUiCallback.aidl
@@ -16,6 +16,7 @@
package android.service.autofill;
+import android.content.IntentSender;
import android.os.IBinder;
import android.view.SurfaceControlViewHost;
@@ -30,4 +31,5 @@
void onContent(in SurfaceControlViewHost.SurfacePackage surface);
void onError();
void onTransferTouchFocusToImeWindow(in IBinder sourceInputToken, int displayId);
+ void onStartIntentSender(in IntentSender intentSender);
}
diff --git a/core/java/android/service/autofill/InlineSuggestionRenderService.java b/core/java/android/service/autofill/InlineSuggestionRenderService.java
index 7fbc309..0d4be58 100644
--- a/core/java/android/service/autofill/InlineSuggestionRenderService.java
+++ b/core/java/android/service/autofill/InlineSuggestionRenderService.java
@@ -24,6 +24,7 @@
import android.app.Service;
import android.app.slice.Slice;
import android.content.Intent;
+import android.content.IntentSender;
import android.graphics.PixelFormat;
import android.os.Bundle;
import android.os.Handler;
@@ -60,6 +61,8 @@
private final Handler mHandler = new Handler(Looper.getMainLooper(), null, true);
+ private IInlineSuggestionUiCallback mCallback;
+
private void handleRenderSuggestion(IInlineSuggestionUiCallback callback,
InlinePresentation presentation, int width, int height, IBinder hostInputToken,
int displayId) {
@@ -84,6 +87,7 @@
}
return;
}
+ mCallback = callback;
final InlineSuggestionRoot suggestionRoot = new InlineSuggestionRoot(this, callback);
suggestionRoot.addView(suggestionView);
@@ -155,6 +159,20 @@
}
/**
+ * Starts the {@link IntentSender} from the client app.
+ *
+ * @param intentSender the {@link IntentSender} to start the attribution UI from the client app.
+ */
+ public final void startIntentSender(@NonNull IntentSender intentSender) {
+ if (mCallback == null) return;
+ try {
+ mCallback.onStartIntentSender(intentSender);
+ } catch (RemoteException e) {
+ e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
* Returns the metadata about the renderer. Returns {@code null} if no metadata is provided.
*/
@Nullable
diff --git a/core/java/android/service/autofill/InlineSuggestionRoot.java b/core/java/android/service/autofill/InlineSuggestionRoot.java
index 6c9d36b..653e513 100644
--- a/core/java/android/service/autofill/InlineSuggestionRoot.java
+++ b/core/java/android/service/autofill/InlineSuggestionRoot.java
@@ -68,7 +68,9 @@
case MotionEvent.ACTION_MOVE: {
final float distance = MathUtils.dist(mDownX, mDownY,
event.getX(), event.getY());
- if (distance > mTouchSlop) {
+ final boolean isSecure = (event.getFlags()
+ & MotionEvent.FLAG_WINDOW_IS_PARTIALLY_OBSCURED) == 0;
+ if (!isSecure || distance > mTouchSlop) {
try {
mCallback.onTransferTouchFocusToImeWindow(getViewRootImpl().getInputToken(),
getContext().getDisplayId());
diff --git a/core/java/android/telephony/SubscriptionPlan.java b/core/java/android/telephony/SubscriptionPlan.java
index 901957f..d5ac436 100644
--- a/core/java/android/telephony/SubscriptionPlan.java
+++ b/core/java/android/telephony/SubscriptionPlan.java
@@ -372,5 +372,15 @@
plan.networkTypes = Arrays.copyOf(networkTypes, networkTypes.length);
return this;
}
+
+ /**
+ * Reset any network types that were set with {@link #setNetworkTypes(int[])}.
+ * This will make the SubscriptionPlan apply to all network types.
+ */
+ public @NonNull Builder resetNetworkTypes() {
+ plan.networkTypes = Arrays.copyOf(TelephonyManager.getAllNetworkTypes(),
+ TelephonyManager.getAllNetworkTypes().length);
+ return this;
+ }
}
}
diff --git a/core/java/android/telephony/TelephonyRegistryManager.java b/core/java/android/telephony/TelephonyRegistryManager.java
index 21d16f6..0854452 100644
--- a/core/java/android/telephony/TelephonyRegistryManager.java
+++ b/core/java/android/telephony/TelephonyRegistryManager.java
@@ -61,7 +61,6 @@
*
* @hide
*/
-@TestApi
public class TelephonyRegistryManager {
private static final String TAG = "TelephonyRegistryManager";
diff --git a/core/java/android/util/FeatureFlagUtils.java b/core/java/android/util/FeatureFlagUtils.java
index 4dafc0d..faa5cf5 100644
--- a/core/java/android/util/FeatureFlagUtils.java
+++ b/core/java/android/util/FeatureFlagUtils.java
@@ -73,7 +73,7 @@
DEFAULT_FLAGS.put("settings_tether_all_in_one", "false");
DEFAULT_FLAGS.put(SETTINGS_SCHEDULES_FLAG, "false");
- DEFAULT_FLAGS.put("settings_contextual_home2", "false");
+ DEFAULT_FLAGS.put("settings_contextual_home2", "true");
}
/**
diff --git a/core/java/android/view/IDisplayWindowRotationCallback.aidl b/core/java/android/view/IDisplayWindowRotationCallback.aidl
index 79a15ad..1ffe2dd 100644
--- a/core/java/android/view/IDisplayWindowRotationCallback.aidl
+++ b/core/java/android/view/IDisplayWindowRotationCallback.aidl
@@ -16,7 +16,7 @@
package android.view;
-import android.view.WindowContainerTransaction;
+import android.window.WindowContainerTransaction;
/**
* Interface to be invoked by the controller when it has finished preparing for a display rotation.
diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java
index 3e1e393..59fc6e9 100644
--- a/core/java/android/view/SurfaceView.java
+++ b/core/java/android/view/SurfaceView.java
@@ -686,16 +686,107 @@
* SurfaceView is in will be visible on top of its surface.
*
* <p>Note that this must be set before the surface view's containing
- * window is attached to the window manager.
+ * window is attached to the window manager. If you target {@link Build.VERSION_CODES#R}
+ * the Z ordering can be changed dynamically if the backing surface is
+ * created, otherwise it would be applied at surface construction time.
*
* <p>Calling this overrides any previous call to {@link #setZOrderMediaOverlay}.
+ *
+ * @param onTop Whether to show the surface on top of this view's window.
*/
public void setZOrderOnTop(boolean onTop) {
+ // In R and above we allow dynamic layer changes.
+ final boolean allowDynamicChange = getContext().getApplicationInfo().targetSdkVersion
+ > Build.VERSION_CODES.Q;
+ setZOrderedOnTop(onTop, allowDynamicChange);
+ }
+
+ /**
+ * @return Whether the surface backing this view appears on top of its parent.
+ *
+ * @hide
+ */
+ public boolean isZOrderedOnTop() {
+ return mSubLayer > 0;
+ }
+
+ /**
+ * Controls whether the surface view's surface is placed on top of its
+ * window. Normally it is placed behind the window, to allow it to
+ * (for the most part) appear to composite with the views in the
+ * hierarchy. By setting this, you cause it to be placed above the
+ * window. This means that none of the contents of the window this
+ * SurfaceView is in will be visible on top of its surface.
+ *
+ * <p>Calling this overrides any previous call to {@link #setZOrderMediaOverlay}.
+ *
+ * @param onTop Whether to show the surface on top of this view's window.
+ * @param allowDynamicChange Whether this can happen after the surface is created.
+ * @return Whether the Z ordering changed.
+ *
+ * @hide
+ */
+ public boolean setZOrderedOnTop(boolean onTop, boolean allowDynamicChange) {
+ final int subLayer;
if (onTop) {
- mSubLayer = APPLICATION_PANEL_SUBLAYER;
+ subLayer = APPLICATION_PANEL_SUBLAYER;
} else {
- mSubLayer = APPLICATION_MEDIA_SUBLAYER;
+ subLayer = APPLICATION_MEDIA_SUBLAYER;
}
+ if (mSubLayer == subLayer) {
+ return false;
+ }
+ mSubLayer = subLayer;
+
+ if (!allowDynamicChange) {
+ return false;
+ }
+ if (mSurfaceControl == null) {
+ return true;
+ }
+ final ViewRootImpl viewRoot = getViewRootImpl();
+ if (viewRoot == null) {
+ return true;
+ }
+ final Surface parent = viewRoot.mSurface;
+ if (parent == null || !parent.isValid()) {
+ return true;
+ }
+
+ /*
+ * Schedule a callback that reflects an alpha value onto the underlying surfaces.
+ * This gets called on a RenderThread worker thread, so members accessed here must
+ * be protected by a lock.
+ */
+ final boolean useBLAST = viewRoot.useBLAST();
+ viewRoot.registerRtFrameCallback(frame -> {
+ try {
+ final SurfaceControl.Transaction t = useBLAST
+ ? viewRoot.getBLASTSyncTransaction()
+ : new SurfaceControl.Transaction();
+ synchronized (mSurfaceControlLock) {
+ if (!parent.isValid() || mSurfaceControl == null) {
+ return;
+ }
+ updateRelativeZ(t);
+ if (!useBLAST) {
+ t.deferTransactionUntil(mSurfaceControl,
+ viewRoot.getRenderSurfaceControl(), frame);
+ }
+ }
+ // It's possible that mSurfaceControl is released in the UI thread before
+ // the transaction completes. If that happens, an exception is thrown, which
+ // must be caught immediately.
+ t.apply();
+ } catch (Exception e) {
+ Log.e(TAG, System.identityHashCode(this)
+ + "setZOrderOnTop RT: Exception during surface transaction", e);
+ }
+ });
+
+ invalidate();
+
+ return true;
}
/**
diff --git a/core/java/android/view/ViewConfiguration.java b/core/java/android/view/ViewConfiguration.java
index 47a79bd..04260c4 100644
--- a/core/java/android/view/ViewConfiguration.java
+++ b/core/java/android/view/ViewConfiguration.java
@@ -23,7 +23,6 @@
import android.content.Context;
import android.content.res.Configuration;
import android.content.res.Resources;
-import android.graphics.Point;
import android.os.Build;
import android.os.RemoteException;
import android.provider.Settings;
@@ -66,8 +65,9 @@
/**
* Defines the default duration in milliseconds before a press turns into
* a long press
+ * @hide
*/
- private static final int DEFAULT_LONG_PRESS_TIMEOUT = 500;
+ public static final int DEFAULT_LONG_PRESS_TIMEOUT = 400;
/**
* Defines the default duration in milliseconds between the first tap's up event and the second
diff --git a/core/java/android/view/inline/InlineContentView.java b/core/java/android/view/inline/InlineContentView.java
index 2a8ca0b..df5bc2fb 100644
--- a/core/java/android/view/inline/InlineContentView.java
+++ b/core/java/android/view/inline/InlineContentView.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2019 The Android Open Source Project
+ * Copyright (C) 2020 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -17,22 +17,189 @@
package android.view.inline;
import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.content.Context;
import android.graphics.PixelFormat;
+import android.util.AttributeSet;
+import android.view.SurfaceControl;
import android.view.SurfaceControlViewHost;
+import android.view.SurfaceHolder;
import android.view.SurfaceView;
+import android.view.ViewGroup;
/**
- * This class represents a view that can hold an opaque content that may be from a different source.
+ * This class represents a view that holds opaque content from another app that
+ * you can inline in your UI.
*
- * @hide
+ * <p>Since the content presented by this view is from another security domain,it is
+ * shown on a remote surface preventing the host application from accessing that content.
+ * Also the host application cannot interact with the inlined content by injecting touch
+ * events or clicking programmatically.
+ *
+ * <p>This view can be overlaid by other windows, i.e. redressed, but if this is the case
+ * the inined UI would not be interactive. Sometimes this is desirable, e.g. animating
+ * transitions.
+ *
+ * <p>By default the surface backing this view is shown on top of the hosting window such
+ * that the inlined content is interactive. However, you can temporarily move the surface
+ * under the hosting window which could be useful in some cases, e.g. animating transitions.
+ * At this point the inlined content will not be interactive and the touch events would
+ * be delivered to your app.
*/
-public class InlineContentView extends SurfaceView {
- public InlineContentView(@NonNull Context context,
- @NonNull SurfaceControlViewHost.SurfacePackage surfacePackage) {
- super(context);
- setZOrderOnTop(true);
- setChildSurfacePackage(surfacePackage);
- getHolder().setFormat(PixelFormat.TRANSPARENT);
+public class InlineContentView extends ViewGroup {
+
+ /**
+ * Callback for observing the lifecycle of the surface control
+ * that manipulates the backing secure embedded UI surface.
+ */
+ public interface SurfaceControlCallback {
+ /**
+ * Called when the backing surface is being created.
+ *
+ * @param surfaceControl The surface control to manipulate the surface.
+ */
+ void onCreated(@NonNull SurfaceControl surfaceControl);
+
+ /**
+ * Called when the backing surface is being destroyed.
+ *
+ * @param surfaceControl The surface control to manipulate the surface.
+ */
+ void onDestroyed(@NonNull SurfaceControl surfaceControl);
+ }
+
+ private final @NonNull SurfaceHolder.Callback mSurfaceCallback = new SurfaceHolder.Callback() {
+ @Override
+ public void surfaceCreated(@NonNull SurfaceHolder holder) {
+ mSurfaceControlCallback.onCreated(mSurfaceView.getSurfaceControl());
+ }
+
+ @Override
+ public void surfaceChanged(@NonNull SurfaceHolder holder,
+ int format, int width, int height) {
+ /* do nothing */
+ }
+
+ @Override
+ public void surfaceDestroyed(@NonNull SurfaceHolder holder) {
+ mSurfaceControlCallback.onDestroyed(mSurfaceView.getSurfaceControl());
+ }
+ };
+
+ private final @NonNull SurfaceView mSurfaceView;
+
+ private @Nullable SurfaceControlCallback mSurfaceControlCallback;
+
+ /**
+ * @inheritDoc
+ *
+ * @hide
+ */
+ public InlineContentView(@NonNull Context context) {
+ this(context, null);
+ }
+
+ /**
+ * @inheritDoc
+ *
+ * @hide
+ */
+ public InlineContentView(@NonNull Context context, @Nullable AttributeSet attrs) {
+ this(context, attrs, 0);
+ }
+
+ /**
+ * @inheritDoc
+ *
+ * @hide
+ */
+ public InlineContentView(@NonNull Context context, @Nullable AttributeSet attrs,
+ int defStyleAttr) {
+ this(context, attrs, defStyleAttr, 0);
+ }
+
+ /**
+ * Gets the surface control. If the surface is not created this method
+ * returns {@code null}.
+ *
+ * @return The surface control.
+ *
+ * @see #setSurfaceControlCallback(SurfaceControlCallback)
+ */
+ public @Nullable SurfaceControl getSurfaceControl() {
+ return mSurfaceView.getSurfaceControl();
+ }
+
+ /**
+ * @inheritDoc
+ *
+ * @hide
+ */
+ public InlineContentView(@NonNull Context context, @Nullable AttributeSet attrs,
+ int defStyleAttr, int defStyleRes) {
+ super(context, attrs, defStyleAttr, defStyleRes);
+ mSurfaceView = new SurfaceView(context, attrs, defStyleAttr, defStyleRes);
+ mSurfaceView.setZOrderOnTop(true);
+ mSurfaceView.getHolder().setFormat(PixelFormat.TRANSPARENT);
+ addView(mSurfaceView);
+ }
+
+ /**
+ * Sets the embedded UI.
+ * @param surfacePackage The embedded UI.
+ *
+ * @hide
+ */
+ public void setChildSurfacePackage(
+ @Nullable SurfaceControlViewHost.SurfacePackage surfacePackage) {
+ mSurfaceView.setChildSurfacePackage(surfacePackage);
+ }
+
+ @Override
+ public void onLayout(boolean changed, int l, int t, int r, int b) {
+ mSurfaceView.layout(l, t, r, b);
+ }
+
+ /**
+ * Sets a callback to observe the lifecycle of the surface control for
+ * managing the backing surface.
+ *
+ * @param callback The callback to set or {@code null} to clear.
+ */
+ public void setSurfaceControlCallback(@Nullable SurfaceControlCallback callback) {
+ if (mSurfaceControlCallback != null) {
+ mSurfaceView.getHolder().removeCallback(mSurfaceCallback);
+ }
+ mSurfaceControlCallback = callback;
+ if (mSurfaceControlCallback != null) {
+ mSurfaceView.getHolder().addCallback(mSurfaceCallback);
+ }
+ }
+
+ /**
+ * @return Whether the surface backing this view appears on top of its parent.
+ *
+ * @see #setZOrderedOnTop(boolean)
+ */
+ public boolean isZOrderedOnTop() {
+ return mSurfaceView.isZOrderedOnTop();
+ }
+
+ /**
+ * Controls whether the backing surface is placed on top of this view's window.
+ * Normally, it is placed on top of the window, to allow interaction
+ * with the inlined UI. Via this method, you can place the surface below the
+ * window. This means that all of the contents of the window this view is in
+ * will be visible on top of its surface.
+ *
+ * <p> The Z ordering can be changed dynamically if the backing surface is
+ * created, otherwise the ordering would be applied at surface construction time.
+ *
+ * @param onTop Whether to show the surface on top of this view's window.
+ *
+ * @see #isZOrderedOnTop()
+ */
+ public boolean setZOrderedOnTop(boolean onTop) {
+ return mSurfaceView.setZOrderedOnTop(onTop, /*allowDynamicChange*/ true);
}
}
diff --git a/core/java/android/view/inputmethod/InlineSuggestion.java b/core/java/android/view/inputmethod/InlineSuggestion.java
index dd1738a..ab8f36d 100644
--- a/core/java/android/view/inputmethod/InlineSuggestion.java
+++ b/core/java/android/view/inputmethod/InlineSuggestion.java
@@ -29,7 +29,6 @@
import android.util.Size;
import android.util.Slog;
import android.view.SurfaceControlViewHost;
-import android.view.View;
import android.view.inline.InlineContentView;
import android.view.inline.InlinePresentationSpec;
@@ -94,15 +93,15 @@
this(info, contentProvider, /* inlineContentCallback */ null);
}
-
/**
* Inflates a view with the content of this suggestion at a specific size.
* The size must be between the {@link InlinePresentationSpec#getMinSize() min size}
* and the {@link InlinePresentationSpec#getMaxSize() max size} of the presentation
* spec returned by {@link InlineSuggestionInfo#getPresentationSpec()}.
*
- * <p> The caller can attach an {@link View.OnClickListener} and/or an
- * {@link View.OnLongClickListener} to the view in the {@code callback} to receive click and
+ * <p> The caller can attach an {@link android.view.View.OnClickListener} and/or an
+ * {@link android.view.View.OnLongClickListener} to the view in the
+ * {@code callback} to receive click and
* long click events on the view.
*
* @param context Context in which to inflate the view.
@@ -113,7 +112,7 @@
*/
public void inflate(@NonNull Context context, @NonNull Size size,
@NonNull @CallbackExecutor Executor callbackExecutor,
- @NonNull Consumer<View> callback) {
+ @NonNull Consumer<InlineContentView> callback) {
final Size minSize = mInfo.getPresentationSpec().getMinSize();
final Size maxSize = mInfo.getPresentationSpec().getMaxSize();
if (size.getHeight() < minSize.getHeight() || size.getHeight() > maxSize.getHeight()
@@ -138,7 +137,7 @@
}
private synchronized InlineContentCallbackImpl getInlineContentCallback(Context context,
- Executor callbackExecutor, Consumer<View> callback) {
+ Executor callbackExecutor, Consumer<InlineContentView> callback) {
if (mInlineContentCallback != null) {
throw new IllegalStateException("Already called #inflate()");
}
@@ -185,12 +184,12 @@
private final @NonNull Context mContext;
private final @NonNull Executor mCallbackExecutor;
- private final @NonNull Consumer<View> mCallback;
- private @Nullable View mView;
+ private final @NonNull Consumer<InlineContentView> mCallback;
+ private @Nullable InlineContentView mView;
InlineContentCallbackImpl(@NonNull Context context,
@NonNull @CallbackExecutor Executor callbackExecutor,
- @NonNull Consumer<View> callback) {
+ @NonNull Consumer<InlineContentView> callback) {
mContext = context;
mCallbackExecutor = callbackExecutor;
mCallback = callback;
@@ -201,7 +200,8 @@
if (content == null) {
mCallbackExecutor.execute(() -> mCallback.accept(/* view */null));
} else {
- mView = new InlineContentView(mContext, content);
+ mView = new InlineContentView(mContext);
+ mView.setChildSurfacePackage(content);
mCallbackExecutor.execute(() -> mCallback.accept(mView));
}
}
@@ -398,10 +398,10 @@
};
@DataClass.Generated(
- time = 1583889058241L,
+ time = 1584679775946L,
codegenVersion = "1.0.15",
sourceFile = "frameworks/base/core/java/android/view/inputmethod/InlineSuggestion.java",
- inputSignatures = "private static final java.lang.String TAG\nprivate final @android.annotation.NonNull android.view.inputmethod.InlineSuggestionInfo mInfo\nprivate final @android.annotation.Nullable com.android.internal.view.inline.IInlineContentProvider mContentProvider\nprivate @com.android.internal.util.DataClass.ParcelWith(android.view.inputmethod.InlineSuggestion.InlineContentCallbackImplParceling.class) @android.annotation.Nullable android.view.inputmethod.InlineSuggestion.InlineContentCallbackImpl mInlineContentCallback\npublic static @android.annotation.TestApi @android.annotation.NonNull android.view.inputmethod.InlineSuggestion newInlineSuggestion(android.view.inputmethod.InlineSuggestionInfo)\npublic void inflate(android.content.Context,android.util.Size,java.util.concurrent.Executor,java.util.function.Consumer<android.view.View>)\nprivate synchronized android.view.inputmethod.InlineSuggestion.InlineContentCallbackImpl getInlineContentCallback(android.content.Context,java.util.concurrent.Executor,java.util.function.Consumer<android.view.View>)\nclass InlineSuggestion extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genEqualsHashCode=true, genToString=true, genHiddenConstDefs=true, genHiddenConstructor=true)")
+ inputSignatures = "private static final java.lang.String TAG\nprivate final @android.annotation.NonNull android.view.inputmethod.InlineSuggestionInfo mInfo\nprivate final @android.annotation.Nullable com.android.internal.view.inline.IInlineContentProvider mContentProvider\nprivate @com.android.internal.util.DataClass.ParcelWith(android.view.inputmethod.InlineSuggestion.InlineContentCallbackImplParceling.class) @android.annotation.Nullable android.view.inputmethod.InlineSuggestion.InlineContentCallbackImpl mInlineContentCallback\npublic static @android.annotation.TestApi @android.annotation.NonNull android.view.inputmethod.InlineSuggestion newInlineSuggestion(android.view.inputmethod.InlineSuggestionInfo)\npublic void inflate(android.content.Context,android.util.Size,java.util.concurrent.Executor,java.util.function.Consumer<android.view.inline.InlineContentView>)\nprivate synchronized android.view.inputmethod.InlineSuggestion.InlineContentCallbackImpl getInlineContentCallback(android.content.Context,java.util.concurrent.Executor,java.util.function.Consumer<android.view.inline.InlineContentView>)\nclass InlineSuggestion extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genEqualsHashCode=true, genToString=true, genHiddenConstDefs=true, genHiddenConstructor=true)")
@Deprecated
private void __metadata() {}
diff --git a/core/java/android/widget/RemoteViews.java b/core/java/android/widget/RemoteViews.java
index 7f6c0d2..4a27d3a0 100644
--- a/core/java/android/widget/RemoteViews.java
+++ b/core/java/android/widget/RemoteViews.java
@@ -29,6 +29,7 @@
import android.app.PendingIntent;
import android.app.RemoteInput;
import android.appwidget.AppWidgetHostView;
+import android.appwidget.AppWidgetManager;
import android.compat.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.ContextWrapper;
@@ -4130,8 +4131,18 @@
// The NEW_TASK flags are applied through the activity options and not as a part of
// the call to startIntentSender() to ensure that they are consistently applied to
// both mutable and immutable PendingIntents.
+ final IntentSender intentSender = pendingIntent.getIntentSender();
+ final int uid = intentSender.getCreatorUid();
+ final String packageName = intentSender.getCreatorPackage();
+ if (uid != -1 && packageName != null) {
+ final AppWidgetManager appWidgetManager =
+ context.getSystemService(AppWidgetManager.class);
+ if (appWidgetManager != null) {
+ appWidgetManager.noteAppWidgetTapped(uid, packageName);
+ }
+ }
context.startIntentSender(
- pendingIntent.getIntentSender(), options.first,
+ intentSender, options.first,
0, 0, 0, options.second.toBundle());
} catch (IntentSender.SendIntentException e) {
Log.e(LOG_TAG, "Cannot send pending intent: ", e);
diff --git a/core/java/android/view/ITaskOrganizer.aidl b/core/java/android/window/ITaskOrganizer.aidl
similarity index 96%
rename from core/java/android/view/ITaskOrganizer.aidl
rename to core/java/android/window/ITaskOrganizer.aidl
index 565f694..b2da239 100644
--- a/core/java/android/view/ITaskOrganizer.aidl
+++ b/core/java/android/window/ITaskOrganizer.aidl
@@ -15,11 +15,11 @@
** limitations under the License.
*/
-package android.view;
+package android.window;
-import android.view.IWindowContainer;
import android.view.SurfaceControl;
import android.app.ActivityManager;
+import android.window.IWindowContainer;
/**
* Interface for ActivityTaskManager/WindowManager to delegate control of tasks.
@@ -49,4 +49,4 @@
* has adopted an ActivityType of HOME and proceeds to show the minimized dock UX.
*/
void onTaskInfoChanged(in ActivityManager.RunningTaskInfo info);
-}
\ No newline at end of file
+}
diff --git a/core/java/android/app/ITaskOrganizerController.aidl b/core/java/android/window/ITaskOrganizerController.aidl
similarity index 94%
rename from core/java/android/app/ITaskOrganizerController.aidl
rename to core/java/android/window/ITaskOrganizerController.aidl
index a448e13..e8af8e1 100644
--- a/core/java/android/app/ITaskOrganizerController.aidl
+++ b/core/java/android/window/ITaskOrganizerController.aidl
@@ -14,12 +14,12 @@
* limitations under the License.
*/
-package android.app;
+package android.window;
import android.app.ActivityManager;
-import android.view.ITaskOrganizer;
-import android.view.IWindowContainer;
-import android.view.WindowContainerTransaction;
+import android.window.ITaskOrganizer;
+import android.window.IWindowContainer;
+import android.window.WindowContainerTransaction;
/** @hide */
interface ITaskOrganizerController {
diff --git a/core/java/android/view/IWindowContainer.aidl b/core/java/android/window/IWindowContainer.aidl
similarity index 97%
rename from core/java/android/view/IWindowContainer.aidl
rename to core/java/android/window/IWindowContainer.aidl
index 878d86b..f2960f6 100644
--- a/core/java/android/view/IWindowContainer.aidl
+++ b/core/java/android/window/IWindowContainer.aidl
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package android.view;
+package android.window;
import android.view.SurfaceControl;
diff --git a/core/java/android/window/OWNERS b/core/java/android/window/OWNERS
new file mode 100644
index 0000000..d10fb31
--- /dev/null
+++ b/core/java/android/window/OWNERS
@@ -0,0 +1,3 @@
+set noparent
+
+include ../../../../services/core/java/com/android/server/wm/OWNERS
diff --git a/core/java/android/view/WindowContainerTransaction.aidl b/core/java/android/window/WindowContainerTransaction.aidl
similarity index 96%
rename from core/java/android/view/WindowContainerTransaction.aidl
rename to core/java/android/window/WindowContainerTransaction.aidl
index 46ba6c1..da77a00 100644
--- a/core/java/android/view/WindowContainerTransaction.aidl
+++ b/core/java/android/window/WindowContainerTransaction.aidl
@@ -14,6 +14,6 @@
* limitations under the License.
*/
-package android.view;
+package android.window;
parcelable WindowContainerTransaction;
diff --git a/core/java/android/view/WindowContainerTransaction.java b/core/java/android/window/WindowContainerTransaction.java
similarity index 99%
rename from core/java/android/view/WindowContainerTransaction.java
rename to core/java/android/window/WindowContainerTransaction.java
index 56b4951..483dec6 100644
--- a/core/java/android/view/WindowContainerTransaction.java
+++ b/core/java/android/window/WindowContainerTransaction.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2019 The Android Open Source Project
+ * Copyright (C) 2020 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package android.view;
+package android.window;
import android.annotation.NonNull;
import android.annotation.Nullable;
@@ -26,6 +26,7 @@
import android.os.Parcel;
import android.os.Parcelable;
import android.util.ArrayMap;
+import android.window.IWindowContainer;
import android.view.SurfaceControl;
import java.util.ArrayList;
diff --git a/core/java/com/android/internal/app/AbstractMultiProfilePagerAdapter.java b/core/java/com/android/internal/app/AbstractMultiProfilePagerAdapter.java
index a815592..ae9ce65 100644
--- a/core/java/com/android/internal/app/AbstractMultiProfilePagerAdapter.java
+++ b/core/java/com/android/internal/app/AbstractMultiProfilePagerAdapter.java
@@ -422,8 +422,6 @@
private void showSpinner(View emptyStateView) {
emptyStateView.findViewById(R.id.resolver_empty_state_icon).setVisibility(View.INVISIBLE);
emptyStateView.findViewById(R.id.resolver_empty_state_title).setVisibility(View.INVISIBLE);
- emptyStateView.findViewById(R.id.resolver_empty_state_subtitle)
- .setVisibility(View.INVISIBLE);
emptyStateView.findViewById(R.id.resolver_empty_state_button).setVisibility(View.INVISIBLE);
emptyStateView.findViewById(R.id.resolver_empty_state_progress).setVisibility(View.VISIBLE);
emptyStateView.findViewById(R.id.empty).setVisibility(View.GONE);
diff --git a/core/java/com/android/internal/appwidget/IAppWidgetService.aidl b/core/java/com/android/internal/appwidget/IAppWidgetService.aidl
index 6d1d1ab..9e09cf3 100644
--- a/core/java/com/android/internal/appwidget/IAppWidgetService.aidl
+++ b/core/java/com/android/internal/appwidget/IAppWidgetService.aidl
@@ -77,5 +77,6 @@
boolean requestPinAppWidget(String packageName, in ComponentName providerComponent,
in Bundle extras, in IntentSender resultIntent);
boolean isRequestPinAppWidgetSupported();
+ void noteAppWidgetTapped(int uid, String packageName);
}
diff --git a/core/java/com/android/internal/widget/ConversationLayout.java b/core/java/com/android/internal/widget/ConversationLayout.java
index 4028fda..4e7ae8a 100644
--- a/core/java/com/android/internal/widget/ConversationLayout.java
+++ b/core/java/com/android/internal/widget/ConversationLayout.java
@@ -120,6 +120,7 @@
private int mIconSizeBadged;
private int mIconSizeCentered;
private CachingIconView mIcon;
+ private View mImportanceRingView;
private int mExpandedGroupTopMargin;
private View mConversationFacePile;
private int mNotificationBackgroundColor;
@@ -132,6 +133,7 @@
private boolean mExpandable = true;
private int mContentMarginEnd;
private Rect mMessagingClipRect;
+ private TextView mAppName;
public ConversationLayout(@NonNull Context context) {
super(context);
@@ -169,6 +171,7 @@
mTextPaint.setAntiAlias(true);
mConversationIcon = findViewById(R.id.conversation_icon);
mIcon = findViewById(R.id.icon);
+ mImportanceRingView = findViewById(R.id.conversation_icon_badge_ring);
mConversationIconBadge = findViewById(R.id.conversation_icon_badge);
mIcon.setOnVisibilityChangedListener((visibility) -> {
// Always keep the badge visibility in sync with the icon. This is necessary in cases
@@ -200,6 +203,7 @@
R.string.conversation_title_fallback_one_to_one);
mFallbackGroupChatName = getResources().getString(
R.string.conversation_title_fallback_group_chat);
+ mAppName = findViewById(R.id.app_name_text);
}
@RemotableViewMethod
@@ -213,6 +217,14 @@
}
/**
+ * Sets this conversation as "important", adding some additional UI treatment.
+ */
+ @RemotableViewMethod
+ public void setIsImportantConversation(boolean isImportantConversation) {
+ mImportanceRingView.setVisibility(isImportantConversation ? VISIBLE : GONE);
+ }
+
+ /**
* Set this layout to show the collapsed representation.
*
* @param isCollapsed is it collapsed
@@ -309,14 +321,12 @@
updateTitleAndNamesDisplay();
updateConversationLayout();
-
}
/**
* Update the layout according to the data provided (i.e mIsOneToOne, expanded etc);
*/
private void updateConversationLayout() {
- // TODO: resolve this from shortcuts
// Set avatar and name
CharSequence conversationText = mConversationTitle;
// TODO: display the secondary text somewhere
@@ -376,6 +386,7 @@
}
updateIconPositionAndSize();
updateImageMessages();
+ updateAppName();
}
private void updateImageMessages() {
@@ -454,6 +465,14 @@
topView.setImageIcon(secondLastIcon);
}
+ private void updateAppName() {
+ mAppName.setVisibility(mIsCollapsed ? GONE : VISIBLE);
+ }
+
+ public boolean shouldHideAppName() {
+ return mIsCollapsed;
+ }
+
/**
* update the icon position and sizing
*/
@@ -463,7 +482,7 @@
int marginTop;
int iconSize;
if (mIsOneToOne || mIsCollapsed) {
- // Baded format
+ // Badged format
gravity = Gravity.LEFT;
marginStart = mBadgedSideMargins;
marginTop = mBadgedSideMargins;
@@ -479,11 +498,9 @@
layoutParams.gravity = gravity;
layoutParams.topMargin = marginTop;
layoutParams.setMarginStart(marginStart);
+ layoutParams.width = iconSize;
+ layoutParams.height = iconSize;
mConversationIconBadge.setLayoutParams(layoutParams);
- ViewGroup.LayoutParams iconParams = mIcon.getLayoutParams();
- iconParams.width = iconSize;
- iconParams.height = iconSize;
- mIcon.setLayoutParams(iconParams);
}
@RemotableViewMethod
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index 68c51b9..84d9ce2 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -3447,12 +3447,25 @@
<permission android:name="android.permission.BIND_AUGMENTED_AUTOFILL_SERVICE"
android:protectionLevel="signature" />
- <!-- Must be required by hotword enrollment application,
- to ensure that only the system can interact with it.
- @hide <p>Not for use by third-party applications.</p> -->
+ <!-- Must be required by a {@link android.service.voice.VoiceInteractionService} implementation
+ to enroll its own sound models. This is a more restrictive permission than the higher-level
+ permission KEYPHRASE_ENROLLMENT_APPLICATION. For the caller to enroll sound models with
+ this permission, it must hold the permission and be the active VoiceInteractionService in
+ the system.
+ {@see Settings.Secure.VOICE_INTERACTION_SERVICE}
+ @hide -->
<permission android:name="android.permission.MANAGE_VOICE_KEYPHRASES"
android:protectionLevel="signature|privileged" />
+ <!-- Must be required by a keyphrase enrollment application, to enroll sound models. This is
+ treated as a higher-level permission to MANAGE_VOICE_KEYPHRASES as a caller can enroll
+ sound models at any time. This permission should be reserved for system enrollment
+ applications detected by {@link android.hardware.soundtrigger.KeyphraseEnrollmentInfo}
+ only.
+ @hide <p>Not for use by third-party applications.</p> -->
+ <permission android:name="android.permission.KEYPHRASE_ENROLLMENT_APPLICATION"
+ android:protectionLevel="signature|privileged" />
+
<!-- Must be required by a {@link com.android.media.remotedisplay.RemoteDisplayProvider},
to ensure that only the system can bind to it.
@hide -->
diff --git a/core/res/res/drawable/conversation_badge_ring.xml b/core/res/res/drawable/conversation_badge_ring.xml
new file mode 100644
index 0000000..11ba8ad
--- /dev/null
+++ b/core/res/res/drawable/conversation_badge_ring.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2020 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License
+ -->
+
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="oval">
+
+ <solid
+ android:color="@color/transparent"/>
+
+ <stroke
+ android:color="@color/conversation_important_highlight"
+ android:width="2dp"/>
+
+ <size
+ android:width="26dp"
+ android:height="26dp"/>
+</shape>
+
diff --git a/core/res/res/layout/notification_template_material_conversation.xml b/core/res/res/layout/notification_template_material_conversation.xml
index 8246583..7bf13ec 100644
--- a/core/res/res/layout/notification_template_material_conversation.xml
+++ b/core/res/res/layout/notification_template_material_conversation.xml
@@ -58,18 +58,31 @@
<FrameLayout
android:id="@+id/conversation_icon_badge"
- android:layout_width="20dp"
- android:layout_height="20dp"
+ android:layout_width="@dimen/conversation_icon_size_badged"
+ android:layout_height="@dimen/conversation_icon_size_badged"
android:layout_marginLeft="@dimen/conversation_badge_side_margin"
android:layout_marginTop="@dimen/conversation_badge_side_margin"
- android:background="@drawable/conversation_badge_background" >
- <!-- Badge: 20x20, 48dp padding left + top -->
+ >
+ <ImageView
+ android:id="@+id/conversation_icon_badge_bg"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:src="@drawable/conversation_badge_background"
+ />
<com.android.internal.widget.CachingIconView
android:id="@+id/icon"
- android:layout_width="@dimen/conversation_icon_size_badged"
- android:layout_height="@dimen/conversation_icon_size_badged"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_margin="4dp"
android:layout_gravity="center"
/>
+ <ImageView
+ android:id="@+id/conversation_icon_badge_ring"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:src="@drawable/conversation_badge_ring"
+ android:visibility="gone"
+ />
</FrameLayout>
</FrameLayout>
</FrameLayout>
@@ -108,6 +121,7 @@
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingTop="16dp"
+ android:layout_marginBottom="2dp"
android:paddingStart="@dimen/conversation_content_start"
>
<TextView
@@ -160,12 +174,22 @@
/>
</LinearLayout>
+ <!-- App Name -->
+ <TextView
+ android:id="@+id/app_name_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="@dimen/conversation_content_start"
+ android:textSize="12sp"
+ android:layout_marginBottom="16dp"
+ android:textAppearance="@style/TextAppearance.DeviceDefault.Notification"
+ />
+
<!-- Messages -->
<com.android.internal.widget.MessagingLinearLayout
android:id="@+id/notification_messaging"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_marginTop="2dp"
android:spacing="@dimen/notification_messaging_spacing"
android:clipToPadding="false"
android:clipChildren="false"
diff --git a/core/res/res/layout/resolver_empty_states.xml b/core/res/res/layout/resolver_empty_states.xml
index 67299e8..af803fc 100644
--- a/core/res/res/layout/resolver_empty_states.xml
+++ b/core/res/res/layout/resolver_empty_states.xml
@@ -67,8 +67,10 @@
style="@style/Widget.Material.Light.ProgressBar"
android:visibility="gone"
android:layout_width="wrap_content"
- android:layout_height="wrap_content"
+ android:layout_height="match_parent"
android:indeterminate="true"
+ android:layout_alignTop="@+id/resolver_empty_state_icon"
+ android:layout_alignBottom="@+id/resolver_empty_state_button"
android:layout_centerHorizontal="true"
android:layout_below="@+id/resolver_empty_state_subtitle"
android:indeterminateTint="?attr/colorAccent"/>
diff --git a/core/res/res/values-sw600dp/config.xml b/core/res/res/values-sw600dp/config.xml
index c891268..368e307 100644
--- a/core/res/res/values-sw600dp/config.xml
+++ b/core/res/res/values-sw600dp/config.xml
@@ -45,5 +45,8 @@
<!-- Controls whether the nav bar can move from the bottom to the side in landscape.
Only applies if the device display is not square. -->
<bool name="config_navBarCanMove">false</bool>
+
+ <!-- Set to true to enable the user switcher on the keyguard. -->
+ <bool name="config_keyguardUserSwitcher">true</bool>
</resources>
diff --git a/core/res/res/values/attrs_manifest.xml b/core/res/res/values/attrs_manifest.xml
index fe08f9c..d6e200a 100644
--- a/core/res/res/values/attrs_manifest.xml
+++ b/core/res/res/values/attrs_manifest.xml
@@ -2121,6 +2121,35 @@
<declare-styleable name="AndroidManifestQueriesProvider" parent="AndroidManifestQueries" >
<attr name="authorities" />
</declare-styleable>
+ <!--
+ Matches an overlayable, its overlays, its actor, and/or its containing target.
+ A target or actor must always be specified, but can be combined for more specificity.
+ Valid combinations and what they match are:
+
+ targetPackage:
+ - All overlays targeting any overlayables inside 'targetPackage'
+
+ targetPackage + targetName:
+ - All overlays targeting the overlayable 'targetName' inside 'targetPackage'
+
+ targetPackage + targetName + actor:
+ - All overlays targeting the overlayable 'targetName' inside 'targetPackage' if the
+ overlayable specifies 'actor'
+
+ targetPackage + actor:
+ - All overlays targeting overlayables inside 'targetPackage' that specify `actor`
+ - The actor itself if the above matches
+
+ actor:
+ - All overlays targeting overlayables that specify `actor`
+ - All targets that contain an overlayable that specifies `actor`
+ - The actor itself
+ -->
+ <declare-styleable name="AndroidManifestQueriesOverlayable">
+ <attr name="targetPackage" />
+ <attr name="targetName"/>
+ <attr name="actor" format="string" />
+ </declare-styleable>
<!-- The <code>static-library</code> tag declares that this apk is providing itself
diff --git a/core/res/res/values/colors.xml b/core/res/res/values/colors.xml
index 91248f1..831da6f 100644
--- a/core/res/res/values/colors.xml
+++ b/core/res/res/values/colors.xml
@@ -226,4 +226,6 @@
<color name="resolver_text_color_secondary_dark">#ffC4C6C6</color>
<color name="resolver_empty_state_text">#FF202124</color>
<color name="resolver_empty_state_icon">#FF5F6368</color>
+
+ <color name="conversation_important_highlight">#F9AB00</color>
</resources>
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 94764ca..e3a7337 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -4420,4 +4420,8 @@
<!-- Package name that will receive an explicit manifest broadcast for
android.os.action.POWER_SAVE_MODE_CHANGED. -->
<string name="config_powerSaveModeChangedListenerPackage" translatable="false"></string>
+
+ <!-- Set to true to enable the user switcher on the keyguard. -->
+ <bool name="config_keyguardUserSwitcher">false</bool>
+
</resources>
diff --git a/core/res/res/values/dimens.xml b/core/res/res/values/dimens.xml
index 6fdc223..f2e2599 100644
--- a/core/res/res/values/dimens.xml
+++ b/core/res/res/values/dimens.xml
@@ -692,12 +692,12 @@
<dimen name="conversation_expand_button_top_margin_expanded">18dp</dimen>
<!-- Side margins of the conversation badge in relation to the conversation icon -->
<dimen name="conversation_badge_side_margin">36dp</dimen>
- <!-- size of the notification icon when badged in a conversation -->
- <dimen name="conversation_icon_size_badged">15dp</dimen>
- <!-- size of the notification icon when centered in a conversation -->
- <dimen name="conversation_icon_size_centered">20dp</dimen>
+ <!-- size of the notification badge when applied to the conversation icon -->
+ <dimen name="conversation_icon_size_badged">20dp</dimen>
+ <!-- size of the notification badge when centered in a conversation -->
+ <dimen name="conversation_icon_size_centered">26dp</dimen>
<!-- margin on the top when the icon is centered for group conversations -->
- <dimen name="conversation_icon_margin_top_centered">5dp</dimen>
+ <dimen name="conversation_icon_margin_top_centered">12dp</dimen>
<!-- The padding of the conversation header when expanded. This is calculated from the expand button size + notification_content_margin_end -->
<dimen name="conversation_header_expanded_padding_end">38dp</dimen>
diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml
index 9f4b344..f02d54f 100644
--- a/core/res/res/values/public.xml
+++ b/core/res/res/values/public.xml
@@ -3019,6 +3019,7 @@
<public name="preserveLegacyExternalStorage" />
<public name="mimeGroup" />
<public name="gwpAsanMode" />
+ <public name="actor" />
</public-group>
<public-group type="drawable" first-id="0x010800b5">
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index 5ea48ed..7ec7ecc 100644
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -441,11 +441,23 @@
<!-- A toast message displayed when printing is attempted but disabled by policy. -->
<string name="printing_disabled_by">Printing disabled by <xliff:g id="owner_app">%s</xliff:g>.</string>
- <!-- Content title for a notification that personal apps are suspended [CHAR LIMIT=NONE] -->
- <string name="personal_apps_suspended_notification_title">Personal apps have been suspended by an admin</string>
-
- <!-- Message for a notification about personal apps suspension when work profile is off. [CHAR LIMIT=NONE] -->
- <string name="personal_apps_suspended_notification_text">Tap here to check policy compliance.</string>
+ <!-- Notification title. This notification lets a user know that their personal apps are
+ blocked due to a work policy from their IT admin, and tells them what they need to do
+ to unblock their apps.[CHAR LIMIT=29] -->
+ <string name="personal_apps_suspended_title">Unblock your personal apps</string>
+ <!-- Notification title. This notification lets a user know that their apps will be blocked
+ tomorrow due to a work policy from their IT admin, and tells them what they need to do to
+ prevent the apps from being blocked. [CHAR LIMIT=29] -->
+ <string name="personal_apps_suspended_tomorrow_title">Apps will be blocked tomorrow</string>
+ <!-- Notification text. This notification lets a user know that they need to turn on their
+ work profile due to a work policy from their IT admin. The number of days is at least 3.
+ [CHAR LIMIT=NONE] -->
+ <string name="personal_apps_suspended_text">Your IT admin doesn\u2019t allow your
+ work profile to be paused for more than <xliff:g id="days" example="3">%1$d</xliff:g>
+ days</string>
+ <!-- Title for the button that turns work profile on. To be used in a notification
+ [CHAR LIMIT=NONE] -->
+ <string name="personal_apps_suspended_turn_profile_on">Turn on work profile</string>
<!-- Display name for any time a piece of data refers to the owner of the phone. For example, this could be used in place of the phone's phone number. -->
<string name="me">Me</string>
@@ -533,26 +545,28 @@
<!-- Title of the Global Actions Dialog -->
<string name="global_actions" product="default">Phone options</string>
- <!-- label for item that locks the phone in the phone options dialog -->
+ <!-- label for item that locks the phone in the phone options dialog [CHAR LIMIT=24]-->
<string name="global_action_lock">Screen lock</string>
- <!-- label for item that turns off power in phone options dialog -->
+ <!-- label for item that turns off power in phone options dialog [CHAR LIMIT=24] -->
<string name="global_action_power_off">Power off</string>
- <!-- label for item that restarts phone in phone options dialog -->
- <!-- TODO: promote to separate string-->
- <string name="global_action_restart" translatable="false">@string/sim_restart_button</string>
+ <!-- label for item that shows options to power off and restart the phone [CHAR LIMIT=24]-->
+ <string name="global_action_power_options">Power</string>
- <!-- label for item that starts emergency call -->
+ <!-- label for item that restarts phone in phone options dialog [CHAR LIMIT=24]-->
+ <string name="global_action_restart">Restart</string>
+
+ <!-- label for item that opens emergency features in the phone options dialog [CHAR LIMIT=24]-->
<string name="global_action_emergency">Emergency</string>
- <!-- label for item that generates a bug report in the phone options dialog -->
+ <!-- label for item that generates a bug report in the phone options dialog [CHAR LIMIT=24] -->
<string name="global_action_bug_report">Bug report</string>
- <!-- label for item that logouts the current user -->
+ <!-- label for item that logouts the current user [CHAR LIMIT=24]-->
<string name="global_action_logout">End session</string>
- <!-- label for screenshot item in power menu -->
+ <!-- label for screenshot item in power menu [CHAR LIMIT=24]-->
<string name="global_action_screenshot">Screenshot</string>
<!-- Take bug report menu title [CHAR LIMIT=30] -->
@@ -617,7 +631,7 @@
<!-- label for item that launches voice assist in phone options dialog [CHAR LIMIT=15]-->
<string name="global_action_voice_assist">Voice Assist</string>
- <!-- label for item that locks the phone and enforces that it can't be unlocked without strong authentication. [CHAR LIMIT=15] -->
+ <!-- label for item that locks the phone and enforces that it can't be unlocked without strong authentication. [CHAR LIMIT=24] -->
<string name="global_action_lockdown">Lockdown</string>
<!-- Text to use when the number in a notification info is too large
@@ -1164,7 +1178,7 @@
<!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. [CHAR_LIMIT=NONE] -->
<string name="permlab_systemCamera">Allow an application or service access to system cameras to take pictures and videos</string>
<!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. [CHAR_LIMIT=NONE] -->
- <string name="permdesc_systemCamera">This privileged | system app can take pictures and record videos using a system camera at any time. Requires the android.permission.CAMERA permission to be held by the app as well</string>
+ <string name="permdesc_systemCamera">This privileged or system app can take pictures and record videos using a system camera at any time. Requires the android.permission.CAMERA permission to be held by the app as well</string>
<!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. [CHAR_LIMIT=NONE] -->
<string name="permlab_cameraOpenCloseListener">Allow an application or service to receive callbacks about camera devices being opened or closed.</string>
@@ -4422,13 +4436,13 @@
<!-- Title for accessibility edit shortcut selection menu dialog, and dialog is triggered
from accessibility button. [CHAR LIMIT=100] -->
- <string name="accessibility_edit_shortcut_menu_button_title">Choose apps to use with the
+ <string name="accessibility_edit_shortcut_menu_button_title">Choose features to use with the
accessibility button
</string>
<!-- Title for accessibility edit shortcut selection menu dialog, and dialog is triggered
from volume key shortcut. [CHAR LIMIT=100] -->
- <string name="accessibility_edit_shortcut_menu_volume_title">Choose apps to use with the
+ <string name="accessibility_edit_shortcut_menu_volume_title">Choose features to use with the
volume key shortcut
</string>
@@ -5472,4 +5486,237 @@
<string name="permlab_accessCallAudio">Record or play audio in telephony calls</string>
<!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. [CHAR LIMIT=NONE] -->
<string name="permdesc_accessCallAudio">Allows this app, when assigned as default dialer application, to record or play audio in telephony calls.</string>
+
+ <!-- Icc depersonalization related strings -->
+ <!-- Label text for PIN entry widget on SIM Network Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY">SIM network unlock PIN</string>
+ <!-- Label text for PIN entry widget on SIM Network Subset Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY">SIM network subset unlock PIN</string>
+ <!-- Label text for PIN entry widget on SIM Corporate Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY">SIM corporate unlock PIN</string>
+ <!-- Label text for PIN entry widget on SIM Service Provider Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_SERVICE_PROVIDER_ENTRY">SIM service provider unlock PIN</string>
+ <!-- Label text for PIN entry widget on SIM SIM Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_SIM_ENTRY">SIM unlock PIN</string>
+ <!-- Label text for PUK entry widget on Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_NETWORK_PUK_ENTRY">Enter PUK</string>
+ <!-- Label text for Subset PUK entry widget on Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_PUK_ENTRY">Enter PUK</string>
+ <!-- Label text for Corporate PUK entry widget on Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_CORPORATE_PUK_ENTRY">Enter PUK</string>
+ <!-- Label text for SIM service provider PUK entry widget on Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_SERVICE_PROVIDER_PUK_ENTRY">Enter PUK</string>
+ <!-- Label text for SIM PUK entry widget on Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_SIM_PUK_ENTRY">Enter PUK</string>
+ <!-- Label text for PIN entry widget on RUIM Network1 Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_RUIM_NETWORK1_ENTRY">RUIM network1 unlock PIN</string>
+ <!-- Label text for PIN entry widget on RUIM Network2 Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_RUIM_NETWORK2_ENTRY">RUIM network2 unlock PIN</string>
+ <!-- Label text for PIN entry widget on RUIM Hrpd Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_RUIM_HRPD_ENTRY">RUIM hrpd unlock PIN</string>
+ <!-- Label text for PIN entry widget on RUIM Corporate Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_RUIM_CORPORATE_ENTRY">RUIM corporate unlock PIN</string>
+ <!-- Label text for PIN entry widget on RUIM Service Provider Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_RUIM_SERVICE_PROVIDER_ENTRY">RUIM service provider unlock PIN</string>
+ <!-- Label text for PIN entry widget on RUIM RUIM Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_RUIM_RUIM_ENTRY">RUIM unlock PIN</string>
+ <!-- Label text for PUK entry widget on Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_RUIM_NETWORK1_PUK_ENTRY">Enter PUK</string>
+ <!-- Label text for PUK entry widget on Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_RUIM_NETWORK2_PUK_ENTRY">Enter PUK</string>
+ <!-- Label text for PUK entry widget on Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_RUIM_HRPD_PUK_ENTRY">Enter PUK</string>
+ <!-- Label text for PUK entry widget on Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_RUIM_SERVICE_PROVIDER_PUK_ENTRY">Enter PUK</string>
+ <!-- Label text for PUK entry widget on Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_RUIM_RUIM_PUK_ENTRY">Enter PUK</string>
+ <!-- Label text for PUK entry widget on Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_RUIM_CORPORATE_PUK_ENTRY">Enter PUK</string>
+
+ <!-- Label text for PIN entry widget on SIM SPN Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_SPN_ENTRY">SPN unlock PIN</string>
+ <!-- Label text for PIN entry widget on SIM SP EHPLMN Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_SP_EHPLMN_ENTRY">SP Equivalent Home PLMN unlock PIN</string>
+ <!-- Label text for PIN entry widget on SIM ICCID Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_ICCID_ENTRY">ICCID unlock PIN</string>
+ <!-- Label text for PIN entry widget on SIM IMPI Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_IMPI_ENTRY">IMPI unlock PIN</string>
+ <!-- Label text for PIN entry widget on SIM NS_SP Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_NS_SP_ENTRY">Network subset service provider unlock PIN</string>
+
+ <!-- Status message displayed on SIM Network Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_NETWORK_IN_PROGRESS">Requesting SIM network unlock\u2026</string>
+ <!-- Status message displayed on SIM Network Subset Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_IN_PROGRESS">Requesting SIM network subset unlock
+\u2026</string>
+ <!-- Status message displayed on SIM Service Provider Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_SERVICE_PROVIDER_IN_PROGRESS">Requesting SIM service provider un
+lock\u2026</string>
+ <!-- Status message displayed on SIM Corporate Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_CORPORATE_IN_PROGRESS">Requesting SIM corporate unlock\u2026</string>
+ <!-- Status message displayed on PUK Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_NETWORK_PUK_IN_PROGRESS">Requesting PUK unlock\u2026</string>
+ <!-- Status message displayed on PUK Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_PUK_IN_PROGRESS">Requesting PUK unlock\u2026</string>
+ <!-- Status message displayed on Corporate PUK entry widget on Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_CORPORATE_PUK_IN_PROGRESS">Requesting PUK unlock\u2026</string>
+ <!-- Status message displayed on SIM Service provider PUK entry widget on Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_SERVICE_PROVIDER_PUK_IN_PROGRESS">Requesting PUK unlock\u2026</string>
+ <!-- Status message displayed on SIM PUK entry widget on Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_SIM_PUK_IN_PROGRESS">Requesting PUK unlock\u2026</string>
+ <!-- Status message displayed on SIM SIM Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_SIM_IN_PROGRESS">Requesting SIM unlock\u2026</string>
+ <!-- Status message displayed on RUIM Network1 Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_RUIM_NETWORK1_IN_PROGRESS">Requesting RUIM network1 unlock\u2026</string>
+ <!-- Status message displayed on RUIM Network2 Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_RUIM_NETWORK2_IN_PROGRESS">Requesting RUIM network2 unlock\u2026</string>
+ <!-- Status message displayed on RUIM Hrpd Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_RUIM_HRPD_IN_PROGRESS">Requesting RUIM hrpd unlock\u2026</string>
+ <!-- Status message displayed on RUIM Service Provider Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_RUIM_SERVICE_PROVIDER_IN_PROGRESS">Requesting RUIM service provider
+unlock\u2026</string>
+ <!-- Status message displayed on RUIM Corporate Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_RUIM_CORPORATE_IN_PROGRESS">Requesting RUIM corporate unlock\u2026</string>
+
+ <!-- Status message displayed on SIM SPN Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_SPN_IN_PROGRESS">Requesting SPN unlock\u2026</string>
+ <!-- Status message displayed on SIM SP EHPLMN Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_SP_EHPLMN_IN_PROGRESS">Requesting SP Equivalent Home PLMN unlock\u2026</string>
+ <!-- Status message displayed on SIM ICCID Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_ICCID_IN_PROGRESS">Requesting ICCID unlock\u2026</string>
+ <!-- Status message displayed on SIM IMPI Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_IMPI_IN_PROGRESS">Requesting IMPI unlock\u2026</string>
+ <!-- Status message displayed on SIM NS_SP Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_NS_SP_IN_PROGRESS">Requesting Network subset service provider unlock\u2026</string>
+
+ <!-- Status message displayed on RUIM RUIM Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_RUIM_RUIM_IN_PROGRESS">Requesting RUIM unlock\u2026</string>
+ <!-- Status message displayed on PUK Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_RUIM_NETWORK1_PUK_IN_PROGRESS">Requesting PUK unlock\u2026</string>
+ <!-- Status message displayed on PUK Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_RUIM_NETWORK2_PUK_IN_PROGRESS">Requesting PUK unlock\u2026</string>
+ <!-- Status message displayed on PUK Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_RUIM_HRPD_PUK_IN_PROGRESS">Requesting PUK unlock\u2026</string>
+ <!-- Status message displayed on PUK Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_RUIM_CORPORATE_PUK_IN_PROGRESS">Requesting PUK unlock\u2026</string>
+ <!-- Status message displayed on PUK Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_RUIM_SERVICE_PROVIDER_PUK_IN_PROGRESS">Requesting PUK unlock\u2026</string>
+ <!-- Status message displayed on PUK Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_RUIM_RUIM_PUK_IN_PROGRESS">Requesting PUK unlock\u2026</string>
+ <!-- Error message displayed on SIM Network Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_NETWORK_ERROR">SIM Network unlock request unsuccessful.</string>
+ <!-- Error message displayed on SIM Network Subset Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ERROR">SIM Network Subset unlock request unsucces
+sful.</string>
+ <!-- Error message displayed on SIM Service Provider Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_SERVICE_PROVIDER_ERROR">SIM Service Provider unlock request unsu
+ccessful.</string>
+ <!-- Error message displayed on SIM Corporate Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_CORPORATE_ERROR">SIM Corporate unlock request unsuccessful.</string>
+ <!-- Error message displayed on SIM SIM Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_SIM_ERROR">SIM unlock request unsuccessful.</string>
+ <!-- Error message displayed on RUIM Network1 Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_RUIM_NETWORK1_ERROR">RUIM Network1 unlock request unsuccessful.</string>
+ <!-- Error message displayed on RUIM Network2 Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_RUIM_NETWORK2_ERROR">RUIM Network2 unlock request unsuccessful.</string>
+ <!-- Error message displayed on RUIM Hrpd Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_RUIM_HRPD_ERROR">RUIM Hrpd unlock request unsuccessful.</string>
+ <!-- Error message displayed on RUIM Corporate Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_RUIM_CORPORATE_ERROR">RUIM Corporate unlock request unsuccessful.</string>
+ <!-- Error message displayed on RUIM Service Provider Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_RUIM_SERVICE_PROVIDER_ERROR">RUIM Service Provider unlock request un
+successful.</string>
+ <!-- Error message displayed on RUIM RUIM Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_RUIM_RUIM_ERROR">RUIM unlock request unsuccessful.</string>
+ <!-- Error message displayed on PUK Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_NETWORK_PUK_ERROR">PUK unlock unsuccessful.</string>
+ <!-- Error message displayed on PUK Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_PUK_ERROR">PUK unlock unsuccessful.</string>
+ <!-- Error message displayed on PUK Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_CORPORATE_PUK_ERROR">PUK unlock unsuccessful.</string>
+ <!-- Error message displayed on PUK Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_SERVICE_PROVIDER_PUK_ERROR">PUK unlock unsuccessful.</string>
+ <!-- Error message displayed on PUK Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_SIM_PUK_ERROR">PUK unlock unsuccessful.</string>
+ <!-- Error message displayed on PUK Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_RUIM_NETWORK1_PUK_ERROR">PUK unlock unsuccessful.</string>
+ <!-- Error message displayed on PUK Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_RUIM_NETWORK2_PUK_ERROR">PUK unlock unsuccessful.</string>
+ <!-- Error message displayed on PUK Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_RUIM_HRPD_PUK_ERROR">PUK unlock unsuccessful.</string>
+ <!-- Error message displayed on PUK Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_RUIM_SERVICE_PROVIDER_PUK_ERROR">PUK unlock unsuccessful.</string>
+ <!-- Error message displayed on PUK Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_RUIM_RUIM_PUK_ERROR">PUK unlock unsuccessful.</string>
+ <!-- Error message displayed on PUK Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_RUIM_CORPORATE_PUK_ERROR">PUK unlock unsuccessful.</string>
+
+ <!-- Error message displayed on SIM SPN Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_SPN_ERROR">SPN unlock request unsuccessful.</string>
+ <!-- Error message displayed on SIM SP EHPLMN Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_SP_EHPLMN_ERROR">SP Equivalent Home PLMN unlock request unsuccessful.</string>
+ <!-- Error message displayed on SIM ICCID Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_ICCID_ERROR">ICCID unlock request unsuccessful.</string>
+ <!-- Error message displayed on SIM IMPI Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_IMPI_ERROR">IMPI unlock request unsuccessful.</string>
+ <!-- Error message displayed on SIM NS_SP Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_NS_SP_ERROR">Network subset service provider unlock request unsuccessful.</string>
+
+ <!-- Success message displayed on SIM Network Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_NETWORK_SUCCESS">SIM Network unlock successful.</string>
+ <!-- Success message displayed on SIM Network Subset Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_SUCCESS">SIM Network Subset unlock successful.</string>
+ <!-- Success message displayed on SIM Service Provider Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_SERVICE_PROVIDER_SUCCESS">SIM Service Provider unlock successful
+.</string>
+ <!-- Success message displayed on SIM Corporate Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_CORPORATE_SUCCESS">SIM Corporate unlock successful.</string>
+ <!-- Success message displayed on SIM SIM Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_SIM_SUCCESS">SIM unlock successful.</string>
+ <!-- Success message displayed on RUIM Network1 Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_RUIM_NETWORK1_SUCCESS">RUIM Network1 unlock successful.</string>
+ <!-- Success message displayed on RUIM Network2 Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_RUIM_NETWORK2_SUCCESS">RUIM Network2 unlock successful.</string>
+ <!-- Success message displayed on RUIM Hrpd Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_RUIM_HRPD_SUCCESS">RUIM Hrpd unlock successful.</string>
+ <!-- Success message displayed on RUIM Service Provider Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_RUIM_SERVICE_PROVIDER_SUCCESS">RUIM Service Provider unlock successf
+ul.</string>
+ <!-- Success message displayed on RUIM Corporate Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_RUIM_CORPORATE_SUCCESS">RUIM Corporate unlock successful.</string>
+ <!-- Success message displayed on RUIM RUIM Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_RUIM_RUIM_SUCCESS">RUIM unlock successful.</string>
+ <!-- Success message displayed on PUK Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_NETWORK_PUK_SUCCESS">PUK unlock successful.</string>
+ <!-- Success message displayed on PUK Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_PUK_SUCCESS">PUK unlock successful.</string>
+ <!-- Success message displayed on PUK Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_CORPORATE_PUK_SUCCESS">PUK unlock successful.</string>
+ <!-- Success message displayed on PUK Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_SERVICE_PROVIDER_PUK_SUCCESS">PUK unlock successful.</string>
+ <!-- Success message displayed on PUK Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_SIM_PUK_SUCCESS">PUK unlock successful.</string>
+ <!-- Success message displayed on PUK Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_RUIM_NETWORK1_PUK_SUCCESS">PUK unlock successful.</string>
+ <!-- Success message displayed on PUK Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_RUIM_NETWORK2_PUK_SUCCESS">PUK unlock successful.</string>
+ <!-- Success message displayed on PUK Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_RUIM_HRPD_PUK_SUCCESS">PUK unlock successful.</string>
+ <!-- Success message displayed on PUK Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_RUIM_CORPORATE_PUK_SUCCESS">PUK unlock successful.</string>
+ <!-- Success message displayed on PUK Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_RUIM_SERVICE_PROVIDER_PUK_SUCCESS">PUK unlock successful.</string>
+ <!-- Success message displayed on PUK Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_RUIM_RUIM_PUK_SUCCESS">PUK unlock successful.</string>
+
+ <!-- Success message displayed on SIM SPN Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_SPN_SUCCESS">SPN unlock successful.</string>
+ <!-- Success message displayed on SIM SP EHPLMN Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_SP_EHPLMN_SUCCESS">SP Equivalent Home PLMN unlock successful.</string>
+ <!-- Success message displayed on SIM ICCID Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_ICCID_SUCCESS">ICCID unlock successful.</string>
+ <!-- Success message displayed on SIM IMPI Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_IMPI_SUCCESS">IMPI unlock successful.</string>
+ <!-- Success message displayed on SIM NS_SP Depersonalization panel [CHAR LIMIT=none] -->
+ <string name="PERSOSUBSTATE_SIM_NS_SP_SUCCESS">Network subset service provider unlock successful.</string>
</resources>
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index 46fbe22..163501a 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -1194,8 +1194,9 @@
<java-symbol type="string" name="network_logging_notification_text" />
<java-symbol type="string" name="location_changed_notification_title" />
<java-symbol type="string" name="location_changed_notification_text" />
- <java-symbol type="string" name="personal_apps_suspended_notification_title" />
- <java-symbol type="string" name="personal_apps_suspended_notification_text" />
+ <java-symbol type="string" name="personal_apps_suspended_title" />
+ <java-symbol type="string" name="personal_apps_suspended_tomorrow_title" />
+ <java-symbol type="string" name="personal_apps_suspended_text" />
<java-symbol type="string" name="factory_reset_warning" />
<java-symbol type="string" name="factory_reset_message" />
<java-symbol type="string" name="lockscreen_transport_play_description" />
@@ -3860,6 +3861,8 @@
<java-symbol type="string" name="conversation_title_fallback_group_chat" />
<java-symbol type="id" name="conversation_icon" />
<java-symbol type="id" name="conversation_icon_badge" />
+ <java-symbol type="id" name="conversation_icon_badge_ring" />
+ <java-symbol type="id" name="conversation_icon_badge_bg" />
<java-symbol type="id" name="expand_button_container" />
<java-symbol type="id" name="messaging_group_content_container" />
<java-symbol type="id" name="expand_button_and_content_container" />
@@ -3937,4 +3940,7 @@
<java-symbol type="string" name="config_customSessionPolicyProvider" />
<!-- The max scale for the wallpaper when it's zoomed in -->
<java-symbol type="dimen" name="config_wallpaperMaxScale"/>
+
+ <!-- Set to true to enable the user switcher on the keyguard. -->
+ <java-symbol type="bool" name="config_keyguardUserSwitcher" />
</resources>
diff --git a/core/tests/coretests/AndroidManifest.xml b/core/tests/coretests/AndroidManifest.xml
index b42fce0..45490ae 100644
--- a/core/tests/coretests/AndroidManifest.xml
+++ b/core/tests/coretests/AndroidManifest.xml
@@ -56,6 +56,7 @@
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.INJECT_EVENTS" />
<uses-permission android:name="android.permission.MANAGE_APP_PREDICTIONS"/>
+ <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.READ_DEVICE_CONFIG" />
<uses-permission android:name="android.permission.READ_DREAM_STATE" />
diff --git a/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java b/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java
index 90d8bab..c328d72 100644
--- a/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java
+++ b/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java
@@ -40,10 +40,7 @@
import android.app.servertransaction.StopActivityItem;
import android.content.Intent;
import android.content.res.Configuration;
-import android.content.res.Resources;
-import android.graphics.Rect;
import android.os.IBinder;
-import android.util.DisplayMetrics;
import android.util.MergedConfiguration;
import android.view.Display;
import android.view.View;
@@ -310,58 +307,6 @@
}
@Test
- public void testHandleConfigurationChangedDoesntOverrideActivityConfig() {
- final TestActivity activity = mActivityTestRule.launchActivity(new Intent());
-
- InstrumentationRegistry.getInstrumentation().runOnMainSync(() -> {
- final Configuration oldActivityConfig =
- new Configuration(activity.getResources().getConfiguration());
- final DisplayMetrics oldActivityMetrics = new DisplayMetrics();
- activity.getDisplay().getMetrics(oldActivityMetrics);
- final Resources oldAppResources = activity.getApplication().getResources();
- final Configuration oldAppConfig =
- new Configuration(oldAppResources.getConfiguration());
- final DisplayMetrics oldApplicationMetrics = new DisplayMetrics();
- oldApplicationMetrics.setTo(oldAppResources.getDisplayMetrics());
- assertEquals("Process config must match the top activity config by default",
- 0, oldActivityConfig.diffPublicOnly(oldAppConfig));
- assertEquals("Process config must match the top activity config by default",
- oldActivityMetrics, oldApplicationMetrics);
-
- // Update the application configuration separately from activity config
- final Configuration newAppConfig = new Configuration(oldAppConfig);
- newAppConfig.densityDpi += 100;
- newAppConfig.screenHeightDp += 100;
- final Rect newBounds = new Rect(newAppConfig.windowConfiguration.getAppBounds());
- newBounds.bottom += 100;
- newAppConfig.windowConfiguration.setAppBounds(newBounds);
- newAppConfig.windowConfiguration.setBounds(newBounds);
- newAppConfig.seq++;
-
- final ActivityThread activityThread = activity.getActivityThread();
- activityThread.handleConfigurationChanged(newAppConfig);
-
- // Verify that application config update was applied, but didn't change activity config.
- assertEquals("Activity config must not change if the process config changes",
- oldActivityConfig, activity.getResources().getConfiguration());
-
- final DisplayMetrics newActivityMetrics = new DisplayMetrics();
- activity.getDisplay().getMetrics(newActivityMetrics);
- assertEquals("Activity display size must not change if the process config changes",
- oldActivityMetrics, newActivityMetrics);
- final Resources newAppResources = activity.getApplication().getResources();
- assertEquals("Application config must be updated",
- newAppConfig, newAppResources.getConfiguration());
- final DisplayMetrics newApplicationMetrics = new DisplayMetrics();
- newApplicationMetrics.setTo(newAppResources.getDisplayMetrics());
- assertNotEquals("Application display size must be updated after config update",
- oldApplicationMetrics, newApplicationMetrics);
- assertNotEquals("Application display size must be updated after config update",
- newActivityMetrics, newApplicationMetrics);
- });
- }
-
- @Test
public void testResumeAfterNewIntent() {
final Activity activity = mActivityTestRule.launchActivity(new Intent());
final ActivityThread activityThread = activity.getActivityThread();
diff --git a/core/tests/coretests/src/android/content/pm/PackageManagerTests.java b/core/tests/coretests/src/android/content/pm/PackageManagerTests.java
index 0ab5367..ed2436a 100644
--- a/core/tests/coretests/src/android/content/pm/PackageManagerTests.java
+++ b/core/tests/coretests/src/android/content/pm/PackageManagerTests.java
@@ -424,20 +424,19 @@
assertNotNull(info);
assertEquals(pkgName, info.packageName);
File dataDir = Environment.getDataDirectory();
- String appInstallPath = new File(dataDir, "app").getPath();
- String drmInstallPath = new File(dataDir, "app-private").getPath();
+ String appInstallParent = new File(dataDir, "app").getPath();
File srcDir = new File(info.sourceDir);
- String srcPath = srcDir.getParentFile().getParent();
+ String srcPathParent = srcDir.getParentFile().getParentFile().getParent();
File publicSrcDir = new File(info.publicSourceDir);
- String publicSrcPath = publicSrcDir.getParentFile().getParent();
+ String publicSrcPath = publicSrcDir.getParentFile().getParentFile().getParent();
long pkgLen = new File(info.sourceDir).length();
String expectedLibPath = new File(new File(info.sourceDir).getParentFile(), "lib")
.getPath();
int rLoc = getInstallLoc(flags, expInstallLocation, pkgLen);
if (rLoc == INSTALL_LOC_INT) {
- assertEquals(appInstallPath, srcPath);
- assertEquals(appInstallPath, publicSrcPath);
+ assertEquals(appInstallParent, srcPathParent);
+ assertEquals(appInstallParent, publicSrcPath);
assertStartsWith("Native library should point to shared lib directory",
expectedLibPath, info.nativeLibraryDir);
assertDirOwnerGroupPermsIfExists(
@@ -464,7 +463,7 @@
// Might need to check:
// ((info.privateFlags & ApplicationInfo.PRIVATE_FLAG_FORWARD_LOCK) != 0)
assertStartsWith("The APK path should point to the ASEC",
- SECURE_CONTAINERS_PREFIX, srcPath);
+ SECURE_CONTAINERS_PREFIX, srcPathParent);
assertStartsWith("The public APK path should point to the ASEC",
SECURE_CONTAINERS_PREFIX, publicSrcPath);
assertStartsWith("The native library path should point to the ASEC",
@@ -991,6 +990,7 @@
@LargeTest
+ @Suppress // TODO(b/152007236): un-suppress when we root cause this
public void testDeleteNormalInternalRetainData() throws Exception {
deleteFromRawResource(0, PackageManager.DELETE_KEEP_DATA);
}
@@ -2298,6 +2298,7 @@
}
}
+ @Suppress // TODO(b/152007236): un-suppress when we root cause this
public void testIsSignedBy() throws Exception {
PackageManager pm = getPm();
String mPkgName = mContext.getPackageName();
diff --git a/libs/hwui/jni/GraphicsStatsService.cpp b/libs/hwui/jni/GraphicsStatsService.cpp
index 6076552..1591ffa 100644
--- a/libs/hwui/jni/GraphicsStatsService.cpp
+++ b/libs/hwui/jni/GraphicsStatsService.cpp
@@ -158,17 +158,17 @@
static void nativeInit(JNIEnv* env, jobject javaObject) {
gGraphicsStatsServiceObject = env->NewGlobalRef(javaObject);
AStatsManager_PullAtomMetadata* metadata = AStatsManager_PullAtomMetadata_obtain();
- AStatsManager_PullAtomMetadata_setCoolDownNs(metadata, 10 * 1000000); // 10 milliseconds
- AStatsManager_PullAtomMetadata_setTimeoutNs(metadata, 2 * NS_PER_SEC); // 2 seconds
+ AStatsManager_PullAtomMetadata_setCoolDownMillis(metadata, 10); // 10 milliseconds
+ AStatsManager_PullAtomMetadata_setTimeoutMillis(metadata, 2 * MS_PER_SEC); // 2 seconds
- AStatsManager_registerPullAtomCallback(android::util::GRAPHICS_STATS,
- &graphicsStatsPullCallback, metadata, nullptr);
+ AStatsManager_setPullAtomCallback(android::util::GRAPHICS_STATS, metadata,
+ &graphicsStatsPullCallback, nullptr);
AStatsManager_PullAtomMetadata_release(metadata);
}
static void nativeDestructor(JNIEnv* env, jobject javaObject) {
- AStatsManager_unregisterPullAtomCallback(android::util::GRAPHICS_STATS);
+ AStatsManager_clearPullAtomCallback(android::util::GRAPHICS_STATS);
env->DeleteGlobalRef(gGraphicsStatsServiceObject);
gGraphicsStatsServiceObject = nullptr;
}
diff --git a/media/java/android/media/MediaRoute2Info.java b/media/java/android/media/MediaRoute2Info.java
index 36ccf00..9985613 100644
--- a/media/java/android/media/MediaRoute2Info.java
+++ b/media/java/android/media/MediaRoute2Info.java
@@ -238,7 +238,7 @@
* Refer to the class documentation for details about live audio routes.
* </p>
*/
- public static final String FEATURE_LIVE_AUDIO = "android.media.intent.category.LIVE_AUDIO";
+ public static final String FEATURE_LIVE_AUDIO = "android.media.route.feature.LIVE_AUDIO";
/**
* Media feature: Live video.
@@ -259,13 +259,15 @@
*
* @see android.app.Presentation
*/
- public static final String FEATURE_LIVE_VIDEO = "android.media.intent.category.LIVE_VIDEO";
+ public static final String FEATURE_LIVE_VIDEO = "android.media.route.feature.LIVE_VIDEO";
/**
* Media feature: Remote playback.
* <p>
* A route that supports remote playback routing will allow an application to send
* requests to play content remotely to supported destinations.
+ * A route may only support {@link #FEATURE_REMOTE_AUDIO_PLAYBACK audio playback} or
+ * {@link #FEATURE_REMOTE_VIDEO_PLAYBACK video playback}.
* </p><p>
* Remote playback routes destinations operate independently of the local device.
* When a remote playback route is selected, the application can control the content
@@ -274,9 +276,35 @@
* </p><p>
* Refer to the class documentation for details about remote playback routes.
* </p>
+ * @see #FEATURE_REMOTE_AUDIO_PLAYBACK
+ * @see #FEATURE_REMOTE_VIDEO_PLAYBACK
*/
public static final String FEATURE_REMOTE_PLAYBACK =
- "android.media.intent.category.REMOTE_PLAYBACK";
+ "android.media.route.feature.REMOTE_PLAYBACK";
+
+ /**
+ * Media feature: Remote audio playback.
+ * <p>
+ * A route that supports remote audio playback routing will allow an application to send
+ * requests to play audio content remotely to supported destinations.
+ *
+ * @see #FEATURE_REMOTE_PLAYBACK
+ * @see #FEATURE_REMOTE_VIDEO_PLAYBACK
+ */
+ public static final String FEATURE_REMOTE_AUDIO_PLAYBACK =
+ "android.media.route.feature.REMOTE_AUDIO_PLAYBACK";
+
+ /**
+ * Media feature: Remote video playback.
+ * <p>
+ * A route that supports remote video playback routing will allow an application to send
+ * requests to play video content remotely to supported destinations.
+ *
+ * @see #FEATURE_REMOTE_PLAYBACK
+ * @see #FEATURE_REMOTE_AUDIO_PLAYBACK
+ */
+ public static final String FEATURE_REMOTE_VIDEO_PLAYBACK =
+ "android.media.route.feature.REMOTE_VIDEO_PLAYBACK";
final String mId;
final CharSequence mName;
diff --git a/media/java/android/media/MediaRouter2.java b/media/java/android/media/MediaRouter2.java
index bde45d7..25f6059 100644
--- a/media/java/android/media/MediaRouter2.java
+++ b/media/java/android/media/MediaRouter2.java
@@ -374,8 +374,8 @@
* @param route the route you want to transfer the current media to. Pass {@code null} to
* stop routing of the current media.
*
- * @see TransferCallback#onTransferred
- * @see TransferCallback#onTransferFailed
+ * @see TransferCallback#onTransfer
+ * @see TransferCallback#onTransferFailure
*/
public void transferTo(@NonNull MediaRoute2Info route) {
Objects.requireNonNull(route, "route must not be null");
@@ -565,9 +565,9 @@
}
/**
- * Creates a controller and calls the {@link TransferCallback#onTransferred}.
+ * Creates a controller and calls the {@link TransferCallback#onTransfer}.
* If the controller creation has failed, then it calls
- * {@link TransferCallback#onTransferFailed}.
+ * {@link TransferCallback#onTransferFailure}.
* <p>
* Pass {@code null} to sessionInfo for the failure case.
*/
@@ -740,21 +740,21 @@
RoutingController newController) {
for (TransferCallbackRecord record: mTransferCallbackRecords) {
record.mExecutor.execute(
- () -> record.mTransferCallback.onTransferred(oldController, newController));
+ () -> record.mTransferCallback.onTransfer(oldController, newController));
}
}
private void notifyTransferFailed(MediaRoute2Info route) {
for (TransferCallbackRecord record: mTransferCallbackRecords) {
record.mExecutor.execute(
- () -> record.mTransferCallback.onTransferFailed(route));
+ () -> record.mTransferCallback.onTransferFailure(route));
}
}
private void notifyStopped(RoutingController controller) {
for (TransferCallbackRecord record: mTransferCallbackRecords) {
record.mExecutor.execute(
- () -> record.mTransferCallback.onStopped(controller));
+ () -> record.mTransferCallback.onStop(controller));
}
}
@@ -805,7 +805,7 @@
* @param newController the new controller to control routing
* @see #transferTo(MediaRoute2Info)
*/
- public void onTransferred(@NonNull RoutingController oldController,
+ public void onTransfer(@NonNull RoutingController oldController,
@NonNull RoutingController newController) {}
/**
@@ -813,14 +813,14 @@
*
* @param requestedRoute the route info which was used for the transfer
*/
- public void onTransferFailed(@NonNull MediaRoute2Info requestedRoute) {}
+ public void onTransferFailure(@NonNull MediaRoute2Info requestedRoute) {}
/**
* Called when a media routing stops. It can be stopped by a user or a provider.
*
* @param controller the controller that controlled the stopped media routing.
*/
- public void onStopped(@NonNull RoutingController controller) { }
+ public void onStop(@NonNull RoutingController controller) { }
}
/**
diff --git a/media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouter2ManagerTest.java b/media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouter2ManagerTest.java
index a97baaf..77e8f97 100644
--- a/media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouter2ManagerTest.java
+++ b/media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouter2ManagerTest.java
@@ -204,7 +204,7 @@
addRouterCallback(new MediaRouter2.RouteCallback() {});
addTransferCallback(new MediaRouter2.TransferCallback() {
@Override
- public void onTransferred(MediaRouter2.RoutingController oldController,
+ public void onTransfer(MediaRouter2.RoutingController oldController,
MediaRouter2.RoutingController newController) {
if (newController == null) {
return;
diff --git a/packages/PackageInstaller/res/values-ar/strings.xml b/packages/PackageInstaller/res/values-ar/strings.xml
index 2392c96..87f89ce 100644
--- a/packages/PackageInstaller/res/values-ar/strings.xml
+++ b/packages/PackageInstaller/res/values-ar/strings.xml
@@ -24,8 +24,8 @@
<string name="installing_app" msgid="1165095864863849422">"جارٍ تثبيت <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="5987363587661783896">"تم تثبيت التطبيق."</string>
<string name="install_confirm_question" msgid="8176284075816604590">"هل تريد تثبيت هذا التطبيق؟"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"هل تريد تثبيت إعادة تحميل لهذا التطبيق الحالي؟ لن تفقد بياناتك الحالية."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"هل تريد تثبيت إعادة تحميل لهذا التطبيق المضمَّن؟ لن تفقد بياناتك الحالية."</string>
+ <string name="install_confirm_question_update" msgid="7942235418781274635">"هل تريد تثبيت تحديث لهذا التطبيق الحالي؟ لن تفقد بياناتك الحالية."</string>
+ <string name="install_confirm_question_update_system" msgid="4713001702777910263">"هل تريد تثبيت تحديث لهذا التطبيق المضمَّن؟ لن تفقد بياناتك الحالية."</string>
<string name="install_failed" msgid="5777824004474125469">"التطبيق ليس مثبتًا."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"تم حظر تثبيت الحزمة."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"لم يتم تثبيت التطبيق لأن حزمة التثبيت تتعارض مع حزمة حالية."</string>
diff --git a/packages/PackageInstaller/res/values-eu/strings.xml b/packages/PackageInstaller/res/values-eu/strings.xml
index 2011013..65e75cd 100644
--- a/packages/PackageInstaller/res/values-eu/strings.xml
+++ b/packages/PackageInstaller/res/values-eu/strings.xml
@@ -83,9 +83,9 @@
<string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"Segurtasuna bermatzeko, ezin dira instalatu iturburu honetako aplikazio ezezagunak tableta honetan."</string>
<string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"Segurtasuna bermatzeko, ezin dira instalatu iturburu honetako aplikazio ezezagunak telebista honetan."</string>
<string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"Segurtasuna bermatzeko, ezin dira instalatu iturburu honetako aplikazio ezezagunak telefono honetan."</string>
- <string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Telefonoak eta datu pertsonalek aplikazio ezezagunen erasoak jaso ditzakete. Aplikazio hau instalatzen baduzu, onartu egingo duzu zu zarela hura erabiltzeagatik telefonoak jasan ditzakeen kalteen edo datu-galeren erantzulea."</string>
- <string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Tabletak eta datu pertsonalek aplikazio ezezagunen erasoak jaso ditzakete. Aplikazio hau instalatzen baduzu, onartu egingo duzu zu zarela hura erabiltzeagatik tabletak jasan ditzakeen kalteen edo datu-galeren erantzulea."</string>
- <string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"Telebistak eta datu pertsonalek aplikazio ezezagunen erasoak jaso ditzakete. Aplikazio hau instalatzen baduzu, onartu egingo duzu zu zarela hura erabiltzeagatik telebistak jasan ditzakeen kalteen edo datu-galeren erantzulea."</string>
+ <string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Telefonoak eta datu pertsonalek aplikazio ezezagunen erasoak jaso ditzakete. Aplikazio hau instalatzen baduzu, onartu egingo duzu zeu zarela hura erabiltzeagatik telefonoak jasan ditzakeen kalteen edo datu-galeren erantzulea."</string>
+ <string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Tabletak eta datu pertsonalek aplikazio ezezagunen erasoak jaso ditzakete. Aplikazio hau instalatzen baduzu, onartu egingo duzu zeu zarela hura erabiltzeagatik tabletak jasan ditzakeen kalteen edo datu-galeren erantzulea."</string>
+ <string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"Telebistak eta datu pertsonalek aplikazio ezezagunen erasoak jaso ditzakete. Aplikazio hau instalatzen baduzu, onartu egingo duzu zeu zarela hura erabiltzeagatik telebistak jasan ditzakeen kalteen edo datu-galeren erantzulea."</string>
<string name="anonymous_source_continue" msgid="4375745439457209366">"Egin aurrera"</string>
<string name="external_sources_settings" msgid="4046964413071713807">"Ezarpenak"</string>
<string name="wear_app_channel" msgid="1960809674709107850">"Wear aplikazioak instalatzea/desinstalatzea"</string>
diff --git a/packages/SettingsLib/res/values-af/strings.xml b/packages/SettingsLib/res/values-af/strings.xml
index 77691a3..88f996a 100644
--- a/packages/SettingsLib/res/values-af/strings.xml
+++ b/packages/SettingsLib/res/values-af/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP-adres en -poort"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Skandeer QR-kode"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Bind toestel oor Wi-Fi saam deur \'n QR-kode te skandeer"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, debug, dev"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Kortpad na foutverslag"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Wys \'n knoppie in die kragkieslys om \'n foutverslag te doen"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"Sal waarskynlik hou tot omtrent <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Sal waarskynlik hou tot omtrent <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"Tot <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"Verleng batterylewe verby <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"Minder as <xliff:g id="THRESHOLD">%1$s</xliff:g> oor"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Minder as <xliff:g id="THRESHOLD">%1$s</xliff:g> oor (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Meer as <xliff:g id="TIME_REMAINING">%1$s</xliff:g> oor (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Foonluidspreker"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Kan nie koppel nie. Skakel toestel af en weer aan"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Bedrade oudiotoestel"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-am/strings.xml b/packages/SettingsLib/res/values-am/strings.xml
index af89d6a..a402901 100644
--- a/packages/SettingsLib/res/values-am/strings.xml
+++ b/packages/SettingsLib/res/values-am/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"የአይፒ አድራሻ እና ወደብ"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"QR ኮድን ይቃኙ"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"የQR ኮድ በመጠቀም መሣሪያን በመቃኘት በWi-Fi ላይ ያጣምሩ"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb፣ ማረም፣ ግንባታ"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"የሳንካ ሪፖርት አቋራጭ"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"የሳንካ ሪፖርት ለመውሰድ በሃይል ምናሌ ውስጥ አዝራር አሳይ"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"እስከ <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>) ገደማ ድረስ መቆየት አለበት"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"እስከ <xliff:g id="TIME">%1$s</xliff:g> ገደማ መቆየት አለበት"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"እስከ <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"የባትሪ ዕድሜን ከ <xliff:g id="TIME">%1$s</xliff:g> በላይ አራዝም"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"ከ<xliff:g id="THRESHOLD">%1$s</xliff:g> ያነሰ ይቀራል"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"ከ<xliff:g id="THRESHOLD">%1$s</xliff:g> ያነሰ ይቀራል (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"ከ<xliff:g id="TIME_REMAINING">%1$s</xliff:g> በላይ ይቀራል (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"የስልክ ድምጽ ማጉያ"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"መገናኘት ላይ ችግር። መሳሪያውን ያጥፉት እና እንደገና ያብሩት"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"ባለገመድ የኦዲዮ መሣሪያ"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-ar/strings.xml b/packages/SettingsLib/res/values-ar/strings.xml
index 83408d4..7241c30 100644
--- a/packages/SettingsLib/res/values-ar/strings.xml
+++ b/packages/SettingsLib/res/values-ar/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"عنوان IP والمنفذ"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"المسح الضوئي لرمز الاستجابة السريعة"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"إقران الجهاز من خلال شبكة Wi‑Fi عن طريق المسح الضوئي لرمز استجابة سريعة"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb، تصحيح الأخطاء، مطور برامج"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"اختصار تقرير الأخطاء"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"عرض زر في قائمة خيارات التشغيل لإعداد تقرير بالأخطاء"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"قد تكفي طاقة البطارية حتى حوالي الساعة <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)."</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"قد تكفي طاقة البطارية حتى حوالي الساعة <xliff:g id="TIME">%1$s</xliff:g>."</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"حتى <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"إطالة عمر البطارية لما بعد <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"يتبقى أقل من <xliff:g id="THRESHOLD">%1$s</xliff:g>."</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"يتبقى أقل من <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)."</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"يتبقى أكثر من <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)."</string>
@@ -513,4 +516,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"مكبر صوت الهاتف"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"حدثت مشكلة أثناء الاتصال. يُرجى إيقاف الجهاز ثم إعادة تشغيله."</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"جهاز سماعي سلكي"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-as/strings.xml b/packages/SettingsLib/res/values-as/strings.xml
index 2a154f4..a2123d3 100644
--- a/packages/SettingsLib/res/values-as/strings.xml
+++ b/packages/SettingsLib/res/values-as/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"আইপি ঠিকনা & প’ৰ্ট"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"কিউআৰ ক’ড স্কেন কৰক"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"এটা কিউআৰ ক’ড স্কেন কৰি ৱাই-ফাইৰে ডিভাইচ পেয়াৰ কৰক"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, ডিবাগ, dev"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"বাগ ৰিপৰ্টৰ শ্ৱৰ্টকাট"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"পাৱাৰ মেনুত বাগ প্ৰতিবেদন গ্ৰহণ কৰিবলৈ এটা বুটাম দেখুৱাওক"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"বেটাৰি আনুমানিকভাৱে <xliff:g id="TIME">%1$s</xliff:g> লৈকে চলিব (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"বেটাৰি আনুমানিকভাৱে <xliff:g id="TIME">%1$s</xliff:g> লৈকে চলিব"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"<xliff:g id="TIME">%1$s</xliff:g> পৰ্যন্ত"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"বেটাৰিৰ জীৱনকাল <xliff:g id="TIME">%1$s</xliff:g>তকৈ বৃদ্ধি কৰক"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"<xliff:g id="THRESHOLD">%1$s</xliff:g>তকৈও কম সময় বাকী আছে"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"<xliff:g id="THRESHOLD">%1$s</xliff:g>তকৈও কম সময় বাকী আছে (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g>তকৈও বেছি সময় বাকী আছে (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"ফ’নৰ স্পীকাৰ"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"সংযোগ হোৱাত সমস্যা হৈছে। ডিভাইচটো অফ কৰি পুনৰ অন কৰক"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"তাঁৰযুক্ত অডিঅ’ ডিভাইচ"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-az/strings.xml b/packages/SettingsLib/res/values-az/strings.xml
index 0225d29..53fe7a8 100644
--- a/packages/SettingsLib/res/values-az/strings.xml
+++ b/packages/SettingsLib/res/values-az/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP ünvanı və Port"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"QR kodu skanlayın"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"QR Kodu skanlamaqla cihazı Wi‑Fi vasitəsilə cütləşdirin"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, debug, dev"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Baq raportu qısa yolu"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Baq raportunu götürmək üçün qidalanma menyusunda düyməni göstərin"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"Təxminən <xliff:g id="TIME">%1$s</xliff:g> olana qədər davam edəcək (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Təxminən <xliff:g id="TIME">%1$s</xliff:g> olana qədər davam edəcək"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"<xliff:g id="TIME">%1$s</xliff:g> olana qədər"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"Batareya istifadəsini <xliff:g id="TIME">%1$s</xliff:g> vaxtından etibarən artırın"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"Qalan vaxt <xliff:g id="THRESHOLD">%1$s</xliff:g> və daha azdır"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Qalan vaxt <xliff:g id="THRESHOLD">%1$s</xliff:g> və daha azdır (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Qalan vaxt <xliff:g id="TIME_REMAINING">%1$s</xliff:g> və daha çoxdur (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Telefon dinamiki"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Qoşulmaqla bağlı problem. Cihazı deaktiv edin, sonra yenidən aktiv edin"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Simli audio cihaz"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
index 7f6f7f2..ac0c254 100644
--- a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
+++ b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP adresa i port"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Skeniraj QR kôd"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Uparite uređaj pomoću Wi‑Fi mreže ili tako što ćete skenirati QR kôd"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, otklanjanje grešaka, programer"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Prečica za izveštaj o greškama"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Prikaži dugme u meniju napajanja za pravljenje izveštaja o greškama"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"Trajaće približno do <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Trajaće približno do <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"Do <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"Produži trajanje baterije u odnosu na period od <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"Preostalo je manje od <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Preostalo je manje od <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Preostalo je više od <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -510,4 +513,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Zvučnik telefona"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Problem pri povezivanju. Isključite uređaj, pa ga ponovo uključite"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Žičani audio uređaj"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-be/strings.xml b/packages/SettingsLib/res/values-be/strings.xml
index c731191..49584eb 100644
--- a/packages/SettingsLib/res/values-be/strings.xml
+++ b/packages/SettingsLib/res/values-be/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP-адрас і порт"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Сканіраваць QR-код"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Спалучыць прыладу праз Wi‑Fi шляхам сканіравання QR-кода"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, адладка, распрацоўшчык"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Ярлык для справаздачы пра памылкі"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Паказаць кнопку для прыняцця справаздачы пра памылку ў меню сілкавання"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"Зараду (<xliff:g id="LEVEL">%2$s</xliff:g>) хопіць прыблізна да <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Зараду хопіць прыблізна да <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"Да <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"Падоўжыце тэрмін службы акумулятара пасля <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"Засталося менш за <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Узровень зараду батарэі: <xliff:g id="LEVEL">%2$s</xliff:g> (хопіць менш чым на <xliff:g id="THRESHOLD">%1$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Узровень зараду батарэі: <xliff:g id="LEVEL">%2$s</xliff:g> (хопіць больш чым на <xliff:g id="TIME_REMAINING">%1$s</xliff:g>)"</string>
@@ -511,4 +514,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Дынамік тэлефона"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Праблема з падключэннем. Выключыце і зноў уключыце прыладу"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Правадная аўдыяпрылада"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-bg/strings.xml b/packages/SettingsLib/res/values-bg/strings.xml
index 48234ae..20145b0 100644
--- a/packages/SettingsLib/res/values-bg/strings.xml
+++ b/packages/SettingsLib/res/values-bg/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP адрес и порт"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Сканиране на QR код"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Сдвояване на устройството през Wi‑Fi чрез сканиране на QR код"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, отстраняване на грешки, програмиране"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Пряк път за сигнал за програмна грешка"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"В менюто за захранване да се показва бутон за подаване на сигнал за програмна грешка"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"Следва да издържи приблизително до <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Следва да издържи до около <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"До <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"Удължаване на живота на батерията след <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"Остава/т по-малко от <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Остава/т по-малко от <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Остава/т повече от <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Високоговорител на телефона"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"При свързването възникна проблем. Изключете устройството и го включете отново"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Аудиоустройство с кабел"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-bn/strings.xml b/packages/SettingsLib/res/values-bn/strings.xml
index 6ff8ec1..a6f1177 100644
--- a/packages/SettingsLib/res/values-bn/strings.xml
+++ b/packages/SettingsLib/res/values-bn/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP অ্যাড্রেস ও পোর্ট"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"QR কোড স্ক্যান করুন"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"QR কোড স্ক্যান করে ওয়াই-ফাই ব্যবহার করে ডিভাইস যোগ করুন"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, debug, dev"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"ত্রুটি প্রতিবেদনের শর্টকাট"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"সমস্যার তথ্য ক্যাপচার করতে পাওয়ার মেনুতে একটি বোতাম দেখান"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"আনুমানিক <xliff:g id="TIME">%1$s</xliff:g> পর্যন্ত চলবে (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"আনুমানিক <xliff:g id="TIME">%1$s</xliff:g> পর্যন্ত চলবে"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"<xliff:g id="TIME">%1$s</xliff:g> পর্যন্ত"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"<xliff:g id="TIME">%1$s</xliff:g>-এর পর পর্যন্ত ব্যাটারির ব্যবহার চালিয়ে যান"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"<xliff:g id="THRESHOLD">%1$s</xliff:g> এর থেকেও কম বাকি আছে"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"আর <xliff:g id="THRESHOLD">%1$s</xliff:g>-এর কম চার্জ বাকি আছে (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"আরও <xliff:g id="TIME_REMAINING">%1$s</xliff:g>-এর বেশি চলবে (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"ফেনের স্পিকার"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"কানেক্ট করতে সমস্যা হচ্ছে। ডিভাইস বন্ধ করে আবার চালু করুন"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"ওয়্যার অডিও ডিভাইস"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-bs/strings.xml b/packages/SettingsLib/res/values-bs/strings.xml
index 387fd30..5a317ee 100644
--- a/packages/SettingsLib/res/values-bs/strings.xml
+++ b/packages/SettingsLib/res/values-bs/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP adresa i priključak"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Skenirajte QR kôd"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Uparite uređaj putem WiFi-ja skeniranjem QR koda"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, otklanjanje grešaka, programer"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Prečica za izvještaj o greškama"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Prikaz dugmeta za prijavu grešaka u meniju napajanja"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"Trebala bi trajati do otprilike <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Trebala bi trajati otprilike do <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"Do <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"Produži trajanje baterije nakon <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"Preostalo je manje od <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Preostalo je manje od <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Preostalo je više od <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -510,4 +513,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Zvučnik telefona"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Došlo je do problema prilikom povezivanja. Isključite, pa ponovo uključite uređaj"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Žičani audio uređaj"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-ca/strings.xml b/packages/SettingsLib/res/values-ca/strings.xml
index f1be138..333f8e9 100644
--- a/packages/SettingsLib/res/values-ca/strings.xml
+++ b/packages/SettingsLib/res/values-ca/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"Adreça IP i port"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Escaneja un codi QR"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Vincula el dispositiu per Wi‑Fi escanejant un codi QR"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, depurar, desenvolupador"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Drecera per a informe d\'errors"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Mostra un botó al menú d\'engegada per crear un informe d\'errors"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"Hauria de durar aproximadament fins a les <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Hauria de durar aproximadament fins a les <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"Fins a les <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"Allarga la durada de la bateria després de les <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"Temps restant inferior a <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Temps restant inferior a <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Temps restant superior a <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Altaveu del telèfon"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Hi ha hagut un problema amb la connexió. Desactiva el dispositiu i torna\'l a activar."</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Dispositiu d\'àudio amb cable"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-cs/strings.xml b/packages/SettingsLib/res/values-cs/strings.xml
index 0959bb7..453bb87 100644
--- a/packages/SettingsLib/res/values-cs/strings.xml
+++ b/packages/SettingsLib/res/values-cs/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP adresa a port"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Naskenování QR kódu"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Párovat zařízení přes Wi-Fi naskenováním QR kódu"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, ladění, vývoj"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Zástupce hlášení chyb"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Zobrazit v hlavní nabídce tlačítko k vygenerování chybového hlášení"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"Vydrží asi do <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Vydrží asi do <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"Do <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"Prodloužit výdrž baterie po <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"Zbývá méně než <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Zbývá méně než <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Zbývá více než <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -511,4 +514,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Reproduktor telefonu"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Problém s připojením. Vypněte zařízení a znovu jej zapněte"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Kabelové audiozařízení"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-da/strings.xml b/packages/SettingsLib/res/values-da/strings.xml
index 8e4a63f..7206e38 100644
--- a/packages/SettingsLib/res/values-da/strings.xml
+++ b/packages/SettingsLib/res/values-da/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP-adresse og port"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Scan QR-kode"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Dan par med en enhed via Wi-Fi ved at scanne en QR-kode"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, fejlfinding, dev"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Genvej til fejlrapportering"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Vis en knap til oprettelse af fejlrapporter i afbrydermenuen"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"Bør holde indtil ca. <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Bør holde indtil ca. <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"Indtil <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"Forlæng batteritiden til efter <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"Der er mindre end <xliff:g id="THRESHOLD">%1$s</xliff:g> tilbage"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Der er mindre end <xliff:g id="THRESHOLD">%1$s</xliff:g> tilbage (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Der er mere end <xliff:g id="TIME_REMAINING">%1$s</xliff:g> tilbage (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Telefonens højttaler"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Der kunne ikke oprettes forbindelse. Sluk og tænd enheden"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Lydenhed med ledning"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-de/strings.xml b/packages/SettingsLib/res/values-de/strings.xml
index 326d8e3..f9cf552 100644
--- a/packages/SettingsLib/res/values-de/strings.xml
+++ b/packages/SettingsLib/res/values-de/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP-Adresse & Port"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"QR-Code scannen"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Scanne einen QR-Code, um ein Gerät über WLAN zu koppeln"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"ADB, Debug, Dev"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Verknüpfung zu Fehlerbericht"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Im Menü \"Ein/Aus\" wird eine Option zum Erstellen eines Fehlerberichts angezeigt"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"Sollte etwa bis <xliff:g id="TIME">%1$s</xliff:g> reichen (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Sollte etwa bis <xliff:g id="TIME">%1$s</xliff:g> reichen"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"Bis <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"Akkulaufzeit über <xliff:g id="TIME">%1$s</xliff:g> hinaus verlängern"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"Weniger als <xliff:g id="THRESHOLD">%1$s</xliff:g> verbleibend"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Weniger als <xliff:g id="THRESHOLD">%1$s</xliff:g> verbleibend (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Mehr als <xliff:g id="TIME_REMAINING">%1$s</xliff:g> verbleibend (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Smartphone-Lautsprecher"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Verbindung kann nicht hergestellt werden. Schalte das Gerät aus & und wieder ein."</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Netzbetriebenes Audiogerät"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-el/strings.xml b/packages/SettingsLib/res/values-el/strings.xml
index 112d5c5..07d161d 100644
--- a/packages/SettingsLib/res/values-el/strings.xml
+++ b/packages/SettingsLib/res/values-el/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"Διεύθυνση IP και θύρα"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Σάρωση κωδικού QR"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Σύζευξη συσκευής μέσω Wi‑Fi με τη σάρωση ενός κωδικού QR"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, εντοπισμός σφαλμάτων, προγραμματιστής"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Συντόμευση αναφοράς σφαλμάτων"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Εμφάνιση κουμπιού στο μενού ενεργοποίησης για τη λήψη αναφοράς σφαλμάτων"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"Θα διαρκέσει μέχρι τις <xliff:g id="TIME">%1$s</xliff:g> περίπου (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Θα διαρκέσει μέχρι τις <xliff:g id="TIME">%1$s</xliff:g> περίπου"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"Έως τις <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"Επέκταση διάρκεια ζωής μπαταρίας πέρα από <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"Απομένει/ουν λιγότερo/α από <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Απομένει/ουν λιγότερo/α από <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Απομένουν περισσότερα/ες από <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Ηχείο τηλεφώνου"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Πρόβλημα κατά τη σύνδεση. Απενεργοποιήστε τη συσκευή και ενεργοποιήστε την ξανά"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Ενσύρματη συσκευή ήχου"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-en-rAU/strings.xml b/packages/SettingsLib/res/values-en-rAU/strings.xml
index 3ac6987..dae998f 100644
--- a/packages/SettingsLib/res/values-en-rAU/strings.xml
+++ b/packages/SettingsLib/res/values-en-rAU/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP address & port"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Scan QR code"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Pair device over Wi‑Fi by scanning a QR code"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, debug, dev"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Bug report shortcut"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Show a button in the power menu for taking a bug report"</string>
@@ -430,7 +432,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"Should last until about <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Should last until about <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"Until <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"Extend battery life past <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"Less than <xliff:g id="THRESHOLD">%1$s</xliff:g> remaining"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Less than <xliff:g id="THRESHOLD">%1$s</xliff:g> remaining (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"More than <xliff:g id="TIME_REMAINING">%1$s</xliff:g> remaining (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -508,4 +511,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Phone speaker"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Problem connecting. Turn device off and back on"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Wired audio device"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-en-rCA/strings.xml b/packages/SettingsLib/res/values-en-rCA/strings.xml
index 3ac6987..dae998f 100644
--- a/packages/SettingsLib/res/values-en-rCA/strings.xml
+++ b/packages/SettingsLib/res/values-en-rCA/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP address & port"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Scan QR code"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Pair device over Wi‑Fi by scanning a QR code"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, debug, dev"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Bug report shortcut"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Show a button in the power menu for taking a bug report"</string>
@@ -430,7 +432,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"Should last until about <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Should last until about <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"Until <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"Extend battery life past <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"Less than <xliff:g id="THRESHOLD">%1$s</xliff:g> remaining"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Less than <xliff:g id="THRESHOLD">%1$s</xliff:g> remaining (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"More than <xliff:g id="TIME_REMAINING">%1$s</xliff:g> remaining (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -508,4 +511,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Phone speaker"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Problem connecting. Turn device off and back on"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Wired audio device"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-en-rGB/strings.xml b/packages/SettingsLib/res/values-en-rGB/strings.xml
index 3ac6987..dae998f 100644
--- a/packages/SettingsLib/res/values-en-rGB/strings.xml
+++ b/packages/SettingsLib/res/values-en-rGB/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP address & port"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Scan QR code"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Pair device over Wi‑Fi by scanning a QR code"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, debug, dev"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Bug report shortcut"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Show a button in the power menu for taking a bug report"</string>
@@ -430,7 +432,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"Should last until about <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Should last until about <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"Until <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"Extend battery life past <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"Less than <xliff:g id="THRESHOLD">%1$s</xliff:g> remaining"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Less than <xliff:g id="THRESHOLD">%1$s</xliff:g> remaining (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"More than <xliff:g id="TIME_REMAINING">%1$s</xliff:g> remaining (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -508,4 +511,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Phone speaker"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Problem connecting. Turn device off and back on"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Wired audio device"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-en-rIN/strings.xml b/packages/SettingsLib/res/values-en-rIN/strings.xml
index 3ac6987..dae998f 100644
--- a/packages/SettingsLib/res/values-en-rIN/strings.xml
+++ b/packages/SettingsLib/res/values-en-rIN/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP address & port"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Scan QR code"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Pair device over Wi‑Fi by scanning a QR code"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, debug, dev"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Bug report shortcut"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Show a button in the power menu for taking a bug report"</string>
@@ -430,7 +432,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"Should last until about <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Should last until about <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"Until <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"Extend battery life past <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"Less than <xliff:g id="THRESHOLD">%1$s</xliff:g> remaining"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Less than <xliff:g id="THRESHOLD">%1$s</xliff:g> remaining (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"More than <xliff:g id="TIME_REMAINING">%1$s</xliff:g> remaining (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -508,4 +511,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Phone speaker"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Problem connecting. Turn device off and back on"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Wired audio device"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-en-rXC/strings.xml b/packages/SettingsLib/res/values-en-rXC/strings.xml
index 60ffc60..a3822251 100644
--- a/packages/SettingsLib/res/values-en-rXC/strings.xml
+++ b/packages/SettingsLib/res/values-en-rXC/strings.xml
@@ -232,6 +232,7 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP address & Port"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Scan QR code"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Pair device over Wi‑Fi by scanning a QR Code"</string>
+ <string name="adb_wireless_no_network_msg" msgid="2365795244718494658">"Please connect to a Wi‑Fi network"</string>
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, debug, dev"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Bug report shortcut"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Show a button in the power menu for taking a bug report"</string>
@@ -430,7 +431,7 @@
<string name="power_discharge_by" msgid="4113180890060388350">"Should last until about <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Should last until about <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"Until <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"Extend battery life past <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <string name="power_suggestion_battery_run_out" msgid="6332089307827787087">"Battery may run out by <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"Less than <xliff:g id="THRESHOLD">%1$s</xliff:g> remaining"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Less than <xliff:g id="THRESHOLD">%1$s</xliff:g> remaining (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"More than <xliff:g id="TIME_REMAINING">%1$s</xliff:g> remaining (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -508,4 +509,15 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Phone speaker"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Problem connecting. Turn device off & back on"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Wired audio device"</string>
+ <string name="help_label" msgid="3528360748637781274">"Help & feedback"</string>
+ <string name="storage_category" msgid="2287342585424631813">"Storage"</string>
+ <string name="shared_data_title" msgid="1017034836800864953">"Shared data"</string>
+ <string name="shared_data_summary" msgid="5516326713822885652">"View and modify shared data"</string>
+ <string name="blob_id_text" msgid="8680078988996308061">"Shared data ID: <xliff:g id="BLOB_ID">%d</xliff:g>"</string>
+ <string name="blob_expires_text" msgid="7882727111491739331">"Expires at <xliff:g id="DATE">%s</xliff:g>"</string>
+ <string name="accessor_info_title" msgid="8289823651512477787">"Apps sharing data"</string>
+ <string name="accessor_no_description_text" msgid="7510967452505591456">"No description provided by the app."</string>
+ <string name="accessor_expires_text" msgid="4625619273236786252">"Lease expires at <xliff:g id="DATE">%s</xliff:g>"</string>
+ <string name="delete_blob_text" msgid="2819192607255625697">"Delete shared data"</string>
+ <string name="delete_blob_confirmation_text" msgid="7807446938920827280">"Are you sure you want to delete this shared data?"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-es-rUS/strings.xml b/packages/SettingsLib/res/values-es-rUS/strings.xml
index cde9c74..62082a4 100644
--- a/packages/SettingsLib/res/values-es-rUS/strings.xml
+++ b/packages/SettingsLib/res/values-es-rUS/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"Dirección IP y puerto"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Escanear código QR"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Escanea un código QR para vincular el dispositivo mediante Wi‑Fi"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, debug, dev"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Acceso directo para informes de errores"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Mostrar un botón en el menú de encendido para realizar un informe de errores"</string>
@@ -416,8 +418,7 @@
<string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"Protanomalía (rojo-verde)"</string>
<string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"Tritanomalía (azul-amarillo)"</string>
<string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"Corrección de color"</string>
- <!-- no translation found for accessibility_display_daltonizer_preference_subtitle (1284746051652993443) -->
- <skip />
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="1284746051652993443">"La corrección de color te permite ajustar la manera en que se muestran los colores en el dispositivo"</string>
<string name="daltonizer_type_overridden" msgid="4509604753672535721">"Reemplazado por <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="power_remaining_settings_home_page" msgid="4885165789445462557">"<xliff:g id="PERCENTAGE">%1$s</xliff:g> - <xliff:g id="TIME_STRING">%2$s</xliff:g>"</string>
<string name="power_remaining_duration_only" msgid="8264199158671531431">"Tiempo restante: aproximadamente <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
@@ -431,7 +432,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"Duración aproximada hasta: <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Debería durar aproximadamente hasta <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"Hasta <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"Extender la duración de la batería después de las <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"Tiempo restante: menos de <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Tiempo restante: menos de <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Tiempo restante: más de <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +511,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Altavoz del teléfono"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Error al establecer la conexión. Apaga el dispositivo y vuelve a encenderlo."</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Dispositivo de audio con cable"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-es/strings.xml b/packages/SettingsLib/res/values-es/strings.xml
index e4041ed..62c8bb7 100644
--- a/packages/SettingsLib/res/values-es/strings.xml
+++ b/packages/SettingsLib/res/values-es/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"Dirección IP y puerto"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Escanear código QR"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Vincula un dispositivo a través de Wi‑Fi con un código QR"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, depuración, desarrollo"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Atajo a informe de errores"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Mostrar un botón en el menú de encendido para crear un informe de errores"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"Debería durar aproximadamente hasta <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Duración aproximada hasta: <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"Hasta: <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"Prolongar la duración de la batería después de las <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"Tiempo restante: menos de <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Queda menos del <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Queda más del <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Altavoz del teléfono"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"No se ha podido conectar; reinicia el dispositivo"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Dispositivo de audio con cable"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-et/strings.xml b/packages/SettingsLib/res/values-et/strings.xml
index 70d6c10..fefa3a7 100644
--- a/packages/SettingsLib/res/values-et/strings.xml
+++ b/packages/SettingsLib/res/values-et/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP-aadress ja port"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"QR-koodi skannimine"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Siduge seade WiFi kaudu, skannides QR-koodi"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, silumine, arendus"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Veaaruande otsetee"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Kuva toitemenüüs veaaruande jäädvustamise nupp"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"Peaks kestma kuni <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Peaks kestma kuni <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"Kuni <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"Pikenda aku eluiga üle <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"Jäänud on alla <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Jäänud on alla <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Jäänud on üle <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Telefoni kõlar"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Probleem ühendamisel. Lülitage seade välja ja uuesti sisse"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Juhtmega heliseade"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-eu/strings.xml b/packages/SettingsLib/res/values-eu/strings.xml
index e76f8a3..f29b6e4 100644
--- a/packages/SettingsLib/res/values-eu/strings.xml
+++ b/packages/SettingsLib/res/values-eu/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP helbidea eta ataka"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Eskaneatu QR kodea"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Parekatu gailua wifi-sare baten bidez QR kode bat eskaneatuta"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, araztu, gailua"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Akatsen txostenerako lasterbidea"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Bateriaren menuan, erakutsi akatsen txostena sortzeko botoia"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"Ordu honetara arte iraungo du, gutxi gorabehera: <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Ordu honetara arte iraungo du, gutxi gorabehera: <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"<xliff:g id="TIME">%1$s</xliff:g> arte"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"Luzatu bateriaren iraupena <xliff:g id="TIME">%1$s</xliff:g> baino harago iraun dezan"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"<xliff:g id="THRESHOLD">%1$s</xliff:g> baino gutxiago gelditzen dira"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"<xliff:g id="THRESHOLD">%1$s</xliff:g> baino gutxiago gelditzen da (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> baino gehiago gelditzen da (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Telefonoaren bozgorailua"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Arazoren bat izan da konektatzean. Itzali gailua eta pitz ezazu berriro."</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Audio-gailu kableduna"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-fa/strings.xml b/packages/SettingsLib/res/values-fa/strings.xml
index c6fe4c0..cdd416d 100644
--- a/packages/SettingsLib/res/values-fa/strings.xml
+++ b/packages/SettingsLib/res/values-fa/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"نشانی IP و درگاه"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"اسکن کد QR"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"دستگاه را ازطریق Wi‑Fi و با اسکن کردن کد QR مرتبط کنید"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"ADB (پل اشکالزدایی Android)، اشکالزدایی کردن، برنامهنویس"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"میانبر گزارش مشکل"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"نمایش دکمهای در منوی روشن/خاموش برای گرفتن گزارش اشکال"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"باید حدوداً تا <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>) شارژ داشته باشید"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"باید حدوداً تا <xliff:g id="TIME">%1$s</xliff:g> شارژ داشته باشید"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"تا <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"افزایش عمر باتری پس از <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"کمتر از <xliff:g id="THRESHOLD">%1$s</xliff:g> باقی مانده"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"کمتر از <xliff:g id="THRESHOLD">%1$s</xliff:g> شارژ باقی مانده است (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"بیش از <xliff:g id="TIME_REMAINING">%1$s</xliff:g> شارژ باقی مانده است (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"بلندگوی تلفن"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"مشکل در اتصال. دستگاه را خاموش و دوباره روشن کنید"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"دستگاه صوتی سیمی"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-fi/strings.xml b/packages/SettingsLib/res/values-fi/strings.xml
index 82ae0f0..2bc53af 100644
--- a/packages/SettingsLib/res/values-fi/strings.xml
+++ b/packages/SettingsLib/res/values-fi/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP-osoite & portti"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Skannaa QR-koodi"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Muodosta laitepari Wi-Fi-yhteyden kautta skannaamalla QR-koodi"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, virheenkorjaus, kehittäminen"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Virheraportin pikakuvake"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Näytä virheraporttipainike virtavalikossa."</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"Varaus loppuu noin <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Varaus loppuu noin <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"<xliff:g id="TIME">%1$s</xliff:g> saakka"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"Paranna akunkestoa pidemmälle kuin klo <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"Alle <xliff:g id="THRESHOLD">%1$s</xliff:g> jäljellä"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Alle <xliff:g id="THRESHOLD">%1$s</xliff:g> jäljellä (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Yli <xliff:g id="TIME_REMAINING">%1$s</xliff:g> jäljellä (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Puhelimen kaiutin"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Yhteysvirhe. Sammuta laite ja käynnistä se uudelleen."</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Langallinen äänilaite"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-fr-rCA/strings.xml b/packages/SettingsLib/res/values-fr-rCA/strings.xml
index 6cfc5eb..330c180 100644
--- a/packages/SettingsLib/res/values-fr-rCA/strings.xml
+++ b/packages/SettingsLib/res/values-fr-rCA/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"Adresse IP et port"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Numériser le code QR"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Associer un appareil par Wi-Fi en numérisant un code QR"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, débogage, concepteur"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Raccourci de rapport de bogue"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Afficher un bouton permettant d\'établir un rapport de bogue dans le menu de démarrage"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"Devrait durer jusqu\'à environ <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Devrait durer jusqu\'à environ <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"Jusqu\'à <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"Prolonger l\'autonomie au-delà de <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"Il reste moins de <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Il reste moins de <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Il reste plus de <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Haut-parleur du téléphone"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Problème de connexion. Éteingez et rallumez l\'appareil"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Appareil audio à câble"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-fr/strings.xml b/packages/SettingsLib/res/values-fr/strings.xml
index 2a3bd81..2a28037 100644
--- a/packages/SettingsLib/res/values-fr/strings.xml
+++ b/packages/SettingsLib/res/values-fr/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"Adresse IP et port"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Scanner un code QR"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Associer l\'appareil via le Wi‑Fi à l\'aide d\'un code QR"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, débogage, dev"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Raccourci vers rapport de bug"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Afficher un bouton dans le menu de démarrage permettant de créer un rapport de bug"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"Devrait durer jusqu\'à environ <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Devrait durer jusqu\'à environ <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"Jusqu\'à <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"Prolonger l\'autonomie de la batterie au-delà de <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"Il reste moins de <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Il reste moins de <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Il reste plus de <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Haut-parleur du téléphone"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Problème de connexion. Éteignez l\'appareil, puis rallumez-le"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Appareil audio filaire"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-gl/strings.xml b/packages/SettingsLib/res/values-gl/strings.xml
index 1f0acf2..e33d951 100644
--- a/packages/SettingsLib/res/values-gl/strings.xml
+++ b/packages/SettingsLib/res/values-gl/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"Enderezo IP e porto"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Escanear o código QR"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Vincula o dispositivo a través da wifi escaneando un código QR"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, depuración, programador"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Atallo do informe de erros"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Mostra un botón no menú de acendido para crear un informe de erros"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"Debería durar aproximadamente ata a seguinte hora: <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Debería durar aproximadamente ata a seguinte hora: <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"Ata: <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"Amplía a duración da batería a partir desta hora: <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"Tempo restante inferior a <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Tempo restante: menos de <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Tempo restante: máis de <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Altofalante do teléfono"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Produciuse un problema coa conexión. Apaga e acende o dispositivo."</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Dispositivo de audio con cable"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-gu/strings.xml b/packages/SettingsLib/res/values-gu/strings.xml
index 387f326..156c0fc 100644
--- a/packages/SettingsLib/res/values-gu/strings.xml
+++ b/packages/SettingsLib/res/values-gu/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP ઍડ્રેસ & પોર્ટ"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"QR કોડ સ્કૅન કરો"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"QR કોડને સ્કૅન કરીને વાઇ-ફાઇ પર ડિવાઇસનું જોડાણ બનાવો"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, ડિબગ, ડેવ"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"બગ રિપોર્ટ શોર્ટકટ"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"બગ રિપોર્ટ લેવા માટે પાવર મેનૂમાં એક બટન બતાવો"</string>
@@ -416,8 +418,7 @@
<string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"પ્રોટેનોમલી (લાલ-લીલો)"</string>
<string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"ટ્રાઇટેનોમલી(વાદળી-પીળો)"</string>
<string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"રંગ સુધારણા"</string>
- <!-- no translation found for accessibility_display_daltonizer_preference_subtitle (1284746051652993443) -->
- <skip />
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="1284746051652993443">"રંગ સુધારણા તમને તમારા ડિવાઇસ પર રંગો કેવી રીતે બતાવવામાં આવે તેની ગોઠવણી કરવાની મંજૂરી આપે છે"</string>
<string name="daltonizer_type_overridden" msgid="4509604753672535721">"<xliff:g id="TITLE">%1$s</xliff:g> દ્વારા ઓવરરાઇડ થયું"</string>
<string name="power_remaining_settings_home_page" msgid="4885165789445462557">"<xliff:g id="PERCENTAGE">%1$s</xliff:g> - <xliff:g id="TIME_STRING">%2$s</xliff:g>"</string>
<string name="power_remaining_duration_only" msgid="8264199158671531431">"લગભગ <xliff:g id="TIME_REMAINING">%1$s</xliff:g> બાકી છે"</string>
@@ -431,7 +432,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"લગભગ <xliff:g id="TIME">%1$s</xliff:g> સુધી ચાલવી જોઈએ (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"લગભગ <xliff:g id="TIME">%1$s</xliff:g> સુધી ચાલવી જોઈએ"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"<xliff:g id="TIME">%1$s</xliff:g> સુધી"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"બૅટરીની આવરદા <xliff:g id="TIME">%1$s</xliff:g> થી વધારો"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"<xliff:g id="THRESHOLD">%1$s</xliff:g> કરતાં ઓછો સમય બાકી છે"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"<xliff:g id="THRESHOLD">%1$s</xliff:g> કરતાં ઓછો સમય બાકી છે (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> કરતાં વધુ સમય બાકી છે (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +511,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"ફોન સ્પીકર"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"કનેક્ટ કરવામાં સમસ્યા આવી રહી છે. ડિવાઇસને બંધ કરીને ફરી ચાલુ કરો"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"વાયરવાળો ઑડિયો ડિવાઇસ"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-hi/strings.xml b/packages/SettingsLib/res/values-hi/strings.xml
index 91e7c5d..fb2ed03 100644
--- a/packages/SettingsLib/res/values-hi/strings.xml
+++ b/packages/SettingsLib/res/values-hi/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"आईपी पता और पोर्ट"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"क्यूआर कोड स्कैन करें"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"क्यूआर कोड स्कैन करके, वाई-फ़ाई से डिवाइस को जोड़ें"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, debug, dev"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"गड़बड़ी की रिपोर्ट का शॉर्टकट"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"गड़बड़ी की रिपोर्ट लेने के लिए पावर मेन्यू में कोई बटन दिखाएं"</string>
@@ -255,8 +257,7 @@
<string name="bluetooth_show_devices_without_names" msgid="923584526471885819">"बिना नाम वाले ब्लूटूथ डिवाइस दिखाएं"</string>
<string name="bluetooth_disable_absolute_volume" msgid="1452342324349203434">"ब्लूटूथ से आवाज़ के नियंत्रण की सुविधा रोकें"</string>
<string name="bluetooth_enable_gabeldorsche" msgid="9131730396242883416">"Gabeldorsche चालू करें"</string>
- <!-- no translation found for enhanced_connectivity (7201127377781666804) -->
- <skip />
+ <string name="enhanced_connectivity" msgid="7201127377781666804">"कनेक्टिविटी बेहतर बनाएं"</string>
<string name="bluetooth_select_avrcp_version_string" msgid="1710571610177659127">"ब्लूटूथ एवीआरसीपी वर्शन"</string>
<string name="bluetooth_select_avrcp_version_dialog_title" msgid="7846922290083709633">"ब्लूटूथ AVRCP वर्शन चुनें"</string>
<string name="bluetooth_select_map_version_string" msgid="526308145174175327">"ब्लूटूथ का MAP वर्शन"</string>
@@ -310,8 +311,7 @@
<string name="bluetooth_show_devices_without_names_summary" msgid="780964354377854507">"बिना नाम वाले ब्लूटूथ डिवाइस (केवल MAC पते वाले) दिखाए जाएंगे"</string>
<string name="bluetooth_disable_absolute_volume_summary" msgid="2006309932135547681">"दूर के डिवाइस पर आवाज़ बहुत बढ़ जाने या उससे नियंत्रण हटने जैसी समस्याएं होने पर, यह ब्लूटूथ के ज़रिए आवाज़ के नियंत्रण की सुविधा रोक देता है."</string>
<string name="bluetooth_enable_gabeldorsche_summary" msgid="2054730331770712629">"ब्लूटूथ सेटिंग में Gabeldorsche सुविधा को चालू करता है."</string>
- <!-- no translation found for enhanced_connectivity_summary (1576414159820676330) -->
- <skip />
+ <string name="enhanced_connectivity_summary" msgid="1576414159820676330">"कनेक्टिविटी बेहतर बनाने की सुविधा को चालू करें"</string>
<string name="enable_terminal_title" msgid="3834790541986303654">"स्थानीय टर्मिनल"</string>
<string name="enable_terminal_summary" msgid="2481074834856064500">"लोकल शेल तक पहुंचने की सुविधा देने वाले टर्मिनल ऐप को चालू करें"</string>
<string name="hdcp_checking_title" msgid="3155692785074095986">"एचडीसीपी जाँच"</string>
@@ -433,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"बैटरी करीब <xliff:g id="TIME">%1$s</xliff:g> चलेगी (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"बैटरी करीब <xliff:g id="TIME">%1$s</xliff:g> चलेगी"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"<xliff:g id="TIME">%1$s</xliff:g> तक"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"बैटरी लाइफ़ <xliff:g id="TIME">%1$s</xliff:g> तक के लिए बढाएं"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"<xliff:g id="THRESHOLD">%1$s</xliff:g> से कम समय बचा है"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"<xliff:g id="THRESHOLD">%1$s</xliff:g> से कम बैटरी बची है (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> से ज़्यादा चलने लायक बैटरी बची है (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -511,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"फ़ोन का स्पीकर"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"कनेक्ट करने में समस्या हो रही है. डिवाइस को बंद करके चालू करें"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"वायर वाला ऑडियो डिवाइस"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-hr/strings.xml b/packages/SettingsLib/res/values-hr/strings.xml
index 7accd8a..4960735 100644
--- a/packages/SettingsLib/res/values-hr/strings.xml
+++ b/packages/SettingsLib/res/values-hr/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP adresa i priključak"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Skeniraj QR kôd"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Uparivanje uređaja putem Wi-Fija skeniranjem QR koda"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, otklanjanje pogrešaka, razvoj"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Prečac izvješća o pogreškama"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Prikaži gumb u izborniku napajanja za izradu izvješća o programskim pogreškama"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"Otprilike bi trebalo trajati do <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Otprilike bi trebalo trajati do <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"Do <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"Neka baterija potraje i nakon <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"Preostalo je manje od <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Preostalo je manje od <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Preostalo je više od <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -510,4 +513,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Zvučnik telefona"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Problem s povezivanjem. Isključite i ponovo uključite uređaj"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Žičani audiouređaj"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-hu/strings.xml b/packages/SettingsLib/res/values-hu/strings.xml
index 83d51eb..570b075 100644
--- a/packages/SettingsLib/res/values-hu/strings.xml
+++ b/packages/SettingsLib/res/values-hu/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP-cím és port"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"QR-kód beolvasása"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Párosítsa az eszközt Wi-Fi-n keresztül QR-kód beolvasásával"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, debug, dev"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Hibabejelentési gomb"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Gomb megjelenítése a bekapcsolási menüben hibajelentés készítéséhez"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"Nagyjából még ennyit bír: <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Nagyjából még ennyit bír: <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"Eddig: <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"Akkumulátor-üzemidő kiterjesztése <xliff:g id="TIME">%1$s</xliff:g> utánig"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"Kevesebb mint <xliff:g id="THRESHOLD">%1$s</xliff:g> van hátra"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Kevesebb mint <xliff:g id="THRESHOLD">%1$s</xliff:g> van hátra (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Kevesebb mint <xliff:g id="TIME_REMAINING">%1$s</xliff:g> van hátra (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Telefon hangszórója"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Sikertelen csatlakozás. Kapcsolja ki az eszközt, majd kapcsolja be újra."</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Vezetékes audioeszköz"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-hy/strings.xml b/packages/SettingsLib/res/values-hy/strings.xml
index 7da17f1..755a75f 100644
--- a/packages/SettingsLib/res/values-hy/strings.xml
+++ b/packages/SettingsLib/res/values-hy/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP հասցե և միացք"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"QR կոդի սկանավորում"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Զուգակցեք սարքը՝ Wi‑Fi-ի օգնությամբ սկանավորելով QR կոդը"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, վրիպազերծում, ծրագրավորող"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Սխալի հաղորդման դյուրանցում"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Գործարկման ցանկում ցույց տալ կոճակը՝ վրիպակների հաղորդման համար"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"Լիցքը (<xliff:g id="LEVEL">%2$s</xliff:g>) պետք է որ բավականացնի մինչև <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Լիցքը պետք է որ բավականացնի մինչև <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"Մինչև <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"Երկարացրեք մարտկոցի աշխատաժամանակը <xliff:g id="TIME">%1$s</xliff:g>-ից"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"Մնացել է <xliff:g id="THRESHOLD">%1$s</xliff:g>-ից պակաս"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Մնացել է <xliff:g id="THRESHOLD">%1$s</xliff:g>-ից պակաս (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Մնացել է ավելի քան <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Հեռախոսի բարձրախոս"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Կապի խնդիր կա: Սարքն անջատեք և նորից միացրեք:"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Լարով աուդիո սարք"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-in/strings.xml b/packages/SettingsLib/res/values-in/strings.xml
index 2e4ee801..7752f46 100644
--- a/packages/SettingsLib/res/values-in/strings.xml
+++ b/packages/SettingsLib/res/values-in/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"Alamat IP & Port"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Memindai kode QR"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Menyambungkan perangkat melalui Wi‑Fi dengan memindai Kode QR"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, debug, dev"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Pintasan laporan bug"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Tampilkan tombol di menu daya untuk mengambil laporan bug"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"Akan bertahan kira-kira sampai pukul <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Akan bertahan kira-kira sampai pukul <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"Hingga <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"Perpanjang masa pakai baterai hingga <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"Tersisa kurang dari <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Tersisa kurang dari <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Tersisa lebih dari <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Speaker ponsel"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Ada masalah saat menghubungkan. Nonaktifkan perangkat & aktifkan kembali"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Perangkat audio berkabel"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-is/strings.xml b/packages/SettingsLib/res/values-is/strings.xml
index 130ba6e..28cd4c2 100644
--- a/packages/SettingsLib/res/values-is/strings.xml
+++ b/packages/SettingsLib/res/values-is/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP-tala og gátt"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Skanna QR-kóða"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Tengja tæki með Wi-Fi með því að skanna QR-kóða"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, villuleit, dev"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Flýtileið í villutilkynningu"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Sýna hnapp til að skrá villutilkynningu í valmynd aflrofans"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"Ætti að endast til u.þ.b. <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Ætti að endast til u.þ.b. <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"Til klukkan <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"Láttu rafhlöðuna endast lengur en <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"Minna en <xliff:g id="THRESHOLD">%1$s</xliff:g> eftir"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Minna en <xliff:g id="THRESHOLD">%1$s</xliff:g> eftir (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Meira en <xliff:g id="TIME_REMAINING">%1$s</xliff:g> eftir (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Símahátalari"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Vandamál í tengingu. Slökktu og kveiktu á tækinu"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Snúrutengt hljómtæki"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-it/strings.xml b/packages/SettingsLib/res/values-it/strings.xml
index e51cceb..09282df 100644
--- a/packages/SettingsLib/res/values-it/strings.xml
+++ b/packages/SettingsLib/res/values-it/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"Indirizzo IP e porta"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Scansiona codice QR"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Accoppia il dispositivo tramite Wi-Fi eseguendo la scansione di un codice QR"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"ADB, debug, sviluppatori"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Scorciatoia segnalazione bug"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Mostra un pulsante per segnalare i bug nel menu di accensione"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"Tempo stimato rimanente: <xliff:g id="TIME">%1$s</xliff:g> circa (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Tempo stimato rimanente: <xliff:g id="TIME">%1$s</xliff:g> circa"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"Fino alle ore <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"Estendi la durata della batteria dopo <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"Tempo rimanente: meno di <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Tempo rimanente: meno di <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Tempo rimanente: più di <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Altoparlante telefono"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Problema di connessione. Spegni e riaccendi il dispositivo"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Dispositivo audio cablato"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-iw/strings.xml b/packages/SettingsLib/res/values-iw/strings.xml
index de32b79..3c7fb3d 100644
--- a/packages/SettingsLib/res/values-iw/strings.xml
+++ b/packages/SettingsLib/res/values-iw/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"יציאה וכתובת IP"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"סריקת קוד QR"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"יש לסרוק קוד QR כדי להתאים מכשיר באמצעות Wi‑Fi"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, ניפוי באגים, פיתוח"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"קיצור של דוח באגים"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"כדי ליצור דוח באגים, הצג לחצן בתפריט לניהול צריכת החשמל"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"אמורה להחזיק מעמד בערך עד <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"אמורה להחזיק מעמד בערך עד <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"עד <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"הארכת חיי הסוללה מעבר ל-<xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"נותרו פחות מ-<xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"נותרו פחות מ-<xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"נותרו יותר מ-<xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -511,4 +514,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"רמקול של טלפון"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"יש בעיה בחיבור. עליך לכבות את המכשיר ולהפעיל אותו מחדש"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"התקן אודיו חוטי"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-ja/strings.xml b/packages/SettingsLib/res/values-ja/strings.xml
index db362c9..5eccfd1 100644
--- a/packages/SettingsLib/res/values-ja/strings.xml
+++ b/packages/SettingsLib/res/values-ja/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP アドレスとポート"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"QR コードのスキャン"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"QR コードをスキャンして Wi-Fi 経由でデバイスをペア設定します"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, デバッグ, dev"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"バグレポートのショートカット"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"電源メニューにバグレポートを取得するボタンを表示する"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"電池切れの推定時刻: <xliff:g id="TIME">%1$s</xliff:g>(<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"電池切れの推定時刻: <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"<xliff:g id="TIME">%1$s</xliff:g> まで"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"<xliff:g id="TIME">%1$s</xliff:g>まで電池消費量を抑える"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"残り時間: <xliff:g id="THRESHOLD">%1$s</xliff:g>未満"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"残り時間: <xliff:g id="THRESHOLD">%1$s</xliff:g>未満(<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"残り時間: <xliff:g id="TIME_REMAINING">%1$s</xliff:g>以上(<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"スマートフォンのスピーカー"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"接続エラーです。デバイスを OFF にしてから ON に戻してください"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"有線オーディオ デバイス"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-ka/strings.xml b/packages/SettingsLib/res/values-ka/strings.xml
index 1bff192..ff7e59e 100644
--- a/packages/SettingsLib/res/values-ka/strings.xml
+++ b/packages/SettingsLib/res/values-ka/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP მისამართი და პორტი"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"QR კოდის სკანირება"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"მოწყობილობის დაწყვილება Wi-Fi-ის მეშვეობით QR კოდის სკანირებით"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, შეცდომების გამართვა, დეველოპერული"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"ხარვეზის შეტყობინების მალსახმობი"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"ელკვების პარამეტრებში ხარვეზის შეტყობინების ღილაკის ჩვენება"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"უნდა იმუშაოს დაახლოებით <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"უნდა იმუშაოს დაახლოებით <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"<xliff:g id="TIME">%1$s</xliff:g>-მდე"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"ბატარეის მუშაობის გახანგრძლივება <xliff:g id="TIME">%1$s</xliff:g>-ის შემდეგ"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"დარჩენილია <xliff:g id="THRESHOLD">%1$s</xliff:g>-ზე ნაკლები"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"დარჩენილია <xliff:g id="THRESHOLD">%1$s</xliff:g>-ზე ნაკლები დრო (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"დარჩენილია <xliff:g id="TIME_REMAINING">%1$s</xliff:g>-ზე მეტი დრო (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"ტელეფონის დინამიკი"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"დაკავშირებისას წარმოიქმნა პრობლემა. გამორთეთ და კვლავ ჩართეთ მოწყობილობა"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"სადენიანი აუდიო მოწყობილობა"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-kk/strings.xml b/packages/SettingsLib/res/values-kk/strings.xml
index fa3997c..bb99d3a 100644
--- a/packages/SettingsLib/res/values-kk/strings.xml
+++ b/packages/SettingsLib/res/values-kk/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP мекенжайы және порт"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"QR кодын сканерлеу"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"QR кодын сканерлеп, құрылғыны Wi‑Fi арқылы жұптау"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, түзету, әзірлеуші"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Қате туралы хабарлау"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Қуат мәзірінде қате туралы хабарлауға арналған түймені көрсету"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"Шамамен <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>) уақытқа жетеді"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Шамамен <xliff:g id="TIME">%1$s</xliff:g> уақытқа жетеді"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"<xliff:g id="TIME">%1$s</xliff:g> дейін"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"<xliff:g id="TIME">%1$s</xliff:g> кейін батарея жұмысының ұзақтығын арттыру"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"<xliff:g id="THRESHOLD">%1$s</xliff:g> шамасынан аз қалды"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"<xliff:g id="THRESHOLD">%1$s</xliff:g> шамасынан аз қалды (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> шамасынан көп уақыт қалды (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Телефон динамигі"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Байланыс орнату қатесі шығуып жатыр. Құрылғыны өшіріп, қайта қосыңыз."</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Сымды аудио құрылғысы"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-km/strings.xml b/packages/SettingsLib/res/values-km/strings.xml
index 79d4429..b9ede1d 100644
--- a/packages/SettingsLib/res/values-km/strings.xml
+++ b/packages/SettingsLib/res/values-km/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"អាសយដ្ឋាន IP និងច្រក"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"ស្កេនកូដ QR"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"ផ្គូផ្គងឧបករណ៍តាមរយៈ Wi‑Fi ដោយស្កេនកូដ QR"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, ជួសជុល, dev"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"ផ្លូវកាត់រាយការណ៍កំហុស"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"បង្ហាញប៊ូតុងក្នុងម៉ឺនុយប៊ូតុងថាមពលសម្រាប់ការទទួលយករបាយការណ៍កំហុស"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"គួរតែអាចប្រើបានរហូតដល់ម៉ោងប្រហែល <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"គួរតែអាចប្រើបានរហូតដល់ម៉ោងប្រហែល <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"រហូតដល់ម៉ោង <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"បង្កើនថាមពលថ្មរបស់អ្នកឱ្យប្រើបានលើសពីម៉ោង <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"នៅសល់តិចជាង <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"នៅសល់តិចជាង <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"នៅសល់ច្រើនជាង <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"ឧបករណ៍បំពងសំឡេងទូរសព្ទ"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"មានបញ្ហាក្នុងការភ្ជាប់។ បិទ រួចបើកឧបករណ៍វិញ"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"ឧបករណ៍សំឡេងប្រើខ្សែ"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-kn/strings.xml b/packages/SettingsLib/res/values-kn/strings.xml
index ac289c1..22c4950 100644
--- a/packages/SettingsLib/res/values-kn/strings.xml
+++ b/packages/SettingsLib/res/values-kn/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP ವಿಳಾಸ ಮತ್ತು ಪೋರ್ಟ್"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"QR ಕೋಡ್ ಸ್ಕ್ಯಾನ್ ಮಾಡಿ"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"QR ಕೋಡ್ ಅನ್ನು ಸ್ಕ್ಯಾನ್ ಮಾಡುವ ಮೂಲಕ ವೈ-ಫೈ ನೆಟ್ವರ್ಕ್ನಲ್ಲಿ ಸಾಧನವನ್ನು ಜೋಡಿಸಿ"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, ಡೀಬಗ್, dev"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"ದೋಷ ವರದಿಯ ಶಾರ್ಟ್ಕಟ್"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"ದೋಷ ವರದಿ ಮಾಡಲು ಪವರ್ ಮೆನುನಲ್ಲಿ ಬಟನ್ ತೋರಿಸು"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"<xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>) ಸಮಯದವರೆಗೆ ಫೋನ್ ರನ್ ಆಗಬೇಕು"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"<xliff:g id="TIME">%1$s</xliff:g> ಸಮಯದವರೆಗೆ ಫೋನ್ ರನ್ ಆಗಬೇಕು"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"<xliff:g id="TIME">%1$s</xliff:g> ರವರೆಗೆ"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"ಬ್ಯಾಟರಿ ಬಾಳಿಕೆಯನ್ನು <xliff:g id="TIME">%1$s</xliff:g> ಮೊದಲೇ ವಿಸ್ತರಿಸಿ"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"<xliff:g id="THRESHOLD">%1$s</xliff:g> ನಿಮಿಷಕ್ಕಿಂತ ಕಡಿಮೆ ಸಮಯ ಉಳಿದಿದೆ"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"<xliff:g id="THRESHOLD">%1$s</xliff:g> ಕ್ಕಿಂತ ಕಡಿಮೆ (<xliff:g id="LEVEL">%2$s</xliff:g>) ಬಾಕಿ"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> ಕ್ಕಿಂತ ಹೆಚ್ಚು (<xliff:g id="LEVEL">%2$s</xliff:g>) ಬಾಕಿ"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"ಫೋನ್ ಸ್ಪೀಕರ್"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"ಕನೆಕ್ಟ್ ಮಾಡುವಾಗ ಸಮಸ್ಯೆ ಎದುರಾಗಿದೆ ಸಾಧನವನ್ನು ಆಫ್ ಮಾಡಿ ಹಾಗೂ ನಂತರ ಪುನಃ ಆನ್ ಮಾಡಿ"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"ವೈರ್ ಹೊಂದಿರುವ ಆಡಿಯೋ ಸಾಧನ"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-ko/strings.xml b/packages/SettingsLib/res/values-ko/strings.xml
index 2cff293..e0874a3 100644
--- a/packages/SettingsLib/res/values-ko/strings.xml
+++ b/packages/SettingsLib/res/values-ko/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP 주소 및 포트"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"QR 코드 스캔"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"QR 코드를 스캔하여 Wi‑Fi를 통해 기기 페어링"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, 디버그, 개발자"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"버그 신고 바로가기"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"전원 메뉴에 버그 신고 버튼 표시"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"약 <xliff:g id="TIME">%1$s</xliff:g>까지 사용 가능(<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"약 <xliff:g id="TIME">%1$s</xliff:g>까지 사용 가능"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"<xliff:g id="TIME">%1$s</xliff:g>까지"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"<xliff:g id="TIME">%1$s</xliff:g> 이후 배터리 수명 연장"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"<xliff:g id="THRESHOLD">%1$s</xliff:g> 미만 남음"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"<xliff:g id="THRESHOLD">%1$s</xliff:g> 미만 남음(<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> 이상 남음(<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"휴대전화 스피커"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"연결 중에 문제가 발생했습니다. 기기를 껐다가 다시 켜 보세요."</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"유선 오디오 기기"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-ky/strings.xml b/packages/SettingsLib/res/values-ky/strings.xml
index bc6c395..6e28f0b 100644
--- a/packages/SettingsLib/res/values-ky/strings.xml
+++ b/packages/SettingsLib/res/values-ky/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP дареги жана Оюкча"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"QR кодун скандоо"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"QR кодун скандап, түзмөктү Wi‑Fi аркылуу жупташтырыңыз"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, мүчүлүштүктөрдү оңдоо, иштеп чыгуу"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Ката жөнүндө кабарлоо"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Менюда ката жөнүндө кабарлоо баскычы көрүнүп турат"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"Болжол менен <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>) кийин өчөт"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Болжол менен <xliff:g id="TIME">%1$s</xliff:g> кийин өчөт"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"<xliff:g id="TIME">%1$s</xliff:g> чейин"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"Батареянын кубатынын мөөнөтүн узартуудан <xliff:g id="TIME">%1$s</xliff:g> өттү"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"<xliff:g id="THRESHOLD">%1$s</xliff:g> жетпеген убакыт калды"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"<xliff:g id="THRESHOLD">%1$s</xliff:g> жетпеген убакыт калды (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> ашыгыраак убакыт калды (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Телефондун динамиги"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Туташууда маселе келип чыкты. Түзмөктү өчүрүп, кайра күйгүзүп көрүңүз"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Зымдуу аудио түзмөк"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-lo/strings.xml b/packages/SettingsLib/res/values-lo/strings.xml
index 16a641b..f4077a1 100644
--- a/packages/SettingsLib/res/values-lo/strings.xml
+++ b/packages/SettingsLib/res/values-lo/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"ທີ່ຢູ່ IP ແລະ ຜອດ"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"ສະແກນລະຫັດ QR"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"ຈັບຄູ່ອຸປະກອນຜ່ານ Wi‑Fi ໂດຍການສະແກນລະຫັດ QR"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, debug, dev"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"ທາງລັດລາຍງານຂໍ້ຜິດພາດ"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"ສະແດງປຸ່ມໃນເມນູປິດເປີດເພື່ອບັນທຶກການລາຍງານຂໍ້ຜິດພາດ"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"ໜ້າຈະໃຊ້ໄດ້ຈົນຮອດປະມານ <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"ໜ້າຈະໃຊ້ໄດ້ຈົນຮອດປະມານ <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"ຈົນກວ່າຈະຮອດ <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"ຂະຫຍາຍອາຍຸແບັດເຕີຣີກາຍ <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"ຍັງເຫຼືອໜ້ອຍກວ່າ <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"ຍັງເຫຼືອໜ້ອຍກວ່າ <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"ຍັງເຫຼືອຫຼາຍກວ່າ <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"ລຳໂພງໂທລະສັບ"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"ເກີດບັນຫາໃນການເຊື່ອມຕໍ່. ປິດອຸປະກອນແລ້ວເປີດກັບຄືນມາໃໝ່"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"ອຸປະກອນສຽງແບບມີສາຍ"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-lt/strings.xml b/packages/SettingsLib/res/values-lt/strings.xml
index 828a2f3..1cb60a2 100644
--- a/packages/SettingsLib/res/values-lt/strings.xml
+++ b/packages/SettingsLib/res/values-lt/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP adresas ir prievadas"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"QR kodo nuskaitymas"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Susiekite įrenginį „Wi‑Fi“ ryšiu nuskaitydami QR kodą"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"ADB, derinti, kūrėjas"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Pranešimo apie riktą spartusis klavišas"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Rodyti pranešimo apie riktą mygtuką maitinimo meniu"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"Turėtų išsikrauti maždaug po <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Turėtų išsikrauti maždaug po <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"Iki <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"Pailginti akumuliatoriaus veikimo laiką po <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"Liko mažiau nei <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Liko mažiau nei <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Liko daugiau nei <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -511,4 +514,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Telefono garsiakalbis"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Prisijungiant kilo problema. Išjunkite įrenginį ir vėl jį įjunkite"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Laidinis garso įrenginys"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-lv/strings.xml b/packages/SettingsLib/res/values-lv/strings.xml
index f837e66..2ae3d6d 100644
--- a/packages/SettingsLib/res/values-lv/strings.xml
+++ b/packages/SettingsLib/res/values-lv/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP adrese un ports"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"QR koda skenēšana"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Izveidojiet savienojumu pārī ar ierīci Wi‑Fi tīklā, skenējot QR kodu."</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, atkļūdošana, izstrādātājiem"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Kļūdu pārskata saīsne"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Izslēgšanas izvēlnē rādīt kļūdu pārskata veidošanas pogu"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"Darbosies aptuveni līdz <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Darbosies aptuveni līdz <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"Līdz <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"Palielināt akumulatora darbības ilgumu, lai ierīce turpinātu darboties pēc <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"Atlikušais laiks — mazāk nekā <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Atlicis mazāk nekā <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Atlicis vairāk nekā <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -510,4 +513,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Tālruņa skaļrunis"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Radās problēma ar savienojuma izveidi. Izslēdziet un atkal ieslēdziet ierīci."</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Vadu audioierīce"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-mk/strings.xml b/packages/SettingsLib/res/values-mk/strings.xml
index 99255c4..439cc11 100644
--- a/packages/SettingsLib/res/values-mk/strings.xml
+++ b/packages/SettingsLib/res/values-mk/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP-адреса и порта"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Скенирајте QR-код"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Спарете го уредот преку Wi‑Fi со скенирање QR-код"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, отстранува грешка, програмер"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Кратенка за извештај за грешка"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Прикажи копче во менито за вклучување за да се направи извештај за грешка"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"Треба да трае до околу <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Треба да трае до околу <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"До <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"Продолжи го траењето на батеријата после <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"Уште помалку од <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Уште помалку од <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Уште повеќе од <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Телефонски звучник"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Проблем со поврзување. Исклучете го уредот и повторно вклучете го"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Жичен аудиоуред"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-ml/strings.xml b/packages/SettingsLib/res/values-ml/strings.xml
index f751510..9ac1f8d 100644
--- a/packages/SettingsLib/res/values-ml/strings.xml
+++ b/packages/SettingsLib/res/values-ml/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP വിലാസവും പോർട്ടും"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"QR കോഡ് സ്കാൻ ചെയ്യുക"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"QR കോഡ് സ്കാൻ ചെയ്ത് വൈഫൈയിലൂടെ ഉപകരണം ജോടിയാക്കുക"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, debug, dev"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"ബഗ് റിപ്പോർട്ട് കുറുക്കുവഴി"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"ബഗ് റിപ്പോർട്ട് എടുക്കുന്നതിന് പവർ മെനുവിൽ ഒരു ബട്ടൺ കാണിക്കുക"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"ഏകദേശം <xliff:g id="TIME">%1$s</xliff:g> വരെ നീണ്ടുനിൽക്കേണ്ടതാണ് (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"ഏകദേശം <xliff:g id="TIME">%1$s</xliff:g> വരെ നീണ്ടുനിൽക്കേണ്ടതാണ്"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"<xliff:g id="TIME">%1$s</xliff:g> വരെ"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"ബാറ്ററി ലൈഫ് <xliff:g id="TIME">%1$s</xliff:g>-ൽ കൂടുതൽ വർദ്ധിപ്പിക്കുക"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"<xliff:g id="THRESHOLD">%1$s</xliff:g>-ൽ കുറവ് സമയം ശേഷിക്കുന്നു"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"<xliff:g id="THRESHOLD">%1$s</xliff:g>-ൽ കുറവ് സമയം ശേഷിക്കുന്നു (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g>-ൽ കൂടുതൽ സമയം ശേഷിക്കുന്നു (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"ഫോൺ സ്പീക്കർ"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"കണക്റ്റ് ചെയ്യുന്നതിൽ പ്രശ്നമുണ്ടായി. ഉപകരണം ഓഫാക്കി വീണ്ടും ഓണാക്കുക"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"വയർ മുഖേന ബന്ധിപ്പിച്ച ഓഡിയോ ഉപകരണം"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-mn/strings.xml b/packages/SettingsLib/res/values-mn/strings.xml
index 3905817..428d22c 100644
--- a/packages/SettingsLib/res/values-mn/strings.xml
+++ b/packages/SettingsLib/res/values-mn/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP хаяг ба порт"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Хурдан хариу үйлдлийн кодыг скан хийх"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Хурдан хариу үйлдлийн кодыг скан хийж Wi-Fi-р төхөөрөмжийг хослуулна уу"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, дебаг хийх, dev"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Алдаа мэдээлэх товчлол"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Цэсэнд алдааны мэдэгдэл авахад зориулсан товчийг харуулах"</string>
@@ -416,8 +418,7 @@
<string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"Протаномаль (улаан-ногоон)"</string>
<string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"Тританомаль (цэнхэр-шар)"</string>
<string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"Өнгө тохируулах"</string>
- <!-- no translation found for accessibility_display_daltonizer_preference_subtitle (1284746051652993443) -->
- <skip />
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="1284746051652993443">"Өнгө залруулга нь төхөөрөмж дээрээ өнгийг хэрхэн үзүүлэхийг тохируулах боломжийг танд олгодог"</string>
<string name="daltonizer_type_overridden" msgid="4509604753672535721">"Давхарласан <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="power_remaining_settings_home_page" msgid="4885165789445462557">"<xliff:g id="PERCENTAGE">%1$s</xliff:g> - <xliff:g id="TIME_STRING">%2$s</xliff:g>"</string>
<string name="power_remaining_duration_only" msgid="8264199158671531431">"Ойролцоогоор <xliff:g id="TIME_REMAINING">%1$s</xliff:g> үлдсэн"</string>
@@ -431,7 +432,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"Ойролцоогоор <xliff:g id="TIME">%1$s</xliff:g> хүртэл барих ёстой (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Ойролцоогоор <xliff:g id="TIME">%1$s</xliff:g> хүртэл барих ёстой"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"<xliff:g id="TIME">%1$s</xliff:g> хүртэл"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"<xliff:g id="TIME">%1$s</xliff:g>-с хойш батарейн ажиллах хугацааг сунгах"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"<xliff:g id="THRESHOLD">%1$s</xliff:g>-с бага хугацаа үлдсэн"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"<xliff:g id="THRESHOLD">%1$s</xliff:g>-с бага хугацаа үлдсэн (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g>-с их хугацаа үлдсэн (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +511,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Утасны чанга яригч"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Холбогдоход асуудал гарлаа. Төхөөрөмжийг унтраагаад дахин асаана уу"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Утастай аудио төхөөрөмж"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-mr/strings.xml b/packages/SettingsLib/res/values-mr/strings.xml
index 60b728b..377fa89 100644
--- a/packages/SettingsLib/res/values-mr/strings.xml
+++ b/packages/SettingsLib/res/values-mr/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"आयपी अॅड्रेस आणि पोर्ट"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"QR कोड स्कॅन करा"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"QR कोड स्कॅन करून वाय-फाय वापरून डिव्हाइस पेअर करा"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"ADB, डीबग, डेव्हलपर"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"बग रिपोर्ट शॉर्टकट"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"बग रिपोर्ट घेण्यासाठी पॉवर मेनूमध्ये एक बटण दर्शवा"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"सुमारे <xliff:g id="TIME">%1$s</xliff:g> पर्यंत टिकेल (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"सुमारे <xliff:g id="TIME">%1$s</xliff:g> पर्यंत टिकावी"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"<xliff:g id="TIME">%1$s</xliff:g> पर्यंत"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"<xliff:g id="TIME">%1$s</xliff:g> नंतर वाढलेले बॅटरी लाइफ"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"<xliff:g id="THRESHOLD">%1$s</xliff:g> पेक्षा कमी शिल्लक आहे"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"<xliff:g id="THRESHOLD">%1$s</xliff:g> पेक्षा कमी वेळ शिल्लक आहे (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> पेक्षा जास्त वेळ शिल्लक आहे (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"फोनचा स्पीकर"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"कनेक्ट करण्यात समस्या आली. डिव्हाइस बंद करा आणि नंतर सुरू करा"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"वायर असलेले ऑडिओ डिव्हाइस"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-ms/strings.xml b/packages/SettingsLib/res/values-ms/strings.xml
index 895413d..b8e608f 100644
--- a/packages/SettingsLib/res/values-ms/strings.xml
+++ b/packages/SettingsLib/res/values-ms/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"Alamat IP & Port"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Imbas kod QR"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Gandingkan peranti melalui Wi-Fi dengan mengimbas Kod QR"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, debug, dev"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Pintasan laporan pepijat"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Tunjukkan butang dalam menu kuasa untuk mengambil laporan pepijat"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"Seharusnya boleh digunakan hingga kira-kira <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Seharusnya boleh digunakan hingga kira-kira <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"Hingga <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"Lanjutkan hayat bateri melepasi <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"Tinggal kurang daripada <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Kurang daripada <xliff:g id="THRESHOLD">%1$s</xliff:g> lagi (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Lebih daripada <xliff:g id="TIME_REMAINING">%1$s</xliff:g> lagi (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Pembesar suara telefon"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Masalah penyambungan. Matikan & hidupkan kembali peranti"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Peranti audio berwayar"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-my/strings.xml b/packages/SettingsLib/res/values-my/strings.xml
index 28a5897..75c4aa1 100644
--- a/packages/SettingsLib/res/values-my/strings.xml
+++ b/packages/SettingsLib/res/values-my/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"အိုင်ပီ (IP) လိပ်စာနှင့် ပို့တ်"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"QR ကုဒ်ကို စကင်ဖတ်ပါ"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"QR ကုဒ် စကင်ဖတ်ခြင်းဖြင့် Wi-Fi ပေါ်တွင် စက်ပစ္စည်းကို အတူတွဲပါ"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, debug, dev"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"ချွတ်ယွင်းမှု အစီရင်ခံရန် ဖြတ်လမ်း"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"ချွတ်ယွင်းမှု အစီရင်ခံစာကို တင်ရန် ပါဝါမီနူးမှ ခလုတ်ကို ပြပါ"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"<xliff:g id="TIME">%1$s</xliff:g> ခန့်အထိ သုံးနိုင်သည် (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"<xliff:g id="TIME">%1$s</xliff:g> ခန့်အထိ သုံးနိုင်သည်"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"<xliff:g id="TIME">%1$s</xliff:g> အထိ"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"ဘက်ထရီသက်တမ်း <xliff:g id="TIME">%1$s</xliff:g> ကျော်အထိ တိုးမြှင့်လိုက်ပါ"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"<xliff:g id="THRESHOLD">%1$s</xliff:g> ခန့်သာ ကျန်တော့သည်"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"<xliff:g id="THRESHOLD">%1$s</xliff:g> အောက်သာ ကျန်သည် (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> ကျော် ကျန်သည် (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"ဖုန်းစပီကာ"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"ချိတ်ဆက်ရာတွင် ပြဿနာရှိပါသည်။ စက်ကိုပိတ်ပြီး ပြန်ဖွင့်ပါ"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"ကြိုးတပ် အသံစက်ပစ္စည်း"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-nb/strings.xml b/packages/SettingsLib/res/values-nb/strings.xml
index 3af5305..82b3270 100644
--- a/packages/SettingsLib/res/values-nb/strings.xml
+++ b/packages/SettingsLib/res/values-nb/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP-adresse og port"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Skann QR-koden"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Koble til enheten via Wi-Fi ved å skanne en QR-kode"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, feilsøking, utvikler"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Snarvei til feilrapport"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Vis en knapp for generering av feilrapport i batterimenyen"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"Skal vare til omtrent <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Skal vare til omtrent <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"Til <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"Forleng batterilevetiden til etter <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"Mindre enn <xliff:g id="THRESHOLD">%1$s</xliff:g> gjenstår"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Mindre enn <xliff:g id="THRESHOLD">%1$s</xliff:g> gjenstår (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Mer enn <xliff:g id="TIME_REMAINING">%1$s</xliff:g> gjenstår (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Telefonhøyttaler"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Tilkoblingsproblemer. Slå enheten av og på igjen"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Lydenhet med kabel"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-ne/strings.xml b/packages/SettingsLib/res/values-ne/strings.xml
index c8ae00f..c694db9 100644
--- a/packages/SettingsLib/res/values-ne/strings.xml
+++ b/packages/SettingsLib/res/values-ne/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP ठेगाना र पोर्ट"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"QR कोड स्क्यान गर्नुहोस्"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"QR कोड स्क्यान गरेर Wi‑Fi प्रयोग गरी यन्त्रको जोडा बनाउनुहोस्"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, debug, dev"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"बग प्रतिवेदन सर्टकट"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"बग रिपोर्ट लिनका लागि पावर मेनुमा बटन देखाउनुहोस्"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"ब्याट्री लगभग <xliff:g id="TIME">%1$s</xliff:g> सम्म टिक्नु पर्छ (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"लगभग <xliff:g id="TIME">%1$s</xliff:g> सम्म टिक्नु पर्छ"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"<xliff:g id="TIME">%1$s</xliff:g> सम्म"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"ब्याट्रीको आयु <xliff:g id="TIME">%1$s</xliff:g> पछिसम्म विस्तार गरियो"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"<xliff:g id="THRESHOLD">%1$s</xliff:g> भन्दा कम समय बाँकी छ"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"<xliff:g id="THRESHOLD">%1$s</xliff:g> भन्दा कम समय बाँकी (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> भन्दा बढी समय बाँकी (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"फोनको स्पिकर"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"जोड्ने क्रममा समस्या भयो। यन्त्रलाई निष्क्रिय पारेर फेरि सक्रिय गर्नुहोस्"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"तारयुक्त अडियो यन्त्र"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-nl/strings.xml b/packages/SettingsLib/res/values-nl/strings.xml
index dffb209..30e1c13 100644
--- a/packages/SettingsLib/res/values-nl/strings.xml
+++ b/packages/SettingsLib/res/values-nl/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP-adres en poort"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"QR-code scannen"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Apparaat koppelen via wifi door een QR-code te scannen"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, foutopsporing, ontwikkeling"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Snelle link naar bugrapport"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Een knop in het voedingsmenu weergeven om een bugrapport te maken"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"Is nog genoeg tot ongeveer <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Is nog genoeg tot ongeveer <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"Tot <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"Batterijduur verlengen tot na <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"Nog minder dan <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Nog minder dan <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Nog meer dan <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Telefoonspeaker"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Probleem bij verbinding maken. Schakel het apparaat uit en weer in."</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Bedraad audioapparaat"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-or/strings.xml b/packages/SettingsLib/res/values-or/strings.xml
index 0fac20b..9179125 100644
--- a/packages/SettingsLib/res/values-or/strings.xml
+++ b/packages/SettingsLib/res/values-or/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP ଠିକଣା ଓ ପୋର୍ଟ"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"QR କୋଡ୍ ସ୍କାନ୍ କରନ୍ତୁ"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"ଏକ QR କୋଡ୍ ସ୍କାନ୍ କରି ୱାଇ-ଫାଇରେ ଡିଭାଇସ୍ ପେୟାର୍ କରନ୍ତୁ"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, ଡିବଗ୍, dev"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"ବଗ୍ ରିପୋର୍ଟ ସର୍ଟକଟ୍"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"ବଗ୍ ରିପୋର୍ଟ ଦେବାପାଇଁ ପାୱାର୍ ମେନୁରେ ଏକ ବଟନ୍ ଦେଖନ୍ତୁ"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"ବ୍ୟାଟେରୀ ପାଖାପାଖି <xliff:g id="TIME">%1$s</xliff:g> ଚାଲିବ (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"ବ୍ୟାଟେରୀ <xliff:g id="TIME">%1$s</xliff:g> ପର୍ଯ୍ୟନ୍ତ ଚାଲିବ"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"<xliff:g id="TIME">%1$s</xliff:g> ପର୍ଯ୍ୟନ୍ତ"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"ବ୍ୟାଟେରୀ ଲାଇଫ୍କୁ <xliff:g id="TIME">%1$s</xliff:g>ରୁ ଅଧିକ କରନ୍ତୁ"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"<xliff:g id="THRESHOLD">%1$s</xliff:g>ରୁ କମ୍ ସମୟ ବଳକା ଅଛି"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"<xliff:g id="THRESHOLD">%1$s</xliff:g> ରୁ କମ୍ ସମୟ ବଳକା ଅଛି (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g>ରୁ ଅଧିକ ସମୟ ବଳକା ଅଛି(<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"ଫୋନ୍ ସ୍ପିକର୍"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"ସଂଯୋଗ କରିବାରେ ସମସ୍ୟା ହେଉଛି। ଡିଭାଇସ୍ ବନ୍ଦ କରି ପୁଣି ଚାଲୁ କରନ୍ତୁ"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"ତାରଯୁକ୍ତ ଅଡିଓ ଡିଭାଇସ୍"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-pa/strings.xml b/packages/SettingsLib/res/values-pa/strings.xml
index 0c899d0..34a836f 100644
--- a/packages/SettingsLib/res/values-pa/strings.xml
+++ b/packages/SettingsLib/res/values-pa/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP ਪਤਾ & ਪੋਰਟ"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"QR ਕੋਡ ਸਕੈਨ ਕਰੋ"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"QR ਕੋਡ ਸਕੈਨ ਕਰਕੇ ਵਾਈ-ਫਾਈ \'ਤੇ ਡੀਵਾਈਸ ਜੋੜਾਬੱਧ ਕਰੋ"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, ਡੀਬੱਗ, dev"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"ਬੱਗ ਰਿਪੋਰਟ ਸ਼ਾਰਟਕੱਟ"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"ਇੱਕ ਬੱਗ ਰਿਪੋਰਟ ਲੈਣ ਲਈ ਪਾਵਰ ਮੀਨੂ ਵਿੱਚ ਇੱਕ ਬਟਨ ਦਿਖਾਓ"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"ਲਗਭਗ <xliff:g id="TIME">%1$s</xliff:g> ਚੱਲੇਗਾ (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"ਲਗਭਗ <xliff:g id="TIME">%1$s</xliff:g> ਤੱਕ ਚੱਲੇਗੀ"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"<xliff:g id="TIME">%1$s</xliff:g> ਤੱਕ"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"ਬੈਟਰੀ ਲਾਈਫ਼ <xliff:g id="TIME">%1$s</xliff:g> ਤੋਂ ਬਾਅਦ ਤੱਕ ਵਧਾਓ"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"<xliff:g id="THRESHOLD">%1$s</xliff:g> ਤੋਂ ਘੱਟ ਸਮਾਂ ਬਾਕੀ"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"<xliff:g id="THRESHOLD">%1$s</xliff:g> ਤੋਂ ਘੱਟ ਸਮਾਂ ਬਾਕੀ (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> ਤੋਂ ਵੱਧ ਸਮਾਂ ਬਾਕੀ (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"ਫ਼ੋਨ ਦਾ ਸਪੀਕਰ"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"ਕਨੈਕਟ ਕਰਨ ਵਿੱਚ ਸਮੱਸਿਆ ਆਈ। ਡੀਵਾਈਸ ਨੂੰ ਬੰਦ ਕਰਕੇ ਵਾਪਸ ਚਾਲੂ ਕਰੋ"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"ਤਾਰ ਵਾਲਾ ਆਡੀਓ ਡੀਵਾਈਸ"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-pl/strings.xml b/packages/SettingsLib/res/values-pl/strings.xml
index f701341..193b307 100644
--- a/packages/SettingsLib/res/values-pl/strings.xml
+++ b/packages/SettingsLib/res/values-pl/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"Adres IP i port"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Zeskanuj kod QR"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Sparuj urządzenia przez Wi-Fi, skanując kod QR"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, debug, dev"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Skrót do zgłoszenia błędu"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Pokaż w menu zasilania przycisk zgłaszania błędu"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"Powinno wystarczyć do <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Powinno wystarczyć do <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"Do <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"Wydłuż czas pracy na baterii ponad <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"Pozostało mniej niż <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Pozostało mniej niż <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Pozostało ponad: <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -511,4 +514,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Głośnik telefonu"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Problem z połączeniem. Wyłącz i ponownie włącz urządzenie"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Przewodowe urządzenie audio"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-pt-rBR/strings.xml b/packages/SettingsLib/res/values-pt-rBR/strings.xml
index 003356c..a083a03 100644
--- a/packages/SettingsLib/res/values-pt-rBR/strings.xml
+++ b/packages/SettingsLib/res/values-pt-rBR/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"Endereço IP e porta"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Ler código QR"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Parear dispositivo na rede Wi‑Fi fazendo a leitura do código QR"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, debug, dev"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Atalho para relatório de bugs"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Mostrar um botão para gerar relatórios de bugs no menu do botão liga/desliga"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"Deve durar até cerca de <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Deve durar até cerca de <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"Até <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"Estender duração da bateria depois de <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"Menos de <xliff:g id="THRESHOLD">%1$s</xliff:g> restante(s)"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Menos de <xliff:g id="THRESHOLD">%1$s</xliff:g> restante(s) (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Mais de <xliff:g id="TIME_REMAINING">%1$s</xliff:g> restante(s) (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Alto-falante do smartphone"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Ocorreu um problema na conexão. Desligue o dispositivo e ligue-o novamente"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Dispositivo de áudio com fio"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-pt-rPT/strings.xml b/packages/SettingsLib/res/values-pt-rPT/strings.xml
index 989ddde..7dd4dfb 100644
--- a/packages/SettingsLib/res/values-pt-rPT/strings.xml
+++ b/packages/SettingsLib/res/values-pt-rPT/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"Porta e endereço IP"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Leia o código QR"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Sincronize o dispositivo através de Wi-Fi ao ler um código QR."</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, depurar, programador"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Atalho para relatório de erro"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Mostrar um botão no menu ligar/desligar para criar um relatório de erro"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"Deve durar até cerca da(s) <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Deve durar até cerca da(s) <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"Até à(s) <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"Prolongar a autonomia da bateria após <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"Resta(m) menos de <xliff:g id="THRESHOLD">%1$s</xliff:g>."</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Resta(m) menos de <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)."</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Resta(m) mais de <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)."</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Altifalante do telemóvel"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Problema ao ligar. Desligue e volte a ligar o dispositivo."</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Dispositivo de áudio com fios"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-pt/strings.xml b/packages/SettingsLib/res/values-pt/strings.xml
index 003356c..a083a03 100644
--- a/packages/SettingsLib/res/values-pt/strings.xml
+++ b/packages/SettingsLib/res/values-pt/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"Endereço IP e porta"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Ler código QR"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Parear dispositivo na rede Wi‑Fi fazendo a leitura do código QR"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, debug, dev"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Atalho para relatório de bugs"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Mostrar um botão para gerar relatórios de bugs no menu do botão liga/desliga"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"Deve durar até cerca de <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Deve durar até cerca de <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"Até <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"Estender duração da bateria depois de <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"Menos de <xliff:g id="THRESHOLD">%1$s</xliff:g> restante(s)"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Menos de <xliff:g id="THRESHOLD">%1$s</xliff:g> restante(s) (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Mais de <xliff:g id="TIME_REMAINING">%1$s</xliff:g> restante(s) (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Alto-falante do smartphone"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Ocorreu um problema na conexão. Desligue o dispositivo e ligue-o novamente"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Dispositivo de áudio com fio"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-ro/strings.xml b/packages/SettingsLib/res/values-ro/strings.xml
index 75fb590..1d68fb7 100644
--- a/packages/SettingsLib/res/values-ro/strings.xml
+++ b/packages/SettingsLib/res/values-ro/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"Adresa IP și portul"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Scanați codul QR"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Asociați dispozitivul prin Wi-Fi scanând un cod QR"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, remedierea erorilor, dev"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Comandă rapidă pentru raportul de erori"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Afișați un buton în meniul de pornire pentru a realiza un raport de erori"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"Ar trebui să reziste până la <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Ar trebui să reziste până la <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"Până la <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"Extindeți autonomia bateriei după <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"a mai rămas mai puțin de <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"A mai rămas mai puțin de <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"A mai rămas mai mult de <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -510,4 +513,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Difuzorul telefonului"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Problemă la conectare. Opriți și reporniți dispozitivul."</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Dispozitiv audio cu fir"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-ru/strings.xml b/packages/SettingsLib/res/values-ru/strings.xml
index 3be2d33..6857dd7 100644
--- a/packages/SettingsLib/res/values-ru/strings.xml
+++ b/packages/SettingsLib/res/values-ru/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP-адрес и порт"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Сканировать QR-код"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Подключение устройства через Wi‑Fi с использованием QR-кода"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, отладка, разработчик"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Отчет об ошибке"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Показывать в меню кнопки питания пункт для отправки отчета об ошибке"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"Заряда (<xliff:g id="LEVEL">%2$s</xliff:g>) хватит примерно до <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Заряда хватит примерно до <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"До <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"Продлите время работы от батареи <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"Осталось менее <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Уровень заряда батареи: <xliff:g id="LEVEL">%2$s</xliff:g> (хватит менее чем на <xliff:g id="THRESHOLD">%1$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Уровень заряда батареи: <xliff:g id="LEVEL">%2$s</xliff:g> (хватит более чем на <xliff:g id="TIME_REMAINING">%1$s</xliff:g>)"</string>
@@ -511,4 +514,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Встроенный динамик"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Ошибка подключения. Выключите и снова включите устройство."</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Проводное аудиоустройство"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-si/strings.xml b/packages/SettingsLib/res/values-si/strings.xml
index faeb9a4e..2c732ed 100644
--- a/packages/SettingsLib/res/values-si/strings.xml
+++ b/packages/SettingsLib/res/values-si/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP ලිපිනය & තොට"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"QR කේතය ස්කෑන් කරන්න"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"QR කේතය ස්කෑන් කිරීමෙන් Wi‑Fi හරහා උපාංගය යුගල කරන්න"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, දෝෂාවෙක්ෂණ, dev"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"දෝෂය වාර්තා කිරීමේ කෙටිමඟ"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"දෝෂ වාර්තාවක් ගැනීම සඳහා බල මෙනුව තුළ බොත්තම පෙන්වන"</string>
@@ -416,8 +418,7 @@
<string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"වර්ණ දුර්වලතාවය (රතු-කොළ)"</string>
<string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"වර්ණ අන්ධතාවය (නිල්-කහ)"</string>
<string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"වර්ණ නිවැරදි කිරීම"</string>
- <!-- no translation found for accessibility_display_daltonizer_preference_subtitle (1284746051652993443) -->
- <skip />
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="1284746051652993443">"වර්ණ නිවැරදි කිරීම ඔබට ඔබේ උපාංගයෙහි වර්ණ සංදර්ශනය වන ආකාරය සීරුමාරු කිරීමට ඉඩ දේ"</string>
<string name="daltonizer_type_overridden" msgid="4509604753672535721">"<xliff:g id="TITLE">%1$s</xliff:g> මගින් ඉක්මවන ලදී"</string>
<string name="power_remaining_settings_home_page" msgid="4885165789445462557">"<xliff:g id="PERCENTAGE">%1$s</xliff:g> - <xliff:g id="TIME_STRING">%2$s</xliff:g>"</string>
<string name="power_remaining_duration_only" msgid="8264199158671531431">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> ක් පමණ ඉතිරියි"</string>
@@ -431,7 +432,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"<xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>) පමණ වන තෙක් තිබිය යුතුය"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"<xliff:g id="TIME">%1$s</xliff:g> පමණ වන තෙක් තිබිය යුතුය"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"<xliff:g id="TIME">%1$s</xliff:g> දක්වා"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"බැටරි ආයු කාලය <xliff:g id="TIME">%1$s</xliff:g> ට වඩා දීර්ඝ කරන්න"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"<xliff:g id="THRESHOLD">%1$s</xliff:g>ට වඩා අඩුවෙන් ඉතිරිව ඇත"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"<xliff:g id="THRESHOLD">%1$s</xliff:g>ට වඩා අඩුවෙන් ඉතිරිය (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g>ට වඩා වැඩියෙන් ඉතිරිය (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +511,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"දුරකථන ස්පීකරය"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"සම්බන්ධ කිරීමේ ගැටලුවකි උපාංගය ක්රියාවිරහිත කර & ආපසු ක්රියාත්මක කරන්න"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"රැහැන්ගත කළ ඕඩියෝ උපාංගය"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-sk/strings.xml b/packages/SettingsLib/res/values-sk/strings.xml
index 7353bcf..1032fd8 100644
--- a/packages/SettingsLib/res/values-sk/strings.xml
+++ b/packages/SettingsLib/res/values-sk/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"Adresa IP a port"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Naskenujte QR kód"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Spárujte zariadenie cez sieť Wi-Fi naskenovaním QR kódu"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, ladenie, dev"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Skratka hlásenia chyby"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Zobraziť v hlavnej ponuke tlačidlo na vytvorenie hlásenia chyby"</string>
@@ -416,8 +418,7 @@
<string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"Protanomália (červená a zelená)"</string>
<string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"Tritanomália (modrá a žltá)"</string>
<string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"Úprava farieb"</string>
- <!-- no translation found for accessibility_display_daltonizer_preference_subtitle (1284746051652993443) -->
- <skip />
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="1284746051652993443">"Úprava farieb umožňuje nastaviť spôsob zobrazovania farieb vo vašom zariadení"</string>
<string name="daltonizer_type_overridden" msgid="4509604753672535721">"Prekonané predvoľbou <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="power_remaining_settings_home_page" msgid="4885165789445462557">"<xliff:g id="PERCENTAGE">%1$s</xliff:g> – <xliff:g id="TIME_STRING">%2$s</xliff:g>"</string>
<string name="power_remaining_duration_only" msgid="8264199158671531431">"Zostáva približne <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
@@ -431,7 +432,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"Vydrží asi do <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Vydrží asi do <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"Do <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"Predĺžiť výdrž batérie minimálne do <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"Zostáva menej ako <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Zostáva menej ako <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Zostáva viac ako <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -511,4 +513,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Reproduktor telefónu"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Pri pripájaní sa vyskytol problém. Zariadenie vypnite a znova zapnite."</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Audio zariadenie s káblom"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-sl/strings.xml b/packages/SettingsLib/res/values-sl/strings.xml
index 7a44b48..a25cdd0 100644
--- a/packages/SettingsLib/res/values-sl/strings.xml
+++ b/packages/SettingsLib/res/values-sl/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"Naslov IP in vrata"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Optično branje kode QR"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Seznanitev naprave prek Wi‑Fi-ja z optičnim branjem kode QR"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, odpravljanje napak, razvoj"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Bližnjica za poročanje o napakah"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Prikaz gumba za ustvarjanje poročila o napakah v meniju za vklop/izklop"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"Naprava bi morala delovati do približno <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Moralo bi zadostovati do približno <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"Do <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"Podaljšanje časa delovanja akumulatorja za dlje kot <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"Preostalo manj kot <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Preostanek: manj kot <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Preostali čas delovanja: manj kot <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -511,4 +514,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Zvočnik telefona"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Težava pri povezovanju. Napravo izklopite in znova vklopite."</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Žična zvočna naprava"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-sq/strings.xml b/packages/SettingsLib/res/values-sq/strings.xml
index f8496d1..0ebfef8 100644
--- a/packages/SettingsLib/res/values-sq/strings.xml
+++ b/packages/SettingsLib/res/values-sq/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"Adresa e IP-së dhe porta"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Skano kodin QR"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Çifto pajisjen përmes Wi‑Fi duke skanuar një kod QR"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, korrigjimi, zhvilluesi"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Shkurtorja e raportit të defektit në kod"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Shfaq një buton në menynë e fikjes për marrjen e raportit të defekteve"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"Duhet të zgjasë deri në rreth <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Duhet të zgjasë deri në rreth <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"Deri në <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"Rrite kohëzgjatjen e baterisë pas orës <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"Më pak se <xliff:g id="THRESHOLD">%1$s</xliff:g> të mbetura"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Mbeten më pak se <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Mbeten më shumë se <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Altoparlanti i telefonit"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Problem me lidhjen. Fike dhe ndize përsëri pajisjen"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Pajisja audio me tel"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-sr/strings.xml b/packages/SettingsLib/res/values-sr/strings.xml
index 79ca8f5..109a93a 100644
--- a/packages/SettingsLib/res/values-sr/strings.xml
+++ b/packages/SettingsLib/res/values-sr/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP адреса и порт"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Скенирај QR кôд"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Упарите уређај помоћу Wi‑Fi мреже или тако што ћете скенирати QR кôд"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, отклањање грешака, програмер"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Пречица за извештај о грешкама"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Прикажи дугме у менију напајања за прављење извештаја о грешкама"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"Трајаће приближно до <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Трајаће приближно до <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"До <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"Продужи трајање батерије у односу на период од <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"Преостало је мање од <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Преостало је мање од <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Преостало је више од <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -510,4 +513,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Звучник телефона"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Проблем при повезивању. Искључите уређај, па га поново укључите"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Жичани аудио уређај"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-sv/strings.xml b/packages/SettingsLib/res/values-sv/strings.xml
index 259cddf..5a74966 100644
--- a/packages/SettingsLib/res/values-sv/strings.xml
+++ b/packages/SettingsLib/res/values-sv/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP-adress och port"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Skanna QR-kod"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Parkoppla enheten via Wi-Fi genom att skanna en QR-kod"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, debug, dev, felsöka, felsökning"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Genväg till felrapport"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Visa en knapp för felrapportering i extramenyn"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"Bör räcka ungefär till klockan <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Bör räcka ungefär till klockan <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"Till kl. <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"Förläng batteritiden tills efter <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"Mindre än <xliff:g id="THRESHOLD">%1$s</xliff:g> återstår"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Mindre än <xliff:g id="THRESHOLD">%1$s</xliff:g> återstår (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Mer än <xliff:g id="TIME_REMAINING">%1$s</xliff:g> återstår (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Telefonens högtalare"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Det gick inte att ansluta. Stäng av enheten och slå på den igen"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Ljudenhet med kabelanslutning"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-sw/strings.xml b/packages/SettingsLib/res/values-sw/strings.xml
index 32b1b5a..6d52cc7 100644
--- a/packages/SettingsLib/res/values-sw/strings.xml
+++ b/packages/SettingsLib/res/values-sw/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"Anwani ya IP na Mlango"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Changanua msimbo wa QR"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Oanisha kifaa kupitia Wi-Fi kwa kuchanganua Msimbo wa QR"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, tatua, dev"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Njia ya mkato ya kuripoti hitilafu"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Onyesha kitufe cha kuripoti hitilafu katika menyu ya kuzima/kuwasha kifaa"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"Inapaswa kudumu kwa takribani <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Inapaswa kudumu hadi <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"Hadi <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"Ongeza muda wa matumizi ya betri upite <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"Zimesalia chini ya <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Zimesalia chini ya <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Zimesalia zaidi ya <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Spika ya simu"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Kuna tatizo la kuunganisha kwenye Intaneti. Zima kisha uwashe kifaa"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Kifaa cha sauti kinachotumia waya"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-ta/strings.xml b/packages/SettingsLib/res/values-ta/strings.xml
index ce4d72d..63faee6 100644
--- a/packages/SettingsLib/res/values-ta/strings.xml
+++ b/packages/SettingsLib/res/values-ta/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP முகவரி & போர்ட்"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"QR குறியீட்டை ஸ்கேன் செய்தல்"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"QR குறியீட்டை ஸ்கேன் செய்வதன் மூலம் சாதனத்தை வைஃபை மூலம் இணைக்கலாம்"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, debug, dev"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"பிழைப் புகாருக்கான ஷார்ட்கட்"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"பிழை அறிக்கையைப் பெற பவர் மெனுவில் விருப்பத்தைக் காட்டு"</string>
@@ -357,8 +359,7 @@
<string name="enable_gpu_debug_layers" msgid="4986675516188740397">"GPU பிழைத்திருத்த லேயர்களை இயக்கு"</string>
<string name="enable_gpu_debug_layers_summary" msgid="4921521407377170481">"பிழைத்திருத்த ஆப்ஸிற்கு, GPU பிழைத்திருத்த லேயர்களை ஏற்றுவதற்கு அனுமதி"</string>
<string name="enable_verbose_vendor_logging" msgid="1196698788267682072">"வெர்போஸ் வெண்டார் பதிவை இயக்கு"</string>
- <!-- no translation found for enable_verbose_vendor_logging_summary (5426292185780393708) -->
- <skip />
+ <string name="enable_verbose_vendor_logging_summary" msgid="5426292185780393708">"பிழை அறிக்கைகளில் சாதனம் சார்ந்த கூடுதல் வெண்டார் பதிவுகளைச் சேர்க்கவும். அவற்றில் தனிப்பட்ட தகவல்கள், அதிக பேட்டரி உபயோகம் மற்றும்/அல்லது அதிக சேமிப்பிட உபயோகம் குறித்த தகவல்கள் இருக்கக்கூடும்."</string>
<string name="window_animation_scale_title" msgid="5236381298376812508">"சாளர அனிமேஷன் வேகம்"</string>
<string name="transition_animation_scale_title" msgid="1278477690695439337">"அனிமேஷன் மாற்றத்தின் வேகம்"</string>
<string name="animator_duration_scale_title" msgid="7082913931326085176">"அனிமேட்டர் கால அளவு"</string>
@@ -417,7 +418,8 @@
<string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"நிறம் அடையாளங்காண முடியாமை (சிவப்பு-பச்சை)"</string>
<string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"நிறம் அடையாளங்காண முடியாமை (நீலம்-மஞ்சள்)"</string>
<string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"வண்ணத்திருத்தம்"</string>
- <string name="accessibility_display_daltonizer_preference_subtitle" msgid="6178138727195403796">"நிறக்குருடு உள்ளவர்கள் வண்ணங்களை இன்னும் துல்லியமாகப் பார்க்க வண்ணத் திருத்தம் உதவுகிறது"</string>
+ <!-- no translation found for accessibility_display_daltonizer_preference_subtitle (1284746051652993443) -->
+ <skip />
<string name="daltonizer_type_overridden" msgid="4509604753672535721">"<xliff:g id="TITLE">%1$s</xliff:g> மூலம் மேலெழுதப்பட்டது"</string>
<string name="power_remaining_settings_home_page" msgid="4885165789445462557">"<xliff:g id="PERCENTAGE">%1$s</xliff:g> - <xliff:g id="TIME_STRING">%2$s</xliff:g>"</string>
<string name="power_remaining_duration_only" msgid="8264199158671531431">"கிட்டத்தட்ட <xliff:g id="TIME_REMAINING">%1$s</xliff:g> மீதமுள்ளது"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"<xliff:g id="TIME">%1$s</xliff:g> வரை பயன்படுத்த முடியும் (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"<xliff:g id="TIME">%1$s</xliff:g> வரை பயன்படுத்த முடியும்"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"<xliff:g id="TIME">%1$s</xliff:g> வரை"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"<xliff:g id="TIME">%1$s</xliff:g> மணிக்குப் பிறகு பேட்டரி நிலையை நீட்டிக்கவும்"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"<xliff:g id="THRESHOLD">%1$s</xliff:g>க்கும் குறைவாகவே பயன்படுத்த முடியும்"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"<xliff:g id="THRESHOLD">%1$s</xliff:g>க்கும் குறைவாகவே பயன்படுத்த முடியும் (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g>க்கும் மேல் பயன்படுத்த முடியும் (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"மொபைல் ஸ்பீக்கர்"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"இணைப்பதில் சிக்கல். சாதனத்தை ஆஃப் செய்து மீண்டும் ஆன் செய்யவும்"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"வயருடன்கூடிய ஆடியோ சாதனம்"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-te/strings.xml b/packages/SettingsLib/res/values-te/strings.xml
index 2e6faf4..9cfe541 100644
--- a/packages/SettingsLib/res/values-te/strings.xml
+++ b/packages/SettingsLib/res/values-te/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP చిరునామా & పోర్ట్"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"QR కోడ్ను స్కాన్ చేయండి"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"పరికరాన్ని Wi-Fi ద్వారా పెయిర్ చేయడానికి QR కోడ్ను స్కాన్ చేయండి"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, డీబగ్, dev"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"బగ్ నివేదిక షార్ట్కట్"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"బగ్ నివేదికను తీసుకోవడానికి పవర్ మెనూలో బటన్ను చూపు"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"దాదాపు <xliff:g id="TIME">%1$s</xliff:g> వరకు ఉండాలి (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"దాదాపు <xliff:g id="TIME">%1$s</xliff:g> వరకు ఉండాలి"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"<xliff:g id="TIME">%1$s</xliff:g> వరకు"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"గత <xliff:g id="TIME">%1$s</xliff:g> కంటే ఎక్కువ ఉండేలా బ్యాటరీ జీవిత కాలాన్ని పెంచుకోండి"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"<xliff:g id="THRESHOLD">%1$s</xliff:g> కంటే తక్కువ సమయం మిగిలి ఉంది"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"<xliff:g id="THRESHOLD">%1$s</xliff:g> కంటే తక్కువ సమయం మిగిలి ఉంది (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> కంటే ఎక్కువ సమయం మిగిలి ఉంది (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"ఫోన్ స్పీకర్"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"కనెక్ట్ చేయడంలో సమస్య ఉంది. పరికరాన్ని ఆఫ్ చేసి, ఆపై తిరిగి ఆన్ చేయండి"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"వైర్ గల ఆడియో పరికరం"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-th/strings.xml b/packages/SettingsLib/res/values-th/strings.xml
index b32f949..05633ca 100644
--- a/packages/SettingsLib/res/values-th/strings.xml
+++ b/packages/SettingsLib/res/values-th/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"ที่อยู่ IP และพอร์ต"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"สแกนคิวอาร์โค้ด"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"จับคู่อุปกรณ์ผ่าน Wi‑Fi ด้วยการสแกนคิวอาร์โค้ด"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, แก้ไขข้อบกพร่อง, พัฒนา"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"ทางลัดรายงานข้อบกพร่อง"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"แสดงปุ่มในเมนูเปิด/ปิดสำหรับการใช้รายงานข้อบกพร่อง"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"น่าจะใช้งานได้ถึงเวลาประมาณ <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"น่าจะใช้งานได้ถึงเวลาประมาณ <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"จนถึง <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"ยืดอายุการใช้งานแบตเตอรี่หลังเวลา <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"เหลืออีกไม่ถึง <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"เหลือเวลาอีกไม่ถึง <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"เหลือเวลามากกว่า <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"ลำโพงโทรศัพท์"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"เกิดปัญหาในการเชื่อมต่อ ปิดอุปกรณ์แล้วเปิดใหม่อีกครั้ง"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"อุปกรณ์เสียงแบบมีสาย"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-tl/strings.xml b/packages/SettingsLib/res/values-tl/strings.xml
index 6650a45..ac682f5 100644
--- a/packages/SettingsLib/res/values-tl/strings.xml
+++ b/packages/SettingsLib/res/values-tl/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP address at Port"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"I-scan ang QR code"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Ipares ang device gamit ang Wi‑Fi sa pamamagitan ng pag-scan ng isang QR Code"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, debug, dev"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Shortcut ng ulat sa bug"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Magpakita ng button sa power menu sa pagkuha ng ulat sa bug"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"Tatagal dapat nang hanggang humigit-kumulang <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Tatagal hanggang mga <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"Hanggang <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"Patagalin ang baterya nang lampas <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"Wala nang <xliff:g id="THRESHOLD">%1$s</xliff:g> ang natitira"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Wala nang <xliff:g id="THRESHOLD">%1$s</xliff:g> ang natitira (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Mahigit <xliff:g id="TIME_REMAINING">%1$s</xliff:g> pa ang natitira (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Speaker ng telepono"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Nagkaproblema sa pagkonekta. I-off at pagkatapos ay i-on ang device"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Wired na audio device"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-tr/strings.xml b/packages/SettingsLib/res/values-tr/strings.xml
index c39a1ea..908409b 100644
--- a/packages/SettingsLib/res/values-tr/strings.xml
+++ b/packages/SettingsLib/res/values-tr/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP adresi ve Bağlantı noktası"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"QR kodunu tara"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"QR kodu tarayarak kablosuz ağ üzerinden cihaz eşleyin"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, hata ayıklama, dev"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Hata raporu kısayolu"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Hata raporu almak için güç menüsünde bir düğme göster"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"Saat yaklaşık <xliff:g id="TIME">%1$s</xliff:g> olana kadar kullanılabilmelidir (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Saat yaklaşık <xliff:g id="TIME">%1$s</xliff:g> olana kadar kullanılabilmelidir"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"Şu saate kadar: <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"Şu saatten sonra pil ömrünü uzat: <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"En fazla <xliff:g id="THRESHOLD">%1$s</xliff:g> kaldı"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"En çok <xliff:g id="THRESHOLD">%1$s</xliff:g> kaldı (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"En az <xliff:g id="TIME_REMAINING">%1$s</xliff:g> kaldı (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Telefon hoparlörü"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Bağlanırken sorun oluştu. Cihazı kapatıp tekrar açın"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Kablolu ses cihazı"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-uk/strings.xml b/packages/SettingsLib/res/values-uk/strings.xml
index 30d9891..c9a785f 100644
--- a/packages/SettingsLib/res/values-uk/strings.xml
+++ b/packages/SettingsLib/res/values-uk/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP-адреса та порт"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Сканувати QR-код"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Підключати пристрій через Wi‑Fi за допомогою QR-коду"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, налагодження, розробка"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Ярлик звіту про помилки"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Показувати в меню живлення кнопку створення звіту про помилки"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"Вистачить приблизно до <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Вистачить приблизно до <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"До <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"Подовжити час роботи акумулятора до <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"Залишилося менше ніж <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Залишилося менше ніж <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Залишилося понад <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -511,4 +514,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Динамік телефона"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Не вдається підключитися. Перезавантажте пристрій."</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Дротовий аудіопристрій"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-ur/strings.xml b/packages/SettingsLib/res/values-ur/strings.xml
index f00c8f9..335808d 100644
--- a/packages/SettingsLib/res/values-ur/strings.xml
+++ b/packages/SettingsLib/res/values-ur/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP پتہ اور پورٹ"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"QR کوڈ اسکین کریں"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"QR کوڈ اسکین کر کے Wi-Fi پر آلہ کا جوڑا بنائیں"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb، ڈیبگ، dev"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"بگ رپورٹ کا شارٹ کٹ"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"بگ رپورٹ لینے کیلئے پاور مینو میں ایک بٹن دکھائیں"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"تقریباً <xliff:g id="TIME">%1$s</xliff:g> تک بیٹری چلے گی (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"تقریباً <xliff:g id="TIME">%1$s</xliff:g> تک بیٹری چلے گی"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"<xliff:g id="TIME">%1$s</xliff:g> تک"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"<xliff:g id="TIME">%1$s</xliff:g> کے بعد بیٹری لائف بڑھائیں"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"<xliff:g id="THRESHOLD">%1$s</xliff:g> سے کم باقی ہے"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"<xliff:g id="THRESHOLD">%1$s</xliff:g> سے کم باقی ہے (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> سے زیادہ باقی ہے (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"فون اسپیکر"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"منسلک کرنے میں مسئلہ پیش آ گیا۔ آلہ کو آف اور بیک آن کریں"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"وائرڈ آڈیو آلہ"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-uz/strings.xml b/packages/SettingsLib/res/values-uz/strings.xml
index d37959d..c321d85 100644
--- a/packages/SettingsLib/res/values-uz/strings.xml
+++ b/packages/SettingsLib/res/values-uz/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP manzil va port"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"QR kodni skanerlash"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"QR kodni skanerlab, Wi-Fi orqali qurilmani ulang"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, debag, dev"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Xatoliklar hisoboti"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Menyuda xatoliklar hisobotini yuborish tugmasi ko‘rsatilsin"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"Taxminan <xliff:g id="TIME">%1$s</xliff:g> gacha davom etadi (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Taxminan <xliff:g id="TIME">%1$s</xliff:g> gacha davom etadi"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"<xliff:g id="TIME">%1$s</xliff:g> gacha"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"<xliff:g id="TIME">%1$s</xliff:g> oʻtgach batareya quvvatini oshirish"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"<xliff:g id="THRESHOLD">%1$s</xliff:g>dan kamroq vaqt qoldi"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"<xliff:g id="THRESHOLD">%1$s</xliff:g>dan kamroq vaqt qoldi (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g>dan ko‘proq vaqt qoldi (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Telefon karnayi"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Ulanishda muammo yuz berdi. Qurilmani oʻchiring va yoqing"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Simli audio qurilma"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-vi/strings.xml b/packages/SettingsLib/res/values-vi/strings.xml
index d2462a6..61f99fe 100644
--- a/packages/SettingsLib/res/values-vi/strings.xml
+++ b/packages/SettingsLib/res/values-vi/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"Địa chỉ IP và cổng"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Quét mã QR"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Ghép nối thiết bị qua Wi-Fi bằng cách quét mã QR"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, gỡ lỗi, nhà phát triển"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Phím tắt báo cáo lỗi"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Hiển thị một nút trong menu nguồn để báo cáo lỗi"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"Sẽ hết pin cho tới khoảng <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Sẽ hết pin cho tới khoảng <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"Cho đến <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"Kéo dài thời lượng pin qua <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"Còn lại không đến <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Còn lại không đến <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Còn lại hơn <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Loa điện thoại"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Sự cố kết nối. Hãy tắt thiết bị rồi bật lại"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Thiết bị âm thanh có dây"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-zh-rCN/strings.xml b/packages/SettingsLib/res/values-zh-rCN/strings.xml
index 73f1e31..56be76f 100644
--- a/packages/SettingsLib/res/values-zh-rCN/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rCN/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP 地址和端口"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"扫描二维码"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"扫描二维码即可通过 WLAN 配对设备"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, 调试, debug, 开发, dev"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"错误报告快捷方式"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"在电源菜单中显示用于提交错误报告的按钮"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"目前电量为 <xliff:g id="LEVEL">%2$s</xliff:g>,估计能用到<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"估计能用到<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"直到<xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"在<xliff:g id="TIME">%1$s</xliff:g> 之后延长电池续航时间"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"剩余电池续航时间不到 <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"电量剩余使用时间不到 <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"电量剩余使用时间超过 <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"手机扬声器"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"连接时遇到问题。请关闭并重新开启设备"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"有线音频设备"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-zh-rHK/strings.xml b/packages/SettingsLib/res/values-zh-rHK/strings.xml
index b3039a2..cfb86b9 100644
--- a/packages/SettingsLib/res/values-zh-rHK/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rHK/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP 位址和連接埠"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"掃瞄二維條碼"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"掃瞄二維條碼即可透過 Wi-Fi 配對裝置"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"ADB, 偵錯, 開發"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"錯誤舉報捷徑"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"在電源選單中顯示提交錯誤舉報的按鈕"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"電量剩餘約 <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"電量剩餘約 <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"還可用到<xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"將電池壽命延長至 <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"剩餘電量時間少於 <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"還有少於 <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"還有超過 <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"手機喇叭"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"無法連接,請關閉裝置然後重新開機"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"有線音響裝置"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-zh-rTW/strings.xml b/packages/SettingsLib/res/values-zh-rTW/strings.xml
index 4203ae8..cf3f343 100644
--- a/packages/SettingsLib/res/values-zh-rTW/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rTW/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP 位址和通訊埠"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"掃描 QR 圖碼"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"掃描 QR 圖碼即可透過 Wi-Fi 配對裝置"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"ADB, 偵錯, 開發"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"錯誤回報捷徑"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"在電源選單中顯示取得錯誤報告的按鈕"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"目前電量 <xliff:g id="LEVEL">%2$s</xliff:g>,預估還能持續使用到<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"預估還能持續使用到<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"還能持續使用到<xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"在 <xliff:g id="TIME">%1$s</xliff:g>後延長電池續航力"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"電池可用時間不到 <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"電池可用時間不到 <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"電池可用時間超過 <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"手機喇叭"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"無法連線,請關閉裝置後再重新開啟"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"有線音訊裝置"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-zu/strings.xml b/packages/SettingsLib/res/values-zu/strings.xml
index 9043543..78e2099 100644
--- a/packages/SettingsLib/res/values-zu/strings.xml
+++ b/packages/SettingsLib/res/values-zu/strings.xml
@@ -232,6 +232,8 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"Ikheli le-IP nembobo"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Skena ikhodi ye-QR"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="8578868049289910131">"Bhangqa idivayisi nge-Wi‑Fi ngokuskena ikhodi ye-QR"</string>
+ <!-- no translation found for adb_wireless_no_network_msg (2365795244718494658) -->
+ <skip />
<string name="keywords_adb_wireless" msgid="6507505581882171240">"i-adb, ukulungisa amaphutha, i-dev"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Isinqamuleli sombiko wesiphazamisi"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Bonisa inkinobho kwimenyu yamandla ngokuthatha umbiko wesiphazamiso"</string>
@@ -431,7 +433,8 @@
<string name="power_discharge_by" msgid="4113180890060388350">"Kumele ihlale cishe kube ngu-<xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Kumele ihlale cishe kube ngu-<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"Kuze kube ngu-<xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_suggestion_extend_battery" msgid="5233928707465237447">"Nweba impilo yebhethri idlule okungu-<xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_suggestion_battery_run_out (6332089307827787087) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5802195288324091585">"Kusele okungaphansi kunokungu-<xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="1812668275239801236">"Ngaphansi kuka-<xliff:g id="THRESHOLD">%1$s</xliff:g> osele (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="7919119719242734848">"Ngaphezu kuka-<xliff:g id="TIME_REMAINING">%1$s</xliff:g> osele (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -509,4 +512,26 @@
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Isipikha sefoni"</string>
<string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Inkinga yokuxhumeka. Vala idivayisi futhi uphinde uyivule"</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Idivayisi yomsindo enentambo"</string>
+ <!-- no translation found for help_label (3528360748637781274) -->
+ <skip />
+ <!-- no translation found for storage_category (2287342585424631813) -->
+ <skip />
+ <!-- no translation found for shared_data_title (1017034836800864953) -->
+ <skip />
+ <!-- no translation found for shared_data_summary (5516326713822885652) -->
+ <skip />
+ <!-- no translation found for blob_id_text (8680078988996308061) -->
+ <skip />
+ <!-- no translation found for blob_expires_text (7882727111491739331) -->
+ <skip />
+ <!-- no translation found for accessor_info_title (8289823651512477787) -->
+ <skip />
+ <!-- no translation found for accessor_no_description_text (7510967452505591456) -->
+ <skip />
+ <!-- no translation found for accessor_expires_text (4625619273236786252) -->
+ <skip />
+ <!-- no translation found for delete_blob_text (2819192607255625697) -->
+ <skip />
+ <!-- no translation found for delete_blob_confirmation_text (7807446938920827280) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values/strings.xml b/packages/SettingsLib/res/values/strings.xml
index e180300..73f08c68 100644
--- a/packages/SettingsLib/res/values/strings.xml
+++ b/packages/SettingsLib/res/values/strings.xml
@@ -1281,4 +1281,28 @@
<!-- Name of the 3.5mm audio device. [CHAR LIMIT=40] -->
<string name="media_transfer_wired_device_name">Wired audio device</string>
+
+ <!-- Help button label [CHAR LIMIT=40] -->
+ <string name="help_label">Help & feedback</string>
+
+ <!-- Preference category for storage development settings. [CHAR LIMIT=50] -->
+ <string name="storage_category">Storage</string>
+ <!-- Storage: view and access information about shared blobs [CHAR LIMIT=50] -->
+ <string name="shared_data_title">Shared data</string>
+ <!-- Storage: shared data summary [CHAR LIMIT=80] -->
+ <string name="shared_data_summary">View and modify shared data</string>
+ <!-- Shared data: shared data id [CHAR LIMIT=50] -->
+ <string name="blob_id_text">Shared data ID: <xliff:g id="blob_id" example="100">%d</xliff:g></string>
+ <!-- Shared data: label to indicate when the shared data expires [CHAR LIMIT=80] -->
+ <string name="blob_expires_text">Expires at <xliff:g id="date" example="Mar 20, 2020 11:59:59 GMT">%s</xliff:g></string>
+ <!-- Shared data: title for screen showing list of packages accessing some shared data [CHAR LIMIT=50] -->
+ <string name="accessor_info_title">Apps sharing data</string>
+ <!-- Shared data: text indicating that no description was provided by the app for this shared data [CHAR LIMIT=80] -->
+ <string name="accessor_no_description_text">No description provided by the app.</string>
+ <!-- Shared data: label to indicate when the lease acquired by an app expires [CHAR LIMIT=80] -->
+ <string name="accessor_expires_text">Lease expires at <xliff:g id="date" example="Mar 20, 2020 11:59:59 GMT">%s</xliff:g></string>
+ <!-- Shared data: button text for deleting some shared data [CHAR LIMIT=50] -->
+ <string name="delete_blob_text">Delete shared data</string>
+ <!-- Shared data: confirmation dialog text when attempting delete some shared data [CHAR LIMIT=NONE] -->
+ <string name="delete_blob_confirmation_text">Are you sure you want to delete this shared data?</string>
</resources>
diff --git a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java
index eb0ddfb..24cd551 100644
--- a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java
+++ b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java
@@ -181,9 +181,13 @@
return false;
}
- final RoutingSessionInfo info = getRoutingSessionInfo();
- if (info != null) {
- mRouterManager.getControllerForSession(info).release();
+
+ final List<RoutingSessionInfo> sessionInfos =
+ mRouterManager.getRoutingSessions(mPackageName);
+ final RoutingSessionInfo sessionInfo = sessionInfos.get(sessionInfos.size() - 1);
+
+ if (sessionInfo != null) {
+ mRouterManager.releaseSession(sessionInfo);
return true;
}
diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiEntryPreference.java b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiEntryPreference.java
index c63c34c..8aa0aec 100644
--- a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiEntryPreference.java
+++ b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiEntryPreference.java
@@ -107,6 +107,7 @@
final ImageView frictionImageView = (ImageView) view.findViewById(
R.id.friction_icon);
if (mWifiEntry.canManageSubscription() && !mWifiEntry.isSaved()
+ && !mWifiEntry.isSubscription()
&& mWifiEntry.getConnectedState() == WifiEntry.CONNECTED_STATE_DISCONNECTED) {
final Drawable drawablehelp = getDrawable(R.drawable.ic_help);
drawablehelp.setTintList(
@@ -114,6 +115,9 @@
((ImageView) imageButton).setImageDrawable(drawablehelp);
imageButton.setVisibility(View.VISIBLE);
imageButton.setOnClickListener(this);
+ imageButton.setContentDescription(
+ getContext().getText(R.string.help_label));
+
if (frictionImageView != null) {
frictionImageView.setVisibility(View.GONE);
}
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/wifi/WifiEntryPreferenceTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/wifi/WifiEntryPreferenceTest.java
index 47836c0..a9f31ce 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/wifi/WifiEntryPreferenceTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/wifi/WifiEntryPreferenceTest.java
@@ -167,4 +167,35 @@
assertThat(view.findViewById(R.id.icon_button).getVisibility()).isEqualTo(View.VISIBLE);
}
+
+ @Test
+ public void helpButton_whenCanManageSubscription_shouldSetCorrectContentDescription() {
+ when(mMockWifiEntry.canManageSubscription()).thenReturn(true);
+ final WifiEntryPreference pref =
+ new WifiEntryPreference(mContext, mMockWifiEntry, mMockIconInjector);
+ final LayoutInflater inflater = LayoutInflater.from(mContext);
+ final View view = inflater.inflate(pref.getLayoutResource(), new LinearLayout(mContext),
+ false);
+ final PreferenceViewHolder holder = PreferenceViewHolder.createInstanceForTests(view);
+
+ pref.onBindViewHolder(holder);
+
+ assertThat(view.findViewById(R.id.icon_button).getContentDescription()).isEqualTo(
+ mContext.getString(R.string.help_label));
+ }
+
+ @Test
+ public void subscriptionEntry_shouldSetImageButtonGone() {
+ when(mMockWifiEntry.isSubscription()).thenReturn(true);
+ final WifiEntryPreference pref =
+ new WifiEntryPreference(mContext, mMockWifiEntry, mMockIconInjector);
+ final LayoutInflater inflater = LayoutInflater.from(mContext);
+ final View view = inflater.inflate(pref.getLayoutResource(), new LinearLayout(mContext),
+ false);
+ final PreferenceViewHolder holder = PreferenceViewHolder.createInstanceForTests(view);
+
+ pref.onBindViewHolder(holder);
+
+ assertThat(view.findViewById(R.id.icon_button).getVisibility()).isEqualTo(View.GONE);
+ }
}
diff --git a/packages/Shell/src/com/android/shell/BugreportProgressService.java b/packages/Shell/src/com/android/shell/BugreportProgressService.java
index c76b50b..64e5237 100644
--- a/packages/Shell/src/com/android/shell/BugreportProgressService.java
+++ b/packages/Shell/src/com/android/shell/BugreportProgressService.java
@@ -112,6 +112,9 @@
import java.util.Enumeration;
import java.util.List;
import java.util.concurrent.Executor;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicLong;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;
@@ -251,8 +254,6 @@
private boolean mIsWatch;
private boolean mIsTv;
- private int mLastProgressPercent;
-
@Override
public void onCreate() {
mContext = getApplicationContext();
@@ -684,12 +685,12 @@
* Updates the system notification for a given bugreport.
*/
private void updateProgress(BugreportInfo info) {
- if (info.getProgress() < 0) {
+ if (info.progress.intValue() < 0) {
Log.e(TAG, "Invalid progress values for " + info);
return;
}
- if (info.isFinished()) {
+ if (info.finished.get()) {
Log.w(TAG, "Not sending progress notification because bugreport has finished already ("
+ info + ")");
return;
@@ -698,7 +699,7 @@
final NumberFormat nf = NumberFormat.getPercentInstance();
nf.setMinimumFractionDigits(2);
nf.setMaximumFractionDigits(2);
- final String percentageText = nf.format((double) info.getProgress() / 100);
+ final String percentageText = nf.format((double) info.progress.intValue() / 100);
String title = mContext.getString(R.string.bugreport_in_progress_title, info.id);
@@ -706,7 +707,7 @@
if (mIsWatch) {
nf.setMinimumFractionDigits(0);
nf.setMaximumFractionDigits(0);
- final String watchPercentageText = nf.format((double) info.getProgress() / 100);
+ final String watchPercentageText = nf.format((double) info.progress.intValue() / 100);
title = title + "\n" + watchPercentageText;
}
@@ -718,7 +719,8 @@
.setContentTitle(title)
.setTicker(title)
.setContentText(name)
- .setProgress(100 /* max value of progress percentage */, info.getProgress(), false)
+ .setProgress(100 /* max value of progress percentage */,
+ info.progress.intValue(), false)
.setOngoing(true);
// Wear and ATV bugreport doesn't need the bug info dialog, screenshot and cancel action.
@@ -747,13 +749,14 @@
.setActions(infoAction, screenshotAction, cancelAction);
}
// Show a debug log, every LOG_PROGRESS_STEP percent.
- final int progress = info.getProgress();
+ final int progress = info.progress.intValue();
- if ((info.getProgress() == 0) || (info.getProgress() >= 100)
- || ((progress / LOG_PROGRESS_STEP) != (mLastProgressPercent / LOG_PROGRESS_STEP))) {
+ if ((progress == 0) || (progress >= 100)
+ || ((progress / LOG_PROGRESS_STEP)
+ != (info.lastProgress.intValue() / LOG_PROGRESS_STEP))) {
Log.d(TAG, "Progress #" + info.id + ": " + percentageText);
}
- mLastProgressPercent = progress;
+ info.lastProgress = new AtomicInteger(progress);
sendForegroundabledNotification(info.id, builder.build());
}
@@ -810,10 +813,10 @@
mInfoDialog.cancel();
synchronized (mLock) {
final BugreportInfo info = getInfoLocked(id);
- if (info != null && !info.isFinished()) {
+ if (info != null && !info.finished.get()) {
Log.i(TAG, "Cancelling bugreport service (ID=" + id + ") on user's request");
mBugreportManager.cancelBugreport();
- deleteScreenshots(info);
+ info.deleteScreenshots();
}
stopProgressLocked(id);
}
@@ -925,7 +928,7 @@
mTakingScreenshot = flag;
for (int i = 0; i < mBugreportInfos.size(); i++) {
final BugreportInfo info = getInfoLocked(mBugreportInfos.keyAt(i));
- if (info.isFinished()) {
+ if (info.finished.get()) {
Log.d(TAG, "Not updating progress for " + info.id + " while taking screenshot"
+ " because share notification was already sent");
continue;
@@ -958,7 +961,7 @@
final String msg;
if (taken) {
info.addScreenshot(screenshotFile);
- if (info.isFinished()) {
+ if (info.finished.get()) {
Log.d(TAG, "Screenshot finished after bugreport; updating share notification");
info.renameScreenshots();
sendBugreportNotification(info, mTakingScreenshot);
@@ -972,16 +975,6 @@
}
/**
- * Deletes all screenshots taken for a given bugreport.
- */
- private void deleteScreenshots(BugreportInfo info) {
- for (File file : info.screenshotFiles) {
- Log.i(TAG, "Deleting screenshot file " + file);
- file.delete();
- }
- }
-
- /**
* Stop running on foreground once there is no more active bugreports being watched.
*/
@GuardedBy("mLock")
@@ -1001,7 +994,7 @@
if (total > 0) {
for (int i = 0; i < total; i++) {
final BugreportInfo info = getInfoLocked(mBugreportInfos.keyAt(i));
- if (!info.isFinished()) {
+ if (!info.finished.get()) {
updateProgress(info);
break;
}
@@ -1028,7 +1021,7 @@
private void onBugreportFinished(BugreportInfo info) {
Log.d(TAG, "Bugreport finished with title: " + info.getTitle()
+ " and shareDescription: " + info.shareDescription);
- info.setFinished(true);
+ info.finished = new AtomicBoolean(true);
synchronized (mLock) {
// Stop running on foreground, otherwise share notification cannot be dismissed.
@@ -1772,25 +1765,25 @@
* This will end with the string "wifi"/"telephony" for wifi/telephony bugreports.
* Bugreport zip file name = "<baseName>-<name>.zip"
*/
- String baseName;
+ private final String baseName;
/**
* Suffix name of the bugreport/screenshot, is set to timestamp initially. User can make
* modifications to this using interface.
*/
- String name;
+ private String name;
/**
* Initial value of the field name. This is required to rename the files later on, as they
* are created using initial value of name.
*/
- String initialName;
+ private final String initialName;
/**
* User-provided, one-line summary of the bug; when set, will be used as the subject
* of the {@link Intent#ACTION_SEND_MULTIPLE} intent.
*/
- String title;
+ private String title;
/**
* One-line summary of the bug; when set, will be used as the subject of the
@@ -1798,23 +1791,30 @@
* set initially when the request to take a bugreport is made. This overrides any changes
* in the title that the user makes after the bugreport starts.
*/
- String shareTitle;
+ private final String shareTitle;
/**
* User-provided, detailed description of the bugreport; when set, will be added to the body
* of the {@link Intent#ACTION_SEND_MULTIPLE} intent.
*/
- String description;
+ private String description;
/**
- * Current progress (in percentage) of the bugreport generation as displayed by the UI.
+ * Current value of progress (in percentage) of the bugreport generation as
+ * displayed by the UI.
*/
- int progress;
+ AtomicInteger progress;
+
+ /**
+ * Last value of progress (in percentage) of the bugreport generation for which
+ * system notification was updated.
+ */
+ AtomicInteger lastProgress;
/**
* Time of the last progress update.
*/
- long lastUpdate = System.currentTimeMillis();
+ AtomicLong lastUpdate = new AtomicLong(System.currentTimeMillis());
/**
* Time of the last progress update when Parcel was created.
@@ -1834,7 +1834,7 @@
/**
* Whether dumpstate sent an intent informing it has finished.
*/
- boolean finished;
+ AtomicBoolean finished = new AtomicBoolean(false);
/**
* Whether the details entries have been added to the bugreport yet.
@@ -1852,12 +1852,12 @@
* predefined description which is set initially when the request to take a bugreport is
* made.
*/
- String shareDescription;
+ private final String shareDescription;
/**
* Type of the bugreport
*/
- int type;
+ final int type;
private final Object mLock = new Object();
@@ -1899,18 +1899,6 @@
return getFd(screenshotFiles.get(0));
}
- void setFinished(boolean isFinished) {
- synchronized (mLock) {
- this.finished = isFinished;
- }
- }
-
- boolean isFinished() {
- synchronized (mLock) {
- return finished;
- }
- }
-
void setTitle(String title) {
synchronized (mLock) {
this.title = title;
@@ -1947,30 +1935,6 @@
}
}
- void setProgress(int progress) {
- synchronized (mLock) {
- this.progress = progress;
- }
- }
-
- int getProgress() {
- synchronized (mLock) {
- return progress;
- }
- }
-
- void setLastUpdate(long lastUpdate) {
- synchronized (mLock) {
- this.lastUpdate = lastUpdate;
- }
- }
-
- long getLastUpdate() {
- synchronized (mLock) {
- return lastUpdate;
- }
- }
-
/**
* Gets the name for next user triggered screenshot file.
*/
@@ -1994,6 +1958,16 @@
}
/**
+ * Deletes all screenshots taken for a given bugreport.
+ */
+ private void deleteScreenshots() {
+ for (File file : screenshotFiles) {
+ Log.i(TAG, "Deleting screenshot file " + file);
+ file.delete();
+ }
+ }
+
+ /**
* Rename all screenshots files so that they contain the new {@code name} instead of the
* {@code initialName} if user has changed it.
*/
@@ -2040,9 +2014,9 @@
if (context == null) {
// Restored from Parcel
return formattedLastUpdate == null ?
- Long.toString(getLastUpdate()) : formattedLastUpdate;
+ Long.toString(lastUpdate.longValue()) : formattedLastUpdate;
}
- return DateUtils.formatDateTime(context, getLastUpdate(),
+ return DateUtils.formatDateTime(context, lastUpdate.longValue(),
DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_TIME);
}
@@ -2087,8 +2061,8 @@
initialName = in.readString();
title = in.readString();
description = in.readString();
- progress = in.readInt();
- lastUpdate = in.readLong();
+ progress = new AtomicInteger(in.readInt());
+ lastUpdate = new AtomicLong(in.readLong());
formattedLastUpdate = in.readString();
bugreportFile = readFile(in);
@@ -2097,10 +2071,11 @@
screenshotFiles.add(readFile(in));
}
- finished = in.readInt() == 1;
+ finished = new AtomicBoolean(in.readInt() == 1);
screenshotCounter = in.readInt();
shareDescription = in.readString();
shareTitle = in.readString();
+ type = in.readInt();
}
@Override
@@ -2111,8 +2086,8 @@
dest.writeString(initialName);
dest.writeString(title);
dest.writeString(description);
- dest.writeInt(progress);
- dest.writeLong(lastUpdate);
+ dest.writeInt(progress.intValue());
+ dest.writeLong(lastUpdate.longValue());
dest.writeString(getFormattedLastUpdate());
writeFile(dest, bugreportFile);
@@ -2121,10 +2096,11 @@
writeFile(dest, screenshotFile);
}
- dest.writeInt(finished ? 1 : 0);
+ dest.writeInt(finished.get() ? 1 : 0);
dest.writeInt(screenshotCounter);
dest.writeString(shareDescription);
dest.writeString(shareTitle);
+ dest.writeInt(type);
}
@Override
@@ -2163,13 +2139,13 @@
progress = CAPPED_PROGRESS;
}
if (DEBUG) {
- if (progress != info.getProgress()) {
+ if (progress != info.progress.intValue()) {
Log.v(TAG, "Updating progress for name " + info.getName() + "(id: " + info.id
- + ") from " + info.getProgress() + " to " + progress);
+ + ") from " + info.progress.intValue() + " to " + progress);
}
}
- info.setProgress(progress);
- info.setLastUpdate(System.currentTimeMillis());
+ info.progress = new AtomicInteger(progress);
+ info.lastUpdate = new AtomicLong(System.currentTimeMillis());
updateProgress(info);
}
diff --git a/packages/SystemUI/res/layout/controls_management.xml b/packages/SystemUI/res/layout/controls_management.xml
index 34a966c..9d5eb63 100644
--- a/packages/SystemUI/res/layout/controls_management.xml
+++ b/packages/SystemUI/res/layout/controls_management.xml
@@ -105,7 +105,7 @@
android:id="@+id/done"
android:layout_width="wrap_content"
android:layout_height="match_parent"
- android:text="Done"
+ android:text="@string/save"
style="@*android:style/Widget.DeviceDefault.Button.Colored"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
@@ -114,4 +114,4 @@
</FrameLayout>
-</LinearLayout>
\ No newline at end of file
+</LinearLayout>
diff --git a/packages/SystemUI/res/values-sw600dp/config.xml b/packages/SystemUI/res/values-sw600dp/config.xml
index f91af03..5d20564 100644
--- a/packages/SystemUI/res/values-sw600dp/config.xml
+++ b/packages/SystemUI/res/values-sw600dp/config.xml
@@ -26,9 +26,6 @@
<!-- The number of columns that the top level tiles span in the QuickSettings -->
<integer name="quick_settings_user_time_settings_tile_span">1</integer>
- <!-- Set to true to enable the user switcher on the keyguard. -->
- <bool name="config_keyguardUserSwitcher">true</bool>
-
<!-- Nav bar button default ordering/layout -->
<string name="config_navBarLayout" translatable="false">left;back,home,recent;right</string>
diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml
index 4d6b759..922acff 100644
--- a/packages/SystemUI/res/values/config.xml
+++ b/packages/SystemUI/res/values/config.xml
@@ -175,9 +175,6 @@
be 'platform' or 'noisy' (i.e. for noisy touch screens). -->
<string name="velocity_tracker_impl" translatable="false">platform</string>
- <!-- Set to true to enable the user switcher on the keyguard. -->
- <bool name="config_keyguardUserSwitcher">false</bool>
-
<!-- Doze: does this device support STATE_DOZE? -->
<bool name="doze_display_state_supported">false</bool>
diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml
index 6905de2..f71c0b3 100644
--- a/packages/SystemUI/res/values/strings.xml
+++ b/packages/SystemUI/res/values/strings.xml
@@ -2635,13 +2635,15 @@
<string name="magnification_controls_title">Magnification Window Controls</string>
<!-- Quick Controls strings -->
- <!-- Quick Controls view header [CHAR LIMIT=30] -->
+ <!-- Quick Controls empty state, title [CHAR LIMIT=30] -->
<string name="quick_controls_title">Quick Controls</string>
+ <!-- Quick Controls empty state, subtitle [CHAR LIMIT=100] -->
+ <string name="quick_controls_subtitle">Add controls for your connected devices</string>
<!-- Controls management providers screen title [CHAR LIMIT=30]-->
<string name="controls_providers_title">Add Controls</string>
<!-- Controls management providers screen subtitle [CHAR LIMIT=NONE] -->
- <string name="controls_providers_subtitle">Choose an app from which to add controls</string>
+ <string name="controls_providers_subtitle">Choose app to add controls</string>
<!-- Number of favorites for controls management screen [CHAR LIMIT=NONE]-->
<plurals name="controls_number_of_favorites">
<item quantity="one"><xliff:g id="number" example="1">%s</xliff:g> control added.</item>
@@ -2651,7 +2653,9 @@
<!-- Controls management controls screen default title [CHAR LIMIT=30] -->
<string name="controls_favorite_default_title">Controls</string>
<!-- Controls management controls screen subtitle [CHAR LIMIT=NONE] -->
- <string name="controls_favorite_subtitle">Choose controls for quick access</string>
+ <string name="controls_favorite_subtitle">Choose controls to access from the power menu</string>
+ <!-- Controls management controls screen, user direction for rearranging controls [CHAR LIMIT=NONE] -->
+ <string name="controls_favorite_rearrange">Hold and drag a control to move it</string>
<!-- Controls management controls screen error on load message [CHAR LIMIT=60] -->
<string name="controls_favorite_load_error">The list of all controls could not be loaded.</string>
@@ -2659,21 +2663,35 @@
<string name="controls_favorite_other_zone_header">Other</string>
<!-- Controls dialog title [CHAR LIMIT=30] -->
- <string name="controls_dialog_title">Add to Quick Controls</string>
+ <string name="controls_dialog_title">Add to quick controls</string>
<!-- Controls dialog add to favorites [CHAR LIMIT=30] -->
<string name="controls_dialog_ok">Add to favorites</string>
<!-- Controls dialog message [CHAR LIMIT=NONE] -->
<string name="controls_dialog_message"><xliff:g id="app" example="System UI">%s</xliff:g> suggested this control to add to your favorites.</string>
+ <!-- Controls dialog confirmation [CHAR LIMIT=30] -->
+ <string name="controls_dialog_confirmation">Controls updated</string>
<!-- Controls PIN entry dialog, switch to alphanumeric keyboard [CHAR LIMIT=100] -->
<string name="controls_pin_use_alphanumeric">PIN contains letters or symbols</string>
<!-- Controls PIN entry dialog, title [CHAR LIMIT=30] -->
- <string name="controls_pin_verify">Verify device PIN</string>
+ <string name="controls_pin_verify">Verify <xliff:g id="device" example="Backdoor lock">%s</xliff:g></string>
+ <!-- Controls PIN entry dialog, waiting to verify [CHAR LIMIT=30] -->
+ <string name="controls_pin_verifying">Verifying\u2026</string>
<!-- Controls PIN entry dialog, text hint [CHAR LIMIT=30] -->
<string name="controls_pin_instructions">Enter PIN</string>
+ <!-- Controls passphrase entry dialog, text hint [CHAR LIMIT=30] -->
+ <string name="controls_passphrase_instructions">Enter passphrase</string>
+ <!-- Controls PIN entry dialog, text hint, retry [CHAR LIMIT=30] -->
+ <string name="controls_pin_instructions_retry">Try another PIN</string>
+ <!-- Controls passphrase entry dialog, text hint, retry [CHAR LIMIT=50] -->
+ <string name="controls_passphrase_instructions_retry">Try another passphrase</string>
+ <!-- Controls confirmation dialog, waiting to confirm [CHAR LIMIT=30] -->
+ <string name="controls_confirmation_confirming">Confirming\u2026</string>
+ <!-- Controls confirmation dialog, user prompt [CHAR LIMIT=NONE] -->
+ <string name="controls_confirmation_message">Confirm change for <xliff:g id="device" example="Backdoor lock">%s</xliff:g></string>
<!-- Tooltip to show in management screen when there are multiple structures [CHAR_LIMIT=50] -->
- <string name="controls_structure_tooltip">Swipe to see other structures</string>
+ <string name="controls_structure_tooltip">Swipe to see more</string>
<!-- Message to tell the user to wait while systemui attempts to load a set of
recommended controls [CHAR_LIMIT=30] -->
@@ -2681,4 +2699,18 @@
<!-- Close the controls associated with a specific media session [CHAR_LIMIT=NONE] -->
<string name="controls_media_close_session">Close this media session</string>
+
+ <!-- Error message indicating that a control timed out while waiting for an update [CHAR_LIMIT=30] -->
+ <string name="controls_error_timeout">Inactive, check app</string>
+ <!-- Error message indicating that a control action failed [CHAR_LIMIT=30] -->
+ <string name="controls_error_failed">Error, try again</string>
+ <!-- Stateless control message informing the user that a routine has started [CHAR_LIMIT=30] -->
+ <string name="controls_in_progress">In progress</string>
+ <!-- Tooltip informing user where the recently added controls are [CHAR_LIMIT=100] -->
+ <string name="controls_added_tooltip">Hold Power button to see new controls</string>
+
+ <!-- Controls menu, add [CHAR_LIMIT=30] -->
+ <string name="controls_menu_add">Add controls</string>
+ <!-- Controls menu, edit [CHAR_LIMIT=30] -->
+ <string name="controls_menu_edit">Edit controls</string>
</resources>
diff --git a/packages/SystemUI/src/com/android/systemui/controls/ui/ChallengeDialogs.kt b/packages/SystemUI/src/com/android/systemui/controls/ui/ChallengeDialogs.kt
index 2494fd1..15c2a0a 100644
--- a/packages/SystemUI/src/com/android/systemui/controls/ui/ChallengeDialogs.kt
+++ b/packages/SystemUI/src/com/android/systemui/controls/ui/ChallengeDialogs.kt
@@ -50,7 +50,8 @@
cvh.context,
android.R.style.Theme_DeviceDefault_Dialog_Alert
).apply {
- setTitle(R.string.controls_pin_verify)
+ val res = cvh.context.resources
+ setTitle(res.getString(R.string.controls_pin_verify, *arrayOf(cvh.title.getText())))
setView(R.layout.controls_dialog_pin)
setPositiveButton(
android.R.string.ok,
diff --git a/packages/SystemUI/src/com/android/systemui/pip/PipBoundsHandler.java b/packages/SystemUI/src/com/android/systemui/pip/PipBoundsHandler.java
index 8be2502..4969fc8 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/PipBoundsHandler.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/PipBoundsHandler.java
@@ -37,8 +37,8 @@
import android.view.DisplayInfo;
import android.view.Gravity;
import android.view.IWindowManager;
-import android.view.WindowContainerTransaction;
import android.view.WindowManagerGlobal;
+import android.window.WindowContainerTransaction;
import java.io.PrintWriter;
diff --git a/packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java b/packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java
index 118049d..e64a919 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java
@@ -27,7 +27,7 @@
import android.annotation.Nullable;
import android.app.ActivityManager;
import android.app.ActivityTaskManager;
-import android.app.ITaskOrganizerController;
+import android.window.ITaskOrganizerController;
import android.app.PictureInPictureParams;
import android.content.Context;
import android.content.pm.ActivityInfo;
@@ -38,10 +38,10 @@
import android.os.RemoteException;
import android.util.Log;
import android.util.Size;
-import android.view.ITaskOrganizer;
-import android.view.IWindowContainer;
+import android.window.ITaskOrganizer;
+import android.window.IWindowContainer;
import android.view.SurfaceControl;
-import android.view.WindowContainerTransaction;
+import android.window.WindowContainerTransaction;
import com.android.internal.os.SomeArgs;
import com.android.systemui.R;
diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java
index fe0940c..a0dff3f 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java
@@ -34,7 +34,7 @@
import android.util.Pair;
import android.view.DisplayInfo;
import android.view.IPinnedStackController;
-import android.view.WindowContainerTransaction;
+import android.window.WindowContainerTransaction;
import com.android.systemui.Dependency;
import com.android.systemui.UiOffloadThread;
diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/Divider.java b/packages/SystemUI/src/com/android/systemui/stackdivider/Divider.java
index d58cc73..3d52812 100644
--- a/packages/SystemUI/src/com/android/systemui/stackdivider/Divider.java
+++ b/packages/SystemUI/src/com/android/systemui/stackdivider/Divider.java
@@ -32,12 +32,12 @@
import android.os.RemoteException;
import android.provider.Settings;
import android.util.Slog;
-import android.view.IWindowContainer;
+import android.window.IWindowContainer;
import android.view.LayoutInflater;
import android.view.SurfaceControl;
import android.view.SurfaceSession;
import android.view.View;
-import android.view.WindowContainerTransaction;
+import android.window.WindowContainerTransaction;
import androidx.annotation.Nullable;
diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/SplitDisplayLayout.java b/packages/SystemUI/src/com/android/systemui/stackdivider/SplitDisplayLayout.java
index deead34..3b8addb 100644
--- a/packages/SystemUI/src/com/android/systemui/stackdivider/SplitDisplayLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/stackdivider/SplitDisplayLayout.java
@@ -32,7 +32,7 @@
import android.content.res.Resources;
import android.graphics.Rect;
import android.util.TypedValue;
-import android.view.WindowContainerTransaction;
+import android.window.WindowContainerTransaction;
import com.android.internal.policy.DividerSnapAlgorithm;
import com.android.internal.policy.DockedDividerUtils;
diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/SplitScreenTaskOrganizer.java b/packages/SystemUI/src/com/android/systemui/stackdivider/SplitScreenTaskOrganizer.java
index f1bb27a..f82936a 100644
--- a/packages/SystemUI/src/com/android/systemui/stackdivider/SplitScreenTaskOrganizer.java
+++ b/packages/SystemUI/src/com/android/systemui/stackdivider/SplitScreenTaskOrganizer.java
@@ -24,12 +24,12 @@
import static android.view.Display.DEFAULT_DISPLAY;
import android.app.ActivityManager.RunningTaskInfo;
-import android.app.ITaskOrganizerController;
+import android.window.ITaskOrganizerController;
import android.app.WindowConfiguration;
import android.os.RemoteException;
import android.util.Log;
import android.view.Display;
-import android.view.ITaskOrganizer;
+import android.window.ITaskOrganizer;
import android.view.SurfaceControl;
import android.view.SurfaceSession;
diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/WindowManagerProxy.java b/packages/SystemUI/src/com/android/systemui/stackdivider/WindowManagerProxy.java
index fea57a3..0e391ec 100644
--- a/packages/SystemUI/src/com/android/systemui/stackdivider/WindowManagerProxy.java
+++ b/packages/SystemUI/src/com/android/systemui/stackdivider/WindowManagerProxy.java
@@ -28,8 +28,8 @@
import android.os.RemoteException;
import android.util.Log;
import android.view.Display;
-import android.view.IWindowContainer;
-import android.view.WindowContainerTransaction;
+import android.window.IWindowContainer;
+import android.window.WindowContainerTransaction;
import android.view.WindowManagerGlobal;
import com.android.internal.annotations.GuardedBy;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/CrossFadeHelper.java b/packages/SystemUI/src/com/android/systemui/statusbar/CrossFadeHelper.java
index 164215b..b57b22f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/CrossFadeHelper.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/CrossFadeHelper.java
@@ -50,7 +50,9 @@
if (endRunnable != null) {
endRunnable.run();
}
- view.setVisibility(View.INVISIBLE);
+ if (view.getVisibility() != View.GONE) {
+ view.setVisibility(View.INVISIBLE);
+ }
}
});
if (view.hasOverlappingRendering()) {
@@ -75,7 +77,7 @@
*/
public static void fadeOut(View view, float fadeOutAmount, boolean remap) {
view.animate().cancel();
- if (fadeOutAmount == 1.0f) {
+ if (fadeOutAmount == 1.0f && view.getVisibility() != View.GONE) {
view.setVisibility(View.INVISIBLE);
} else if (view.getVisibility() == View.INVISIBLE) {
view.setVisibility(View.VISIBLE);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationHeaderUtil.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationHeaderUtil.java
index 4759d56..ba3db09 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationHeaderUtil.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationHeaderUtil.java
@@ -28,6 +28,7 @@
import android.widget.TextView;
import com.android.internal.util.ContrastColorUtil;
+import com.android.internal.widget.ConversationLayout;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
import com.android.systemui.statusbar.notification.row.NotificationContentView;
@@ -42,6 +43,7 @@
private static final TextViewComparator sTextViewComparator = new TextViewComparator();
private static final VisibilityApplicator sVisibilityApplicator = new VisibilityApplicator();
+ private static final VisibilityApplicator sAppNameApplicator = new AppNameApplicator();
private static final DataExtractor sIconExtractor = new DataExtractor() {
@Override
public Object extractData(ExpandableNotificationRow row) {
@@ -64,7 +66,7 @@
};
private final static ResultApplicator mGreyApplicator = new ResultApplicator() {
@Override
- public void apply(View view, boolean apply) {
+ public void apply(View parent, View view, boolean apply, boolean reset) {
NotificationHeaderView header = (NotificationHeaderView) view;
ImageView icon = (ImageView) view.findViewById(
com.android.internal.R.id.icon);
@@ -132,8 +134,12 @@
}
},
sVisibilityApplicator));
- mComparators.add(HeaderProcessor.forTextView(mRow,
- com.android.internal.R.id.app_name_text));
+ mComparators.add(new HeaderProcessor(
+ mRow,
+ com.android.internal.R.id.app_name_text,
+ null,
+ sTextViewComparator,
+ sAppNameApplicator));
mComparators.add(HeaderProcessor.forTextView(mRow,
com.android.internal.R.id.header_text));
mDividers.add(com.android.internal.R.id.header_text_divider);
@@ -299,19 +305,19 @@
public void apply(ExpandableNotificationRow row, boolean reset) {
boolean apply = mApply && !reset;
if (row.isSummaryWithChildren()) {
- applyToView(apply, row.getNotificationHeader());
+ applyToView(apply, reset, row.getNotificationHeader());
return;
}
- applyToView(apply, row.getPrivateLayout().getContractedChild());
- applyToView(apply, row.getPrivateLayout().getHeadsUpChild());
- applyToView(apply, row.getPrivateLayout().getExpandedChild());
+ applyToView(apply, reset, row.getPrivateLayout().getContractedChild());
+ applyToView(apply, reset, row.getPrivateLayout().getHeadsUpChild());
+ applyToView(apply, reset, row.getPrivateLayout().getExpandedChild());
}
- private void applyToView(boolean apply, View parent) {
+ private void applyToView(boolean apply, boolean reset, View parent) {
if (parent != null) {
View view = parent.findViewById(mId);
if (view != null && !mComparator.isEmpty(view)) {
- mApplicator.apply(view, apply);
+ mApplicator.apply(parent, view, apply, reset);
}
}
}
@@ -375,14 +381,26 @@
}
private interface ResultApplicator {
- void apply(View view, boolean apply);
+ void apply(View parent, View view, boolean apply, boolean reset);
}
private static class VisibilityApplicator implements ResultApplicator {
@Override
- public void apply(View view, boolean apply) {
+ public void apply(View parent, View view, boolean apply, boolean reset) {
view.setVisibility(apply ? View.GONE : View.VISIBLE);
}
}
+
+ private static class AppNameApplicator extends VisibilityApplicator {
+
+ @Override
+ public void apply(View parent, View view, boolean apply, boolean reset) {
+ if (reset && parent instanceof ConversationLayout) {
+ ConversationLayout layout = (ConversationLayout) parent;
+ apply = layout.shouldHideAppName();
+ }
+ super.apply(parent, view, apply, reset);
+ }
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ViewTransformationHelper.java b/packages/SystemUI/src/com/android/systemui/statusbar/ViewTransformationHelper.java
index 2a45bc2..83e51cd 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/ViewTransformationHelper.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/ViewTransformationHelper.java
@@ -49,6 +49,14 @@
mTransformedViews.put(key, transformedView);
}
+ public void addTransformedView(View transformedView) {
+ int key = transformedView.getId();
+ if (key == View.NO_ID) {
+ throw new IllegalArgumentException("View argument does not have a valid id");
+ }
+ addTransformedView(key, transformedView);
+ }
+
/**
* Add a view that transforms to a similar sibling, meaning that we should consider any mapping
* found treated as the same viewType. This is useful for imageViews, where it's hard to compare
@@ -62,6 +70,14 @@
mKeysTransformingToSimilar.add(key);
}
+ public void addViewTransformingToSimilar(View transformedView) {
+ int key = transformedView.getId();
+ if (key == View.NO_ID) {
+ throw new IllegalArgumentException("View argument does not have a valid id");
+ }
+ addViewTransformingToSimilar(key, transformedView);
+ }
+
public void reset() {
mTransformedViews.clear();
mKeysTransformingToSimilar.clear();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/MessagingLayoutTransformState.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/MessagingLayoutTransformState.java
index ccf5a0b..5ee4693 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/MessagingLayoutTransformState.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/MessagingLayoutTransformState.java
@@ -102,11 +102,11 @@
MessagingGroup matchingGroup = pairs.get(ownGroup);
if (!isGone(ownGroup)) {
if (matchingGroup != null) {
- transformGroups(ownGroup, matchingGroup, transformationAmount, to);
+ int totalTranslation = transformGroups(ownGroup, matchingGroup,
+ transformationAmount, to);
if (lastPairedGroup == null) {
lastPairedGroup = ownGroup;
if (to){
- float totalTranslation = ownGroup.getTop() - matchingGroup.getTop();
currentTranslation = matchingGroup.getAvatar().getTranslationY()
- totalTranslation;
} else {
@@ -229,14 +229,19 @@
return result;
}
- private void transformGroups(MessagingGroup ownGroup, MessagingGroup otherGroup,
+ /**
+ * Transform two groups towards each other.
+ *
+ * @return the total transformation distance that the group goes through
+ */
+ private int transformGroups(MessagingGroup ownGroup, MessagingGroup otherGroup,
float transformationAmount, boolean to) {
boolean useLinearTransformation =
otherGroup.getIsolatedMessage() == null && !mTransformInfo.isAnimating();
transformView(transformationAmount, to, ownGroup.getSenderView(), otherGroup.getSenderView(),
true /* sameAsAny */, useLinearTransformation);
- transformView(transformationAmount, to, ownGroup.getAvatar(), otherGroup.getAvatar(),
- true /* sameAsAny */, useLinearTransformation);
+ int totalAvatarTranslation = transformView(transformationAmount, to, ownGroup.getAvatar(),
+ otherGroup.getAvatar(), true /* sameAsAny */, useLinearTransformation);
List<MessagingMessage> ownMessages = ownGroup.getMessages();
List<MessagingMessage> otherMessages = otherGroup.getMessages();
float previousTranslation = 0;
@@ -264,8 +269,8 @@
messageAmount = 1.0f - messageAmount;
}
}
- transformView(messageAmount, to, child, otherChild, false, /* sameAsAny */
- useLinearTransformation);
+ int totalTranslation = transformView(messageAmount, to, child, otherChild,
+ false /* sameAsAny */, useLinearTransformation);
boolean otherIsIsolated = otherGroup.getIsolatedMessage() == otherChild;
if (messageAmount == 0.0f
&& (otherIsIsolated || otherGroup.isSingleLine())) {
@@ -278,23 +283,28 @@
} else if (ownGroup.getIsolatedMessage() == child || otherIsIsolated) {
// We don't want to add any translation for the image that is transforming
} else if (to) {
- float totalTranslation = child.getTop() + ownGroup.getTop()
- - otherChild.getTop() - otherChild.getTop();
previousTranslation = otherChild.getTranslationY() - totalTranslation;
} else {
previousTranslation = child.getTranslationY();
}
}
ownGroup.updateClipRect();
+ return totalAvatarTranslation;
}
- private void transformView(float transformationAmount, boolean to, View ownView,
+ /**
+ * Transform a view to another view.
+ *
+ * @return the total translationY this view goes through
+ */
+ private int transformView(float transformationAmount, boolean to, View ownView,
View otherView, boolean sameAsAny, boolean useLinearTransformation) {
TransformState ownState = TransformState.createFrom(ownView, mTransformInfo);
if (useLinearTransformation) {
ownState.setDefaultInterpolator(Interpolators.LINEAR);
}
ownState.setIsSameAsAnyView(sameAsAny && !isGone(otherView));
+ int totalTranslationDistance = 0;
if (to) {
if (otherView != null) {
TransformState otherState = TransformState.createFrom(otherView, mTransformInfo);
@@ -308,6 +318,8 @@
// since avatars serve as anchors for the rest of the layout transition
ownState.transformViewVerticalTo(otherState, transformationAmount);
}
+ totalTranslationDistance = ownState.getLaidOutLocationOnScreen()[1]
+ - otherState.getLaidOutLocationOnScreen()[1];
otherState.recycle();
} else {
ownState.disappear(transformationAmount, null);
@@ -325,12 +337,15 @@
// since avatars serve as anchors for the rest of the layout transition
ownState.transformViewVerticalFrom(otherState, transformationAmount);
}
+ totalTranslationDistance = ownState.getLaidOutLocationOnScreen()[1]
+ - otherState.getLaidOutLocationOnScreen()[1];
otherState.recycle();
} else {
ownState.appear(transformationAmount, null);
}
}
ownState.recycle();
+ return totalTranslationDistance;
}
private HashMap<MessagingGroup, MessagingGroup> findPairs(ArrayList<MessagingGroup> ownGroups,
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationConversationTemplateViewWrapper.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationConversationTemplateViewWrapper.kt
index 8b6081e..91a2e7c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationConversationTemplateViewWrapper.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationConversationTemplateViewWrapper.kt
@@ -30,41 +30,44 @@
import com.android.systemui.statusbar.notification.row.HybridNotificationView
/**
- * Wraps a notification containing a converation template
+ * Wraps a notification containing a conversation template
*/
class NotificationConversationTemplateViewWrapper constructor(
ctx: Context,
view: View,
row: ExpandableNotificationRow
-)
- : NotificationTemplateViewWrapper(ctx, view, row) {
+) : NotificationTemplateViewWrapper(ctx, view, row) {
- private val minHeightWithActions: Int
- private val conversationLayout: ConversationLayout
- private var conversationIcon: View? = null
- private var conversationBadge: View? = null
- private var expandButton: View? = null
+ private val minHeightWithActions: Int = NotificationUtils.getFontScaledHeight(
+ ctx,
+ R.dimen.notification_messaging_actions_min_height
+ )
+ private val conversationLayout: ConversationLayout = view as ConversationLayout
+
+ private lateinit var conversationIcon: View
+ private lateinit var conversationBadgeBg: View
+ private lateinit var expandButton: View
private lateinit var expandButtonContainer: View
private lateinit var imageMessageContainer: ViewGroup
- private var messagingLinearLayout: MessagingLinearLayout? = null
-
- init {
- conversationLayout = view as ConversationLayout
- minHeightWithActions = NotificationUtils.getFontScaledHeight(ctx,
- R.dimen.notification_messaging_actions_min_height)
- }
+ private lateinit var messagingLinearLayout: MessagingLinearLayout
+ private lateinit var conversationTitle: View
+ private lateinit var importanceRing: View
+ private lateinit var appName: View
private fun resolveViews() {
messagingLinearLayout = conversationLayout.messagingLinearLayout
imageMessageContainer = conversationLayout.imageMessageContainer
- conversationIcon = conversationLayout.requireViewById(
- com.android.internal.R.id.conversation_icon)
- conversationBadge = conversationLayout.requireViewById(
- com.android.internal.R.id.conversation_icon_badge)
- expandButton = conversationLayout.requireViewById(
- com.android.internal.R.id.expand_button)
- expandButtonContainer = conversationLayout.requireViewById(
- com.android.internal.R.id.expand_button_container)
+ with(conversationLayout) {
+ conversationIcon = requireViewById(com.android.internal.R.id.conversation_icon)
+ conversationBadgeBg =
+ requireViewById(com.android.internal.R.id.conversation_icon_badge_bg)
+ expandButton = requireViewById(com.android.internal.R.id.expand_button)
+ expandButtonContainer =
+ requireViewById(com.android.internal.R.id.expand_button_container)
+ importanceRing = requireViewById(com.android.internal.R.id.conversation_icon_badge_ring)
+ appName = requireViewById(com.android.internal.R.id.app_name_text)
+ conversationTitle = requireViewById(com.android.internal.R.id.conversation_text)
+ }
}
override fun onContentUpdated(row: ExpandableNotificationRow) {
@@ -77,71 +80,69 @@
override fun updateTransformedTypes() {
// This also clears the existing types
super.updateTransformedTypes()
- messagingLinearLayout?.let {
- mTransformationHelper.addTransformedView(it.id, it)
- }
+
+ addTransformedViews(
+ messagingLinearLayout,
+ appName,
+ conversationTitle)
// Let's ignore the image message container since that is transforming as part of the
// messages already
mTransformationHelper.setCustomTransformation(
object : ViewTransformationHelper.CustomTransformation() {
- override fun transformTo(ownState: TransformState,
- otherView: TransformableView,
- transformationAmount: Float): Boolean {
- if (otherView is HybridNotificationView) {
- return false
- }
- // we're hidden by default by the transformState
- ownState.ensureVisible();
- // Let's do nothing otherwise, this is already handled by the messages
- return true
- }
+ override fun transformTo(
+ ownState: TransformState,
+ otherView: TransformableView,
+ transformationAmount: Float
+ ): Boolean {
+ if (otherView is HybridNotificationView) {
+ return false
+ }
+ // we're hidden by default by the transformState
+ ownState.ensureVisible()
+ // Let's do nothing otherwise, this is already handled by the messages
+ return true
+ }
- override fun transformFrom(ownState: TransformState,
- otherView: TransformableView,
- transformationAmount: Float): Boolean {
- if (otherView is HybridNotificationView) {
- return false
- }
- // we're hidden by default by the transformState
- ownState.ensureVisible();
- // Let's do nothing otherwise, this is already handled by the messages
- return true
- }
- }, imageMessageContainer.id)
+ override fun transformFrom(
+ ownState: TransformState,
+ otherView: TransformableView,
+ transformationAmount: Float
+ ): Boolean =
+ transformTo(ownState, otherView, transformationAmount)
+ },
+ imageMessageContainer.id
+ )
- conversationIcon?.let {
- mTransformationHelper.addViewTransformingToSimilar(it.id, it)
- }
- conversationBadge?.let {
- mTransformationHelper.addViewTransformingToSimilar(it.id, it)
- }
- expandButton?.let {
- mTransformationHelper.addViewTransformingToSimilar(it.id, it)
- }
+ addViewsTransformingToSimilar(
+ conversationIcon,
+ conversationBadgeBg,
+ expandButton,
+ importanceRing
+ )
}
- override fun setRemoteInputVisible(visible: Boolean) {
- conversationLayout.showHistoricMessages(visible)
- }
+ override fun setRemoteInputVisible(visible: Boolean) =
+ conversationLayout.showHistoricMessages(visible)
- override fun updateExpandability(expandable: Boolean, onClickListener: View.OnClickListener?) {
- conversationLayout.updateExpandability(expandable, onClickListener)
- }
+ override fun updateExpandability(expandable: Boolean, onClickListener: View.OnClickListener?) =
+ conversationLayout.updateExpandability(expandable, onClickListener)
override fun disallowSingleClick(x: Float, y: Float): Boolean {
- if (expandButtonContainer.visibility == View.VISIBLE
- && isOnView(expandButtonContainer, x, y)) {
- return true
- }
- return super.disallowSingleClick(x, y)
+ val isOnExpandButton = expandButtonContainer.visibility == View.VISIBLE &&
+ isOnView(expandButtonContainer, x, y)
+ return isOnExpandButton || super.disallowSingleClick(x, y)
}
- override fun getMinLayoutHeight(): Int {
- if (mActionsContainer != null && mActionsContainer.visibility != View.GONE) {
- return minHeightWithActions
- } else {
- return super.getMinLayoutHeight()
- }
- }
+ override fun getMinLayoutHeight(): Int =
+ if (mActionsContainer != null && mActionsContainer.visibility != View.GONE)
+ minHeightWithActions
+ else
+ super.getMinLayoutHeight()
+
+ private fun addTransformedViews(vararg vs: View) =
+ vs.forEach(mTransformationHelper::addTransformedView)
+
+ private fun addViewsTransformingToSimilar(vararg vs: View) =
+ vs.forEach(mTransformationHelper::addViewTransformingToSimilar)
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationHeaderViewWrapper.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationHeaderViewWrapper.java
index 1d06198..a44ad3d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationHeaderViewWrapper.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationHeaderViewWrapper.java
@@ -132,11 +132,6 @@
updateCropToPaddingForImageViews();
Notification notification = row.getEntry().getSbn().getNotification();
mIcon.setTag(ImageTransformState.ICON_TAG, notification.getSmallIcon());
- if (mWorkProfileImage != null) {
- // The work profile image is always the same lets just set the icon tag for it not to
- // animate
- mWorkProfileImage.setTag(ImageTransformState.ICON_TAG, notification.getSmallIcon());
- }
// We need to reset all views that are no longer transforming in case a view was previously
// transformed, but now we decided to transform its container instead.
@@ -183,6 +178,7 @@
mTransformationHelper.reset();
mTransformationHelper.addTransformedView(TransformableView.TRANSFORMING_VIEW_ICON,
mIcon);
+ mTransformationHelper.addViewTransformingToSimilar(mWorkProfileImage);
if (mIsLowPriority && mHeaderText != null) {
mTransformationHelper.addTransformedView(TransformableView.TRANSFORMING_VIEW_TITLE,
mHeaderText);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardUserSwitcher.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardUserSwitcher.java
index 2abae3e..7d54981 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardUserSwitcher.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardUserSwitcher.java
@@ -60,7 +60,8 @@
KeyguardStatusBarView statusBarView,
NotificationPanelViewController panelViewController) {
boolean keyguardUserSwitcherEnabled =
- context.getResources().getBoolean(R.bool.config_keyguardUserSwitcher) || ALWAYS_ON;
+ context.getResources().getBoolean(
+ com.android.internal.R.bool.config_keyguardUserSwitcher) || ALWAYS_ON;
UserSwitcherController userSwitcherController = Dependency.get(UserSwitcherController.class);
if (userSwitcherController != null && keyguardUserSwitcherEnabled) {
mUserSwitcherContainer = (Container) userSwitcher.inflate();
diff --git a/packages/SystemUI/src/com/android/systemui/wm/DisplayChangeController.java b/packages/SystemUI/src/com/android/systemui/wm/DisplayChangeController.java
index 66bc306..6eba9ac 100644
--- a/packages/SystemUI/src/com/android/systemui/wm/DisplayChangeController.java
+++ b/packages/SystemUI/src/com/android/systemui/wm/DisplayChangeController.java
@@ -21,7 +21,7 @@
import android.view.IDisplayWindowRotationCallback;
import android.view.IDisplayWindowRotationController;
import android.view.IWindowManager;
-import android.view.WindowContainerTransaction;
+import android.window.WindowContainerTransaction;
import java.util.ArrayList;
diff --git a/packages/Tethering/Android.bp b/packages/Tethering/Android.bp
index 0c37235..190b443 100644
--- a/packages/Tethering/Android.bp
+++ b/packages/Tethering/Android.bp
@@ -16,9 +16,7 @@
java_defaults {
name: "TetheringAndroidLibraryDefaults",
- // TODO (b/146757305): change to module API once available
- // TODO (b/148190005): change to module-libs-api-stubs-current once it is ready.
- sdk_version: "core_platform",
+ sdk_version: "module_current",
srcs: [
"src/**/*.java",
":framework-tethering-shared-srcs",
@@ -35,15 +33,10 @@
"net-utils-framework-common",
],
libs: [
- // Order matters: framework-tethering needs to be before the system stubs, otherwise
- // hidden fields in the framework-tethering classes (which are also used to generate stubs)
- // will not be found.
"framework-tethering",
- "android_system_stubs_current",
- "framework-res",
+ "framework-telephony-stubs",
+ "framework-wifi-stubs-systemapi",
"unsupportedappusage",
- "android_system_stubs_current",
- "framework-res",
],
plugins: ["java_api_finder"],
manifest: "AndroidManifestBase.xml",
@@ -91,9 +84,7 @@
// Common defaults for compiling the actual APK.
java_defaults {
name: "TetheringAppDefaults",
- // TODO (b/146757305): change to module API once available
- // TODO (b/148190005): change to module-libs-api-stubs-current once it is ready.
- sdk_version: "core_platform",
+ sdk_version: "module_current",
privileged: true,
jni_libs: [
"libtetherutilsjni",
@@ -102,12 +93,7 @@
"res",
],
libs: [
- // Order matters: framework-tethering needs to be before the system stubs, otherwise
- // hidden fields in the framework-tethering classes (which are also used to generate stubs)
- // will not be found.
"framework-tethering",
- "android_system_stubs_current",
- "framework-res",
],
jarjar_rules: "jarjar-rules.txt",
optimize: {
diff --git a/packages/Tethering/common/TetheringLib/api/module-lib-current.txt b/packages/Tethering/common/TetheringLib/api/module-lib-current.txt
index e823e17..754584e 100644
--- a/packages/Tethering/common/TetheringLib/api/module-lib-current.txt
+++ b/packages/Tethering/common/TetheringLib/api/module-lib-current.txt
@@ -110,16 +110,16 @@
}
public static class TetheringManager.TetheringRequest {
- }
-
- public static class TetheringManager.TetheringRequest.Builder {
- ctor public TetheringManager.TetheringRequest.Builder(int);
- method @NonNull public android.net.TetheringManager.TetheringRequest build();
method @Nullable public android.net.LinkAddress getClientStaticIpv4Address();
method @Nullable public android.net.LinkAddress getLocalIpv4Address();
method public boolean getShouldShowEntitlementUi();
method public int getTetheringType();
method public boolean isExemptFromEntitlementCheck();
+ }
+
+ public static class TetheringManager.TetheringRequest.Builder {
+ ctor public TetheringManager.TetheringRequest.Builder(int);
+ method @NonNull public android.net.TetheringManager.TetheringRequest build();
method @NonNull @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public android.net.TetheringManager.TetheringRequest.Builder setExemptFromEntitlementCheck(boolean);
method @NonNull @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public android.net.TetheringManager.TetheringRequest.Builder setShouldShowEntitlementUi(boolean);
method @NonNull @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public android.net.TetheringManager.TetheringRequest.Builder setStaticIpv4Addresses(@NonNull android.net.LinkAddress, @NonNull android.net.LinkAddress);
diff --git a/packages/Tethering/common/TetheringLib/api/system-current.txt b/packages/Tethering/common/TetheringLib/api/system-current.txt
index 4ac44ba..edd1ebb 100644
--- a/packages/Tethering/common/TetheringLib/api/system-current.txt
+++ b/packages/Tethering/common/TetheringLib/api/system-current.txt
@@ -80,16 +80,16 @@
}
public static class TetheringManager.TetheringRequest {
- }
-
- public static class TetheringManager.TetheringRequest.Builder {
- ctor public TetheringManager.TetheringRequest.Builder(int);
- method @NonNull public android.net.TetheringManager.TetheringRequest build();
method @Nullable public android.net.LinkAddress getClientStaticIpv4Address();
method @Nullable public android.net.LinkAddress getLocalIpv4Address();
method public boolean getShouldShowEntitlementUi();
method public int getTetheringType();
method public boolean isExemptFromEntitlementCheck();
+ }
+
+ public static class TetheringManager.TetheringRequest.Builder {
+ ctor public TetheringManager.TetheringRequest.Builder(int);
+ method @NonNull public android.net.TetheringManager.TetheringRequest build();
method @NonNull @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public android.net.TetheringManager.TetheringRequest.Builder setExemptFromEntitlementCheck(boolean);
method @NonNull @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public android.net.TetheringManager.TetheringRequest.Builder setShouldShowEntitlementUi(boolean);
method @NonNull @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public android.net.TetheringManager.TetheringRequest.Builder setStaticIpv4Addresses(@NonNull android.net.LinkAddress, @NonNull android.net.LinkAddress);
diff --git a/packages/Tethering/common/TetheringLib/src/android/net/TetheringManager.java b/packages/Tethering/common/TetheringLib/src/android/net/TetheringManager.java
index bd65fc2..3509801 100644
--- a/packages/Tethering/common/TetheringLib/src/android/net/TetheringManager.java
+++ b/packages/Tethering/common/TetheringLib/src/android/net/TetheringManager.java
@@ -620,33 +620,40 @@
public TetheringRequest build() {
return new TetheringRequest(mBuilderParcel);
}
+ }
- @Nullable
- public LinkAddress getLocalIpv4Address() {
- return mBuilderParcel.localIPv4Address;
- }
+ /**
+ * Get the local IPv4 address, if one was configured with
+ * {@link Builder#setStaticIpv4Addresses}.
+ */
+ @Nullable
+ public LinkAddress getLocalIpv4Address() {
+ return mRequestParcel.localIPv4Address;
+ }
- /** Get static client address. */
- @Nullable
- public LinkAddress getClientStaticIpv4Address() {
- return mBuilderParcel.staticClientAddress;
- }
+ /**
+ * Get the static IPv4 address of the client, if one was configured with
+ * {@link Builder#setStaticIpv4Addresses}.
+ */
+ @Nullable
+ public LinkAddress getClientStaticIpv4Address() {
+ return mRequestParcel.staticClientAddress;
+ }
- /** Get tethering type. */
- @TetheringType
- public int getTetheringType() {
- return mBuilderParcel.tetheringType;
- }
+ /** Get tethering type. */
+ @TetheringType
+ public int getTetheringType() {
+ return mRequestParcel.tetheringType;
+ }
- /** Check if exempt from entitlement check. */
- public boolean isExemptFromEntitlementCheck() {
- return mBuilderParcel.exemptFromEntitlementCheck;
- }
+ /** Check if exempt from entitlement check. */
+ public boolean isExemptFromEntitlementCheck() {
+ return mRequestParcel.exemptFromEntitlementCheck;
+ }
- /** Check if show entitlement ui. */
- public boolean getShouldShowEntitlementUi() {
- return mBuilderParcel.showProvisioningUi;
- }
+ /** Check if show entitlement ui. */
+ public boolean getShouldShowEntitlementUi() {
+ return mRequestParcel.showProvisioningUi;
}
/**
diff --git a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java
index 260703d..8c1360c 100644
--- a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java
+++ b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java
@@ -35,6 +35,8 @@
import android.app.PendingIntent;
import android.app.admin.DevicePolicyManagerInternal;
import android.app.admin.DevicePolicyManagerInternal.OnCrossProfileWidgetProvidersChangeListener;
+import android.app.usage.UsageEvents;
+import android.app.usage.UsageStatsManagerInternal;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetManagerInternal;
import android.appwidget.AppWidgetProviderInfo;
@@ -235,6 +237,7 @@
private PackageManagerInternal mPackageManagerInternal;
private ActivityManagerInternal mActivityManagerInternal;
private AppOpsManagerInternal mAppOpsManagerInternal;
+ private UsageStatsManagerInternal mUsageStatsManagerInternal;
private SecurityPolicy mSecurityPolicy;
@@ -278,6 +281,7 @@
void systemServicesReady() {
mActivityManagerInternal = LocalServices.getService(ActivityManagerInternal.class);
mAppOpsManagerInternal = LocalServices.getService(AppOpsManagerInternal.class);
+ mUsageStatsManagerInternal = LocalServices.getService(UsageStatsManagerInternal.class);
}
private void computeMaximumWidgetBitmapMemory() {
@@ -879,8 +883,6 @@
outUpdates.add(updatesMap.valueAt(j));
}
}
- updateAppOpsLocked(host, true);
-
// Reset the update counter once all the updates have been calculated
host.lastWidgetUpdateSequenceNo = updateSequenceNo;
return new ParceledListSlice<>(outUpdates);
@@ -909,7 +911,7 @@
if (host != null) {
host.callbacks = null;
pruneHostLocked(host);
- updateAppOpsLocked(host, false);
+ mAppOpsManagerInternal.updateAppWidgetVisibility(host.getWidgetUids(), false);
}
}
}
@@ -3646,26 +3648,49 @@
return false;
}
- private void updateAppOpsLocked(Host host, boolean visible) {
- if (visible) {
- final int procState = mActivityManagerInternal.getUidProcessState(host.id.uid);
+ /**
+ * Note an app widget is tapped on. If a app widget is tapped, the underlying app is treated as
+ * foreground so the app can get while-in-use permission.
+ *
+ * @param uid UID of the underlying app.
+ * @param packageName Package name of the app.
+ */
+ @Override
+ public void noteAppWidgetTapped(int uid, String packageName) {
+ final int callingUid = Binder.getCallingUid();
+ final long ident = Binder.clearCallingIdentity();
+ try {
+ // The launcher must be at TOP.
+ final int procState = mActivityManagerInternal.getUidProcessState(callingUid);
if (procState > ActivityManager.PROCESS_STATE_TOP) {
- // The launcher must be at TOP.
return;
}
- }
- final List<ResolveInfo> allHomeCandidates = new ArrayList<>();
- // Default launcher from package manager.
- final ComponentName defaultLauncher = mPackageManagerInternal
- .getHomeActivitiesAsUser(allHomeCandidates, UserHandle.getUserId(host.id.uid));
- // The launcher must be default launcher.
- if (defaultLauncher == null
- || !defaultLauncher.getPackageName().equals(host.id.packageName)) {
- return;
+ // Default launcher from package manager.
+ final ComponentName defaultLauncher = mPackageManagerInternal
+ .getDefaultHomeActivity(UserHandle.getUserId(callingUid));
+ int defaultLauncherUid = 0;
+ try {
+ defaultLauncherUid = mPackageManager.getApplicationInfo(
+ defaultLauncher.getPackageName(), 0 ,
+ UserHandle.getUserId(callingUid)).uid;
+ } catch (RemoteException e) {
+ Slog.e(TAG, "Failed to getApplicationInfo for package:"
+ + defaultLauncher.getPackageName(), e);
+ return;
+ }
+ // The callingUid must be default launcher uid.
+ if (defaultLauncherUid != callingUid) {
+ return;
+ }
+ final SparseArray<String> uid2PackageName = new SparseArray<String>();
+ uid2PackageName.put(uid, packageName);
+ mAppOpsManagerInternal.updateAppWidgetVisibility(uid2PackageName, true);
+ mUsageStatsManagerInternal.reportEvent(packageName, UserHandle.getUserId(uid),
+ UsageEvents.Event.USER_INTERACTION);
+ } finally {
+ Binder.restoreCallingIdentity(ident);
}
-
- mAppOpsManagerInternal.updateAppWidgetVisibility(host.getWidgetUids(), visible);
}
private final class CallbackHandler extends Handler {
diff --git a/services/autofill/java/com/android/server/autofill/RemoteAugmentedAutofillService.java b/services/autofill/java/com/android/server/autofill/RemoteAugmentedAutofillService.java
index b4b0641..8b50b01 100644
--- a/services/autofill/java/com/android/server/autofill/RemoteAugmentedAutofillService.java
+++ b/services/autofill/java/com/android/server/autofill/RemoteAugmentedAutofillService.java
@@ -28,6 +28,7 @@
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
+import android.content.IntentSender;
import android.content.pm.PackageManager;
import android.content.pm.ServiceInfo;
import android.os.Bundle;
@@ -250,23 +251,31 @@
final InlineSuggestionsResponse inlineSuggestionsResponse =
InlineSuggestionFactory.createAugmentedInlineSuggestionsResponse(
request, inlineSuggestionsData, focusedId,
- dataset -> {
- mCallbacks.logAugmentedAutofillSelected(sessionId,
- dataset.getId());
- try {
- final ArrayList<AutofillId> fieldIds = dataset.getFieldIds();
- final int size = fieldIds.size();
- final boolean hideHighlight = size == 1
- && fieldIds.get(0).equals(focusedId);
- if (dataset.getAuthentication() != null) {
- client.startIntentSender(dataset.getAuthentication(),
- new Intent());
- } else {
+ new InlineSuggestionFactory.InlineSuggestionUiCallback() {
+ @Override
+ public void autofill(Dataset dataset) {
+ mCallbacks.logAugmentedAutofillSelected(sessionId,
+ dataset.getId());
+ try {
+ final ArrayList<AutofillId> fieldIds = dataset.getFieldIds();
+ final int size = fieldIds.size();
+ final boolean hideHighlight = size == 1
+ && fieldIds.get(0).equals(focusedId);
client.autofill(sessionId, fieldIds, dataset.getFieldValues(),
hideHighlight);
+ } catch (RemoteException e) {
+ Slog.w(TAG, "Encounter exception autofilling the values");
}
- } catch (RemoteException e) {
- Slog.w(TAG, "Encounter exception autofilling the values");
+ }
+
+ @Override
+ public void startIntentSender(IntentSender intentSender,
+ Intent intent) {
+ try {
+ client.startIntentSender(intentSender, intent);
+ } catch (RemoteException e) {
+ Slog.w(TAG, "RemoteException starting intent sender");
+ }
}
}, onErrorCallback, remoteRenderService);
diff --git a/services/autofill/java/com/android/server/autofill/Session.java b/services/autofill/java/com/android/server/autofill/Session.java
index 8032e9b..e942b27 100644
--- a/services/autofill/java/com/android/server/autofill/Session.java
+++ b/services/autofill/java/com/android/server/autofill/Session.java
@@ -2604,17 +2604,20 @@
@GuardedBy("mLock")
private void updateViewStateAndUiOnValueChangedLocked(AutofillId id, AutofillValue value,
ViewState viewState, int flags) {
- viewState.setCurrentValue(value);
-
- final String filterText;
+ final String textValue;
if (value == null || !value.isText()) {
- filterText = null;
+ textValue = null;
} else {
final CharSequence text = value.getTextValue();
// Text should never be null, but it doesn't hurt to check to avoid a
// system crash...
- filterText = (text == null) ? null : text.toString();
+ textValue = (text == null) ? null : text.toString();
}
+ updateFilteringStateOnValueChangedLocked(textValue, viewState);
+
+ viewState.setCurrentValue(value);
+
+ final String filterText = textValue;
final AutofillValue filledValue = viewState.getAutofilledValue();
if (filledValue != null) {
@@ -2645,6 +2648,52 @@
getUiForShowing().filterFillUi(filterText, this);
}
+ /**
+ * Disable filtering of inline suggestions for further text changes in this view if any
+ * character was removed earlier and now any character is being added. Such behaviour may
+ * indicate the IME attempting to probe the potentially sensitive content of inline suggestions.
+ */
+ @GuardedBy("mLock")
+ private void updateFilteringStateOnValueChangedLocked(@Nullable String newTextValue,
+ ViewState viewState) {
+ if (newTextValue == null) {
+ // Don't just return here, otherwise the IME can circumvent this logic using non-text
+ // values.
+ newTextValue = "";
+ }
+ final AutofillValue currentValue = viewState.getCurrentValue();
+ final String currentTextValue;
+ if (currentValue == null || !currentValue.isText()) {
+ currentTextValue = "";
+ } else {
+ currentTextValue = currentValue.getTextValue().toString();
+ }
+
+ if ((viewState.getState() & ViewState.STATE_CHAR_REMOVED) == 0) {
+ if (!containsCharsInOrder(newTextValue, currentTextValue)) {
+ viewState.setState(ViewState.STATE_CHAR_REMOVED);
+ }
+ } else if (!containsCharsInOrder(currentTextValue, newTextValue)) {
+ // Characters were added or replaced.
+ viewState.setState(ViewState.STATE_INLINE_DISABLED);
+ }
+ }
+
+ /**
+ * Returns true if {@code s1} contains all characters of {@code s2}, in order.
+ */
+ private static boolean containsCharsInOrder(String s1, String s2) {
+ int prevIndex = -1;
+ for (char ch : s2.toCharArray()) {
+ int index = TextUtils.indexOf(s1, ch, prevIndex + 1);
+ if (index == -1) {
+ return false;
+ }
+ prevIndex = index;
+ }
+ return true;
+ }
+
@Override
public void onFillReady(@NonNull FillResponse response, @NonNull AutofillId filledId,
@Nullable AutofillValue value) {
@@ -2735,6 +2784,10 @@
return false;
}
+ final ViewState currentView = mViewStates.get(mCurrentViewId);
+ if ((currentView.getState() & ViewState.STATE_INLINE_DISABLED) != 0) {
+ response.getDatasets().clear();
+ }
InlineSuggestionsResponse inlineSuggestionsResponse =
InlineSuggestionFactory.createInlineSuggestionsResponse(
inlineSuggestionsRequest.get(), response, filterText, mCurrentViewId,
diff --git a/services/autofill/java/com/android/server/autofill/ViewState.java b/services/autofill/java/com/android/server/autofill/ViewState.java
index f7c24f0..9114576 100644
--- a/services/autofill/java/com/android/server/autofill/ViewState.java
+++ b/services/autofill/java/com/android/server/autofill/ViewState.java
@@ -76,6 +76,10 @@
public static final int STATE_TRIGGERED_AUGMENTED_AUTOFILL = 0x1000;
/** Inline suggestions were shown for this View. */
public static final int STATE_INLINE_SHOWN = 0x2000;
+ /** A character was removed from the View value (not by the service). */
+ public static final int STATE_CHAR_REMOVED = 0x4000;
+ /** Showing inline suggestions is not allowed for this View. */
+ public static final int STATE_INLINE_DISABLED = 0x8000;
public final AutofillId id;
diff --git a/services/autofill/java/com/android/server/autofill/ui/InlineSuggestionFactory.java b/services/autofill/java/com/android/server/autofill/ui/InlineSuggestionFactory.java
index c26d7ee..e98ac75 100644
--- a/services/autofill/java/com/android/server/autofill/ui/InlineSuggestionFactory.java
+++ b/services/autofill/java/com/android/server/autofill/ui/InlineSuggestionFactory.java
@@ -21,6 +21,8 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.content.Intent;
+import android.content.IntentSender;
import android.os.IBinder;
import android.os.RemoteException;
import android.service.autofill.Dataset;
@@ -49,6 +51,7 @@
import java.util.ArrayList;
import java.util.List;
import java.util.function.BiConsumer;
+import java.util.function.Consumer;
import java.util.regex.Pattern;
public final class InlineSuggestionFactory {
@@ -62,6 +65,11 @@
* Callback to autofill a dataset to the client app.
*/
void autofill(@NonNull Dataset dataset);
+
+ /**
+ * Callback to start Intent in client app.
+ */
+ void startIntentSender(@NonNull IntentSender intentSender, @NonNull Intent intent);
}
/**
@@ -94,7 +102,8 @@
response.getAuthentication() == null ? null : response.getInlinePresentation();
return createInlineSuggestionsResponseInternal(/* isAugmented= */ false, request,
response.getDatasets(), filterText, inlineAuthentication, autofillId,
- onErrorCallback, onClickFactory, remoteRenderService);
+ onErrorCallback, onClickFactory, (intentSender) ->
+ client.startIntentSender(intentSender, new Intent()), remoteRenderService);
}
/**
@@ -111,8 +120,12 @@
if (sDebug) Slog.d(TAG, "createAugmentedInlineSuggestionsResponse called");
return createInlineSuggestionsResponseInternal(/* isAugmented= */ true, request,
datasets, /* filterText= */ null, /* inlineAuthentication= */ null,
- autofillId, onErrorCallback, (dataset, datasetIndex) ->
- inlineSuggestionUiCallback.autofill(dataset), remoteRenderService);
+ autofillId, onErrorCallback,
+ (dataset, datasetIndex) ->
+ inlineSuggestionUiCallback.autofill(dataset),
+ (intentSender) ->
+ inlineSuggestionUiCallback.startIntentSender(intentSender, new Intent()),
+ remoteRenderService);
}
@Nullable
@@ -121,12 +134,13 @@
@Nullable List<Dataset> datasets, @Nullable String filterText,
@Nullable InlinePresentation inlineAuthentication, @NonNull AutofillId autofillId,
@NonNull Runnable onErrorCallback, @NonNull BiConsumer<Dataset, Integer> onClickFactory,
+ @NonNull Consumer<IntentSender> intentSenderConsumer,
@Nullable RemoteInlineSuggestionRenderService remoteRenderService) {
final ArrayList<InlineSuggestion> inlineSuggestions = new ArrayList<>();
if (inlineAuthentication != null) {
InlineSuggestion inlineAuthSuggestion = createInlineAuthSuggestion(inlineAuthentication,
- remoteRenderService, onClickFactory, onErrorCallback,
+ remoteRenderService, onClickFactory, onErrorCallback, intentSenderConsumer,
request.getHostInputToken(), request.getHostDisplayId());
inlineSuggestions.add(inlineAuthSuggestion);
@@ -157,7 +171,7 @@
InlineSuggestion inlineSuggestion = createInlineSuggestion(isAugmented, dataset,
datasetIndex,
mergedInlinePresentation(request, datasetIndex, inlinePresentation),
- onClickFactory, remoteRenderService, onErrorCallback,
+ onClickFactory, remoteRenderService, onErrorCallback, intentSenderConsumer,
request.getHostInputToken(), request.getHostDisplayId());
inlineSuggestions.add(inlineSuggestion);
@@ -201,7 +215,8 @@
@NonNull InlinePresentation inlinePresentation,
@NonNull BiConsumer<Dataset, Integer> onClickFactory,
@NonNull RemoteInlineSuggestionRenderService remoteRenderService,
- @NonNull Runnable onErrorCallback, @Nullable IBinder hostInputToken,
+ @NonNull Runnable onErrorCallback, @NonNull Consumer<IntentSender> intentSenderConsumer,
+ @Nullable IBinder hostInputToken,
int displayId) {
final String suggestionSource = isAugmented ? InlineSuggestionInfo.SOURCE_PLATFORM
: InlineSuggestionInfo.SOURCE_AUTOFILL;
@@ -216,7 +231,7 @@
final InlineSuggestion inlineSuggestion = new InlineSuggestion(inlineSuggestionInfo,
createInlineContentProvider(inlinePresentation,
() -> onClickFactory.accept(dataset, datasetIndex), onErrorCallback,
- remoteRenderService, hostInputToken, displayId));
+ intentSenderConsumer, remoteRenderService, hostInputToken, displayId));
return inlineSuggestion;
}
@@ -225,6 +240,7 @@
@NonNull InlinePresentation inlinePresentation,
@NonNull RemoteInlineSuggestionRenderService remoteRenderService,
@NonNull BiConsumer<Dataset, Integer> onClickFactory, @NonNull Runnable onErrorCallback,
+ @NonNull Consumer<IntentSender> intentSenderConsumer,
@Nullable IBinder hostInputToken, int displayId) {
final InlineSuggestionInfo inlineSuggestionInfo = new InlineSuggestionInfo(
inlinePresentation.getInlinePresentationSpec(),
@@ -235,7 +251,8 @@
createInlineContentProvider(inlinePresentation,
() -> onClickFactory.accept(null,
AutofillManager.AUTHENTICATION_ID_DATASET_ID_UNDEFINED),
- onErrorCallback, remoteRenderService, hostInputToken, displayId));
+ onErrorCallback, intentSenderConsumer, remoteRenderService, hostInputToken,
+ displayId));
}
/**
@@ -261,6 +278,7 @@
private static IInlineContentProvider.Stub createInlineContentProvider(
@NonNull InlinePresentation inlinePresentation, @Nullable Runnable onClickAction,
@NonNull Runnable onErrorCallback,
+ @NonNull Consumer<IntentSender> intentSenderConsumer,
@Nullable RemoteInlineSuggestionRenderService remoteRenderService,
@Nullable IBinder hostInputToken,
int displayId) {
@@ -269,7 +287,7 @@
public void provideContent(int width, int height, IInlineContentCallback callback) {
UiThread.getHandler().post(() -> {
final IInlineSuggestionUiCallback uiCallback = createInlineSuggestionUiCallback(
- callback, onClickAction, onErrorCallback);
+ callback, onClickAction, onErrorCallback, intentSenderConsumer);
if (remoteRenderService == null) {
Slog.e(TAG, "RemoteInlineSuggestionRenderService is null");
@@ -285,7 +303,8 @@
private static IInlineSuggestionUiCallback.Stub createInlineSuggestionUiCallback(
@NonNull IInlineContentCallback callback, @NonNull Runnable onAutofillCallback,
- @NonNull Runnable onErrorCallback) {
+ @NonNull Runnable onErrorCallback,
+ @NonNull Consumer<IntentSender> intentSenderConsumer) {
return new IInlineSuggestionUiCallback.Stub() {
@Override
public void onClick() throws RemoteException {
@@ -320,6 +339,11 @@
onErrorCallback.run();
}
}
+
+ @Override
+ public void onStartIntentSender(IntentSender intentSender) {
+ intentSenderConsumer.accept(intentSender);
+ }
};
}
diff --git a/services/core/java/com/android/server/UiModeManagerService.java b/services/core/java/com/android/server/UiModeManagerService.java
index 12a1a95..564f9f3 100644
--- a/services/core/java/com/android/server/UiModeManagerService.java
+++ b/services/core/java/com/android/server/UiModeManagerService.java
@@ -159,22 +159,13 @@
public UiModeManagerService(Context context) {
super(context);
+ mConfiguration.setToDefaults();
}
@VisibleForTesting
- protected UiModeManagerService(Context context, WindowManagerInternal wm, AlarmManager am,
- PowerManager pm, PowerManager.WakeLock wl, TwilightManager tm,
- PowerManagerInternal localPowerManager,
- boolean setupWizardComplete) {
- super(context);
- mWindowManager = wm;
- mWakeLock = wl;
- mTwilightManager = tm;
+ protected UiModeManagerService(Context context, boolean setupWizardComplete) {
+ this(context);
mSetupWizardComplete = setupWizardComplete;
- mAlarmManager = am;
- mPowerManager = pm;
- mLocalPowerManager = localPowerManager;
- initPowerSave();
}
private static Intent buildHomeIntent(String category) {
@@ -249,8 +240,8 @@
};
/**
- * DO NOT USE DIRECTLY
- * see register registerScreenOffEvent and unregisterScreenOffEvent
+ * DO NOT USE DIRECTLY
+ * see register registerScreenOffEvent and unregisterScreenOffEvent
*/
private final BroadcastReceiver mOnScreenOffHandler = new BroadcastReceiver() {
@Override
@@ -333,34 +324,45 @@
}
@Override
+ public void onBootPhase(int phase) {
+ if (phase == SystemService.PHASE_SYSTEM_SERVICES_READY) {
+ synchronized (mLock) {
+ final Context context = getContext();
+ mSystemReady = true;
+ mPowerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
+ mWakeLock = mPowerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK, TAG);
+ mWindowManager = LocalServices.getService(WindowManagerInternal.class);
+ mAlarmManager = (AlarmManager) getContext().getSystemService(Context.ALARM_SERVICE);
+ mLocalPowerManager =
+ LocalServices.getService(PowerManagerInternal.class);
+ mTwilightManager = getLocalService(TwilightManager.class);
+ initPowerSave();
+ mCarModeEnabled = mDockState == Intent.EXTRA_DOCK_STATE_CAR;
+ registerVrStateListener();
+ // register listeners
+ context.getContentResolver()
+ .registerContentObserver(Secure.getUriFor(Secure.UI_NIGHT_MODE),
+ false, mDarkThemeObserver, 0);
+ context.registerReceiver(mDockModeReceiver,
+ new IntentFilter(Intent.ACTION_DOCK_EVENT));
+ IntentFilter batteryFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
+ context.registerReceiver(mBatteryReceiver, batteryFilter);
+ IntentFilter filter = new IntentFilter();
+ filter.addAction(Intent.ACTION_USER_SWITCHED);
+ context.registerReceiver(new UserSwitchedReceiver(), filter, null, mHandler);
+ updateConfigurationLocked();
+ applyConfigurationExternallyLocked();
+ }
+ }
+ }
+
+ @Override
public void onStart() {
final Context context = getContext();
-
- mPowerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
- mWakeLock = mPowerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK, TAG);
- mWindowManager = LocalServices.getService(WindowManagerInternal.class);
- mAlarmManager = (AlarmManager) getContext().getSystemService(Context.ALARM_SERVICE);
-
// If setup isn't complete for this user listen for completion so we can unblock
// being able to send a night mode configuration change event
verifySetupWizardCompleted();
- context.registerReceiver(mDockModeReceiver,
- new IntentFilter(Intent.ACTION_DOCK_EVENT));
- IntentFilter batteryFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
- context.registerReceiver(mBatteryReceiver, batteryFilter);
-
- context.registerReceiver(mSettingsRestored,
- new IntentFilter(Intent.ACTION_SETTING_RESTORED), null, mHandler);
-
- mLocalPowerManager =
- LocalServices.getService(PowerManagerInternal.class);
- initPowerSave();
-
- mTwilightManager = getLocalService(TwilightManager.class);
-
- mConfiguration.setToDefaults();
-
final Resources res = context.getResources();
mDefaultUiModeType = res.getInteger(
com.android.internal.R.integer.config_defaultUiModeType);
@@ -383,21 +385,12 @@
SystemServerInitThreadPool.submit(() -> {
synchronized (mLock) {
updateNightModeFromSettingsLocked(context, res, UserHandle.getCallingUserId());
- updateConfigurationLocked();
- applyConfigurationExternallyLocked();
+ updateSystemProperties();
}
}, TAG + ".onStart");
publishBinderService(Context.UI_MODE_SERVICE, mService);
publishLocalService(UiModeManagerInternal.class, mLocalService);
-
- IntentFilter filter = new IntentFilter();
- filter.addAction(Intent.ACTION_USER_SWITCHED);
- context.registerReceiver(new UserSwitchedReceiver(), filter, null, mHandler);
-
- context.getContentResolver().registerContentObserver(Secure.getUriFor(Secure.UI_NIGHT_MODE),
- false, mDarkThemeObserver, 0);
- mHandler.post(() -> updateSystemProperties());
}
private final BroadcastReceiver mSettingsRestored = new BroadcastReceiver() {
@@ -475,9 +468,10 @@
/**
* Updates the night mode setting in Settings.Global and returns if the value was successfully
* changed.
+ *
* @param context A valid context
- * @param res A valid resource object
- * @param userId The user to update the setting for
+ * @param res A valid resource object
+ * @param userId The user to update the setting for
* @return True if the new value is different from the old value. False otherwise.
*/
private boolean updateNightModeFromSettingsLocked(Context context, Resources res, int userId) {
@@ -493,12 +487,12 @@
Secure.UI_NIGHT_MODE_OVERRIDE_OFF, 0, userId) != 0;
mCustomAutoNightModeStartMilliseconds = LocalTime.ofNanoOfDay(
Secure.getLongForUser(context.getContentResolver(),
- Secure.DARK_THEME_CUSTOM_START_TIME,
- DEFAULT_CUSTOM_NIGHT_START_TIME.toNanoOfDay() / 1000L, userId) * 1000);
+ Secure.DARK_THEME_CUSTOM_START_TIME,
+ DEFAULT_CUSTOM_NIGHT_START_TIME.toNanoOfDay() / 1000L, userId) * 1000);
mCustomAutoNightModeEndMilliseconds = LocalTime.ofNanoOfDay(
Secure.getLongForUser(context.getContentResolver(),
- Secure.DARK_THEME_CUSTOM_END_TIME,
- DEFAULT_CUSTOM_NIGHT_END_TIME.toNanoOfDay() / 1000L, userId) * 1000);
+ Secure.DARK_THEME_CUSTOM_END_TIME,
+ DEFAULT_CUSTOM_NIGHT_END_TIME.toNanoOfDay() / 1000L, userId) * 1000);
} else {
mNightMode = defaultNightMode;
mCustomAutoNightModeEndMilliseconds = DEFAULT_CUSTOM_NIGHT_END_TIME;
@@ -863,18 +857,6 @@
}
}
- @Override
- public void onBootPhase(int phase) {
- if (phase == SystemService.PHASE_SYSTEM_SERVICES_READY) {
- synchronized (mLock) {
- mSystemReady = true;
- mCarModeEnabled = mDockState == Intent.EXTRA_DOCK_STATE_CAR;
- registerVrStateListener();
- updateLocked(0, 0);
- }
- }
- }
-
/**
* Updates the global car mode state.
* The device is considered to be in car mode if there exists an app at any priority level which
@@ -931,7 +913,8 @@
// Anyone can disable the default priority.
isDefaultPriority
// If priority was enabled, only enabling package can disable it.
- || isPriorityTracked && mCarModePackagePriority.get(priority).equals(packageName)
+ || isPriorityTracked && mCarModePackagePriority.get(priority).equals(
+ packageName)
// Disable all priorities flag can disable all regardless.
|| isDisableAll;
if (isChangeAllowed) {
@@ -1092,10 +1075,10 @@
if (LOG) {
Slog.d(TAG,
- "updateConfigurationLocked: mDockState=" + mDockState
- + "; mCarMode=" + mCarModeEnabled
- + "; mNightMode=" + mNightMode
- + "; uiMode=" + uiMode);
+ "updateConfigurationLocked: mDockState=" + mDockState
+ + "; mCarMode=" + mCarModeEnabled
+ + "; mNightMode=" + mNightMode
+ + "; uiMode=" + uiMode);
}
mCurUiMode = uiMode;
@@ -1291,9 +1274,9 @@
if (LOG) {
Slog.v(TAG, String.format(
- "Handling broadcast result for action %s: enable=0x%08x, disable=0x%08x, "
- + "category=%s",
- action, enableFlags, disableFlags, category));
+ "Handling broadcast result for action %s: enable=0x%08x, disable=0x%08x, "
+ + "category=%s",
+ action, enableFlags, disableFlags, category));
}
sendConfigurationAndStartDreamOrDockAppLocked(category);
@@ -1356,8 +1339,8 @@
// have no effect until the device is unlocked.
if (mStatusBarManager != null) {
mStatusBarManager.disable(mCarModeEnabled
- ? StatusBarManager.DISABLE_NOTIFICATION_TICKER
- : StatusBarManager.DISABLE_NONE);
+ ? StatusBarManager.DISABLE_NOTIFICATION_TICKER
+ : StatusBarManager.DISABLE_NONE);
}
if (mNotificationManager == null) {
@@ -1382,7 +1365,8 @@
.setContentText(
context.getString(R.string.car_mode_disable_notification_message))
.setContentIntent(
- PendingIntent.getActivityAsUser(context, 0, carModeOffIntent, 0,
+ PendingIntent.getActivityAsUser(context, 0,
+ carModeOffIntent, 0,
null, UserHandle.CURRENT));
mNotificationManager.notifyAsUser(null,
SystemMessage.NOTE_CAR_MODE_DISABLE, n.build(), UserHandle.ALL);
diff --git a/services/core/java/com/android/server/am/ActiveServices.java b/services/core/java/com/android/server/am/ActiveServices.java
index 0ebb5bb..d77bee3 100644
--- a/services/core/java/com/android/server/am/ActiveServices.java
+++ b/services/core/java/com/android/server/am/ActiveServices.java
@@ -1705,7 +1705,7 @@
if (acceptances > 0 || rejections > 0) {
FrameworkStatsLog.write(
FrameworkStatsLog.FOREGROUND_SERVICE_APP_OP_SESSION_ENDED,
- mProcessRecord.uid, AppOpsManager.opToLoggingId(op),
+ mProcessRecord.uid, op,
modeToEnum(mAppOpModes.get(op)),
acceptances, rejections
);
diff --git a/services/core/java/com/android/server/am/EventLogTags.logtags b/services/core/java/com/android/server/am/EventLogTags.logtags
index cc5df40..17f4187 100644
--- a/services/core/java/com/android/server/am/EventLogTags.logtags
+++ b/services/core/java/com/android/server/am/EventLogTags.logtags
@@ -93,3 +93,16 @@
# The task is being unfrozen
30069 am_unfreeze (Pid|1|5),(Process Name|3)
+
+# User switch events
+30070 uc_finish_user_unlocking (UID|1|5)
+30071 uc_finish_user_unlocked (UID|1|5)
+30072 uc_finish_user_unlocked_completed (UID|1|5)
+30073 uc_finish_user_stopping (UID|1|5)
+30074 uc_finish_user_stopped (UID|1|5)
+30075 uc_switch_user (UID|1|5)
+30076 uc_start_user_internal (UID|1|5)
+30077 uc_unlock_user (UID|1|5)
+30078 uc_finish_user_boot (UID|1|5)
+30079 uc_dispatch_user_switch (oldUID|1|5) (newUID|1|5)
+30080 uc_continue_user_switch (oldUID|1|5) (newUID|1|5)
diff --git a/services/core/java/com/android/server/am/UserController.java b/services/core/java/com/android/server/am/UserController.java
index 343b4ba..636a0e9 100644
--- a/services/core/java/com/android/server/am/UserController.java
+++ b/services/core/java/com/android/server/am/UserController.java
@@ -83,6 +83,7 @@
import android.os.storage.StorageManager;
import android.text.format.DateUtils;
import android.util.ArraySet;
+import android.util.EventLog;
import android.util.IntArray;
import android.util.Pair;
import android.util.Slog;
@@ -382,8 +383,8 @@
private void finishUserBoot(UserState uss, IIntentReceiver resultTo) {
final int userId = uss.mHandle.getIdentifier();
+ EventLog.writeEvent(EventLogTags.UC_FINISH_USER_BOOT, userId);
- Slog.d(TAG, "Finishing user boot " + userId);
synchronized (mLock) {
// Bail if we ended up with a stale user
if (mStartedUsers.get(userId) != uss) {
@@ -451,7 +452,7 @@
*/
private boolean finishUserUnlocking(final UserState uss) {
final int userId = uss.mHandle.getIdentifier();
- Slog.d(TAG, "UserController event: finishUserUnlocking(" + userId + ")");
+ EventLog.writeEvent(EventLogTags.UC_FINISH_USER_UNLOCKING, userId);
// Only keep marching forward if user is actually unlocked
if (!StorageManager.isUserKeyUnlocked(userId)) return false;
synchronized (mLock) {
@@ -496,7 +497,7 @@
*/
void finishUserUnlocked(final UserState uss) {
final int userId = uss.mHandle.getIdentifier();
- Slog.d(TAG, "UserController event: finishUserUnlocked(" + userId + ")");
+ EventLog.writeEvent(EventLogTags.UC_FINISH_USER_UNLOCKED, userId);
// Only keep marching forward if user is actually unlocked
if (!StorageManager.isUserKeyUnlocked(userId)) return;
synchronized (mLock) {
@@ -567,7 +568,7 @@
private void finishUserUnlockedCompleted(UserState uss) {
final int userId = uss.mHandle.getIdentifier();
- Slog.d(TAG, "UserController event: finishUserUnlockedCompleted(" + userId + ")");
+ EventLog.writeEvent(EventLogTags.UC_FINISH_USER_UNLOCKED_COMPLETED, userId);
synchronized (mLock) {
// Bail if we ended up with a stale user
if (mStartedUsers.get(uss.mHandle.getIdentifier()) != uss) return;
@@ -830,7 +831,7 @@
void finishUserStopping(final int userId, final UserState uss,
final boolean allowDelayedLocking) {
- Slog.d(TAG, "UserController event: finishUserStopping(" + userId + ")");
+ EventLog.writeEvent(EventLogTags.UC_FINISH_USER_STOPPING, userId);
// On to the next.
final Intent shutdownIntent = new Intent(Intent.ACTION_SHUTDOWN);
// This is the result receiver for the final shutdown broadcast.
@@ -870,7 +871,7 @@
void finishUserStopped(UserState uss, boolean allowDelayedLocking) {
final int userId = uss.mHandle.getIdentifier();
- Slog.d(TAG, "UserController event: finishUserStopped(" + userId + ")");
+ EventLog.writeEvent(EventLogTags.UC_FINISH_USER_STOPPED, userId);
final boolean stopped;
boolean lockUser = true;
final ArrayList<IStopUserCallback> stopCallbacks;
@@ -1147,7 +1148,7 @@
private boolean startUserInternal(@UserIdInt int userId, boolean foreground,
@Nullable IProgressListener unlockListener, @NonNull TimingsTraceAndSlog t) {
- Slog.i(TAG, "Starting userid:" + userId + " fg:" + foreground);
+ EventLog.writeEvent(EventLogTags.UC_START_USER_INTERNAL, userId);
final int callingUid = Binder.getCallingUid();
final int callingPid = Binder.getCallingPid();
@@ -1396,7 +1397,7 @@
boolean unlockUser(final @UserIdInt int userId, byte[] token, byte[] secret,
IProgressListener listener) {
checkCallingPermission(INTERACT_ACROSS_USERS_FULL, "unlockUser");
- Slog.i(TAG, "unlocking user " + userId);
+ EventLog.writeEvent(EventLogTags.UC_UNLOCK_USER, userId);
final long binderToken = Binder.clearCallingIdentity();
try {
return unlockUserCleared(userId, token, secret, listener);
@@ -1481,7 +1482,7 @@
boolean switchUser(final int targetUserId) {
enforceShellRestriction(UserManager.DISALLOW_DEBUGGING_FEATURES, targetUserId);
- Slog.i(TAG, "switching to user " + targetUserId);
+ EventLog.writeEvent(EventLogTags.UC_SWITCH_USER, targetUserId);
int currentUserId = getCurrentUserId();
UserInfo targetUserInfo = getUserInfo(targetUserId);
if (targetUserId == currentUserId) {
@@ -1604,7 +1605,8 @@
}
void dispatchUserSwitch(final UserState uss, final int oldUserId, final int newUserId) {
- Slog.d(TAG, "Dispatch onUserSwitching oldUser #" + oldUserId + " newUser #" + newUserId);
+ EventLog.writeEvent(EventLogTags.UC_DISPATCH_USER_SWITCH, oldUserId, newUserId);
+
final int observerCount = mUserSwitchObservers.beginBroadcast();
if (observerCount > 0) {
final ArraySet<String> curWaitingUserSwitchCallbacks = new ArraySet<>();
@@ -1666,7 +1668,8 @@
}
void continueUserSwitch(UserState uss, int oldUserId, int newUserId) {
- Slog.d(TAG, "Continue user switch oldUser #" + oldUserId + ", newUser #" + newUserId);
+ EventLog.writeEvent(EventLogTags.UC_CONTINUE_USER_SWITCH, oldUserId, newUserId);
+
if (isUserSwitchUiEnabled()) {
mInjector.getWindowManager().stopFreezingScreen();
}
diff --git a/services/core/java/com/android/server/input/InputManagerService.java b/services/core/java/com/android/server/input/InputManagerService.java
index 065e0c3..0b22586 100644
--- a/services/core/java/com/android/server/input/InputManagerService.java
+++ b/services/core/java/com/android/server/input/InputManagerService.java
@@ -60,6 +60,7 @@
import android.os.Process;
import android.os.RemoteException;
import android.os.UserHandle;
+import android.provider.DeviceConfig;
import android.provider.Settings;
import android.provider.Settings.SettingNotFoundException;
import android.text.TextUtils;
@@ -126,6 +127,9 @@
private static final String EXCLUDED_DEVICES_PATH = "etc/excluded-input-devices.xml";
private static final String PORT_ASSOCIATIONS_PATH = "etc/input-port-associations.xml";
+ // Feature flag name for the deep press feature
+ private static final String DEEP_PRESS_ENABLED = "deep_press_enabled";
+
private static final int MSG_DELIVER_INPUT_DEVICES_CHANGED = 1;
private static final int MSG_SWITCH_KEYBOARD_LAYOUT = 2;
private static final int MSG_RELOAD_KEYBOARD_LAYOUTS = 3;
@@ -246,6 +250,7 @@
private static native void nativeSetPointerCapture(long ptr, boolean detached);
private static native boolean nativeCanDispatchToDisplay(long ptr, int deviceId, int displayId);
private static native void nativeNotifyPortAssociationsChanged(long ptr);
+ private static native void nativeSetMotionClassifierEnabled(long ptr, boolean enabled);
// Input event injection constants defined in InputDispatcher.h.
private static final int INPUT_EVENT_INJECTION_SUCCEEDED = 0;
@@ -356,6 +361,7 @@
registerPointerSpeedSettingObserver();
registerShowTouchesSettingObserver();
registerAccessibilityLargePointerSettingObserver();
+ registerLongPressTimeoutObserver();
mContext.registerReceiver(new BroadcastReceiver() {
@Override
@@ -363,12 +369,14 @@
updatePointerSpeedFromSettings();
updateShowTouchesFromSettings();
updateAccessibilityLargePointerFromSettings();
+ updateDeepPressStatusFromSettings("user switched");
}
}, new IntentFilter(Intent.ACTION_USER_SWITCHED), null, mHandler);
updatePointerSpeedFromSettings();
updateShowTouchesFromSettings();
updateAccessibilityLargePointerFromSettings();
+ updateDeepPressStatusFromSettings("just booted");
}
// TODO(BT) Pass in parameter for bluetooth system
@@ -1600,7 +1608,7 @@
setPointerSpeedUnchecked(speed);
}
- public void updatePointerSpeedFromSettings() {
+ private void updatePointerSpeedFromSettings() {
int speed = getPointerSpeedSetting();
setPointerSpeedUnchecked(speed);
}
@@ -1632,7 +1640,7 @@
return speed;
}
- public void updateShowTouchesFromSettings() {
+ private void updateShowTouchesFromSettings() {
int setting = getShowTouchesSetting(0);
nativeSetShowTouches(mPtr, setting != 0);
}
@@ -1648,7 +1656,7 @@
}, UserHandle.USER_ALL);
}
- public void updateAccessibilityLargePointerFromSettings() {
+ private void updateAccessibilityLargePointerFromSettings() {
final int accessibilityConfig = Settings.Secure.getIntForUser(
mContext.getContentResolver(), Settings.Secure.ACCESSIBILITY_LARGE_POINTER_ICON,
0, UserHandle.USER_CURRENT);
@@ -1667,6 +1675,34 @@
}, UserHandle.USER_ALL);
}
+ private void updateDeepPressStatusFromSettings(String reason) {
+ // Not using ViewConfiguration.getLongPressTimeout here because it may return a stale value
+ final int timeout = Settings.Secure.getIntForUser(mContext.getContentResolver(),
+ Settings.Secure.LONG_PRESS_TIMEOUT, ViewConfiguration.DEFAULT_LONG_PRESS_TIMEOUT,
+ UserHandle.USER_CURRENT);
+ final boolean featureEnabledFlag =
+ DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_INPUT_NATIVE_BOOT,
+ DEEP_PRESS_ENABLED, true /* default */);
+ final boolean enabled =
+ featureEnabledFlag && timeout <= ViewConfiguration.DEFAULT_LONG_PRESS_TIMEOUT;
+ Log.i(TAG,
+ (enabled ? "Enabling" : "Disabling") + " motion classifier because " + reason
+ + ": feature " + (featureEnabledFlag ? "enabled" : "disabled")
+ + ", long press timeout = " + timeout);
+ nativeSetMotionClassifierEnabled(mPtr, enabled);
+ }
+
+ private void registerLongPressTimeoutObserver() {
+ mContext.getContentResolver().registerContentObserver(
+ Settings.Secure.getUriFor(Settings.Secure.LONG_PRESS_TIMEOUT), true,
+ new ContentObserver(mHandler) {
+ @Override
+ public void onChange(boolean selfChange) {
+ updateDeepPressStatusFromSettings("timeout changed");
+ }
+ }, UserHandle.USER_ALL);
+ }
+
private int getShowTouchesSetting(int defaultValue) {
int result = defaultValue;
try {
diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java
index e2ff0ad..f65f187 100755
--- a/services/core/java/com/android/server/notification/NotificationManagerService.java
+++ b/services/core/java/com/android/server/notification/NotificationManagerService.java
@@ -27,6 +27,8 @@
import static android.app.NotificationChannel.CONVERSATION_CHANNEL_ID_FORMAT;
import static android.app.NotificationManager.ACTION_APP_BLOCK_STATE_CHANGED;
import static android.app.NotificationManager.ACTION_AUTOMATIC_ZEN_RULE_STATUS_CHANGED;
+import static android.app.NotificationManager.ACTION_INTERRUPTION_FILTER_CHANGED;
+import static android.app.NotificationManager.ACTION_INTERRUPTION_FILTER_CHANGED_INTERNAL;
import static android.app.NotificationManager.ACTION_NOTIFICATION_CHANNEL_BLOCK_STATE_CHANGED;
import static android.app.NotificationManager.ACTION_NOTIFICATION_CHANNEL_GROUP_BLOCK_STATE_CHANGED;
import static android.app.NotificationManager.ACTION_NOTIFICATION_POLICY_ACCESS_GRANTED_CHANGED;
@@ -241,6 +243,7 @@
import com.android.internal.util.CollectionUtils;
import com.android.internal.util.DumpUtils;
import com.android.internal.util.FastXmlSerializer;
+import com.android.internal.util.FunctionalUtils;
import com.android.internal.util.Preconditions;
import com.android.internal.util.XmlUtils;
import com.android.internal.util.function.TriPredicate;
@@ -1911,30 +1914,37 @@
@Override
void onZenModeChanged() {
- sendRegisteredOnlyBroadcast(NotificationManager.ACTION_INTERRUPTION_FILTER_CHANGED);
- getContext().sendBroadcastAsUser(
- new Intent(NotificationManager.ACTION_INTERRUPTION_FILTER_CHANGED_INTERNAL)
- .addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT),
- UserHandle.ALL, android.Manifest.permission.MANAGE_NOTIFICATIONS);
- synchronized (mNotificationLock) {
- updateInterruptionFilterLocked();
- }
- mRankingHandler.requestSort();
+ Binder.withCleanCallingIdentity(() -> {
+ sendRegisteredOnlyBroadcast(ACTION_INTERRUPTION_FILTER_CHANGED);
+ getContext().sendBroadcastAsUser(
+ new Intent(ACTION_INTERRUPTION_FILTER_CHANGED_INTERNAL)
+ .addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT),
+ UserHandle.ALL, permission.MANAGE_NOTIFICATIONS);
+ synchronized (mNotificationLock) {
+ updateInterruptionFilterLocked();
+ }
+ mRankingHandler.requestSort();
+ });
}
@Override
void onPolicyChanged() {
- sendRegisteredOnlyBroadcast(NotificationManager.ACTION_NOTIFICATION_POLICY_CHANGED);
- mRankingHandler.requestSort();
+ Binder.withCleanCallingIdentity(() -> {
+ sendRegisteredOnlyBroadcast(
+ NotificationManager.ACTION_NOTIFICATION_POLICY_CHANGED);
+ mRankingHandler.requestSort();
+ });
}
@Override
void onAutomaticRuleStatusChanged(int userId, String pkg, String id, int status) {
- Intent intent = new Intent(ACTION_AUTOMATIC_ZEN_RULE_STATUS_CHANGED);
- intent.setPackage(pkg);
- intent.putExtra(EXTRA_AUTOMATIC_ZEN_RULE_ID, id);
- intent.putExtra(EXTRA_AUTOMATIC_ZEN_RULE_STATUS, status);
- getContext().sendBroadcastAsUser(intent, UserHandle.of(userId));
+ Binder.withCleanCallingIdentity(() -> {
+ Intent intent = new Intent(ACTION_AUTOMATIC_ZEN_RULE_STATUS_CHANGED);
+ intent.setPackage(pkg);
+ intent.putExtra(EXTRA_AUTOMATIC_ZEN_RULE_ID, id);
+ intent.putExtra(EXTRA_AUTOMATIC_ZEN_RULE_STATUS, status);
+ getContext().sendBroadcastAsUser(intent, UserHandle.of(userId));
+ });
}
});
mPreferencesHelper = new PreferencesHelper(getContext(),
diff --git a/services/core/java/com/android/server/pm/TEST_MAPPING b/services/core/java/com/android/server/pm/TEST_MAPPING
index 3d9466a..9e75610 100644
--- a/services/core/java/com/android/server/pm/TEST_MAPPING
+++ b/services/core/java/com/android/server/pm/TEST_MAPPING
@@ -55,6 +55,17 @@
"include-filter": "android.appsecurity.cts.PrivilegedUpdateTests"
}
]
+ },
+ {
+ "name": "FrameworksCoreTests",
+ "options": [
+ {
+ "include-filter": "android.content.pm.PackageManagerTests"
+ },
+ {
+ "exclude-annotation": "androidx.test.filters.Suppress"
+ }
+ ]
}
],
"postsubmit": [
diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
index 5d6eaf2..79d0c2d 100644
--- a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
+++ b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
@@ -59,6 +59,7 @@
import android.app.ApplicationPackageManager;
import android.app.IActivityManager;
import android.app.admin.DeviceAdminInfo;
+import android.app.admin.DevicePolicyManager;
import android.app.admin.DevicePolicyManagerInternal;
import android.compat.annotation.ChangeId;
import android.compat.annotation.EnabledAfter;
@@ -113,6 +114,7 @@
import android.util.SparseBooleanArray;
import com.android.internal.annotations.GuardedBy;
+import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.compat.IPlatformCompat;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
@@ -243,6 +245,9 @@
@GuardedBy("mLock")
private final PermissionSettings mSettings;
+ /** Injector that can be used to facilitate testing. */
+ private final Injector mInjector;
+
@GuardedBy("mLock")
private ArraySet<String> mPrivappPermissionsViolations;
@@ -352,10 +357,17 @@
PermissionManagerService(Context context,
@NonNull Object externalLock) {
+ this(context, externalLock, new Injector(context));
+ }
+
+ @VisibleForTesting
+ PermissionManagerService(Context context, @NonNull Object externalLock,
+ @NonNull Injector injector) {
+ mInjector = injector;
// The package info cache is the cache for package and permission information.
- PackageManager.invalidatePackageInfoCache();
- PermissionManager.disablePermissionCache();
- PermissionManager.disablePackageNamePermissionCache();
+ mInjector.invalidatePackageInfoCache();
+ mInjector.disablePermissionCache();
+ mInjector.disablePackageNamePermissionCache();
mContext = context;
mLock = externalLock;
@@ -952,6 +964,59 @@
}
@Override
+ public int checkDeviceIdentifierAccess(@Nullable String packageName, @Nullable String message,
+ @Nullable String callingFeatureId, int pid, int uid) {
+ // If the check is being requested by an app then only allow the app to query its own
+ // access status.
+ int callingUid = mInjector.getCallingUid();
+ int callingPid = mInjector.getCallingPid();
+ if (UserHandle.getAppId(callingUid) >= Process.FIRST_APPLICATION_UID && (callingUid != uid
+ || callingPid != pid)) {
+ String response = String.format(
+ "Calling uid %d, pid %d cannot check device identifier access for package %s "
+ + "(uid=%d, pid=%d)",
+ callingUid, callingPid, packageName, uid, pid);
+ Log.w(TAG, response);
+ throw new SecurityException(response);
+ }
+ // Allow system and root access to the device identifiers.
+ final int appId = UserHandle.getAppId(uid);
+ if (appId == Process.SYSTEM_UID || appId == Process.ROOT_UID) {
+ return PackageManager.PERMISSION_GRANTED;
+ }
+ // Allow access to packages that have the READ_PRIVILEGED_PHONE_STATE permission.
+ if (mInjector.checkPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, pid,
+ uid) == PackageManager.PERMISSION_GRANTED) {
+ return PackageManager.PERMISSION_GRANTED;
+ }
+ // If the calling package is not null then perform the appop and device / profile owner
+ // check.
+ if (packageName != null) {
+ // Allow access to a package that has been granted the READ_DEVICE_IDENTIFIERS appop.
+ long token = mInjector.clearCallingIdentity();
+ AppOpsManager appOpsManager = (AppOpsManager) mInjector.getSystemService(
+ Context.APP_OPS_SERVICE);
+ try {
+ if (appOpsManager.noteOpNoThrow(AppOpsManager.OPSTR_READ_DEVICE_IDENTIFIERS, uid,
+ packageName, callingFeatureId, message) == AppOpsManager.MODE_ALLOWED) {
+ return PackageManager.PERMISSION_GRANTED;
+ }
+ } finally {
+ mInjector.restoreCallingIdentity(token);
+ }
+ // Check if the calling packages meets the device / profile owner requirements for
+ // identifier access.
+ DevicePolicyManager devicePolicyManager =
+ (DevicePolicyManager) mInjector.getSystemService(Context.DEVICE_POLICY_SERVICE);
+ if (devicePolicyManager != null && devicePolicyManager.hasDeviceIdentifierAccess(
+ packageName, pid, uid)) {
+ return PackageManager.PERMISSION_GRANTED;
+ }
+ }
+ return PackageManager.PERMISSION_DENIED;
+ }
+
+ @Override
public void addOnPermissionsChangeListener(IOnPermissionsChangeListener listener) {
mContext.enforceCallingOrSelfPermission(
Manifest.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS,
@@ -4797,4 +4862,94 @@
}
}
}
+
+ /**
+ * Allows injection of services and method responses to facilitate testing.
+ *
+ * <p>Test classes can create a mock of this class and pass it to the PermissionManagerService
+ * constructor to control behavior of services and external methods during execution.
+ * @hide
+ */
+ @VisibleForTesting
+ public static class Injector {
+ private final Context mContext;
+
+ /**
+ * Public constructor that accepts a {@code context} within which to operate.
+ */
+ public Injector(@NonNull Context context) {
+ mContext = context;
+ }
+
+ /**
+ * Returns the UID of the calling package.
+ */
+ public int getCallingUid() {
+ return Binder.getCallingUid();
+ }
+
+ /**
+ * Returns the process ID of the calling package.
+ */
+ public int getCallingPid() {
+ return Binder.getCallingPid();
+ }
+
+ /**
+ * Invalidates the package info cache.
+ */
+ public void invalidatePackageInfoCache() {
+ PackageManager.invalidatePackageInfoCache();
+ }
+
+ /**
+ * Disables the permission cache.
+ */
+ public void disablePermissionCache() {
+ PermissionManager.disablePermissionCache();
+ }
+
+ /**
+ * Disables the package name permission cache.
+ */
+ public void disablePackageNamePermissionCache() {
+ PermissionManager.disablePackageNamePermissionCache();
+ }
+
+ /**
+ * Checks if the package running under the specified {@code pid} and {@code uid} has been
+ * granted the provided {@code permission}.
+ *
+ * @return {@link PackageManager#PERMISSION_GRANTED} if the package has been granted the
+ * permission, {@link PackageManager#PERMISSION_DENIED} otherwise
+ */
+ public int checkPermission(@NonNull String permission, int pid, int uid) {
+ return mContext.checkPermission(permission, pid, uid);
+ }
+
+ /**
+ * Clears the calling identity to allow subsequent calls to be treated as coming from this
+ * package.
+ *
+ * @return a token that can be used to restore the calling identity
+ */
+ public long clearCallingIdentity() {
+ return Binder.clearCallingIdentity();
+ }
+
+ /**
+ * Restores the calling identity to that of the calling package based on the provided
+ * {@code token}.
+ */
+ public void restoreCallingIdentity(long token) {
+ Binder.restoreCallingIdentity(token);
+ }
+
+ /**
+ * Returns the system service with the provided {@code name}.
+ */
+ public Object getSystemService(@NonNull String name) {
+ return mContext.getSystemService(name);
+ }
+ }
}
diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java
index 1fc9594..b1c40cc 100644
--- a/services/core/java/com/android/server/power/PowerManagerService.java
+++ b/services/core/java/com/android/server/power/PowerManagerService.java
@@ -2439,7 +2439,7 @@
private boolean isAttentiveTimeoutExpired(long now) {
long attentiveTimeout = getAttentiveTimeoutLocked();
- return attentiveTimeout >= 0 && now > mLastUserActivityTime + attentiveTimeout;
+ return attentiveTimeout >= 0 && now >= mLastUserActivityTime + attentiveTimeout;
}
/**
diff --git a/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java b/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java
index f1f5bfe..e133c0fa 100644
--- a/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java
+++ b/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java
@@ -2901,7 +2901,7 @@
e.setAtomId(atomTag);
e.writeInt(uid);
e.writeString(packageOps.getPackageName());
- e.writeInt(op.getLoggingOpCode());
+ e.writeInt(op.getOpCode());
e.writeLong(op.getForegroundAccessCount(OP_FLAGS_PULLED));
e.writeLong(op.getBackgroundAccessCount(OP_FLAGS_PULLED));
e.writeLong(op.getForegroundRejectCount(OP_FLAGS_PULLED));
@@ -3044,7 +3044,7 @@
if (atomTag == FrameworkStatsLog.ATTRIBUTED_APP_OPS) {
e.writeString(attributionTag);
}
- e.writeInt(op.getLoggingOpCode());
+ e.writeInt(op.getOpCode());
e.writeLong(op.getForegroundAccessCount(OP_FLAGS_PULLED));
e.writeLong(op.getBackgroundAccessCount(OP_FLAGS_PULLED));
e.writeLong(op.getForegroundRejectCount(OP_FLAGS_PULLED));
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java
index 00c6f3a..6d53786 100644
--- a/services/core/java/com/android/server/wm/ActivityRecord.java
+++ b/services/core/java/com/android/server/wm/ActivityRecord.java
@@ -7677,12 +7677,6 @@
return;
}
win.getAnimationFrames(outFrame, outInsets, outStableInsets, outSurfaceInsets);
- if (isFixedRotationTransforming()) {
- // This activity has been rotated but the display is still in old rotation. Because the
- // animation applies in display space coordinates, the rotated animation frames need to
- // be unrotated to avoid being cropped.
- unrotateAnimationFrames(outFrame, outInsets, outStableInsets, outSurfaceInsets);
- }
}
void setPictureInPictureParams(PictureInPictureParams p) {
diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
index 890b945..1844395 100644
--- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
+++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
@@ -144,7 +144,7 @@
import android.app.IAssistDataReceiver;
import android.app.INotificationManager;
import android.app.IRequestFinishCallback;
-import android.app.ITaskOrganizerController;
+import android.window.ITaskOrganizerController;
import android.app.ITaskStackListener;
import android.app.Notification;
import android.app.NotificationManager;
@@ -230,7 +230,7 @@
import android.view.IRecentsAnimationRunner;
import android.view.RemoteAnimationAdapter;
import android.view.RemoteAnimationDefinition;
-import android.view.WindowContainerTransaction;
+import android.window.WindowContainerTransaction;
import android.view.WindowManager;
import com.android.internal.R;
diff --git a/services/core/java/com/android/server/wm/BLASTSyncEngine.java b/services/core/java/com/android/server/wm/BLASTSyncEngine.java
index c18ed7d..5b20023 100644
--- a/services/core/java/com/android/server/wm/BLASTSyncEngine.java
+++ b/services/core/java/com/android/server/wm/BLASTSyncEngine.java
@@ -19,7 +19,7 @@
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Slog;
-import android.view.ITaskOrganizer;
+import android.window.ITaskOrganizer;
import android.view.SurfaceControl;
import java.util.HashMap;
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java
index aad242d..a20318d 100644
--- a/services/core/java/com/android/server/wm/DisplayContent.java
+++ b/services/core/java/com/android/server/wm/DisplayContent.java
@@ -199,7 +199,7 @@
import android.view.Gravity;
import android.view.IDisplayWindowInsetsController;
import android.view.ISystemGestureExclusionListener;
-import android.view.ITaskOrganizer;
+import android.window.ITaskOrganizer;
import android.view.IWindow;
import android.view.InputChannel;
import android.view.InputDevice;
@@ -3524,6 +3524,8 @@
}
private void setInputMethodTarget(WindowState target, boolean targetWaitingAnim) {
+ // Always update control target. This is needed to handle rotation.
+ updateImeControlTarget(target);
if (target == mInputMethodTarget && mInputMethodTargetWaitingAnim == targetWaitingAnim) {
return;
}
@@ -3531,7 +3533,6 @@
mInputMethodTarget = target;
mInputMethodTargetWaitingAnim = targetWaitingAnim;
assignWindowLayers(false /* setLayoutNeeded */);
- updateImeControlTarget(mInputMethodTarget);
updateImeParent();
}
diff --git a/services/core/java/com/android/server/wm/DisplayRotation.java b/services/core/java/com/android/server/wm/DisplayRotation.java
index 57babb0..776a986 100644
--- a/services/core/java/com/android/server/wm/DisplayRotation.java
+++ b/services/core/java/com/android/server/wm/DisplayRotation.java
@@ -54,7 +54,7 @@
import android.view.IDisplayWindowRotationCallback;
import android.view.IWindowManager;
import android.view.Surface;
-import android.view.WindowContainerTransaction;
+import android.window.WindowContainerTransaction;
import com.android.internal.R;
import com.android.internal.annotations.VisibleForTesting;
diff --git a/services/core/java/com/android/server/wm/SeamlessRotator.java b/services/core/java/com/android/server/wm/SeamlessRotator.java
index 8e1c632..c79cb04 100644
--- a/services/core/java/com/android/server/wm/SeamlessRotator.java
+++ b/services/core/java/com/android/server/wm/SeamlessRotator.java
@@ -20,7 +20,6 @@
import static android.view.Surface.ROTATION_90;
import android.graphics.Matrix;
-import android.graphics.Rect;
import android.os.IBinder;
import android.view.DisplayInfo;
import android.view.Surface.Rotation;
@@ -28,7 +27,6 @@
import android.view.SurfaceControl.Transaction;
import com.android.server.wm.utils.CoordinateTransforms;
-import com.android.server.wm.utils.InsetUtils;
import java.io.PrintWriter;
import java.io.StringWriter;
@@ -47,22 +45,18 @@
private final float[] mFloat9 = new float[9];
private final int mOldRotation;
private final int mNewRotation;
- private final int mRotationDelta;
- private final int mW;
- private final int mH;
public SeamlessRotator(@Rotation int oldRotation, @Rotation int newRotation, DisplayInfo info) {
mOldRotation = oldRotation;
mNewRotation = newRotation;
- mRotationDelta = DisplayContent.deltaRotation(oldRotation, newRotation);
final boolean flipped = info.rotation == ROTATION_90 || info.rotation == ROTATION_270;
- mH = flipped ? info.logicalWidth : info.logicalHeight;
- mW = flipped ? info.logicalHeight : info.logicalWidth;
-
+ final int pH = flipped ? info.logicalWidth : info.logicalHeight;
+ final int pW = flipped ? info.logicalHeight : info.logicalWidth;
+ // Initialize transform matrix by physical size.
final Matrix tmp = new Matrix();
- CoordinateTransforms.transformLogicalToPhysicalCoordinates(oldRotation, mW, mH, mTransform);
- CoordinateTransforms.transformPhysicalToLogicalCoordinates(newRotation, mW, mH, tmp);
+ CoordinateTransforms.transformLogicalToPhysicalCoordinates(oldRotation, pW, pH, mTransform);
+ CoordinateTransforms.transformPhysicalToLogicalCoordinates(newRotation, pW, pH, tmp);
mTransform.postConcat(tmp);
}
@@ -78,20 +72,6 @@
transaction.setPosition(win.getSurfaceControl(), winSurfacePos[0], winSurfacePos[1]);
}
- /** Rotates the frame from {@link #mNewRotation} to {@link #mOldRotation}. */
- void unrotateFrame(Rect inOut) {
- if (mRotationDelta == ROTATION_90) {
- inOut.set(inOut.top, mH - inOut.right, inOut.bottom, mH - inOut.left);
- } else if (mRotationDelta == ROTATION_270) {
- inOut.set(mW - inOut.bottom, inOut.left, mW - inOut.top, inOut.right);
- }
- }
-
- /** Rotates the insets from {@link #mNewRotation} to {@link #mOldRotation}. */
- void unrotateInsets(Rect inOut) {
- InsetUtils.rotateInsets(inOut, mRotationDelta);
- }
-
/**
* Returns the rotation of the display before it started rotating.
*
diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java
index fb079f3..eca7d2e 100644
--- a/services/core/java/com/android/server/wm/Task.java
+++ b/services/core/java/com/android/server/wm/Task.java
@@ -129,7 +129,7 @@
import android.util.Slog;
import android.util.proto.ProtoOutputStream;
import android.view.DisplayInfo;
-import android.view.ITaskOrganizer;
+import android.window.ITaskOrganizer;
import android.view.RemoteAnimationAdapter;
import android.view.RemoteAnimationTarget;
import android.view.Surface;
diff --git a/services/core/java/com/android/server/wm/TaskOrganizerController.java b/services/core/java/com/android/server/wm/TaskOrganizerController.java
index 82c590d..9bf4d63 100644
--- a/services/core/java/com/android/server/wm/TaskOrganizerController.java
+++ b/services/core/java/com/android/server/wm/TaskOrganizerController.java
@@ -29,7 +29,6 @@
import android.annotation.Nullable;
import android.app.ActivityManager.RunningTaskInfo;
-import android.app.ITaskOrganizerController;
import android.app.WindowConfiguration;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
@@ -39,10 +38,11 @@
import android.os.RemoteException;
import android.util.ArraySet;
import android.util.Slog;
-import android.view.ITaskOrganizer;
-import android.view.IWindowContainer;
import android.view.SurfaceControl;
-import android.view.WindowContainerTransaction;
+import android.window.ITaskOrganizerController;
+import android.window.ITaskOrganizer;
+import android.window.IWindowContainer;
+import android.window.WindowContainerTransaction;
import com.android.internal.util.ArrayUtils;
import com.android.internal.util.function.pooled.PooledConsumer;
diff --git a/services/core/java/com/android/server/wm/WindowContainer.java b/services/core/java/com/android/server/wm/WindowContainer.java
index a1902bb..a49cffb 100644
--- a/services/core/java/com/android/server/wm/WindowContainer.java
+++ b/services/core/java/com/android/server/wm/WindowContainer.java
@@ -68,7 +68,7 @@
import android.util.Slog;
import android.util.proto.ProtoOutputStream;
import android.view.DisplayInfo;
-import android.view.IWindowContainer;
+import android.window.IWindowContainer;
import android.view.MagnificationSpec;
import android.view.RemoteAnimationDefinition;
import android.view.RemoteAnimationTarget;
@@ -378,10 +378,7 @@
if (mSurfaceControl == null) {
// If we don't yet have a surface, but we now have a parent, we should
// build a surface.
- setSurfaceControl(makeSurface().build());
- getPendingTransaction().show(mSurfaceControl);
- onSurfaceShown(getPendingTransaction());
- updateSurfacePosition();
+ createSurfaceControl(false /*force*/);
} else {
// If we have a surface but a new parent, we just need to perform a reparent. Go through
// surface animator such that hierarchy is preserved when animating, i.e.
@@ -399,6 +396,13 @@
scheduleAnimation();
}
+ void createSurfaceControl(boolean force) {
+ setSurfaceControl(makeSurface().build());
+ getPendingTransaction().show(mSurfaceControl);
+ onSurfaceShown(getPendingTransaction());
+ updateSurfacePosition();
+ }
+
/**
* Called when the surface is shown for the first time.
*/
diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java
index 3617570..161152b 100644
--- a/services/core/java/com/android/server/wm/WindowState.java
+++ b/services/core/java/com/android/server/wm/WindowState.java
@@ -5656,7 +5656,12 @@
// the status bar). In that case we need to use the final frame.
if (inFreeformWindowingMode()) {
outFrame.set(getFrameLw());
- } else if (isLetterboxedAppWindow()) {
+ } else if (isLetterboxedAppWindow() || mToken.isFixedRotationTransforming()) {
+ // 1. The letterbox surfaces should be animated with the owner activity, so use task
+ // bounds to include them.
+ // 2. If the activity has fixed rotation transform, its windows are rotated in activity
+ // level. Because the animation runs before display is rotated, task bounds should
+ // represent the frames in display space coordinates.
outFrame.set(getTask().getBounds());
} else if (isDockedResizing()) {
// If we are animating while docked resizing, then use the stack bounds as the
diff --git a/services/core/java/com/android/server/wm/WindowToken.java b/services/core/java/com/android/server/wm/WindowToken.java
index b7c6af2..850c362 100644
--- a/services/core/java/com/android/server/wm/WindowToken.java
+++ b/services/core/java/com/android/server/wm/WindowToken.java
@@ -100,6 +100,9 @@
private Configuration mLastReportedConfig;
private int mLastReportedDisplay = INVALID_DISPLAY;
+ /**
+ * When set to {@code true}, this window token is created from {@link android.app.WindowContext}
+ */
@VisibleForTesting
final boolean mFromClientToken;
@@ -154,7 +157,10 @@
void resetTransform() {
for (int i = mRotatedContainers.size() - 1; i >= 0; i--) {
final WindowContainer<?> c = mRotatedContainers.get(i);
- mRotator.finish(c.getPendingTransaction(), c);
+ // If the window is detached (no parent), its surface may have been released.
+ if (c.getParent() != null) {
+ mRotator.finish(c.getPendingTransaction(), c);
+ }
}
}
}
@@ -278,6 +284,11 @@
// Child windows are added to their parent windows.
return;
}
+ // This token is created from WindowContext and the client requests to addView now, create a
+ // surface for this token.
+ if (mSurfaceControl == null) {
+ createSurfaceControl(true /* force */);
+ }
if (!mChildren.contains(win)) {
ProtoLog.v(WM_DEBUG_ADD_REMOVE, "Adding %s to %s", win, this);
addChild(win, mWindowComparator);
@@ -286,6 +297,13 @@
}
}
+ @Override
+ void createSurfaceControl(boolean force) {
+ if (!mFromClientToken || force) {
+ super.createSurfaceControl(force);
+ }
+ }
+
/** Returns true if the token windows list is empty. */
boolean isEmpty() {
return mChildren.isEmpty();
@@ -510,19 +528,6 @@
}
/**
- * Converts the rotated animation frames and insets back to display space for local animation.
- * It should only be called when {@link #hasFixedRotationTransform} is true.
- */
- void unrotateAnimationFrames(Rect outFrame, Rect outInsets, Rect outStableInsets,
- Rect outSurfaceInsets) {
- final SeamlessRotator rotator = mFixedRotationTransformState.mRotator;
- rotator.unrotateFrame(outFrame);
- rotator.unrotateInsets(outInsets);
- rotator.unrotateInsets(outStableInsets);
- rotator.unrotateInsets(outSurfaceInsets);
- }
-
- /**
* Gives a chance to this {@link WindowToken} to adjust the {@link
* android.view.WindowManager.LayoutParams} of its windows.
*/
diff --git a/services/core/jni/com_android_server_input_InputManagerService.cpp b/services/core/jni/com_android_server_input_InputManagerService.cpp
index e0d4045..e3f9ae8 100644
--- a/services/core/jni/com_android_server_input_InputManagerService.cpp
+++ b/services/core/jni/com_android_server_input_InputManagerService.cpp
@@ -220,6 +220,7 @@
void reloadPointerIcons();
void setCustomPointerIcon(const SpriteIcon& icon);
void setPointerCapture(bool enabled);
+ void setMotionClassifierEnabled(bool enabled);
/* --- InputReaderPolicyInterface implementation --- */
@@ -1295,6 +1296,10 @@
return POINTER_ICON_STYLE_CUSTOM;
}
+void NativeInputManager::setMotionClassifierEnabled(bool enabled) {
+ mInputManager->setMotionClassifierEnabled(enabled);
+}
+
// ----------------------------------------------------------------------------
static jlong nativeInit(JNIEnv* env, jclass /* clazz */,
@@ -1774,6 +1779,13 @@
InputReaderConfiguration::CHANGE_DISPLAY_INFO);
}
+static void nativeSetMotionClassifierEnabled(JNIEnv* /* env */, jclass /* clazz */, jlong ptr,
+ jboolean enabled) {
+ NativeInputManager* im = reinterpret_cast<NativeInputManager*>(ptr);
+
+ im->setMotionClassifierEnabled(enabled);
+}
+
// ----------------------------------------------------------------------------
static const JNINativeMethod gInputManagerMethods[] = {
@@ -1832,6 +1844,7 @@
(void*)nativeSetCustomPointerIcon},
{"nativeCanDispatchToDisplay", "(JII)Z", (void*)nativeCanDispatchToDisplay},
{"nativeNotifyPortAssociationsChanged", "(J)V", (void*)nativeNotifyPortAssociationsChanged},
+ {"nativeSetMotionClassifierEnabled", "(JZ)V", (void*)nativeSetMotionClassifierEnabled},
};
#define FIND_CLASS(var, className) \
diff --git a/services/core/jni/com_android_server_stats_pull_StatsPullAtomService.cpp b/services/core/jni/com_android_server_stats_pull_StatsPullAtomService.cpp
index 43cd0a2..b1fbe64 100644
--- a/services/core/jni/com_android_server_stats_pull_StatsPullAtomService.cpp
+++ b/services/core/jni/com_android_server_stats_pull_StatsPullAtomService.cpp
@@ -46,17 +46,15 @@
static void nativeInit(JNIEnv* env, jobject javaObject) {
// on device power measurement
gPowerStatsPuller = server::stats::PowerStatsPuller();
- AStatsManager_registerPullAtomCallback(android::util::ON_DEVICE_POWER_MEASUREMENT,
- onDevicePowerMeasurementCallback,
- /* metadata= */ nullptr,
- /* cookie= */ nullptr);
+ AStatsManager_setPullAtomCallback(android::util::ON_DEVICE_POWER_MEASUREMENT,
+ /* metadata= */ nullptr, onDevicePowerMeasurementCallback,
+ /* cookie= */ nullptr);
// subsystem sleep state
gSubsystemSleepStatePuller = server::stats::SubsystemSleepStatePuller();
- AStatsManager_registerPullAtomCallback(android::util::SUBSYSTEM_SLEEP_STATE,
- subsystemSleepStateCallback,
- /* metadata= */ nullptr,
- /* cookie= */ nullptr);
+ AStatsManager_setPullAtomCallback(android::util::SUBSYSTEM_SLEEP_STATE,
+ /* metadata= */ nullptr, subsystemSleepStateCallback,
+ /* cookie= */ nullptr);
}
static const JNINativeMethod sMethods[] = {{"nativeInit", "()V", (void*)nativeInit}};
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
index ef183a2..740c5cb3 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
@@ -15662,19 +15662,25 @@
if (!userData.mAppsSuspended) {
return PERSONAL_APPS_NOT_SUSPENDED;
} else {
- int reasons = PERSONAL_APPS_NOT_SUSPENDED;
- if (admin.mSuspendPersonalApps) {
- reasons |= PERSONAL_APPS_SUSPENDED_EXPLICITLY;
- }
final long deadline = admin.mProfileOffDeadline;
- if (deadline != 0 && System.currentTimeMillis() > deadline) {
- reasons |= PERSONAL_APPS_SUSPENDED_PROFILE_TIMEOUT;
- }
- return reasons;
+ return makeSuspensionReasons(admin.mSuspendPersonalApps,
+ deadline != 0 && System.currentTimeMillis() > deadline);
}
}
}
+ private @PersonalAppSuspensionReason int makeSuspensionReasons(
+ boolean explicit, boolean timeout) {
+ int result = PERSONAL_APPS_NOT_SUSPENDED;
+ if (explicit) {
+ result |= PERSONAL_APPS_SUSPENDED_EXPLICITLY;
+ }
+ if (timeout) {
+ result |= PERSONAL_APPS_SUSPENDED_PROFILE_TIMEOUT;
+ }
+ return result;
+ }
+
@Override
public void setPersonalAppsSuspended(ComponentName who, boolean suspended) {
final int callingUserId = mInjector.userHandleGetCallingUserId();
@@ -15700,7 +15706,8 @@
}
mInjector.binderWithCleanCallingIdentity(
- () -> applyPersonalAppsSuspension(callingUserId, suspended));
+ () -> applyPersonalAppsSuspension(
+ callingUserId, PERSONAL_APPS_SUSPENDED_EXPLICITLY));
DevicePolicyEventLogger
.createEvent(DevicePolicyEnums.SET_PERSONAL_APPS_SUSPENDED)
@@ -15715,22 +15722,22 @@
* @param running whether the profile is currently considered running.
*/
private void updatePersonalAppSuspension(int profileUserId, boolean running) {
- final boolean shouldSuspend;
+ final int suspensionState;
synchronized (getLockObject()) {
final ActiveAdmin profileOwner = getProfileOwnerAdminLocked(profileUserId);
if (profileOwner != null) {
final boolean deadlineReached =
updateProfileOffDeadlineLocked(profileUserId, profileOwner, running);
- shouldSuspend = deadlineReached || profileOwner.mSuspendPersonalApps;
- Slog.d(LOG_TAG, String.format(
- "Should personal use be suspended: %b; explicit: %b; timeout: %b",
- shouldSuspend, profileOwner.mSuspendPersonalApps, deadlineReached));
+ suspensionState = makeSuspensionReasons(
+ profileOwner.mSuspendPersonalApps, deadlineReached);
+ Slog.d(LOG_TAG,
+ String.format("New personal apps suspension state: %d", suspensionState));
} else {
- shouldSuspend = false;
+ suspensionState = PERSONAL_APPS_NOT_SUSPENDED;
}
}
- applyPersonalAppsSuspension(profileUserId, shouldSuspend);
+ applyPersonalAppsSuspension(profileUserId, suspensionState);
}
/**
@@ -15785,13 +15792,15 @@
}
}
- private void applyPersonalAppsSuspension(int profileUserId, boolean shouldSuspend) {
+ private void applyPersonalAppsSuspension(
+ int profileUserId, @PersonalAppSuspensionReason int suspensionState) {
final boolean suspended = getUserData(UserHandle.USER_SYSTEM).mAppsSuspended;
+ final boolean shouldSuspend = suspensionState != PERSONAL_APPS_NOT_SUSPENDED;
if (suspended != shouldSuspend) {
suspendPersonalAppsInternal(shouldSuspend, UserHandle.USER_SYSTEM);
}
- if (shouldSuspend) {
+ if (suspensionState == PERSONAL_APPS_SUSPENDED_PROFILE_TIMEOUT) {
sendPersonalAppsSuspendedNotification(profileUserId);
} else {
clearPersonalAppsSuspendedNotification();
@@ -15832,8 +15841,11 @@
private void sendPersonalAppsSuspendedNotification(int userId) {
final String profileOwnerPackageName;
+ final long maxTimeOffDays;
synchronized (getLockObject()) {
profileOwnerPackageName = mOwners.getProfileOwnerComponent(userId).getPackageName();
+ final ActiveAdmin poAdmin = getProfileOwnerAdminLocked(userId);
+ maxTimeOffDays = TimeUnit.MILLISECONDS.toDays(poAdmin.mProfileMaximumTimeOffMillis);
}
final Intent intent = new Intent(DevicePolicyManager.ACTION_CHECK_POLICY_COMPLIANCE);
@@ -15849,9 +15861,9 @@
.setOngoing(true)
.setContentTitle(
mContext.getString(
- R.string.personal_apps_suspended_notification_title))
+ R.string.personal_apps_suspended_title))
.setContentText(mContext.getString(
- R.string.personal_apps_suspended_notification_text))
+ R.string.personal_apps_suspended_text, maxTimeOffDays))
.setColor(mContext.getColor(R.color.system_notification_accent_color))
.setContentIntent(pendingIntent)
.build();
diff --git a/services/tests/servicestests/src/com/android/server/pm/permission/PermissionManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/pm/permission/PermissionManagerServiceTest.java
new file mode 100644
index 0000000..56966776
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/pm/permission/PermissionManagerServiceTest.java
@@ -0,0 +1,197 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.pm.permission;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyInt;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.when;
+import static org.testng.Assert.assertThrows;
+
+import android.app.AppOpsManager;
+import android.app.admin.DevicePolicyManager;
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.os.Process;
+import android.permission.PermissionManagerInternal;
+
+import androidx.test.InstrumentationRegistry;
+import androidx.test.runner.AndroidJUnit4;
+
+import com.android.server.LocalServices;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+@RunWith(AndroidJUnit4.class)
+public class PermissionManagerServiceTest {
+ private static final String TAG = "PermissionManagerServiceTag";
+
+ private static final int SYSTEM_UID = 1000;
+ private static final int SYSTEM_PID = 1234;
+ private static final int APP_UID = Process.FIRST_APPLICATION_UID;
+ private static final int APP_PID = 5678;
+
+ private PermissionManagerService mPermissionManagerService;
+ private Context mContext;
+
+ @Mock
+ private PermissionManagerService.Injector mInjector;
+
+ @Mock
+ private AppOpsManager mAppOpsManager;
+
+ @Mock
+ private DevicePolicyManager mDevicePolicyManager;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+
+ mContext = InstrumentationRegistry.getContext();
+ Object lock = new Object();
+ mPermissionManagerService = new PermissionManagerService(mContext, lock, mInjector);
+ }
+
+ @After
+ public void tearDown() {
+ // The LocalServices added by the constructor of the PermissionManagerService can either be
+ // removed here after each test when tests are run serially, or to run them in parallel
+ // the Injector can provide methods to add these that can be ignored by the mock.
+ LocalServices.removeServiceForTest(PermissionManagerServiceInternal.class);
+ LocalServices.removeServiceForTest(PermissionManagerInternal.class);
+ }
+
+ @Test
+ public void checkDeviceIdentifierAccess_callingAppUidMismatch_throwsException() {
+ // An application should only be able to query its own device identifier access, querying
+ // of any other UIDs should result in a SecurityException.
+ setupCheckDeviceIdentifierAccessTest(APP_PID, APP_UID);
+
+ assertThrows(SecurityException.class,
+ () -> mPermissionManagerService.checkDeviceIdentifierAccess(
+ mContext.getPackageName(), "testCheckDeviceIdentifierAccess", null,
+ APP_PID, SYSTEM_UID));
+ }
+
+ @Test
+ public void checkDeviceIdentifierAccess_callingAppPidMismatch_throwsException() {
+ // Similar to above an app can only specify its own pid, a mismatch should result in a
+ // SecurityException.
+ setupCheckDeviceIdentifierAccessTest(APP_PID, APP_UID);
+
+ assertThrows(SecurityException.class,
+ () -> mPermissionManagerService.checkDeviceIdentifierAccess(
+ mContext.getPackageName(), "testCheckDeviceIdentifierAccess", null,
+ SYSTEM_PID, APP_UID));
+ }
+
+ @Test
+ public void checkDeviceIdentifierAccess_callingAppIdWithoutAccess_returnsDenied() {
+ // An application can query its own device identifier access; this test verifies that all
+ // checks can run through completion and return denied.
+ setupCheckDeviceIdentifierAccessTest(APP_PID, APP_UID);
+
+ int result = mPermissionManagerService.checkDeviceIdentifierAccess(
+ mContext.getPackageName(), "testCheckDeviceIdentifierAccess", null, APP_PID,
+ APP_UID);
+
+ assertEquals(PackageManager.PERMISSION_DENIED, result);
+ }
+
+ @Test
+ public void checkDeviceIdentifierAccess_systemUid_returnsGranted() {
+ // The system UID should always have access to device identifiers.
+ setupCheckDeviceIdentifierAccessTest(SYSTEM_PID, SYSTEM_UID);
+ int result = mPermissionManagerService.checkDeviceIdentifierAccess(
+ mContext.getPackageName(), "testCheckDeviceIdentifierAccess", null, SYSTEM_PID,
+ SYSTEM_UID);
+
+ assertEquals(PackageManager.PERMISSION_GRANTED, result);
+ }
+
+ @Test
+ public void checkDeviceIdentifierAccess_hasPrivilegedPermission_returnsGranted() {
+ // Apps with the READ_PRIVILEGED_PHONE_STATE permission should have access to device
+ // identifiers.
+ setupCheckDeviceIdentifierAccessTest(SYSTEM_PID, SYSTEM_UID);
+ when(mInjector.checkPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE,
+ APP_PID, APP_UID)).thenReturn(PackageManager.PERMISSION_GRANTED);
+
+ int result = mPermissionManagerService.checkDeviceIdentifierAccess(
+ mContext.getPackageName(), "testCheckDeviceIdentifierAccess", null, APP_PID,
+ APP_UID);
+
+ assertEquals(PackageManager.PERMISSION_GRANTED, result);
+ }
+
+ @Test
+ public void checkDeviceIdentifierAccess_hasAppOp_returnsGranted() {
+ // Apps that have been granted the READ_DEVICE_IDENTIFIERS appop should have access to
+ // device identifiers.
+ setupCheckDeviceIdentifierAccessTest(SYSTEM_PID, SYSTEM_UID);
+ when(mAppOpsManager.noteOpNoThrow(eq(AppOpsManager.OPSTR_READ_DEVICE_IDENTIFIERS),
+ eq(APP_UID), eq(mContext.getPackageName()), any(), any())).thenReturn(
+ AppOpsManager.MODE_ALLOWED);
+
+ int result = mPermissionManagerService.checkDeviceIdentifierAccess(
+ mContext.getPackageName(), "testCheckDeviceIdentifierAccess", null, APP_PID,
+ APP_UID);
+
+ assertEquals(PackageManager.PERMISSION_GRANTED, result);
+ }
+
+ @Test
+ public void checkDeviceIdentifierAccess_hasDpmAccess_returnsGranted() {
+ // Apps that pass a DevicePolicyManager device / profile owner check should have access to
+ // device identifiers.
+ setupCheckDeviceIdentifierAccessTest(SYSTEM_PID, SYSTEM_UID);
+ when(mDevicePolicyManager.hasDeviceIdentifierAccess(mContext.getPackageName(), APP_PID,
+ APP_UID)).thenReturn(true);
+
+ int result = mPermissionManagerService.checkDeviceIdentifierAccess(
+ mContext.getPackageName(), "testCheckDeviceIdentifierAccess", null, APP_PID,
+ APP_UID);
+
+ assertEquals(PackageManager.PERMISSION_GRANTED, result);
+ }
+
+ private void setupCheckDeviceIdentifierAccessTest(int callingPid, int callingUid) {
+ when(mInjector.getCallingPid()).thenReturn(callingPid);
+ when(mInjector.getCallingUid()).thenReturn(callingUid);
+
+ // Configure the checkDeviceIdentifierAccess tests to fail all access checks, then each test
+ // can individually set the access check to pass for verification.
+ when(mInjector.checkPermission(anyString(), anyInt(), anyInt())).thenReturn(
+ PackageManager.PERMISSION_DENIED);
+
+ when(mAppOpsManager.noteOpNoThrow(anyString(), anyInt(), anyString(), any(),
+ any())).thenReturn(AppOpsManager.MODE_DEFAULT);
+ when(mInjector.getSystemService(eq(Context.APP_OPS_SERVICE))).thenReturn(mAppOpsManager);
+
+ when(mDevicePolicyManager.hasDeviceIdentifierAccess(anyString(), anyInt(),
+ anyInt())).thenReturn(false);
+ when(mInjector.getSystemService(eq(Context.DEVICE_POLICY_SERVICE))).thenReturn(
+ mDevicePolicyManager);
+ }
+}
diff --git a/services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java
index 891acc1..bb51471 100644
--- a/services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java
@@ -63,7 +63,6 @@
import android.os.PowerSaveState;
import android.os.SystemClock;
import android.os.UserHandle;
-import android.platform.test.annotations.FlakyTest;
import android.provider.Settings;
import android.service.dreams.DreamManagerInternal;
import android.test.mock.MockContentResolver;
@@ -692,7 +691,10 @@
@Test
public void testInattentiveSleep_hideWarningIfStayOnIsEnabledAndPluggedIn() throws Exception {
- setAttentiveTimeout(15000);
+ setMinimumScreenOffTimeoutConfig(5);
+ setAttentiveWarningDuration(120);
+ setAttentiveTimeout(100);
+
Settings.Global.putInt(mContextSpy.getContentResolver(),
Settings.Global.STAY_ON_WHILE_PLUGGED_IN, BatteryManager.BATTERY_PLUGGED_AC);
@@ -708,10 +710,10 @@
}
@Test
- public void testInattentive_userActivityDismissesWarning() throws Exception {
+ public void testInattentiveSleep_userActivityDismissesWarning() throws Exception {
setMinimumScreenOffTimeoutConfig(5);
- setAttentiveWarningDuration(30);
- setAttentiveTimeout(100);
+ setAttentiveWarningDuration(1900);
+ setAttentiveTimeout(2000);
createService();
startSystem();
@@ -720,7 +722,7 @@
PowerManager.USER_ACTIVITY_EVENT_TOUCH, 0);
verify(mInattentiveSleepWarningControllerMock, never()).show();
- SystemClock.sleep(70);
+ SystemClock.sleep(150);
verify(mInattentiveSleepWarningControllerMock, times(1)).show();
verify(mInattentiveSleepWarningControllerMock, never()).dismiss(anyBoolean());
when(mInattentiveSleepWarningControllerMock.isShown()).thenReturn(true);
@@ -733,16 +735,18 @@
@Test
public void testInattentiveSleep_warningHiddenAfterWakingUp() throws Exception {
setMinimumScreenOffTimeoutConfig(5);
- setAttentiveWarningDuration(20);
- setAttentiveTimeout(30);
+ setAttentiveWarningDuration(70);
+ setAttentiveTimeout(100);
createService();
startSystem();
- SystemClock.sleep(10);
+ SystemClock.sleep(50);
verify(mInattentiveSleepWarningControllerMock, atLeastOnce()).show();
when(mInattentiveSleepWarningControllerMock.isShown()).thenReturn(true);
- SystemClock.sleep(30);
+ SystemClock.sleep(70);
+ assertThat(mService.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
forceAwake();
+ assertThat(mService.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
verify(mInattentiveSleepWarningControllerMock, atLeastOnce()).dismiss(false);
}
@@ -764,7 +768,6 @@
assertThat(mService.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
}
- @FlakyTest
@Test
public void testInattentiveSleep_goesToSleepWithWakeLock() throws Exception {
final String pkg = mContextSpy.getOpPackageName();
@@ -772,7 +775,7 @@
final String tag = "sleep_testWithWakeLock";
setMinimumScreenOffTimeoutConfig(5);
- setAttentiveTimeout(10);
+ setAttentiveTimeout(30);
createService();
startSystem();
@@ -780,7 +783,7 @@
PowerManager.SCREEN_BRIGHT_WAKE_LOCK, tag, pkg,
null /* workSource */, null /* historyTag */);
- SystemClock.sleep(11);
+ SystemClock.sleep(60);
assertThat(mService.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
}
diff --git a/services/tests/uiservicestests/src/com/android/server/UiModeManagerServiceTest.java b/services/tests/uiservicestests/src/com/android/server/UiModeManagerServiceTest.java
index 93ca34a..69ef499 100644
--- a/services/tests/uiservicestests/src/com/android/server/UiModeManagerServiceTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/UiModeManagerServiceTest.java
@@ -31,6 +31,7 @@
import android.os.PowerManagerInternal;
import android.os.PowerSaveState;
import android.os.RemoteException;
+import android.provider.Settings;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import com.android.server.twilight.TwilightManager;
@@ -54,6 +55,7 @@
import static junit.framework.TestCase.assertTrue;
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.anyLong;
import static org.mockito.ArgumentMatchers.anyString;
@@ -113,6 +115,7 @@
when(mContext.getResources()).thenReturn(mResources);
when(mContext.getContentResolver()).thenReturn(mContentResolver);
when(mPowerManager.isInteractive()).thenReturn(true);
+ when(mPowerManager.newWakeLock(anyInt(), anyString())).thenReturn(mWakeLock);
when(mTwilightManager.getLastTwilightState()).thenReturn(mTwilightState);
when(mTwilightState.isNight()).thenReturn(true);
when(mContext.registerReceiver(notNull(), notNull())).then(inv -> {
@@ -135,23 +138,33 @@
mCustomListener = () -> {};
return null;
}).when(mAlarmManager).cancel(eq(mCustomListener));
-
- mUiManagerService = new UiModeManagerService(mContext,
- mWindowManager, mAlarmManager, mPowerManager,
- mWakeLock, mTwilightManager, mLocalPowerManager, true);
+ when(mContext.getSystemService(eq(Context.POWER_SERVICE)))
+ .thenReturn(mPowerManager);
+ when(mContext.getSystemService(eq(Context.ALARM_SERVICE)))
+ .thenReturn(mAlarmManager);
+ addLocalService(WindowManagerInternal.class, mWindowManager);
+ addLocalService(PowerManagerInternal.class, mLocalPowerManager);
+ addLocalService(TwilightManager.class, mTwilightManager);
+
+ mUiManagerService = new UiModeManagerService(mContext, true);
try {
mUiManagerService.onBootPhase(SystemService.PHASE_SYSTEM_SERVICES_READY);
} catch (SecurityException e) {/* ignore for permission denial */}
mService = mUiManagerService.getService();
}
+ private <T> void addLocalService(Class<T> clazz, T service) {
+ LocalServices.removeServiceForTest(clazz);
+ LocalServices.addService(clazz, service);
+ }
+
@Test
public void setAutoMode_screenOffRegistered() throws RemoteException {
try {
mService.setNightMode(MODE_NIGHT_NO);
} catch (SecurityException e) { /* we should ignore this update config exception*/ }
mService.setNightMode(MODE_NIGHT_AUTO);
- verify(mContext).registerReceiver(any(BroadcastReceiver.class), any());
+ verify(mContext, atLeastOnce()).registerReceiver(any(BroadcastReceiver.class), any());
}
@Test
diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java
index 6eec649..873fa02 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java
@@ -82,9 +82,9 @@
import android.platform.test.annotations.Presubmit;
import android.service.voice.IVoiceInteractionSession;
import android.view.Gravity;
-import android.view.ITaskOrganizer;
-import android.view.IWindowContainer;
+import android.window.IWindowContainer;
import android.view.SurfaceControl;
+import android.window.ITaskOrganizer;
import androidx.test.filters.SmallTest;
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 b3c6b22..218c816 100644
--- a/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java
@@ -1016,6 +1016,15 @@
assertTrue(mDisplayContent.getDisplayRotation().shouldRotateSeamlessly(
ROTATION_0 /* oldRotation */, ROTATION_90 /* newRotation */,
false /* forceUpdate */));
+
+ final Rect outFrame = new Rect();
+ final Rect outInsets = new Rect();
+ final Rect outStableInsets = new Rect();
+ final Rect outSurfaceInsets = new Rect();
+ mAppWindow.getAnimationFrames(outFrame, outInsets, outStableInsets, outSurfaceInsets);
+ // The animation frames should not be rotated because display hasn't rotated.
+ assertEquals(mDisplayContent.getBounds(), outFrame);
+
// The display should keep current orientation and the rotated configuration should apply
// to the activity.
assertEquals(config.orientation, mDisplayContent.getConfiguration().orientation);
diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskOrganizerTests.java b/services/tests/wmtests/src/com/android/server/wm/TaskOrganizerTests.java
index 71c837e..1624bbc 100644
--- a/services/tests/wmtests/src/com/android/server/wm/TaskOrganizerTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/TaskOrganizerTests.java
@@ -60,10 +60,9 @@
import android.util.ArrayMap;
import android.util.Rational;
import android.view.Display;
-import android.view.ITaskOrganizer;
-import android.view.IWindowContainer;
import android.view.SurfaceControl;
-import android.view.WindowContainerTransaction;
+import android.window.ITaskOrganizer;
+import android.window.WindowContainerTransaction;
import androidx.test.filters.SmallTest;
@@ -74,7 +73,7 @@
import java.util.List;
/**
- * Test class for {@link ITaskOrganizer} and {@link android.app.ITaskOrganizerController}.
+ * Test class for {@link ITaskOrganizer} and {@link android.window.ITaskOrganizerController}.
*
* Build/Install/Run:
* atest WmTests:TaskOrganizerTests
diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowTokenTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowTokenTests.java
index 38f643d..7a347cb 100644
--- a/services/tests/wmtests/src/com/android/server/wm/WindowTokenTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/WindowTokenTests.java
@@ -18,6 +18,7 @@
import static android.view.WindowManager.LayoutParams.FIRST_SUB_WINDOW;
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION;
+import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
import static android.view.WindowManager.LayoutParams.TYPE_TOAST;
import static org.junit.Assert.assertEquals;
@@ -155,4 +156,27 @@
assertTrue(token.mRoundedCornerOverlay);
assertTrue(token.mFromClientToken);
}
+
+ /**
+ * Test that {@link android.view.SurfaceControl} should not be created for the
+ * {@link WindowToken} which was created for {@link android.app.WindowContext} initially, the
+ * surface should be create after addWindow for this token.
+ */
+ @Test
+ public void testSurfaceCreatedForWindowToken() {
+ final WindowToken fromClientToken = new WindowToken(mDisplayContent.mWmService,
+ mock(IBinder.class), TYPE_APPLICATION_OVERLAY, true /* persistOnEmpty */,
+ mDisplayContent, true /* ownerCanManageAppTokens */,
+ true /* roundedCornerOverlay */, true /* fromClientToken */);
+ assertNull(fromClientToken.mSurfaceControl);
+
+ createWindow(null, TYPE_APPLICATION_OVERLAY, fromClientToken, "window");
+ assertNotNull(fromClientToken.mSurfaceControl);
+
+ final WindowToken nonClientToken = new WindowToken(mDisplayContent.mWmService,
+ mock(IBinder.class), TYPE_TOAST, true /* persistOnEmpty */, mDisplayContent,
+ true /* ownerCanManageAppTokens */, true /* roundedCornerOverlay */,
+ false /* fromClientToken */);
+ assertNotNull(nonClientToken.mSurfaceControl);
+ }
}
diff --git a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java
index 0eba07b..18d5819 100644
--- a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java
+++ b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java
@@ -41,7 +41,6 @@
import android.content.res.Resources;
import android.database.ContentObserver;
import android.hardware.soundtrigger.IRecognitionStatusCallback;
-import android.hardware.soundtrigger.KeyphraseEnrollmentInfo;
import android.hardware.soundtrigger.KeyphraseMetadata;
import android.hardware.soundtrigger.ModelParams;
import android.hardware.soundtrigger.SoundTrigger;
@@ -100,7 +99,7 @@
* SystemService that publishes an IVoiceInteractionManagerService.
*/
public class VoiceInteractionManagerService extends SystemService {
- static final String TAG = "VoiceInteractionManagerService";
+ static final String TAG = "VoiceInteractionManager";
static final boolean DEBUG = false;
final Context mContext;
@@ -172,17 +171,17 @@
}
@Override
- public void onStartUser(@NonNull UserInfo userInfo) {
- if (DEBUG_USER) Slog.d(TAG, "onStartUser(" + userInfo + ")");
+ public void onUserStarting(@NonNull TargetUser user) {
+ if (DEBUG_USER) Slog.d(TAG, "onUserStarting(" + user + ")");
- mServiceStub.initForUser(userInfo.id);
+ mServiceStub.initForUser(user.getUserIdentifier());
}
@Override
- public void onUnlockUser(@NonNull UserInfo userInfo) {
- if (DEBUG_USER) Slog.d(TAG, "onUnlockUser(" + userInfo + ")");
+ public void onUserUnlocking(@NonNull TargetUser user) {
+ if (DEBUG_USER) Slog.d(TAG, "onUserUnlocking(" + user + ")");
- mServiceStub.initForUser(userInfo.id);
+ mServiceStub.initForUser(user.getUserIdentifier());
mServiceStub.switchImplementationIfNeeded(false);
}
@@ -224,7 +223,6 @@
class VoiceInteractionManagerServiceStub extends IVoiceInteractionManagerService.Stub {
VoiceInteractionManagerServiceImpl mImpl;
- KeyphraseEnrollmentInfo mEnrollmentApplicationInfo;
private boolean mSafeMode;
private int mCurUser;
@@ -449,15 +447,6 @@
}
}
- private void getOrCreateEnrollmentApplicationInfo() {
- synchronized (this) {
- if (mEnrollmentApplicationInfo == null) {
- mEnrollmentApplicationInfo = new KeyphraseEnrollmentInfo(
- mContext.getPackageManager());
- }
- }
- }
-
private void setCurrentUserLocked(@UserIdInt int userHandle) {
mCurUser = userHandle;
final UserInfo userInfo = mUserManagerInternal.getUserInfo(mCurUser);
@@ -1391,11 +1380,6 @@
pw.println(" mCurUserUnlocked: " + mCurUserUnlocked);
pw.println(" mCurUserSupported: " + mCurUserSupported);
dumpSupportedUsers(pw, " ");
- if (mEnrollmentApplicationInfo == null) {
- pw.println(" (No enrollment application info)");
- } else {
- pw.println(" " + mEnrollmentApplicationInfo.toString());
- }
mDbHelper.dump(pw);
if (mImpl == null) {
pw.println(" (No active implementation)");
@@ -1425,9 +1409,13 @@
}
}
+ private boolean isCallerHoldingPermission(String permission) {
+ return mContext.checkCallingOrSelfPermission(permission)
+ == PackageManager.PERMISSION_GRANTED;
+ }
+
private void enforceCallingPermission(String permission) {
- if (mContext.checkCallingOrSelfPermission(permission)
- != PackageManager.PERMISSION_GRANTED) {
+ if (!isCallerHoldingPermission(permission)) {
throw new SecurityException("Caller does not hold the permission " + permission);
}
}
@@ -1440,12 +1428,12 @@
}
private void enforceCallerAllowedToEnrollVoiceModel() {
- enforceCallingPermission(Manifest.permission.MANAGE_VOICE_KEYPHRASES);
- if (!isCallerCurrentVoiceInteractionService()
- && !isCallerTrustedEnrollmentApplication()) {
- throw new SecurityException("Caller is required to be the current voice interaction"
- + " service or a system enrollment application to enroll voice models");
+ if (isCallerHoldingPermission(Manifest.permission.KEYPHRASE_ENROLLMENT_APPLICATION)) {
+ return;
}
+
+ enforceCallingPermission(Manifest.permission.MANAGE_VOICE_KEYPHRASES);
+ enforceIsCurrentVoiceInteractionService();
}
private boolean isCallerCurrentVoiceInteractionService() {
@@ -1453,12 +1441,6 @@
&& mImpl.mInfo.getServiceInfo().applicationInfo.uid == Binder.getCallingUid();
}
- private boolean isCallerTrustedEnrollmentApplication() {
- getOrCreateEnrollmentApplicationInfo();
- return mEnrollmentApplicationInfo.isUidSupportedEnrollmentApplication(
- Binder.getCallingUid());
- }
-
private void setImplLocked(VoiceInteractionManagerServiceImpl impl) {
mImpl = impl;
mAtmInternal.notifyActiveVoiceInteractionServiceChanged(
diff --git a/telecomm/java/android/telecom/TelecomManager.java b/telecomm/java/android/telecom/TelecomManager.java
index 1792256..e3baa0a 100644
--- a/telecomm/java/android/telecom/TelecomManager.java
+++ b/telecomm/java/android/telecom/TelecomManager.java
@@ -848,7 +848,6 @@
*
* @hide
*/
- @SystemApi
public static final int CALL_SOURCE_EMERGENCY_SHORTCUT = 2;
/**
@@ -856,7 +855,6 @@
*
* @hide
*/
- @SystemApi
public static final int CALL_SOURCE_EMERGENCY_DIALPAD = 1;
/**
@@ -864,7 +862,6 @@
*
* @hide
*/
- @SystemApi
public static final int CALL_SOURCE_UNSPECIFIED = 0;
/**
diff --git a/telephony/api/system-current.txt b/telephony/api/system-current.txt
index 9d1fa37..afb75bb 100644
--- a/telephony/api/system-current.txt
+++ b/telephony/api/system-current.txt
@@ -290,30 +290,6 @@
field public static final String MBMS_STREAMING_SERVICE_ACTION = "android.telephony.action.EmbmsStreaming";
}
- public final class ModemActivityInfo implements android.os.Parcelable {
- ctor public ModemActivityInfo(long, int, int, @NonNull int[], int);
- method public int describeContents();
- method public int getIdleTimeMillis();
- method public int getReceiveTimeMillis();
- method public int getSleepTimeMillis();
- method public long getTimestamp();
- method @NonNull public java.util.List<android.telephony.ModemActivityInfo.TransmitPower> getTransmitPowerInfo();
- method public boolean isValid();
- method public void writeToParcel(android.os.Parcel, int);
- field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ModemActivityInfo> CREATOR;
- field public static final int TX_POWER_LEVELS = 5; // 0x5
- field public static final int TX_POWER_LEVEL_0 = 0; // 0x0
- field public static final int TX_POWER_LEVEL_1 = 1; // 0x1
- field public static final int TX_POWER_LEVEL_2 = 2; // 0x2
- field public static final int TX_POWER_LEVEL_3 = 3; // 0x3
- field public static final int TX_POWER_LEVEL_4 = 4; // 0x4
- }
-
- public class ModemActivityInfo.TransmitPower {
- method @NonNull public android.util.Range<java.lang.Integer> getPowerRangeInDbm();
- method public int getTimeInMillis();
- }
-
public final class NetworkRegistrationInfo implements android.os.Parcelable {
method @Nullable public android.telephony.DataSpecificRegistrationInfo getDataSpecificInfo();
method public int getRegistrationState();
@@ -521,21 +497,15 @@
}
public class ServiceState implements android.os.Parcelable {
- method public void fillInNotifierBundle(@NonNull android.os.Bundle);
method @Nullable public android.telephony.NetworkRegistrationInfo getNetworkRegistrationInfo(int, int);
method @NonNull public java.util.List<android.telephony.NetworkRegistrationInfo> getNetworkRegistrationInfoListForDomain(int);
method @NonNull public java.util.List<android.telephony.NetworkRegistrationInfo> getNetworkRegistrationInfoListForTransportType(int);
- method @NonNull public static android.telephony.ServiceState newFromBundle(@NonNull android.os.Bundle);
field public static final int ROAMING_TYPE_DOMESTIC = 2; // 0x2
field public static final int ROAMING_TYPE_INTERNATIONAL = 3; // 0x3
field public static final int ROAMING_TYPE_NOT_ROAMING = 0; // 0x0
field public static final int ROAMING_TYPE_UNKNOWN = 1; // 0x1
}
- public class SignalStrength implements android.os.Parcelable {
- ctor public SignalStrength(@NonNull android.telephony.SignalStrength);
- }
-
public final class SmsCbCmasInfo implements android.os.Parcelable {
ctor public SmsCbCmasInfo(int, int, int, int, int, int);
method public int describeContents();
@@ -717,11 +687,6 @@
field @NonNull public static final android.net.Uri WFC_ROAMING_MODE_CONTENT_URI;
}
- public class TelephonyFrameworkInitializer {
- method public static void registerServiceWrappers();
- method public static void setTelephonyServiceManager(@NonNull android.os.TelephonyServiceManager);
- }
-
public final class TelephonyHistogram implements android.os.Parcelable {
ctor public TelephonyHistogram(int, int, int);
ctor public TelephonyHistogram(android.telephony.TelephonyHistogram);
@@ -806,8 +771,8 @@
method public boolean isDataConnectivityPossible();
method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isDataEnabledForApn(int);
method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isEmergencyAssistanceEnabled();
+ method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) @WorkerThread public boolean isIccLockEnabled();
method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public boolean isIdle();
- method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isInEmergencySmsMode();
method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isLteCdmaEvdoGsmWcdmaEnabled();
method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public boolean isOffhook();
method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isOpportunisticNetworkEnabled();
@@ -823,7 +788,6 @@
method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean rebootRadio();
method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void reportDefaultNetworkStatus(boolean);
method @RequiresPermission(allOf={android.Manifest.permission.ACCESS_FINE_LOCATION, android.Manifest.permission.MODIFY_PHONE_STATE}) public void requestCellInfoUpdate(@NonNull android.os.WorkSource, @NonNull java.util.concurrent.Executor, @NonNull android.telephony.TelephonyManager.CellInfoCallback);
- method public void requestModemActivityInfo(@NonNull android.os.ResultReceiver);
method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void requestNumberVerification(@NonNull android.telephony.PhoneNumberRange, long, @NonNull java.util.concurrent.Executor, @NonNull android.telephony.NumberVerificationCallback);
method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void resetAllCarrierActions();
method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void resetCarrierKeysForImsiEncryption();
@@ -860,11 +824,6 @@
method @RequiresPermission(android.Manifest.permission.READ_ACTIVE_EMERGENCY_SESSION) public void updateOtaEmergencyNumberDbFilePath(@NonNull android.os.ParcelFileDescriptor);
method public void updateServiceLocation();
field @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public static final String ACTION_ANOMALY_REPORTED = "android.telephony.action.ANOMALY_REPORTED";
- field public static final String ACTION_CARRIER_SIGNAL_DEFAULT_NETWORK_AVAILABLE = "com.android.internal.telephony.CARRIER_SIGNAL_DEFAULT_NETWORK_AVAILABLE";
- field public static final String ACTION_CARRIER_SIGNAL_PCO_VALUE = "com.android.internal.telephony.CARRIER_SIGNAL_PCO_VALUE";
- field public static final String ACTION_CARRIER_SIGNAL_REDIRECTED = "com.android.internal.telephony.CARRIER_SIGNAL_REDIRECTED";
- field public static final String ACTION_CARRIER_SIGNAL_REQUEST_NETWORK_FAILED = "com.android.internal.telephony.CARRIER_SIGNAL_REQUEST_NETWORK_FAILED";
- field public static final String ACTION_CARRIER_SIGNAL_RESET = "com.android.internal.telephony.CARRIER_SIGNAL_RESET";
field public static final String ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED = "android.intent.action.ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED";
field public static final String ACTION_DEFAULT_VOICE_SUBSCRIPTION_CHANGED = "android.intent.action.ACTION_DEFAULT_VOICE_SUBSCRIPTION_CHANGED";
field public static final String ACTION_EMERGENCY_ASSISTANCE = "android.telephony.action.EMERGENCY_ASSISTANCE";
@@ -881,34 +840,14 @@
field public static final int CARRIER_PRIVILEGE_STATUS_RULES_NOT_LOADED = -1; // 0xffffffff
field public static final String EXTRA_ANOMALY_DESCRIPTION = "android.telephony.extra.ANOMALY_DESCRIPTION";
field public static final String EXTRA_ANOMALY_ID = "android.telephony.extra.ANOMALY_ID";
- field @Deprecated public static final String EXTRA_APN_PROTOCOL = "apnProto";
- field public static final String EXTRA_APN_PROTOCOL_INT = "apnProtoInt";
- field @Deprecated public static final String EXTRA_APN_TYPE = "apnType";
- field public static final String EXTRA_APN_TYPE_INT = "apnTypeInt";
- field public static final String EXTRA_DEFAULT_NETWORK_AVAILABLE = "defaultNetworkAvailable";
- field public static final String EXTRA_DEFAULT_SUBSCRIPTION_SELECT_TYPE = "android.telephony.extra.DEFAULT_SUBSCRIPTION_SELECT_TYPE";
- field public static final int EXTRA_DEFAULT_SUBSCRIPTION_SELECT_TYPE_ALL = 4; // 0x4
- field public static final int EXTRA_DEFAULT_SUBSCRIPTION_SELECT_TYPE_DATA = 1; // 0x1
- field public static final int EXTRA_DEFAULT_SUBSCRIPTION_SELECT_TYPE_NONE = 0; // 0x0
- field public static final int EXTRA_DEFAULT_SUBSCRIPTION_SELECT_TYPE_SMS = 3; // 0x3
- field public static final int EXTRA_DEFAULT_SUBSCRIPTION_SELECT_TYPE_VOICE = 2; // 0x2
- field public static final String EXTRA_ERROR_CODE = "errorCode";
- field public static final String EXTRA_PCO_ID = "pcoId";
- field public static final String EXTRA_PCO_VALUE = "pcoValue";
field public static final String EXTRA_PHONE_IN_ECM_STATE = "android.telephony.extra.PHONE_IN_ECM_STATE";
field public static final String EXTRA_PHONE_IN_EMERGENCY_CALL = "android.telephony.extra.PHONE_IN_EMERGENCY_CALL";
- field public static final String EXTRA_REDIRECTION_URL = "redirectionUrl";
- field public static final String EXTRA_SIM_COMBINATION_NAMES = "android.telephony.extra.SIM_COMBINATION_NAMES";
- field public static final String EXTRA_SIM_COMBINATION_WARNING_TYPE = "android.telephony.extra.SIM_COMBINATION_WARNING_TYPE";
- field public static final int EXTRA_SIM_COMBINATION_WARNING_TYPE_DUAL_CDMA = 1; // 0x1
- field public static final int EXTRA_SIM_COMBINATION_WARNING_TYPE_NONE = 0; // 0x0
field public static final String EXTRA_SIM_STATE = "android.telephony.extra.SIM_STATE";
field public static final String EXTRA_VISUAL_VOICEMAIL_ENABLED_BY_USER_BOOL = "android.telephony.extra.VISUAL_VOICEMAIL_ENABLED_BY_USER_BOOL";
field public static final String EXTRA_VOICEMAIL_SCRAMBLED_PIN_STRING = "android.telephony.extra.VOICEMAIL_SCRAMBLED_PIN_STRING";
field public static final int INVALID_EMERGENCY_NUMBER_DB_VERSION = -1; // 0xffffffff
field public static final int KEY_TYPE_EPDG = 1; // 0x1
field public static final int KEY_TYPE_WLAN = 2; // 0x2
- field public static final String MODEM_ACTIVITY_RESULT_KEY = "controller_activity";
field public static final long NETWORK_TYPE_BITMASK_1xRTT = 64L; // 0x40L
field public static final long NETWORK_TYPE_BITMASK_CDMA = 8L; // 0x8L
field public static final long NETWORK_TYPE_BITMASK_EDGE = 2L; // 0x2L
diff --git a/telephony/common/com/android/internal/telephony/TelephonyPermissions.java b/telephony/common/com/android/internal/telephony/TelephonyPermissions.java
index 68b1768..0b33174 100644
--- a/telephony/common/com/android/internal/telephony/TelephonyPermissions.java
+++ b/telephony/common/com/android/internal/telephony/TelephonyPermissions.java
@@ -20,7 +20,6 @@
import android.Manifest;
import android.annotation.Nullable;
import android.app.AppOpsManager;
-import android.app.admin.DevicePolicyManager;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
@@ -28,6 +27,7 @@
import android.os.Build;
import android.os.Process;
import android.os.UserHandle;
+import android.permission.PermissionManager;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.util.Log;
@@ -303,14 +303,10 @@
String message, boolean allowCarrierPrivilegeOnAnySub) {
int uid = Binder.getCallingUid();
int pid = Binder.getCallingPid();
- // Allow system and root access to the device identifiers.
- final int appId = UserHandle.getAppId(uid);
- if (appId == Process.SYSTEM_UID || appId == Process.ROOT_UID) {
- return true;
- }
- // Allow access to packages that have the READ_PRIVILEGED_PHONE_STATE permission.
- if (context.checkPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, pid,
- uid) == PackageManager.PERMISSION_GRANTED) {
+ PermissionManager permissionManager = (PermissionManager) context.getSystemService(
+ Context.PERMISSION_SERVICE);
+ if (permissionManager.checkDeviceIdentifierAccess(callingPackage, message, callingFeatureId,
+ pid, uid) == PackageManager.PERMISSION_GRANTED) {
return true;
}
@@ -323,30 +319,6 @@
return true;
}
- // if the calling package is not null then perform the DevicePolicyManager device /
- // profile owner and Appop checks.
- if (callingPackage != null) {
- // Allow access to an app that has been granted the READ_DEVICE_IDENTIFIERS app op.
- long token = Binder.clearCallingIdentity();
- AppOpsManager appOpsManager = (AppOpsManager) context.getSystemService(
- Context.APP_OPS_SERVICE);
- try {
- if (appOpsManager.noteOpNoThrow(AppOpsManager.OPSTR_READ_DEVICE_IDENTIFIERS, uid,
- callingPackage, callingFeatureId, null) == AppOpsManager.MODE_ALLOWED) {
- return true;
- }
- } finally {
- Binder.restoreCallingIdentity(token);
- }
- // Allow access to a device / profile owner app.
- DevicePolicyManager devicePolicyManager =
- (DevicePolicyManager) context.getSystemService(
- Context.DEVICE_POLICY_SERVICE);
- if (devicePolicyManager != null && devicePolicyManager.hasDeviceIdentifierAccess(
- callingPackage, pid, uid)) {
- return true;
- }
- }
return reportAccessDeniedToReadIdentifiers(context, subId, pid, uid, callingPackage,
message);
}
diff --git a/telephony/java/android/telephony/CellSignalStrength.java b/telephony/java/android/telephony/CellSignalStrength.java
index cb8fdf0..2e7bde3 100644
--- a/telephony/java/android/telephony/CellSignalStrength.java
+++ b/telephony/java/android/telephony/CellSignalStrength.java
@@ -156,6 +156,8 @@
/**
* Returns the number of signal strength levels.
* @return Number of signal strength levels, enforced to be 5
+ *
+ * @hide
*/
public static final int getNumSignalStrengthLevels() {
return NUM_SIGNAL_STRENGTH_BINS;
diff --git a/telephony/java/android/telephony/ModemActivityInfo.java b/telephony/java/android/telephony/ModemActivityInfo.java
index e815aec..2b72ab7 100644
--- a/telephony/java/android/telephony/ModemActivityInfo.java
+++ b/telephony/java/android/telephony/ModemActivityInfo.java
@@ -18,7 +18,6 @@
import android.annotation.IntDef;
import android.annotation.NonNull;
-import android.annotation.SystemApi;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.SystemClock;
@@ -33,7 +32,6 @@
* Reports modem activity information.
* @hide
*/
-@SystemApi
public final class ModemActivityInfo implements Parcelable {
/**
* Tx(transmit) power level. see power index below
diff --git a/telephony/java/android/telephony/PhoneCapability.java b/telephony/java/android/telephony/PhoneCapability.java
index 6571858..b785037 100644
--- a/telephony/java/android/telephony/PhoneCapability.java
+++ b/telephony/java/android/telephony/PhoneCapability.java
@@ -28,6 +28,8 @@
/**
* Define capability of a modem group. That is, the capabilities
* are shared between those modems defined by list of modem IDs.
+ *
+ * @hide
*/
public final class PhoneCapability implements Parcelable {
// Hardcoded default DSDS capability.
diff --git a/telephony/java/android/telephony/ServiceState.java b/telephony/java/android/telephony/ServiceState.java
index deba551..0e61efa 100644
--- a/telephony/java/android/telephony/ServiceState.java
+++ b/telephony/java/android/telephony/ServiceState.java
@@ -397,7 +397,6 @@
* @return newly created ServiceState
* @hide
*/
- @SystemApi
@NonNull
public static ServiceState newFromBundle(@NonNull Bundle m) {
ServiceState ret;
@@ -1316,7 +1315,6 @@
* @hide
*
*/
- @SystemApi
public void fillInNotifierBundle(@NonNull Bundle m) {
m.putParcelable(EXTRA_SERVICE_STATE, this);
// serviceState already consists of below entries.
diff --git a/telephony/java/android/telephony/SignalStrength.java b/telephony/java/android/telephony/SignalStrength.java
index ad58c54..283e666 100644
--- a/telephony/java/android/telephony/SignalStrength.java
+++ b/telephony/java/android/telephony/SignalStrength.java
@@ -18,7 +18,6 @@
import android.annotation.ElapsedRealtimeLong;
import android.annotation.NonNull;
-import android.annotation.SystemApi;
import android.compat.annotation.UnsupportedAppUsage;
import android.os.Build;
import android.os.Bundle;
@@ -284,7 +283,6 @@
*
* @hide
*/
- @SystemApi
public SignalStrength(@NonNull SignalStrength s) {
copyFrom(s);
}
diff --git a/telephony/java/android/telephony/SmsManager.java b/telephony/java/android/telephony/SmsManager.java
index f6552ee..c144746 100644
--- a/telephony/java/android/telephony/SmsManager.java
+++ b/telephony/java/android/telephony/SmsManager.java
@@ -424,7 +424,7 @@
String destinationAddress, String scAddress, String text,
PendingIntent sentIntent, PendingIntent deliveryIntent) {
sendTextMessageInternal(destinationAddress, scAddress, text, sentIntent, deliveryIntent,
- true /* persistMessage*/, null, 0L /* messageId */);
+ true /* persistMessage*/, null, null, 0L /* messageId */);
}
@@ -443,7 +443,7 @@
@Nullable PendingIntent sentIntent, @Nullable PendingIntent deliveryIntent,
long messageId) {
sendTextMessageInternal(destinationAddress, scAddress, text, sentIntent, deliveryIntent,
- true /* persistMessage*/, null, messageId);
+ true /* persistMessage*/, null, null, messageId);
}
/**
@@ -561,7 +561,7 @@
private void sendTextMessageInternal(String destinationAddress, String scAddress,
String text, PendingIntent sentIntent, PendingIntent deliveryIntent,
- boolean persistMessage, String packageName, long messageId) {
+ boolean persistMessage, String packageName, String attributionTag, long messageId) {
if (TextUtils.isEmpty(destinationAddress)) {
throw new IllegalArgumentException("Invalid destinationAddress");
}
@@ -586,7 +586,7 @@
public void onSuccess(int subId) {
ISms iSms = getISmsServiceOrThrow();
try {
- iSms.sendTextForSubscriber(subId, packageName,
+ iSms.sendTextForSubscriber(subId, packageName, attributionTag,
destinationAddress, scAddress, text, sentIntent, deliveryIntent,
persistMessage, messageId);
} catch (RemoteException e) {
@@ -606,7 +606,7 @@
// visible to the user.
ISms iSms = getISmsServiceOrThrow();
try {
- iSms.sendTextForSubscriber(getSubscriptionId(), packageName,
+ iSms.sendTextForSubscriber(getSubscriptionId(), packageName, attributionTag,
destinationAddress, scAddress, text, sentIntent, deliveryIntent,
persistMessage, messageId);
} catch (RemoteException e) {
@@ -653,7 +653,7 @@
String destinationAddress, String scAddress, String text,
PendingIntent sentIntent, PendingIntent deliveryIntent) {
sendTextMessageInternal(destinationAddress, scAddress, text, sentIntent, deliveryIntent,
- false /* persistMessage */, null,
+ false /* persistMessage */, null, null,
0L /* messageId */);
}
@@ -937,7 +937,7 @@
String destinationAddress, String scAddress, ArrayList<String> parts,
ArrayList<PendingIntent> sentIntents, ArrayList<PendingIntent> deliveryIntents) {
sendMultipartTextMessageInternal(destinationAddress, scAddress, parts, sentIntents,
- deliveryIntents, true /* persistMessage*/, null,
+ deliveryIntents, true /* persistMessage*/, null, null,
0L /* messageId */);
}
@@ -955,7 +955,7 @@
@NonNull List<String> parts, @Nullable List<PendingIntent> sentIntents,
@Nullable List<PendingIntent> deliveryIntents, long messageId) {
sendMultipartTextMessageInternal(destinationAddress, scAddress, parts, sentIntents,
- deliveryIntents, true /* persistMessage*/, null,
+ deliveryIntents, true /* persistMessage*/, null, null,
messageId);
}
@@ -979,15 +979,18 @@
public void sendMultipartTextMessage(
@NonNull String destinationAddress, @Nullable String scAddress,
@NonNull List<String> parts, @Nullable List<PendingIntent> sentIntents,
- @Nullable List<PendingIntent> deliveryIntents, @NonNull String packageName) {
+ @Nullable List<PendingIntent> deliveryIntents, @NonNull String packageName,
+ @Nullable String attributionTag) {
sendMultipartTextMessageInternal(destinationAddress, scAddress, parts, sentIntents,
- deliveryIntents, true /* persistMessage*/, packageName, 0L /* messageId */);
+ deliveryIntents, true /* persistMessage*/, packageName, attributionTag,
+ 0L /* messageId */);
}
private void sendMultipartTextMessageInternal(
String destinationAddress, String scAddress, List<String> parts,
List<PendingIntent> sentIntents, List<PendingIntent> deliveryIntents,
- boolean persistMessage, String packageName, long messageId) {
+ boolean persistMessage, String packageName, @Nullable String attributionTag,
+ long messageId) {
if (TextUtils.isEmpty(destinationAddress)) {
throw new IllegalArgumentException("Invalid destinationAddress");
}
@@ -1012,7 +1015,7 @@
public void onSuccess(int subId) {
try {
ISms iSms = getISmsServiceOrThrow();
- iSms.sendMultipartTextForSubscriber(subId, packageName,
+ iSms.sendMultipartTextForSubscriber(subId, packageName, attributionTag,
destinationAddress, scAddress, parts, sentIntents,
deliveryIntents, persistMessage, messageId);
} catch (RemoteException e) {
@@ -1034,8 +1037,8 @@
ISms iSms = getISmsServiceOrThrow();
if (iSms != null) {
iSms.sendMultipartTextForSubscriber(getSubscriptionId(), packageName,
- destinationAddress, scAddress, parts, sentIntents, deliveryIntents,
- persistMessage, messageId);
+ attributionTag, destinationAddress, scAddress, parts, sentIntents,
+ deliveryIntents, persistMessage, messageId);
}
} catch (RemoteException e) {
Log.e(TAG, "sendMultipartTextMessageInternal: Couldn't send SMS - "
@@ -1053,7 +1056,7 @@
deliveryIntent = deliveryIntents.get(0);
}
sendTextMessageInternal(destinationAddress, scAddress, parts.get(0),
- sentIntent, deliveryIntent, true, packageName, messageId);
+ sentIntent, deliveryIntent, true, packageName, attributionTag, messageId);
}
}
@@ -1083,7 +1086,7 @@
String destinationAddress, String scAddress, List<String> parts,
List<PendingIntent> sentIntents, List<PendingIntent> deliveryIntents) {
sendMultipartTextMessageInternal(destinationAddress, scAddress, parts, sentIntents,
- deliveryIntents, false /* persistMessage*/, null,
+ deliveryIntents, false /* persistMessage*/, null, null,
0L /* messageId */);
}
@@ -1246,7 +1249,7 @@
ISms iSms = getISmsServiceOrThrow();
if (iSms != null) {
iSms.sendMultipartTextForSubscriberWithOptions(subId,
- null, destinationAddress,
+ null, null, destinationAddress,
scAddress, parts, sentIntents, deliveryIntents,
persistMessage, finalPriority, expectMore, finalValidity);
}
@@ -1268,7 +1271,7 @@
ISms iSms = getISmsServiceOrThrow();
if (iSms != null) {
iSms.sendMultipartTextForSubscriberWithOptions(getSubscriptionId(),
- null, destinationAddress,
+ null, null, destinationAddress,
scAddress, parts, sentIntents, deliveryIntents,
persistMessage, finalPriority, expectMore, finalValidity);
}
@@ -1399,9 +1402,8 @@
public void onSuccess(int subId) {
try {
ISms iSms = getISmsServiceOrThrow();
- iSms.sendDataForSubscriber(subId, null,
- destinationAddress, scAddress, destinationPort & 0xFFFF, data,
- sentIntent, deliveryIntent);
+ iSms.sendDataForSubscriber(subId, null, null, destinationAddress, scAddress,
+ destinationPort & 0xFFFF, data, sentIntent, deliveryIntent);
} catch (RemoteException e) {
Log.e(TAG, "sendDataMessage: Couldn't send SMS - Exception: " + e.getMessage());
notifySmsError(sentIntent, RESULT_REMOTE_EXCEPTION);
@@ -1553,7 +1555,7 @@
// it here because we do not have access to the activity context that is performing this
// operation.
// Requires that the calling process has the SEND_SMS permission.
- getITelephony().enqueueSmsPickResult(null,
+ getITelephony().enqueueSmsPickResult(null, null,
new IIntegerConsumer.Stub() {
@Override
public void accept(int subId) {
diff --git a/telephony/java/android/telephony/TelephonyFrameworkInitializer.java b/telephony/java/android/telephony/TelephonyFrameworkInitializer.java
index 0d2a8bc..c9540fb 100644
--- a/telephony/java/android/telephony/TelephonyFrameworkInitializer.java
+++ b/telephony/java/android/telephony/TelephonyFrameworkInitializer.java
@@ -17,7 +17,6 @@
package android.telephony;
import android.annotation.NonNull;
-import android.annotation.SystemApi;
import android.app.SystemServiceRegistry;
import android.content.Context;
import android.os.TelephonyServiceManager;
@@ -33,7 +32,6 @@
*
* @hide
*/
-@SystemApi
public class TelephonyFrameworkInitializer {
private TelephonyFrameworkInitializer() {
diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java
index 441a8ee..5a7b852 100644
--- a/telephony/java/android/telephony/TelephonyManager.java
+++ b/telephony/java/android/telephony/TelephonyManager.java
@@ -165,7 +165,6 @@
* into the ResultReceiver Bundle.
* @hide
*/
- @SystemApi
public static final String MODEM_ACTIVITY_RESULT_KEY = "controller_activity";
/**
@@ -1438,7 +1437,6 @@
*
* @hide
*/
- @SystemApi
public static final String EXTRA_DEFAULT_SUBSCRIPTION_SELECT_TYPE =
"android.telephony.extra.DEFAULT_SUBSCRIPTION_SELECT_TYPE";
@@ -1458,7 +1456,6 @@
* to indicate there's no need to re-select any default subscription.
* @hide
*/
- @SystemApi
public static final int EXTRA_DEFAULT_SUBSCRIPTION_SELECT_TYPE_NONE = 0;
/**
@@ -1466,7 +1463,6 @@
* to indicate there's a need to select default data subscription.
* @hide
*/
- @SystemApi
public static final int EXTRA_DEFAULT_SUBSCRIPTION_SELECT_TYPE_DATA = 1;
/**
@@ -1474,7 +1470,6 @@
* to indicate there's a need to select default voice call subscription.
* @hide
*/
- @SystemApi
public static final int EXTRA_DEFAULT_SUBSCRIPTION_SELECT_TYPE_VOICE = 2;
/**
@@ -1482,7 +1477,6 @@
* to indicate there's a need to select default sms subscription.
* @hide
*/
- @SystemApi
public static final int EXTRA_DEFAULT_SUBSCRIPTION_SELECT_TYPE_SMS = 3;
/**
@@ -1492,7 +1486,6 @@
* which subscription should be the default subscription.
* @hide
*/
- @SystemApi
public static final int EXTRA_DEFAULT_SUBSCRIPTION_SELECT_TYPE_ALL = 4;
/**
@@ -1502,7 +1495,6 @@
*
* @hide
*/
- @SystemApi
public static final String EXTRA_SIM_COMBINATION_WARNING_TYPE =
"android.telephony.extra.SIM_COMBINATION_WARNING_TYPE";
@@ -1519,7 +1511,6 @@
* to indicate there's no SIM combination warning.
* @hide
*/
- @SystemApi
public static final int EXTRA_SIM_COMBINATION_WARNING_TYPE_NONE = 0;
/**
@@ -1527,7 +1518,6 @@
* to indicate two active SIMs are both CDMA hence there might be functional limitation.
* @hide
*/
- @SystemApi
public static final int EXTRA_SIM_COMBINATION_WARNING_TYPE_DUAL_CDMA = 1;
/**
@@ -1538,7 +1528,6 @@
*
* @hide
*/
- @SystemApi
public static final String EXTRA_SIM_COMBINATION_NAMES =
"android.telephony.extra.SIM_COMBINATION_NAMES";
@@ -1590,7 +1579,6 @@
* <p class="note">This is a protected intent that can only be sent by the system.</p>
* @hide
*/
- @SystemApi
@SuppressLint("ActionValue")
public static final String ACTION_CARRIER_SIGNAL_REDIRECTED =
"com.android.internal.telephony.CARRIER_SIGNAL_REDIRECTED";
@@ -1608,7 +1596,6 @@
* <p class="note">This is a protected intent that can only be sent by the system. </p>
* @hide
*/
- @SystemApi
@SuppressLint("ActionValue")
public static final String ACTION_CARRIER_SIGNAL_REQUEST_NETWORK_FAILED =
"com.android.internal.telephony.CARRIER_SIGNAL_REQUEST_NETWORK_FAILED";
@@ -1631,7 +1618,6 @@
* <p class="note">This is a protected intent that can only be sent by the system. </p>
* @hide
*/
- @SystemApi
@SuppressLint("ActionValue")
public static final String ACTION_CARRIER_SIGNAL_PCO_VALUE =
"com.android.internal.telephony.CARRIER_SIGNAL_PCO_VALUE";
@@ -1649,7 +1635,6 @@
* <p class="note">This is a protected intent that can only be sent by the system. </p>
* @hide
*/
- @SystemApi
@SuppressLint("ActionValue")
public static final String ACTION_CARRIER_SIGNAL_DEFAULT_NETWORK_AVAILABLE =
"com.android.internal.telephony.CARRIER_SIGNAL_DEFAULT_NETWORK_AVAILABLE";
@@ -1664,7 +1649,6 @@
* <p class="note">This is a protected intent that can only be sent by the system.</p>
* @hide
*/
- @SystemApi
@SuppressLint("ActionValue")
public static final String ACTION_CARRIER_SIGNAL_RESET =
"com.android.internal.telephony.CARRIER_SIGNAL_RESET";
@@ -1674,7 +1658,6 @@
* An string extra of redirected url upon {@link #ACTION_CARRIER_SIGNAL_REDIRECTED}.
* @hide
*/
- @SystemApi
@SuppressLint("ActionValue")
public static final String EXTRA_REDIRECTION_URL = "redirectionUrl";
@@ -1683,7 +1666,6 @@
* Check {@link DataFailCause} for all possible values.
* @hide
*/
- @SystemApi
@SuppressLint("ActionValue")
public static final String EXTRA_ERROR_CODE = "errorCode";
@@ -1697,7 +1679,6 @@
*
* @hide
*/
- @SystemApi
@Deprecated
@SuppressLint("ActionValue")
public static final String EXTRA_APN_TYPE = "apnType";
@@ -1710,7 +1691,6 @@
* Check {@link ApnSetting} TYPE_* for its values.
* @hide
*/
- @SystemApi
@SuppressLint("ActionValue")
public static final String EXTRA_APN_TYPE_INT = "apnTypeInt";
@@ -1722,7 +1702,6 @@
*
* @hide
*/
- @SystemApi
@Deprecated
@SuppressLint("ActionValue")
public static final String EXTRA_APN_PROTOCOL = "apnProto";
@@ -1733,7 +1712,6 @@
* Check {@link ApnSetting} PROTOCOL_* for its values.
* @hide
*/
- @SystemApi
@SuppressLint("ActionValue")
public static final String EXTRA_APN_PROTOCOL_INT = "apnProtoInt";
@@ -1742,7 +1720,6 @@
* {@link #ACTION_CARRIER_SIGNAL_PCO_VALUE} broadcasts.
* @hide
*/
- @SystemApi
@SuppressLint("ActionValue")
public static final String EXTRA_PCO_ID = "pcoId";
@@ -1751,7 +1728,6 @@
* {@link #ACTION_CARRIER_SIGNAL_PCO_VALUE} broadcasts.
* @hide
*/
- @SystemApi
@SuppressLint("ActionValue")
public static final String EXTRA_PCO_VALUE = "pcoValue";
@@ -1760,7 +1736,6 @@
* {@link #ACTION_CARRIER_SIGNAL_DEFAULT_NETWORK_AVAILABLE} broadcasts.
* @hide
*/
- @SystemApi
@SuppressLint("ActionValue")
public static final String EXTRA_DEFAULT_NETWORK_AVAILABLE = "defaultNetworkAvailable";
@@ -2911,6 +2886,8 @@
/**
* Return a collection of all network types
* @return network types
+ *
+ * @hide
*/
public static @NonNull @NetworkType int[] getAllNetworkTypes() {
return NETWORK_TYPES;
@@ -8087,7 +8064,6 @@
*
* @hide
*/
- @SystemApi
@RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
public boolean isInEmergencySmsMode() {
try {
@@ -10278,7 +10254,6 @@
* {@link #MODEM_ACTIVITY_RESULT_KEY}.
* @hide
*/
- @SystemApi
public void requestModemActivityInfo(@NonNull ResultReceiver result) {
try {
ITelephony service = getITelephony();
@@ -13003,6 +12978,7 @@
*/
@WorkerThread
@RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
+ @SystemApi
public boolean isIccLockEnabled() {
try {
ITelephony telephony = getITelephony();
diff --git a/telephony/java/com/android/internal/telephony/ISms.aidl b/telephony/java/com/android/internal/telephony/ISms.aidl
index fed969d..89f811e 100644
--- a/telephony/java/com/android/internal/telephony/ISms.aidl
+++ b/telephony/java/com/android/internal/telephony/ISms.aidl
@@ -86,9 +86,9 @@
* raw pdu of the status report is in the extended data ("pdu").
* @param subId the subId id.
*/
- void sendDataForSubscriber(int subId, String callingPkg, in String destAddr,
- in String scAddr, in int destPort, in byte[] data, in PendingIntent sentIntent,
- in PendingIntent deliveryIntent);
+ void sendDataForSubscriber(int subId, String callingPkg, String callingattributionTag,
+ in String destAddr, in String scAddr, in int destPort,in byte[] data,
+ in PendingIntent sentIntent, in PendingIntent deliveryIntent);
/**
* Send an SMS.
@@ -120,8 +120,8 @@
* @param messageId An id that uniquely identifies the message requested to be sent.
* Used for logging and diagnostics purposes. The id may be 0.
*/
- void sendTextForSubscriber(in int subId, String callingPkg, in String destAddr,
- in String scAddr, in String text, in PendingIntent sentIntent,
+ void sendTextForSubscriber(in int subId, String callingPkg, String callingAttributionTag,
+ in String destAddr, in String scAddr, in String text, in PendingIntent sentIntent,
in PendingIntent deliveryIntent, in boolean persistMessageForNonDefaultSmsApp,
in long messageId);
@@ -222,7 +222,7 @@
* Used for logging and diagnostics purposes. The id may be 0.
*/
void sendMultipartTextForSubscriber(in int subId, String callingPkg,
- in String destinationAddress, in String scAddress,
+ String callingAttributionTag, in String destinationAddress, in String scAddress,
in List<String> parts, in List<PendingIntent> sentIntents,
in List<PendingIntent> deliveryIntents, in boolean persistMessageForNonDefaultSmsApp,
in long messageId);
@@ -272,10 +272,10 @@
* Any Other values included Negative considered as Invalid Validity Period of the message.
*/
void sendMultipartTextForSubscriberWithOptions(in int subId, String callingPkg,
- in String destinationAddress, in String scAddress, in List<String> parts,
- in List<PendingIntent> sentIntents, in List<PendingIntent> deliveryIntents,
- in boolean persistMessageForNonDefaultSmsApp, in int priority, in boolean expectMore,
- in int validityPeriod);
+ String callingAttributionTag, in String destinationAddress, in String scAddress,
+ in List<String> parts, in List<PendingIntent> sentIntents,
+ in List<PendingIntent> deliveryIntents, in boolean persistMessageForNonDefaultSmsApp,
+ in int priority, in boolean expectMore, in int validityPeriod);
/**
* Enable reception of cell broadcast (SMS-CB) messages with the given
@@ -433,6 +433,7 @@
*
* @param subId the SIM id.
* @param callingPkg the package name of the calling app
+ * @param callingAttributionTag the attribution tag of calling context
* @param messageUri the URI of the stored message
* @param scAddress is the service center address or null to use the current default SMSC
* @param sentIntent if not NULL this <code>PendingIntent</code> is
@@ -452,8 +453,9 @@
* broadcast when the message is delivered to the recipient. The
* raw pdu of the status report is in the extended data ("pdu").
*/
- void sendStoredText(int subId, String callingPkg, in Uri messageUri, String scAddress,
- in PendingIntent sentIntent, in PendingIntent deliveryIntent);
+ void sendStoredText(int subId, String callingPkg, String callingAttributionTag,
+ in Uri messageUri, String scAddress, in PendingIntent sentIntent,
+ in PendingIntent deliveryIntent);
/**
* Send a system stored multi-part text message.
@@ -465,6 +467,7 @@
*
* @param subId the SIM id.
* @param callingPkg the package name of the calling app
+ * @param callingAttributeTag the attribute tag of the calling context
* @param messageUri the URI of the stored message
* @param scAddress is the service center address or null to use
* the current default SMSC
@@ -488,8 +491,8 @@
* to the recipient. The raw pdu of the status report is in the
* extended data ("pdu").
*/
- void sendStoredMultipartText(int subId, String callingPkg, in Uri messageUri,
- String scAddress, in List<PendingIntent> sentIntents,
+ void sendStoredMultipartText(int subId, String callingPkg, String callingAttributeTag,
+ in Uri messageUri, String scAddress, in List<PendingIntent> sentIntents,
in List<PendingIntent> deliveryIntents);
/**
diff --git a/telephony/java/com/android/internal/telephony/ISmsImplBase.java b/telephony/java/com/android/internal/telephony/ISmsImplBase.java
index 67ad23a..f1182f7 100644
--- a/telephony/java/com/android/internal/telephony/ISmsImplBase.java
+++ b/telephony/java/com/android/internal/telephony/ISmsImplBase.java
@@ -45,15 +45,15 @@
}
@Override
- public void sendDataForSubscriber(int subId, String callingPkg, String destAddr,
- String scAddr, int destPort, byte[] data, PendingIntent sentIntent,
+ public void sendDataForSubscriber(int subId, String callingPkg, String callingAttributionTag,
+ String destAddr, String scAddr, int destPort, byte[] data, PendingIntent sentIntent,
PendingIntent deliveryIntent) {
throw new UnsupportedOperationException();
}
@Override
- public void sendTextForSubscriber(int subId, String callingPkg, String destAddr,
- String scAddr, String text, PendingIntent sentIntent,
+ public void sendTextForSubscriber(int subId, String callingPkg, String callingAttributionTag,
+ String destAddr, String scAddr, String text, PendingIntent sentIntent,
PendingIntent deliveryIntent, boolean persistMessageForNonDefaultSmsApp,
long messageId) {
throw new UnsupportedOperationException();
@@ -76,7 +76,7 @@
@Override
public void sendMultipartTextForSubscriber(int subId, String callingPkg,
- String destinationAddress, String scAddress,
+ String callingAttributionTag, String destinationAddress, String scAddress,
List<String> parts, List<PendingIntent> sentIntents,
List<PendingIntent> deliveryIntents, boolean persistMessageForNonDefaultSmsApp,
long messageId) {
@@ -85,7 +85,7 @@
@Override
public void sendMultipartTextForSubscriberWithOptions(int subId, String callingPkg,
- String destinationAddress, String scAddress,
+ String callingAttributionTag, String destinationAddress, String scAddress,
List<String> parts, List<PendingIntent> sentIntents,
List<PendingIntent> deliveryIntents, boolean persistMessageForNonDefaultSmsApp,
int priority, boolean expectMore, int validityPeriod) {
@@ -162,14 +162,15 @@
}
@Override
- public void sendStoredText(int subId, String callingPkg, Uri messageUri, String scAddress,
- PendingIntent sentIntent, PendingIntent deliveryIntent) {
+ public void sendStoredText(int subId, String callingPkg, String callingAttributionTag,
+ Uri messageUri, String scAddress, PendingIntent sentIntent,
+ PendingIntent deliveryIntent) {
throw new UnsupportedOperationException();
}
@Override
- public void sendStoredMultipartText(int subId, String callingPkg, Uri messageUri,
- String scAddress, List<PendingIntent> sentIntents,
+ public void sendStoredMultipartText(int subId, String callingPkg, String callingAttributionTag,
+ Uri messageUri, String scAddress, List<PendingIntent> sentIntents,
List<PendingIntent> deliveryIntents) {
throw new UnsupportedOperationException();
}
diff --git a/telephony/java/com/android/internal/telephony/ITelephony.aidl b/telephony/java/com/android/internal/telephony/ITelephony.aidl
index 81c0895..43aeb19 100644
--- a/telephony/java/com/android/internal/telephony/ITelephony.aidl
+++ b/telephony/java/com/android/internal/telephony/ITelephony.aidl
@@ -2204,7 +2204,8 @@
* Enqueue a pending sms Consumer, which will answer with the user specified selection for an
* outgoing SmsManager operation.
*/
- oneway void enqueueSmsPickResult(String callingPackage, IIntegerConsumer subIdResult);
+ oneway void enqueueSmsPickResult(String callingPackage, String callingAttributeTag,
+ IIntegerConsumer subIdResult);
/**
* Returns the MMS user agent.
diff --git a/tests/TaskOrganizerTest/src/com/android/test/taskembed/TaskOrganizerMultiWindowTest.java b/tests/TaskOrganizerTest/src/com/android/test/taskembed/TaskOrganizerMultiWindowTest.java
index 6eb4587..cb75c8b 100644
--- a/tests/TaskOrganizerTest/src/com/android/test/taskembed/TaskOrganizerMultiWindowTest.java
+++ b/tests/TaskOrganizerTest/src/com/android/test/taskembed/TaskOrganizerMultiWindowTest.java
@@ -27,17 +27,14 @@
import android.graphics.Color;
import android.graphics.Rect;
import android.os.Bundle;
-import android.os.RemoteException;
import android.view.Gravity;
-import android.view.ITaskOrganizer;
-import android.view.IWindowContainer;
import android.view.MotionEvent;
import android.view.SurfaceControl;
import android.view.SurfaceHolder;
import android.view.View;
import android.view.ViewGroup;
-import android.view.WindowContainerTransaction;
-import android.widget.FrameLayout;
+import android.window.ITaskOrganizer;
+import android.window.WindowContainerTransaction;
import android.widget.LinearLayout;
public class TaskOrganizerMultiWindowTest extends Activity {
diff --git a/tests/TaskOrganizerTest/src/com/android/test/taskembed/TaskOrganizerPipTest.java b/tests/TaskOrganizerTest/src/com/android/test/taskembed/TaskOrganizerPipTest.java
index ade5c2e..177841d 100644
--- a/tests/TaskOrganizerTest/src/com/android/test/taskembed/TaskOrganizerPipTest.java
+++ b/tests/TaskOrganizerTest/src/com/android/test/taskembed/TaskOrganizerPipTest.java
@@ -24,11 +24,10 @@
import android.content.Intent;
import android.graphics.Rect;
import android.os.IBinder;
-import android.view.ITaskOrganizer;
-import android.view.IWindowContainer;
import android.view.SurfaceControl;
import android.view.ViewGroup;
-import android.view.WindowContainerTransaction;
+import android.window.ITaskOrganizer;
+import android.window.WindowContainerTransaction;
import android.view.WindowManager;
import android.widget.FrameLayout;
diff --git a/tests/TaskOrganizerTest/src/com/android/test/taskembed/TaskView.java b/tests/TaskOrganizerTest/src/com/android/test/taskembed/TaskView.java
index 0086fb7..438a062 100644
--- a/tests/TaskOrganizerTest/src/com/android/test/taskembed/TaskView.java
+++ b/tests/TaskOrganizerTest/src/com/android/test/taskembed/TaskView.java
@@ -18,11 +18,11 @@
import android.app.ActivityTaskManager;
import android.content.Context;
-import android.view.ITaskOrganizer;
-import android.view.IWindowContainer;
+import android.window.IWindowContainer;
import android.view.SurfaceControl;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
+import android.window.ITaskOrganizer;
/**
* Simple SurfaceView wrapper which registers a TaskOrganizer
diff --git a/wifi/java/android/net/wifi/WifiMigration.java b/wifi/java/android/net/wifi/WifiMigration.java
index 666d72d..87afdc5 100755
--- a/wifi/java/android/net/wifi/WifiMigration.java
+++ b/wifi/java/android/net/wifi/WifiMigration.java
@@ -138,7 +138,10 @@
/**
* Load data from legacy shared wifi config store file.
- * TODO(b/149418926): Add XSD for the AOSP file format for each file from R.
+ * <p>
+ * Expected AOSP format is available in the sample files under {@code /frameworks/base/wifi/
+ * java/android/net/wifi/migration_samples}.
+ * </p>
* <p>
* Note:
* <li>OEMs need to change the implementation of
@@ -214,7 +217,10 @@
/**
* Load data from legacy user wifi config store file.
- * TODO(b/149418926): Add XSD for the AOSP file format for each file from R.
+ * <p>
+ * Expected AOSP format is available in the sample files under {@code /frameworks/base/wifi/
+ * java/android/net/wifi/migration_samples}.
+ * </p>
* <p>
* Note:
* <li>OEMs need to change the implementation of
diff --git a/wifi/java/android/net/wifi/migration_samples/README.txt b/wifi/java/android/net/wifi/migration_samples/README.txt
new file mode 100644
index 0000000..264deba
--- /dev/null
+++ b/wifi/java/android/net/wifi/migration_samples/README.txt
@@ -0,0 +1,35 @@
+This folder contains sample files for each of the 4 XML Wi-Fi config store files in Android 11 AOSP.
+OEMs can use these files as reference for converting their previous customized
+formats into the AOSP format. The conversion logic needs to be written in
+WifiMigration.java class, i.e each OEM needs to modify
+WifiMigration.convertAndRetrieveSharedConfigStoreFile() and the
+WifiMigration.convertAndRetrieveUserConfigStoreFile() methods.
+
+The 4 files are:
+
+Shared files
+============
+1) WifiConfigStore.xml - General storage for shared configurations. Includes
+user's saved Wi-Fi networks.
+AOSP Path in Android 10: /data/misc/wifi/WifiConfigStore.xml
+AOSP Path in Android 11: /data/misc/apexdata/com.android/wifi/WifiConfigStore.xml
+Sample File (in this folder): Shared_WifiConfigStore.xml
+
+2) WifiConfigStoreSoftAp.xml - Storage for user's softap/tethering configuration.
+AOSP Path in Android 10: /data/misc/wifi/softap.conf.
+Note: Was key/value format in Android 10. Conversion to XML done in SoftApConfToXmlMigrationUtil.java.
+AOSP Path in Android 11: /data/misc/apexdata/com.android/wifi/WifiConfigStore.xml
+Sample File (in this folder): Shared_WifiConfigStoreSoftAp.xml
+
+User specific files
+==================
+3) WifiConfigStore.xml - General storage for user specific configurations. Includes
+user's saved passpoint networks, Wi-Fi network request approvals, etc.
+AOSP Path in Android 10: /data/misc_ce/<userId>/wifi/WifiConfigStore.xml
+AOSP Path in Android 11: /data/misc_ce/<userId>/apexdata/com.android/wifi/WifiConfigStore.xml
+Sample File (in this folder): User_WifiConfigStore.xml
+
+4) WifiConfigStoreNetworkSuggestions.xml - Storage for app installed network suggestions.
+AOSP Path in Android 10: /data/misc_ce/<userId>/wifi/WifiConfigStoreNetworkSuggestions.xml
+AOSP Path in Android 11: /data/misc_ce/<userId>/apexdata/com.android/wifi/WifiConfigStoreNetworkSuggestions.xml
+Sample File (in this folder): User_WifiConfigStoreNetworkSuggestions.xml
diff --git a/wifi/java/android/net/wifi/migration_samples/Shared_WifiConfigStore.xml b/wifi/java/android/net/wifi/migration_samples/Shared_WifiConfigStore.xml
new file mode 100644
index 0000000..3063276
--- /dev/null
+++ b/wifi/java/android/net/wifi/migration_samples/Shared_WifiConfigStore.xml
@@ -0,0 +1,200 @@
+<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
+<WifiConfigStoreData>
+<int name="Version" value="3" />
+<NetworkList>
+<Network>
+<WifiConfiguration>
+<string name="ConfigKey">"OPEN_SSID"NONE</string>
+<string name="SSID">"OPEN_SSID"</string>
+<null name="PreSharedKey" />
+<null name="WEPKeys" />
+<int name="WEPTxKeyIndex" value="0" />
+<boolean name="HiddenSSID" value="false" />
+<boolean name="RequirePMF" value="false" />
+<byte-array name="AllowedKeyMgmt" num="1">01</byte-array>
+<byte-array name="AllowedProtocols" num="1">03</byte-array>
+<byte-array name="AllowedAuthAlgos" num="0"></byte-array>
+<byte-array name="AllowedGroupCiphers" num="1">2f</byte-array>
+<byte-array name="AllowedPairwiseCiphers" num="1">0e</byte-array>
+<byte-array name="AllowedGroupMgmtCiphers" num="1">04</byte-array>
+<byte-array name="AllowedSuiteBCiphers" num="0"></byte-array>
+<boolean name="Shared" value="true" />
+<boolean name="AutoJoinEnabled" value="true" />
+<boolean name="Trusted" value="true" />
+<null name="BSSID" />
+<int name="Status" value="2" />
+<null name="FQDN" />
+<null name="ProviderFriendlyName" />
+<null name="LinkedNetworksList" />
+<null name="DefaultGwMacAddress" />
+<boolean name="ValidatedInternetAccess" value="true" />
+<boolean name="NoInternetAccessExpected" value="false" />
+<boolean name="MeteredHint" value="false" />
+<int name="MeteredOverride" value="0" />
+<boolean name="UseExternalScores" value="false" />
+<int name="NumAssociation" value="3" />
+<int name="CreatorUid" value="1000" />
+<string name="CreatorName">android.uid.system:1000</string>
+<int name="LastUpdateUid" value="1000" />
+<string name="LastUpdateName">android.uid.system:1000</string>
+<int name="LastConnectUid" value="1000" />
+<boolean name="IsLegacyPasspointConfig" value="false" />
+<long-array name="RoamingConsortiumOIs" num="0" />
+<string name="RandomizedMacAddress">ce:b1:36:bb:71:ac</string>
+<int name="MacRandomizationSetting" value="1" />
+<int name="CarrierId" value="-1" />
+</WifiConfiguration>
+<NetworkStatus>
+<string name="SelectionStatus">NETWORK_SELECTION_ENABLED</string>
+<string name="DisableReason">NETWORK_SELECTION_ENABLE</string>
+<string name="ConnectChoice">"ENTERPRISE_SSID"WPA_EAP</string>
+<boolean name="HasEverConnected" value="true" />
+</NetworkStatus>
+<IpConfiguration>
+<string name="IpAssignment">DHCP</string>
+<string name="ProxySettings">NONE</string>
+</IpConfiguration>
+</Network>
+<Network>
+<WifiConfiguration>
+<string name="ConfigKey">"ENTERPRISE_SSID"WPA_EAP</string>
+<string name="SSID">"ENTERPRISE_SSID"</string>
+<null name="PreSharedKey" />
+<null name="WEPKeys" />
+<int name="WEPTxKeyIndex" value="0" />
+<boolean name="HiddenSSID" value="false" />
+<boolean name="RequirePMF" value="false" />
+<byte-array name="AllowedKeyMgmt" num="1">0c</byte-array>
+<byte-array name="AllowedProtocols" num="1">03</byte-array>
+<byte-array name="AllowedAuthAlgos" num="0"></byte-array>
+<byte-array name="AllowedGroupCiphers" num="1">2f</byte-array>
+<byte-array name="AllowedPairwiseCiphers" num="1">0e</byte-array>
+<byte-array name="AllowedGroupMgmtCiphers" num="1">04</byte-array>
+<byte-array name="AllowedSuiteBCiphers" num="0"></byte-array>
+<boolean name="Shared" value="true" />
+<boolean name="AutoJoinEnabled" value="true" />
+<boolean name="Trusted" value="true" />
+<null name="BSSID" />
+<int name="Status" value="2" />
+<null name="FQDN" />
+<null name="ProviderFriendlyName" />
+<null name="LinkedNetworksList" />
+<null name="DefaultGwMacAddress" />
+<boolean name="ValidatedInternetAccess" value="false" />
+<boolean name="NoInternetAccessExpected" value="false" />
+<boolean name="MeteredHint" value="false" />
+<int name="MeteredOverride" value="0" />
+<boolean name="UseExternalScores" value="false" />
+<int name="NumAssociation" value="0" />
+<int name="CreatorUid" value="1000" />
+<string name="CreatorName">android.uid.system:1000</string>
+<int name="LastUpdateUid" value="1000" />
+<string name="LastUpdateName">android.uid.system:1000</string>
+<int name="LastConnectUid" value="1000" />
+<boolean name="IsLegacyPasspointConfig" value="false" />
+<long-array name="RoamingConsortiumOIs" num="0" />
+<string name="RandomizedMacAddress">f6:b3:94:44:40:87</string>
+<int name="MacRandomizationSetting" value="1" />
+<int name="CarrierId" value="-1" />
+</WifiConfiguration>
+<NetworkStatus>
+<string name="SelectionStatus">NETWORK_SELECTION_TEMPORARY_DISABLED</string>
+<string name="DisableReason">NETWORK_SELECTION_DISABLED_AUTHENTICATION_FAILURE</string>
+<null name="ConnectChoice" />
+<boolean name="HasEverConnected" value="false" />
+</NetworkStatus>
+<IpConfiguration>
+<string name="IpAssignment">DHCP</string>
+<string name="ProxySettings">NONE</string>
+</IpConfiguration>
+<WifiEnterpriseConfiguration>
+<string name="Identity">adadadasdaddsa</string>
+<string name="AnonIdentity">asdadaddadasd</string>
+<string name="Password">adasdadadad</string>
+<string name="ClientCert"></string>
+<string name="CaCert"></string>
+<string name="SubjectMatch"></string>
+<string name="Engine">0</string>
+<string name="EngineId"></string>
+<string name="PrivateKeyId"></string>
+<string name="AltSubjectMatch"></string>
+<string name="DomSuffixMatch">adsad</string>
+<string name="CaPath">/system/etc/security/cacerts</string>
+<int name="EapMethod" value="0" />
+<int name="Phase2Method" value="3" />
+<string name="PLMN"></string>
+<string name="Realm"></string>
+<int name="Ocsp" value="0" />
+<string name="WapiCertSuite"></string>
+</WifiEnterpriseConfiguration>
+</Network>
+<Network>
+<WifiConfiguration>
+<string name="ConfigKey">"WPA3_SSID"SAE</string>
+<string name="SSID">"WPA3_SSID"</string>
+<string name="PreSharedKey">"sfsdfsfdsfsdf"</string>
+<null name="WEPKeys" />
+<int name="WEPTxKeyIndex" value="0" />
+<boolean name="HiddenSSID" value="false" />
+<boolean name="RequirePMF" value="true" />
+<byte-array name="AllowedKeyMgmt" num="2">0001</byte-array>
+<byte-array name="AllowedProtocols" num="1">02</byte-array>
+<byte-array name="AllowedAuthAlgos" num="0"></byte-array>
+<byte-array name="AllowedGroupCiphers" num="1">28</byte-array>
+<byte-array name="AllowedPairwiseCiphers" num="1">0c</byte-array>
+<byte-array name="AllowedGroupMgmtCiphers" num="1">04</byte-array>
+<byte-array name="AllowedSuiteBCiphers" num="0"></byte-array>
+<boolean name="Shared" value="true" />
+<boolean name="AutoJoinEnabled" value="true" />
+<boolean name="Trusted" value="true" />
+<null name="BSSID" />
+<int name="Status" value="1" />
+<null name="FQDN" />
+<null name="ProviderFriendlyName" />
+<null name="LinkedNetworksList" />
+<null name="DefaultGwMacAddress" />
+<boolean name="ValidatedInternetAccess" value="false" />
+<boolean name="NoInternetAccessExpected" value="false" />
+<boolean name="MeteredHint" value="false" />
+<int name="MeteredOverride" value="0" />
+<boolean name="UseExternalScores" value="false" />
+<int name="NumAssociation" value="0" />
+<int name="CreatorUid" value="1000" />
+<string name="CreatorName">android.uid.system:1000</string>
+<int name="LastUpdateUid" value="1000" />
+<string name="LastUpdateName">android.uid.system:1000</string>
+<int name="LastConnectUid" value="1000" />
+<boolean name="IsLegacyPasspointConfig" value="false" />
+<long-array name="RoamingConsortiumOIs" num="0" />
+<string name="RandomizedMacAddress">a6:3d:b0:13:ed:41</string>
+<int name="MacRandomizationSetting" value="1" />
+<int name="CarrierId" value="-1" />
+</WifiConfiguration>
+<NetworkStatus>
+<string name="SelectionStatus">NETWORK_SELECTION_PERMANENTLY_DISABLED</string>
+<string name="DisableReason">NETWORK_SELECTION_DISABLED_BY_WRONG_PASSWORD</string>
+<null name="ConnectChoice" />
+<boolean name="HasEverConnected" value="false" />
+</NetworkStatus>
+<IpConfiguration>
+<string name="IpAssignment">DHCP</string>
+<string name="ProxySettings">NONE</string>
+</IpConfiguration>
+</Network>
+</NetworkList>
+<MacAddressMap>
+<map name="MacMapEntry" />
+</MacAddressMap>
+<Settings>
+<map name="Values">
+<boolean name="wifi_p2p_pending_factory_reset" value="false" />
+<boolean name="wifi_scan_throttle_enabled" value="true" />
+<null name="wifi_p2p_device_name" />
+<boolean name="wifi_scan_always_enabled" value="false" />
+<boolean name="wifi_verbose_logging_enabled" value="true" />
+</map>
+</Settings>
+<PasspointConfigData>
+<long name="ProviderIndex" value="0" />
+</PasspointConfigData>
+</WifiConfigStoreData>
diff --git a/wifi/java/android/net/wifi/migration_samples/Shared_WifiConfigStoreSoftAp.xml b/wifi/java/android/net/wifi/migration_samples/Shared_WifiConfigStoreSoftAp.xml
new file mode 100644
index 0000000..fd99dd3
--- /dev/null
+++ b/wifi/java/android/net/wifi/migration_samples/Shared_WifiConfigStoreSoftAp.xml
@@ -0,0 +1,22 @@
+<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
+<WifiConfigStoreData>
+<int name="Version" value="3" />
+<SoftAp>
+<string name="SSID">HOTSPOT_SSID</string>
+<int name="ApBand" value="1" />
+<int name="Channel" value="0" />
+<boolean name="HiddenSSID" value="false" />
+<int name="SecurityType" value="1" />
+<string name="Passphrase">blahblahblah</string>
+<int name="MaxNumberOfClients" value="0" />
+<boolean name="ClientControlByUser" value="false" />
+<boolean name="AutoShutdownEnabled" value="true" />
+<long name="ShutdownTimeoutMillis" value="0" />
+<BlockedClientList>
+<string name="ClientMacAddress">00:11:22:33:44:55</string>
+</BlockedClientList>
+<AllowedClientList>
+<string name="ClientMacAddress">aa:bb:cc:dd:ee:ff</string>
+</AllowedClientList>
+</SoftAp>
+</WifiConfigStoreData>
diff --git a/wifi/java/android/net/wifi/migration_samples/User_WifiConfigStore.xml b/wifi/java/android/net/wifi/migration_samples/User_WifiConfigStore.xml
new file mode 100644
index 0000000..67d5aab
--- /dev/null
+++ b/wifi/java/android/net/wifi/migration_samples/User_WifiConfigStore.xml
@@ -0,0 +1,81 @@
+<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
+<WifiConfigStoreData>
+<int name="Version" value="3" />
+<NetworkList />
+<PasspointConfigData>
+<ProviderList>
+<Provider>
+<long name="ProviderID" value="0" />
+<int name="CreatorUID" value="10085" />
+<string name="PackageName">com.android.certinstaller</string>
+<list name="CaCertificateAliases">
+<string>HS2_0_0</string>
+</list>
+<null name="ClientPrivateKeyAlias" />
+<boolean name="HasEverConnected" value="false" />
+<boolean name="IsFromSuggestion" value="false" />
+<boolean name="IsTrusted" value="true" />
+<Configuration>
+<int name="UpdateIdentifier" value="-2147483648" />
+<int name="CredentialPriority" value="-2147483648" />
+<null name="TrustRootCertList" />
+<long name="SubscriptionCreationTime" value="-9223372036854775808" />
+<long name="SubscriptionExpirationTime" value="-9223372036854775808" />
+<null name="SubscriptionType" />
+<long name="UsageLimitTimePeriod" value="-9223372036854775808" />
+<long name="UsageLimitStartTime" value="-9223372036854775808" />
+<long name="UsageLimitDataLimit" value="-9223372036854775808" />
+<long name="UsageLimitTimeLimit" value="-9223372036854775808" />
+<HomeSP>
+<string name="FQDN">Passpoint.net</string>
+<string name="FriendlyName">Passpoint Friendly Name</string>
+<null name="IconURL" />
+<null name="HomeNetworkIDs" />
+<null name="MatchAllOIs" />
+<null name="MatchAnyOIs" />
+<null name="OtherHomePartners" />
+<null name="RoamingConsortiumOIs" />
+</HomeSP>
+<Credential>
+<long name="CreationTime" value="-9223372036854775808" />
+<long name="ExpirationTime" value="-9223372036854775808" />
+<string name="Realm">passpoint.com</string>
+<boolean name="CheckAAAServerCertStatus" value="false" />
+<UserCredential>
+<string name="Username">blahblahblah</string>
+<string name="Password">doubleblahlah</string>
+<boolean name="MachineManaged" value="true" />
+<null name="SoftTokenApp" />
+<boolean name="AbleToShare" value="false" />
+<int name="EAPType" value="21" />
+<string name="NonEAPInnerMethod">PAP</string>
+</UserCredential>
+</Credential>
+<int name="CarrierId" value="-1" />
+<boolean name="AutoJoinEnabled" value="true" />
+<boolean name="IsMacRandomizationEnabled" value="true" />
+<int name="MeteredOverride" value="0" />
+</Configuration>
+<null name="RemediationCaCertificateAlias" />
+</Provider>
+</ProviderList>
+</PasspointConfigData>
+<OpenNetworkNotifierBlacklistConfigData />
+<NetworkRequestMap>
+<ApprovedAccessPointsPerApp>
+<string name="RequestorPackageName">com.android.cts.verifier</string>
+<AccessPoint>
+<string name="SSID">OPEN_SSID</string>
+<string name="BSSID">00:11:22:33:44:55</string>
+<int name="NetworkType" value="0" />
+</AccessPoint>
+</ApprovedAccessPointsPerApp>
+</NetworkRequestMap>
+<WakeupConfigStoreData>
+<FeatureState>
+<boolean name="IsActive" value="false" />
+<boolean name="IsOnboarded" value="false" />
+<int name="NotificationsShown" value="1" />
+</FeatureState>
+</WakeupConfigStoreData>
+</WifiConfigStoreData>
diff --git a/wifi/java/android/net/wifi/migration_samples/User_WifiConfigStoreNetworkSuggestions.xml b/wifi/java/android/net/wifi/migration_samples/User_WifiConfigStoreNetworkSuggestions.xml
new file mode 100644
index 0000000..4ecdd29
--- /dev/null
+++ b/wifi/java/android/net/wifi/migration_samples/User_WifiConfigStoreNetworkSuggestions.xml
@@ -0,0 +1,155 @@
+<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
+<WifiConfigStoreData>
+<int name="Version" value="3" />
+<NetworkSuggestionMap>
+<NetworkSuggestionPerApp>
+<string name="SuggestorPackageName">com.android.cts.verifier</string>
+<null name="SuggestorFeatureId" />
+<boolean name="SuggestorHasUserApproved" value="true" />
+<int name="SuggestorMaxSize" value="1" />
+<int name="SuggestorUid" value="10228" />
+<int name="SuggestorCarrierId" value="-1" />
+<NetworkSuggestion>
+<WifiConfiguration>
+<string name="ConfigKey">"OPEN_SSID"NONE</string>
+<string name="SSID">"OPEN_SSID"</string>
+<null name="PreSharedKey" />
+<null name="WEPKeys" />
+<int name="WEPTxKeyIndex" value="0" />
+<boolean name="HiddenSSID" value="false" />
+<boolean name="RequirePMF" value="false" />
+<byte-array name="AllowedKeyMgmt" num="1">01</byte-array>
+<byte-array name="AllowedProtocols" num="0"></byte-array>
+<byte-array name="AllowedAuthAlgos" num="0"></byte-array>
+<byte-array name="AllowedGroupCiphers" num="0"></byte-array>
+<byte-array name="AllowedPairwiseCiphers" num="0"></byte-array>
+<byte-array name="AllowedGroupMgmtCiphers" num="0"></byte-array>
+<byte-array name="AllowedSuiteBCiphers" num="0"></byte-array>
+<boolean name="Shared" value="true" />
+<boolean name="AutoJoinEnabled" value="true" />
+<boolean name="Trusted" value="true" />
+<null name="BSSID" />
+<int name="Status" value="0" />
+<null name="FQDN" />
+<null name="ProviderFriendlyName" />
+<null name="LinkedNetworksList" />
+<null name="DefaultGwMacAddress" />
+<boolean name="ValidatedInternetAccess" value="false" />
+<boolean name="NoInternetAccessExpected" value="false" />
+<boolean name="MeteredHint" value="false" />
+<int name="MeteredOverride" value="1" />
+<boolean name="UseExternalScores" value="false" />
+<int name="NumAssociation" value="0" />
+<int name="CreatorUid" value="10228" />
+<string name="CreatorName">com.android.cts.verifier</string>
+<int name="LastUpdateUid" value="-1" />
+<null name="LastUpdateName" />
+<int name="LastConnectUid" value="0" />
+<boolean name="IsLegacyPasspointConfig" value="false" />
+<long-array name="RoamingConsortiumOIs" num="0" />
+<string name="RandomizedMacAddress">02:00:00:00:00:00</string>
+<int name="MacRandomizationSetting" value="1" />
+<int name="CarrierId" value="-1" />
+</WifiConfiguration>
+<boolean name="IsAppInteractionRequired" value="false" />
+<boolean name="IsUserInteractionRequired" value="false" />
+<boolean name="IsUserAllowedToManuallyConnect" value="false" />
+<boolean name="InitializedAutoJoinEnabled" value="true" />
+<boolean name="AutoJoinEnabled" value="true" />
+</NetworkSuggestion>
+<NetworkSuggestion>
+<WifiConfiguration>
+<string name="ConfigKey">passpoint.net</string>
+<null name="SSID" />
+<null name="PreSharedKey" />
+<null name="WEPKeys" />
+<int name="WEPTxKeyIndex" value="0" />
+<boolean name="HiddenSSID" value="false" />
+<boolean name="RequirePMF" value="false" />
+<byte-array name="AllowedKeyMgmt" num="0"></byte-array>
+<byte-array name="AllowedProtocols" num="0"></byte-array>
+<byte-array name="AllowedAuthAlgos" num="0"></byte-array>
+<byte-array name="AllowedGroupCiphers" num="0"></byte-array>
+<byte-array name="AllowedPairwiseCiphers" num="0"></byte-array>
+<byte-array name="AllowedGroupMgmtCiphers" num="0"></byte-array>
+<byte-array name="AllowedSuiteBCiphers" num="0"></byte-array>
+<boolean name="Shared" value="true" />
+<boolean name="AutoJoinEnabled" value="true" />
+<boolean name="Trusted" value="true" />
+<null name="BSSID" />
+<int name="Status" value="0" />
+<string name="FQDN">passpoint.net</string>
+<null name="ProviderFriendlyName" />
+<null name="LinkedNetworksList" />
+<null name="DefaultGwMacAddress" />
+<boolean name="ValidatedInternetAccess" value="false" />
+<boolean name="NoInternetAccessExpected" value="false" />
+<boolean name="MeteredHint" value="false" />
+<int name="MeteredOverride" value="0" />
+<boolean name="UseExternalScores" value="false" />
+<int name="NumAssociation" value="0" />
+<int name="CreatorUid" value="1000" />
+<string name="CreatorName">com.android.cts.verifier</string>
+<int name="LastUpdateUid" value="-1" />
+<null name="LastUpdateName" />
+<int name="LastConnectUid" value="0" />
+<boolean name="IsLegacyPasspointConfig" value="false" />
+<long-array name="RoamingConsortiumOIs" num="0" />
+<string name="RandomizedMacAddress">02:00:00:00:00:00</string>
+<int name="MacRandomizationSetting" value="1" />
+<int name="CarrierId" value="-1" />
+<boolean name="IsMostRecentlyConnected" value="false" />
+</WifiConfiguration>
+<PasspointConfiguration>
+<int name="UpdateIdentifier" value="-2147483648" />
+<int name="CredentialPriority" value="-2147483648" />
+<null name="TrustRootCertList" />
+<long name="SubscriptionCreationTime" value="-9223372036854775808" />
+<long name="SubscriptionExpirationTime" value="-9223372036854775808" />
+<null name="SubscriptionType" />
+<long name="UsageLimitTimePeriod" value="-9223372036854775808" />
+<long name="UsageLimitStartTime" value="-9223372036854775808" />
+<long name="UsageLimitDataLimit" value="-9223372036854775808" />
+<long name="UsageLimitTimeLimit" value="-9223372036854775808" />
+<HomeSP>
+<string name="FQDN">passpoint.net</string>
+<string name="FriendlyName">Passpoint Friendly Name</string>
+<null name="IconURL" />
+<null name="HomeNetworkIDs" />
+<null name="MatchAllOIs" />
+<null name="MatchAnyOIs" />
+<null name="OtherHomePartners" />
+<null name="RoamingConsortiumOIs" />
+</HomeSP>
+<Credential>
+<long name="CreationTime" value="-9223372036854775808" />
+<long name="ExpirationTime" value="-9223372036854775808" />
+<string name="Realm">passpoint.com</string>
+<boolean name="CheckAAAServerCertStatus" value="false" />
+<UserCredential>
+<string name="Username">blahblahblah</string>
+<string name="Password">doubleblahblah</string>
+<boolean name="MachineManaged" value="false" />
+<null name="SoftTokenApp" />
+<boolean name="AbleToShare" value="false" />
+<int name="EAPType" value="21" />
+<string name="NonEAPInnerMethod">PAP</string>
+</UserCredential>
+</Credential>
+<int name="CarrierId" value="-1" />
+<boolean name="AutoJoinEnabled" value="true" />
+<boolean name="IsMacRandomizationEnabled" value="true" />
+<int name="MeteredOverride" value="0" />
+</PasspointConfiguration>
+<boolean name="IsAppInteractionRequired" value="false" />
+<boolean name="IsUserInteractionRequired" value="false" />
+<boolean name="IsUserAllowedToManuallyConnect" value="true" />
+<boolean name="InitializedAutoJoinEnabled" value="true" />
+<boolean name="AutoJoinEnabled" value="true" />
+</NetworkSuggestion>
+</NetworkSuggestionPerApp>
+</NetworkSuggestionMap>
+<ImsiPrivacyProtectionExemptionMap>
+<map name="CarrierExemptionMap" />
+</ImsiPrivacyProtectionExemptionMap>
+</WifiConfigStoreData>