Merge "framework-wifi: Add missing permitted package" into rvc-dev
diff --git a/Android.bp b/Android.bp
index 01a43b6..557c320 100644
--- a/Android.bp
+++ b/Android.bp
@@ -670,7 +670,7 @@
filegroup {
name: "framework-ike-shared-srcs",
- visibility: ["//frameworks/opt/net/ike"],
+ visibility: ["//packages/modules/IPsec"],
srcs: [
"core/java/android/annotation/StringDef.java",
"core/java/android/net/annotations/PolicyDirection.java",
@@ -1225,4 +1225,4 @@
build = [
"StubLibraries.bp",
"ApiDocs.bp",
-]
\ No newline at end of file
+]
diff --git a/apex/Android.bp b/apex/Android.bp
index de4b24a..c1715a00 100644
--- a/apex/Android.bp
+++ b/apex/Android.bp
@@ -100,6 +100,8 @@
// Configure framework module specific metalava options.
droiddoc_options: [mainline_stubs_args],
+ annotations_enabled: true,
+
// The stub libraries must be visible to frameworks/base so they can be combined
// into API specific libraries.
stubs_library_visibility: [
diff --git a/apex/blobstore/framework/java/android/app/blob/XmlTags.java b/apex/blobstore/framework/java/android/app/blob/XmlTags.java
index dbfdcba..656749d 100644
--- a/apex/blobstore/framework/java/android/app/blob/XmlTags.java
+++ b/apex/blobstore/framework/java/android/app/blob/XmlTags.java
@@ -27,6 +27,7 @@
public static final String ATTR_ID = "id";
public static final String ATTR_PACKAGE = "p";
public static final String ATTR_UID = "u";
+ public static final String ATTR_CREATION_TIME_MS = "crt";
// For BlobMetadata
public static final String TAG_BLOB = "b";
diff --git a/apex/blobstore/service/java/com/android/server/blob/BlobStoreConfig.java b/apex/blobstore/service/java/com/android/server/blob/BlobStoreConfig.java
index 9a711d3..6567266 100644
--- a/apex/blobstore/service/java/com/android/server/blob/BlobStoreConfig.java
+++ b/apex/blobstore/service/java/com/android/server/blob/BlobStoreConfig.java
@@ -45,8 +45,9 @@
public static final int XML_VERSION_ADD_STRING_DESC = 2;
public static final int XML_VERSION_ADD_DESC_RES_NAME = 3;
public static final int XML_VERSION_ADD_COMMIT_TIME = 4;
+ public static final int XML_VERSION_ADD_SESSION_CREATION_TIME = 5;
- public static final int XML_VERSION_CURRENT = XML_VERSION_ADD_COMMIT_TIME;
+ public static final int XML_VERSION_CURRENT = XML_VERSION_ADD_SESSION_CREATION_TIME;
private static final String ROOT_DIR_NAME = "blobstore";
private static final String BLOBS_DIR_NAME = "blobs";
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 a2bce31..8fff0d9 100644
--- a/apex/blobstore/service/java/com/android/server/blob/BlobStoreManagerService.java
+++ b/apex/blobstore/service/java/com/android/server/blob/BlobStoreManagerService.java
@@ -32,7 +32,6 @@
import static com.android.server.blob.BlobStoreConfig.TAG;
import static com.android.server.blob.BlobStoreConfig.XML_VERSION_CURRENT;
import static com.android.server.blob.BlobStoreConfig.getAdjustedCommitTimeMs;
-import static com.android.server.blob.BlobStoreConfig.hasSessionExpired;
import static com.android.server.blob.BlobStoreSession.STATE_ABANDONED;
import static com.android.server.blob.BlobStoreSession.STATE_COMMITTED;
import static com.android.server.blob.BlobStoreSession.STATE_VERIFIED_INVALID;
@@ -986,9 +985,8 @@
userSessions.removeIf((sessionId, blobStoreSession) -> {
boolean shouldRemove = false;
- // TODO: handle the case where no content has been written to session yet.
// Cleanup sessions which haven't been modified in a while.
- if (hasSessionExpired(blobStoreSession.getSessionFile().lastModified())) {
+ if (blobStoreSession.isExpired()) {
shouldRemove = true;
}
diff --git a/apex/blobstore/service/java/com/android/server/blob/BlobStoreSession.java b/apex/blobstore/service/java/com/android/server/blob/BlobStoreSession.java
index 62701e5..2b04583 100644
--- a/apex/blobstore/service/java/com/android/server/blob/BlobStoreSession.java
+++ b/apex/blobstore/service/java/com/android/server/blob/BlobStoreSession.java
@@ -16,6 +16,7 @@
package com.android.server.blob;
import static android.app.blob.BlobStoreManager.COMMIT_RESULT_ERROR;
+import static android.app.blob.XmlTags.ATTR_CREATION_TIME_MS;
import static android.app.blob.XmlTags.ATTR_ID;
import static android.app.blob.XmlTags.ATTR_PACKAGE;
import static android.app.blob.XmlTags.ATTR_UID;
@@ -29,6 +30,8 @@
import static com.android.server.blob.BlobStoreConfig.LOGV;
import static com.android.server.blob.BlobStoreConfig.TAG;
+import static com.android.server.blob.BlobStoreConfig.XML_VERSION_ADD_SESSION_CREATION_TIME;
+import static com.android.server.blob.BlobStoreConfig.hasSessionExpired;
import android.annotation.BytesLong;
import android.annotation.NonNull;
@@ -89,6 +92,7 @@
private final long mSessionId;
private final int mOwnerUid;
private final String mOwnerPackageName;
+ private final long mCreationTimeMs;
// Do not access this directly, instead use getSessionFile().
private File mSessionFile;
@@ -109,16 +113,24 @@
@GuardedBy("mSessionLock")
private IBlobCommitCallback mBlobCommitCallback;
- BlobStoreSession(Context context, long sessionId, BlobHandle blobHandle,
- int ownerUid, String ownerPackageName, SessionStateChangeListener listener) {
+ private BlobStoreSession(Context context, long sessionId, BlobHandle blobHandle,
+ int ownerUid, String ownerPackageName, long creationTimeMs,
+ SessionStateChangeListener listener) {
this.mContext = context;
this.mBlobHandle = blobHandle;
this.mSessionId = sessionId;
this.mOwnerUid = ownerUid;
this.mOwnerPackageName = ownerPackageName;
+ this.mCreationTimeMs = creationTimeMs;
this.mListener = listener;
}
+ BlobStoreSession(Context context, long sessionId, BlobHandle blobHandle,
+ int ownerUid, String ownerPackageName, SessionStateChangeListener listener) {
+ this(context, sessionId, blobHandle, ownerUid, ownerPackageName,
+ System.currentTimeMillis(), listener);
+ }
+
public BlobHandle getBlobHandle() {
return mBlobHandle;
}
@@ -178,6 +190,12 @@
}
}
+ boolean isExpired() {
+ final long lastModifiedTimeMs = getSessionFile().lastModified();
+ return hasSessionExpired(lastModifiedTimeMs == 0
+ ? mCreationTimeMs : lastModifiedTimeMs);
+ }
+
@Override
@NonNull
public ParcelFileDescriptor openWrite(@BytesLong long offsetBytes,
@@ -491,6 +509,7 @@
fout.println("state: " + stateToString(mState));
fout.println("ownerUid: " + mOwnerUid);
fout.println("ownerPkg: " + mOwnerPackageName);
+ fout.println("creation time: " + BlobStoreUtils.formatTime(mCreationTimeMs));
fout.println("blobHandle:");
fout.increaseIndent();
@@ -511,6 +530,7 @@
XmlUtils.writeLongAttribute(out, ATTR_ID, mSessionId);
XmlUtils.writeStringAttribute(out, ATTR_PACKAGE, mOwnerPackageName);
XmlUtils.writeIntAttribute(out, ATTR_UID, mOwnerUid);
+ XmlUtils.writeLongAttribute(out, ATTR_CREATION_TIME_MS, mCreationTimeMs);
out.startTag(null, TAG_BLOB_HANDLE);
mBlobHandle.writeToXml(out);
@@ -529,6 +549,9 @@
final long sessionId = XmlUtils.readLongAttribute(in, ATTR_ID);
final String ownerPackageName = XmlUtils.readStringAttribute(in, ATTR_PACKAGE);
final int ownerUid = XmlUtils.readIntAttribute(in, ATTR_UID);
+ final long creationTimeMs = version >= XML_VERSION_ADD_SESSION_CREATION_TIME
+ ? XmlUtils.readLongAttribute(in, ATTR_CREATION_TIME_MS)
+ : System.currentTimeMillis();
final int depth = in.getDepth();
BlobHandle blobHandle = null;
@@ -551,7 +574,7 @@
}
final BlobStoreSession blobStoreSession = new BlobStoreSession(context, sessionId,
- blobHandle, ownerUid, ownerPackageName, stateChangeListener);
+ blobHandle, ownerUid, ownerPackageName, creationTimeMs, stateChangeListener);
blobStoreSession.mBlobAccessMode.allow(blobAccessMode);
return blobStoreSession;
}
diff --git a/apex/statsd/framework/Android.bp b/apex/statsd/framework/Android.bp
index 9f5d933..27bd2e3 100644
--- a/apex/statsd/framework/Android.bp
+++ b/apex/statsd/framework/Android.bp
@@ -46,11 +46,15 @@
"//frameworks/base/apex/statsd:__subpackages__",
],
}
-java_library {
+java_sdk_library {
name: "framework-statsd",
+ defaults: ["framework-module-defaults"],
installable: true,
- sdk_version: "module_current",
- libs: [ "framework-annotations-lib" ],
+
+ // TODO(b/155480189) - Remove naming_scheme once references have been resolved.
+ // Temporary java_sdk_library component naming scheme to use to ease the transition from separate
+ // modules to java_sdk_library.
+ naming_scheme: "framework-modules",
srcs: [
":framework-statsd-sources",
@@ -60,125 +64,30 @@
"android.app",
"android.os",
"android.util",
+ // From :statslog-statsd-java-gen
+ "com.android.internal.util",
],
- plugins: ["java_api_finder"],
+ api_packages: [
+ "android.app",
+ "android.os",
+ "android.util",
+ ],
hostdex: true, // for hiddenapi check
visibility: [
"//frameworks/base/apex/statsd:__subpackages__",
],
- apex_available: [
- "com.android.os.statsd",
- "test_com.android.os.statsd",
- ],
-}
-
-stubs_defaults {
- name: "framework-statsd-stubs-srcs-defaults",
- srcs: [
- ":framework-statsd-sources",
- ],
-
- libs: [
- "framework-annotations-lib",
- ],
- sdk_version: "system_current",
- dist: { dest: "framework-statsd.txt" },
-}
-
-droidstubs {
- name: "framework-statsd-stubs-srcs-publicapi",
- defaults: [
- "framework-module-stubs-defaults-publicapi",
- "framework-statsd-stubs-srcs-defaults",
- ],
- check_api: {
- last_released: {
- api_file: ":framework-statsd.api.public.latest",
- removed_api_file: ":framework-statsd-removed.api.public.latest",
- },
- api_lint: {
- new_since: ":framework-statsd.api.public.latest",
- },
- },
-}
-
-droidstubs {
- name: "framework-statsd-stubs-srcs-systemapi",
- defaults: [
- "framework-module-stubs-defaults-systemapi",
- "framework-statsd-stubs-srcs-defaults",
- ],
- check_api: {
- last_released: {
- api_file: ":framework-statsd.api.system.latest",
- removed_api_file: ":framework-statsd-removed.api.system.latest",
- },
- api_lint: {
- new_since: ":framework-statsd.api.system.latest",
- },
- },
-}
-
-droidstubs {
- name: "framework-statsd-api-module_libs_api",
- defaults: [
- "framework-module-api-defaults-module_libs_api",
- "framework-statsd-stubs-srcs-defaults",
- ],
- check_api: {
- last_released: {
- api_file: ":framework-statsd.api.module-lib.latest",
- removed_api_file: ":framework-statsd-removed.api.module-lib.latest",
- },
- api_lint: {
- new_since: ":framework-statsd.api.module-lib.latest",
- },
- },
-}
-
-droidstubs {
- name: "framework-statsd-stubs-srcs-module_libs_api",
- defaults: [
- "framework-module-stubs-defaults-module_libs_api",
- "framework-statsd-stubs-srcs-defaults",
- ],
-}
-
-java_library {
- name: "framework-statsd-stubs-publicapi",
- defaults: ["framework-module-stubs-lib-defaults-publicapi"],
- srcs: [ ":framework-statsd-stubs-srcs-publicapi" ],
- visibility: [
- "//frameworks/base", // Framework
- "//frameworks/base/apex/statsd", // statsd apex
- ],
- dist: { dest: "framework-statsd.jar" },
-}
-
-java_library {
- name: "framework-statsd-stubs-systemapi",
- defaults: ["framework-module-stubs-lib-defaults-systemapi"],
- srcs: [ ":framework-statsd-stubs-srcs-systemapi" ],
- visibility: [
- "//frameworks/base", // Framework
- "//frameworks/base/apex/statsd", // statsd apex
- ],
- dist: { dest: "framework-statsd.jar" },
-}
-
-java_library {
- name: "framework-statsd-stubs-module_libs_api",
- defaults: ["framework-module-stubs-lib-defaults-module_libs_api"],
- srcs: [ ":framework-statsd-stubs-srcs-module_libs_api" ],
- visibility: [
+ stubs_library_visibility: [
"//frameworks/base", // Framework
"//frameworks/base/apex/statsd", // statsd apex
"//frameworks/opt/net/wifi/service", // wifi service
"//packages/providers/MediaProvider", // MediaProvider apk
],
- dist: { dest: "framework-statsd.jar" },
+ apex_available: [
+ "com.android.os.statsd",
+ "test_com.android.os.statsd",
+ ],
}
android_test {
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index af5fafb..87fc8fe 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -2838,7 +2838,13 @@
throw new IllegalStateException("Activity must be resumed to enter"
+ " picture-in-picture");
}
- return ActivityTaskManager.getService().enterPictureInPictureMode(mToken, params);
+ // Set mIsInPictureInPictureMode earlier and don't wait for
+ // onPictureInPictureModeChanged callback here. This is to ensure that
+ // isInPictureInPictureMode returns true in the following onPause callback.
+ // See https://developer.android.com/guide/topics/ui/picture-in-picture for guidance.
+ mIsInPictureInPictureMode = ActivityTaskManager.getService().enterPictureInPictureMode(
+ mToken, params);
+ return mIsInPictureInPictureMode;
} catch (RemoteException e) {
return false;
}
diff --git a/core/java/android/hardware/display/DisplayViewport.java b/core/java/android/hardware/display/DisplayViewport.java
index 5adf948..f2d4c3d 100644
--- a/core/java/android/hardware/display/DisplayViewport.java
+++ b/core/java/android/hardware/display/DisplayViewport.java
@@ -49,6 +49,9 @@
// True if this viewport is valid.
public boolean valid;
+ // True if this viewport is active.
+ public boolean isActive;
+
// The logical display id.
public int displayId;
@@ -79,6 +82,7 @@
public void copyFrom(DisplayViewport viewport) {
valid = viewport.valid;
+ isActive = viewport.isActive;
displayId = viewport.displayId;
orientation = viewport.orientation;
logicalFrame.set(viewport.logicalFrame);
@@ -111,6 +115,7 @@
DisplayViewport other = (DisplayViewport) o;
return valid == other.valid
+ && isActive == other.isActive
&& displayId == other.displayId
&& orientation == other.orientation
&& logicalFrame.equals(other.logicalFrame)
@@ -127,6 +132,7 @@
final int prime = 31;
int result = 1;
result += prime * result + (valid ? 1 : 0);
+ result += prime * result + (isActive ? 1 : 0);
result += prime * result + displayId;
result += prime * result + orientation;
result += prime * result + logicalFrame.hashCode();
@@ -147,6 +153,7 @@
final Integer port = physicalPort == null ? null : Byte.toUnsignedInt(physicalPort);
return "DisplayViewport{type=" + typeToString(type)
+ ", valid=" + valid
+ + ", isActive=" + isActive
+ ", displayId=" + displayId
+ ", uniqueId='" + uniqueId + "'"
+ ", physicalPort=" + port
diff --git a/core/java/android/net/NetworkStats.java b/core/java/android/net/NetworkStats.java
index b7fb280..34e48eb 100644
--- a/core/java/android/net/NetworkStats.java
+++ b/core/java/android/net/NetworkStats.java
@@ -16,8 +16,6 @@
package android.net;
-import static android.os.Process.CLAT_UID;
-
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
@@ -1047,73 +1045,54 @@
}
/**
- * Calculate and apply adjustments to captured statistics for 464xlat traffic counted twice.
+ * Calculate and apply adjustments to captured statistics for 464xlat traffic.
*
- * <p>This mutates both base and stacked traffic stats, to account respectively for
- * double-counted traffic and IPv4/IPv6 header size difference.
+ * <p>This mutates stacked traffic stats, to account for IPv4/IPv6 header size difference.
*
- * <p>For 464xlat traffic, xt_qtaguid sees every IPv4 packet twice, once as a native IPv4
- * packet on the stacked interface, and once as translated to an IPv6 packet on the
- * base interface. For correct stats accounting on the base interface, if using xt_qtaguid,
- * every rx 464xlat packet needs to be subtracted from the root UID on the base interface
- * (http://b/12249687, http:/b/33681750), and every tx 464xlat packet which was counted onto
- * clat uid should be ignored.
+ * <p>UID stats, which are only accounted on the stacked interface, need to be increased
+ * by 20 bytes/packet to account for translation overhead.
*
- * As for eBPF, the per uid stats is collected by different hook, the rx packets on base
- * interface will not be counted. Thus, the adjustment on root uid is not needed. However, the
- * tx traffic counted in the same way xt_qtaguid does, so the traffic on clat uid still
- * needs to be ignored.
+ * <p>The potential additional overhead of 8 bytes/packet for ip fragments is ignored.
+ *
+ * <p>Interface stats need to sum traffic on both stacked and base interface because:
+ * - eBPF offloaded packets appear only on the stacked interface
+ * - Non-offloaded ingress packets appear only on the stacked interface
+ * (due to iptables raw PREROUTING drop rules)
+ * - Non-offloaded egress packets appear only on the stacked interface
+ * (due to ignoring traffic from clat daemon by uid match)
+ * (and of course the 20 bytes/packet overhead needs to be applied to stacked interface stats)
*
* <p>This method will behave fine if {@code stackedIfaces} is an non-synchronized but add-only
* {@code ConcurrentHashMap}
* @param baseTraffic Traffic on the base interfaces. Will be mutated.
* @param stackedTraffic Stats with traffic stacked on top of our ifaces. Will also be mutated.
* @param stackedIfaces Mapping ipv6if -> ipv4if interface where traffic is counted on both.
- * @param useBpfStats True if eBPF is in use.
* @hide
*/
public static void apply464xlatAdjustments(NetworkStats baseTraffic,
- NetworkStats stackedTraffic, Map<String, String> stackedIfaces, boolean useBpfStats) {
- // Total 464xlat traffic to subtract from uid 0 on all base interfaces.
- // stackedIfaces may grow afterwards, but NetworkStats will just be resized automatically.
- final NetworkStats adjustments = new NetworkStats(0, stackedIfaces.size());
-
+ NetworkStats stackedTraffic, Map<String, String> stackedIfaces) {
// For recycling
Entry entry = null;
- Entry adjust = new NetworkStats.Entry(IFACE_ALL, 0, 0, 0, 0, 0, 0, 0L, 0L, 0L, 0L, 0L);
-
for (int i = 0; i < stackedTraffic.size; i++) {
entry = stackedTraffic.getValues(i, entry);
- if (entry.iface == null || !entry.iface.startsWith(CLATD_INTERFACE_PREFIX)) {
- continue;
- }
- final String baseIface = stackedIfaces.get(entry.iface);
- if (baseIface == null) {
- continue;
- }
- // Subtract xt_qtaguid 464lat rx traffic seen for the root UID on the current base
- // interface. As for eBPF, the per uid stats is collected by different hook, the rx
- // packets on base interface will not be counted.
- adjust.iface = baseIface;
- if (!useBpfStats) {
- adjust.rxBytes = -(entry.rxBytes + entry.rxPackets * IPV4V6_HEADER_DELTA);
- adjust.rxPackets = -entry.rxPackets;
- }
- adjustments.combineValues(adjust);
+ if (entry == null) continue;
+ if (entry.iface == null) continue;
+ if (!entry.iface.startsWith(CLATD_INTERFACE_PREFIX)) continue;
// For 464xlat traffic, per uid stats only counts the bytes of the native IPv4 packet
// sent on the stacked interface with prefix "v4-" and drops the IPv6 header size after
// unwrapping. To account correctly for on-the-wire traffic, add the 20 additional bytes
// difference for all packets (http://b/12249687, http:/b/33681750).
+ //
+ // Note: this doesn't account for LRO/GRO/GSO/TSO (ie. >mtu) traffic correctly, nor
+ // does it correctly account for the 8 extra bytes in the IPv6 fragmentation header.
+ //
+ // While the ebpf code path does try to simulate proper post segmentation packet
+ // counts, we have nothing of the sort of xt_qtaguid stats.
entry.rxBytes += entry.rxPackets * IPV4V6_HEADER_DELTA;
entry.txBytes += entry.txPackets * IPV4V6_HEADER_DELTA;
stackedTraffic.setValues(i, entry);
}
-
- // Traffic on clat uid is v6 tx traffic that is already counted with app uid on the stacked
- // v4 interface, so it needs to be removed to avoid double-counting.
- baseTraffic.removeUids(new int[] {CLAT_UID});
- baseTraffic.combineAllValues(adjustments);
}
/**
@@ -1125,8 +1104,8 @@
* @param stackedIfaces Mapping ipv6if -> ipv4if interface where traffic is counted on both.
* @hide
*/
- public void apply464xlatAdjustments(Map<String, String> stackedIfaces, boolean useBpfStats) {
- apply464xlatAdjustments(this, this, stackedIfaces, useBpfStats);
+ public void apply464xlatAdjustments(Map<String, String> stackedIfaces) {
+ apply464xlatAdjustments(this, this, stackedIfaces);
}
/**
diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java
index 7935eb1..e3362aa 100644
--- a/core/java/android/view/ViewGroup.java
+++ b/core/java/android/view/ViewGroup.java
@@ -7298,7 +7298,8 @@
boolean isOptionalFitSystemWindows = (mViewFlags & OPTIONAL_FITS_SYSTEM_WINDOWS) != 0
|| isFrameworkOptionalFitsSystemWindows();
if (isOptionalFitSystemWindows && mAttachInfo != null
- && mAttachInfo.mContentOnApplyWindowInsetsListener != null) {
+ && mAttachInfo.mContentOnApplyWindowInsetsListener != null
+ && (getWindowSystemUiVisibility() & SYSTEM_UI_LAYOUT_FLAGS) == 0) {
return false;
}
@@ -7322,7 +7323,8 @@
|| isFrameworkOptionalFitsSystemWindows();
if (isOptionalFitSystemWindows && mAttachInfo != null
&& getListenerInfo().mWindowInsetsAnimationCallback == null
- && mAttachInfo.mContentOnApplyWindowInsetsListener != null) {
+ && mAttachInfo.mContentOnApplyWindowInsetsListener != null
+ && (getWindowSystemUiVisibility() & SYSTEM_UI_LAYOUT_FLAGS) == 0) {
mInsetsAnimationDispatchMode = DISPATCH_MODE_STOP;
return;
}
diff --git a/core/java/android/view/WindowlessWindowManager.java b/core/java/android/view/WindowlessWindowManager.java
index 706bd94..9b5b882 100644
--- a/core/java/android/view/WindowlessWindowManager.java
+++ b/core/java/android/view/WindowlessWindowManager.java
@@ -41,6 +41,7 @@
private final static String TAG = "WindowlessWindowManager";
private class State {
+ //TODO : b/150190730 we should create it when view show and release it when view invisible.
SurfaceControl mSurfaceControl;
WindowManager.LayoutParams mParams = new WindowManager.LayoutParams();
int mDisplayId;
diff --git a/core/java/com/android/internal/app/AbstractResolverComparator.java b/core/java/com/android/internal/app/AbstractResolverComparator.java
index 28c9464..ea3f1b1 100644
--- a/core/java/com/android/internal/app/AbstractResolverComparator.java
+++ b/core/java/com/android/internal/app/AbstractResolverComparator.java
@@ -54,8 +54,6 @@
// True if the current share is a link.
private final boolean mHttp;
- // can be null if mHttp == false or current user has no default browser package
- private final String mDefaultBrowserPackageName;
// message types
static final int RANKER_SERVICE_RESULT = 0;
@@ -102,9 +100,6 @@
getContentAnnotations(intent);
mPm = context.getPackageManager();
mUsm = (UsageStatsManager) context.getSystemService(Context.USAGE_STATS_SERVICE);
- mDefaultBrowserPackageName = mHttp
- ? mPm.getDefaultBrowserPackageNameAsUser(UserHandle.myUserId())
- : null;
mAzComparator = new AzInfoComparator(context);
}
@@ -157,17 +152,6 @@
}
if (mHttp) {
- // Special case: we want filters that match URI paths/schemes to be
- // ordered before others. This is for the case when opening URIs,
- // to make native apps go above browsers - except for 1 even more special case
- // which is the default browser, as we want that to go above them all.
- if (isDefaultBrowser(lhs)) {
- return -1;
- }
-
- if (isDefaultBrowser(rhs)) {
- return 1;
- }
final boolean lhsSpecific = ResolverActivity.isSpecificUriMatch(lhs.match);
final boolean rhsSpecific = ResolverActivity.isSpecificUriMatch(rhs.match);
if (lhsSpecific != rhsSpecific) {
@@ -272,21 +256,6 @@
mAfterCompute = null;
}
- private boolean isDefaultBrowser(ResolveInfo ri) {
- // It makes sense to prefer the default browser
- // only if the targeted user is the current user
- if (ri.targetUserId != UserHandle.USER_CURRENT) {
- return false;
- }
-
- if (ri.activityInfo.packageName != null
- && ri.activityInfo.packageName.equals(mDefaultBrowserPackageName)) {
- return true;
- }
- return false;
- }
-
-
/**
* Sort intents alphabetically based on package name.
*/
diff --git a/core/java/com/android/internal/app/ChooserActivity.java b/core/java/com/android/internal/app/ChooserActivity.java
index 1f25feb..5533e1e 100644
--- a/core/java/com/android/internal/app/ChooserActivity.java
+++ b/core/java/com/android/internal/app/ChooserActivity.java
@@ -875,7 +875,6 @@
initialIntents,
rList,
filterLastUsed,
- mUseLayoutForBrowsables,
/* userHandle */ UserHandle.of(UserHandle.myUserId()));
return new ChooserMultiProfilePagerAdapter(
/* context */ this,
@@ -896,7 +895,6 @@
selectedProfile == PROFILE_PERSONAL ? initialIntents : null,
rList,
filterLastUsed,
- mUseLayoutForBrowsables,
/* userHandle */ getPersonalProfileUserHandle());
ChooserGridAdapter workAdapter = createChooserGridAdapter(
/* context */ this,
@@ -904,7 +902,6 @@
selectedProfile == PROFILE_WORK ? initialIntents : null,
rList,
filterLastUsed,
- mUseLayoutForBrowsables,
/* userHandle */ getWorkProfileUserHandle());
return new ChooserMultiProfilePagerAdapter(
/* context */ this,
@@ -1617,7 +1614,7 @@
targetList = Collections.singletonList(ti);
}
- ResolverTargetActionsDialogFragment f = new ResolverTargetActionsDialogFragment(
+ ChooserTargetActionsDialogFragment f = new ChooserTargetActionsDialogFragment(
targetList, mChooserMultiProfilePagerAdapter.getCurrentUserHandle());
f.show(getFragmentManager(), TARGET_DETAILS_FRAGMENT_TAG);
@@ -1677,15 +1674,9 @@
if (targetInfo instanceof MultiDisplayResolveInfo) {
MultiDisplayResolveInfo mti = (MultiDisplayResolveInfo) targetInfo;
if (!mti.hasSelected()) {
- // Stacked apps get a disambiguation first
- CharSequence[] labels = new CharSequence[mti.getTargets().size()];
- int i = 0;
- for (TargetInfo ti : mti.getTargets()) {
- labels[i++] = ti.getResolveInfo().loadLabel(getPackageManager());
- }
ChooserStackedAppDialogFragment f = new ChooserStackedAppDialogFragment(
- targetInfo.getDisplayLabel(),
- ((MultiDisplayResolveInfo) targetInfo), labels, which);
+ mti, which,
+ mChooserMultiProfilePagerAdapter.getCurrentUserHandle());
f.show(getFragmentManager(), TARGET_DETAILS_FRAGMENT_TAG);
return;
@@ -2486,10 +2477,10 @@
@VisibleForTesting
public ChooserGridAdapter createChooserGridAdapter(Context context,
List<Intent> payloadIntents, Intent[] initialIntents, List<ResolveInfo> rList,
- boolean filterLastUsed, boolean useLayoutForBrowsables, UserHandle userHandle) {
+ boolean filterLastUsed, UserHandle userHandle) {
ChooserListAdapter chooserListAdapter = createChooserListAdapter(context, payloadIntents,
initialIntents, rList, filterLastUsed,
- useLayoutForBrowsables, createListController(userHandle));
+ createListController(userHandle));
AppPredictor.Callback appPredictorCallback = createAppPredictorCallback(chooserListAdapter);
AppPredictor appPredictor = setupAppPredictorForUser(userHandle, appPredictorCallback);
chooserListAdapter.setAppPredictor(appPredictor);
@@ -2500,11 +2491,10 @@
@VisibleForTesting
public ChooserListAdapter createChooserListAdapter(Context context,
List<Intent> payloadIntents, Intent[] initialIntents, List<ResolveInfo> rList,
- boolean filterLastUsed, boolean useLayoutForBrowsables,
- ResolverListController resolverListController) {
+ boolean filterLastUsed, ResolverListController resolverListController) {
return new ChooserListAdapter(context, payloadIntents, initialIntents, rList,
- filterLastUsed, resolverListController, useLayoutForBrowsables,
- this, this, context.getPackageManager());
+ filterLastUsed, resolverListController, this,
+ this, context.getPackageManager());
}
@VisibleForTesting
@@ -2977,16 +2967,16 @@
itemView.setOnClickListener(v -> startSelected(mListPosition,
false/* always */, true/* filterd */));
- TargetInfo ti = mChooserMultiProfilePagerAdapter.getActiveListAdapter()
- .targetInfoForPosition(mListPosition, /* filtered */ true);
+ itemView.setOnLongClickListener(v -> {
+ final TargetInfo ti = mChooserMultiProfilePagerAdapter.getActiveListAdapter()
+ .targetInfoForPosition(mListPosition, /* filtered */ true);
- // This should always be the case for ItemViewHolder, check for sanity
- if (ti instanceof DisplayResolveInfo) {
- itemView.setOnLongClickListener(v -> {
+ // This should always be the case for ItemViewHolder, check for sanity
+ if (ti instanceof DisplayResolveInfo) {
showTargetDetails((DisplayResolveInfo) ti);
- return true;
- });
- }
+ }
+ return true;
+ });
}
}
}
@@ -3314,16 +3304,15 @@
// Direct Share targets should not show any menu
if (!isDirectShare) {
- final TargetInfo ti = mChooserListAdapter.targetInfoForPosition(
- holder.getItemIndex(column), true);
-
- // This should always be the case for non-DS targets, check for sanity
- if (ti instanceof DisplayResolveInfo) {
- v.setOnLongClickListener(v1 -> {
+ v.setOnLongClickListener(v1 -> {
+ final TargetInfo ti = mChooserListAdapter.targetInfoForPosition(
+ holder.getItemIndex(column), true);
+ // This should always be the case for non-DS targets, check for sanity
+ if (ti instanceof DisplayResolveInfo) {
showTargetDetails((DisplayResolveInfo) ti);
- return true;
- });
- }
+ }
+ return true;
+ });
}
holder.addView(i, v);
diff --git a/core/java/com/android/internal/app/ChooserListAdapter.java b/core/java/com/android/internal/app/ChooserListAdapter.java
index f1b7161..a87f847 100644
--- a/core/java/com/android/internal/app/ChooserListAdapter.java
+++ b/core/java/com/android/internal/app/ChooserListAdapter.java
@@ -120,15 +120,13 @@
public ChooserListAdapter(Context context, List<Intent> payloadIntents,
Intent[] initialIntents, List<ResolveInfo> rList,
boolean filterLastUsed, ResolverListController resolverListController,
- boolean useLayoutForBrowsables,
ChooserListCommunicator chooserListCommunicator,
SelectableTargetInfo.SelectableTargetInfoCommunicator selectableTargetInfoCommunicator,
PackageManager packageManager) {
// Don't send the initial intents through the shared ResolverActivity path,
// we want to separate them into a different section.
super(context, payloadIntents, null, rList, filterLastUsed,
- resolverListController, useLayoutForBrowsables,
- chooserListCommunicator, false);
+ resolverListController, chooserListCommunicator, false);
createPlaceHolders();
mMaxShortcutTargetsPerApp =
diff --git a/core/java/com/android/internal/app/ChooserStackedAppDialogFragment.java b/core/java/com/android/internal/app/ChooserStackedAppDialogFragment.java
index f4c69a5..fdeba8f 100644
--- a/core/java/com/android/internal/app/ChooserStackedAppDialogFragment.java
+++ b/core/java/com/android/internal/app/ChooserStackedAppDialogFragment.java
@@ -17,64 +17,50 @@
package com.android.internal.app;
-import android.app.AlertDialog.Builder;
-import android.app.Dialog;
-import android.app.DialogFragment;
import android.content.DialogInterface;
-import android.content.res.Configuration;
-import android.os.Bundle;
+import android.content.pm.PackageManager;
+import android.graphics.drawable.Drawable;
+import android.os.UserHandle;
+import com.android.internal.app.chooser.DisplayResolveInfo;
import com.android.internal.app.chooser.MultiDisplayResolveInfo;
/**
* Shows individual actions for a "stacked" app target - such as an app with multiple posting
* streams represented in the Sharesheet.
*/
-public class ChooserStackedAppDialogFragment extends DialogFragment
+public class ChooserStackedAppDialogFragment extends ChooserTargetActionsDialogFragment
implements DialogInterface.OnClickListener {
- private static final String TITLE_KEY = "title";
- private static final String PINNED_KEY = "pinned";
- private MultiDisplayResolveInfo mTargetInfos;
- private CharSequence[] mLabels;
+ private MultiDisplayResolveInfo mMultiDisplayResolveInfo;
private int mParentWhich;
public ChooserStackedAppDialogFragment() {
}
- public ChooserStackedAppDialogFragment(CharSequence title,
- MultiDisplayResolveInfo targets, CharSequence[] labels, int parentWhich) {
- Bundle args = new Bundle();
- args.putCharSequence(TITLE_KEY, title);
- mTargetInfos = targets;
- mLabels = labels;
+ public ChooserStackedAppDialogFragment(MultiDisplayResolveInfo targets,
+ int parentWhich, UserHandle userHandle) {
+ super(targets.getTargets(), userHandle);
+ mMultiDisplayResolveInfo = targets;
mParentWhich = parentWhich;
- setArguments(args);
}
@Override
- public Dialog onCreateDialog(Bundle savedInstanceState) {
- final Bundle args = getArguments();
- return new Builder(getContext())
- .setCancelable(true)
- .setItems(mLabels, this)
- .setTitle(args.getCharSequence(TITLE_KEY))
- .create();
+ protected CharSequence getItemLabel(DisplayResolveInfo dri) {
+ final PackageManager pm = getContext().getPackageManager();
+ return dri.getResolveInfo().loadLabel(pm);
+ }
+
+ @Override
+ protected Drawable getItemIcon(DisplayResolveInfo dri) {
+ // Show no icon for the group disambig dialog, null hides the imageview
+ return null;
}
@Override
public void onClick(DialogInterface dialog, int which) {
- final Bundle args = getArguments();
- mTargetInfos.setSelected(which);
+ mMultiDisplayResolveInfo.setSelected(which);
((ChooserActivity) getActivity()).startSelected(mParentWhich, false, true);
dismiss();
}
-
- @Override
- public void onConfigurationChanged(Configuration newConfig) {
- // Dismiss on config changed (eg: rotation)
- // TODO: Maintain state on config change
- super.onConfigurationChanged(newConfig);
- dismiss();
- }
}
diff --git a/core/java/com/android/internal/app/ChooserTargetActionsDialogFragment.java b/core/java/com/android/internal/app/ChooserTargetActionsDialogFragment.java
new file mode 100644
index 0000000..3991a76
--- /dev/null
+++ b/core/java/com/android/internal/app/ChooserTargetActionsDialogFragment.java
@@ -0,0 +1,173 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+package com.android.internal.app;
+
+import static android.content.Context.ACTIVITY_SERVICE;
+
+import static com.android.internal.app.ResolverListAdapter.ResolveInfoPresentationGetter;
+
+import static java.util.stream.Collectors.toList;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.app.ActivityManager;
+import android.app.AlertDialog.Builder;
+import android.app.Dialog;
+import android.app.DialogFragment;
+import android.content.ComponentName;
+import android.content.DialogInterface;
+import android.content.SharedPreferences;
+import android.content.pm.PackageManager;
+import android.content.res.Configuration;
+import android.graphics.drawable.Drawable;
+import android.os.Bundle;
+import android.os.UserHandle;
+import android.util.Pair;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.android.internal.R;
+import com.android.internal.app.chooser.DisplayResolveInfo;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Shows a dialog with actions to take on a chooser target.
+ */
+public class ChooserTargetActionsDialogFragment extends DialogFragment
+ implements DialogInterface.OnClickListener {
+
+ protected List<DisplayResolveInfo> mTargetInfos = new ArrayList<>();
+ protected UserHandle mUserHandle;
+
+ public ChooserTargetActionsDialogFragment() {
+ }
+
+ public ChooserTargetActionsDialogFragment(List<DisplayResolveInfo> targets,
+ UserHandle userHandle) {
+ mUserHandle = userHandle;
+ mTargetInfos = targets;
+ }
+
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+
+ // Fetch UI details from target info
+ List<Pair<CharSequence, Drawable>> items = mTargetInfos.stream().map(dri -> {
+ return new Pair<>(getItemLabel(dri), getItemIcon(dri));
+ }).collect(toList());
+
+ final ResolveInfoPresentationGetter pg = getProvidingAppPresentationGetter();
+ return new Builder(getContext())
+ .setTitle(pg.getLabel())
+ .setIcon(pg.getIcon(mUserHandle))
+ .setCancelable(true)
+ .setAdapter(getAdapterForContent(items), this)
+ .create();
+ }
+
+ protected ArrayAdapter<Pair<CharSequence, Drawable>> getAdapterForContent(
+ List<Pair<CharSequence, Drawable>> items) {
+ return new ArrayAdapter<Pair<CharSequence, Drawable>>(getContext(),
+ R.layout.chooser_dialog_item, R.id.text, items) {
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ View v = super.getView(position, convertView, parent); // super recycles views
+ TextView label = v.findViewById(R.id.text);
+ ImageView icon = v.findViewById(R.id.icon);
+
+ Pair<CharSequence, Drawable> pair = getItem(position);
+ label.setText(pair.first);
+
+ // Hide icon view if one isn't available
+ if (pair.second == null) {
+ icon.setVisibility(View.GONE);
+ } else {
+ icon.setImageDrawable(pair.second);
+ icon.setVisibility(View.VISIBLE);
+ }
+
+ return v;
+ }
+ };
+ }
+
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ pinComponent(mTargetInfos.get(which).getResolvedComponentName());
+ ((ChooserActivity) getActivity()).handlePackagesChanged();
+ dismiss();
+ }
+
+ private void pinComponent(ComponentName name) {
+ SharedPreferences sp = ChooserActivity.getPinnedSharedPrefs(getContext());
+ final String key = name.flattenToString();
+ boolean currentVal = sp.getBoolean(name.flattenToString(), false);
+ if (currentVal) {
+ sp.edit().remove(key).apply();
+ } else {
+ sp.edit().putBoolean(key, true).apply();
+ }
+ }
+
+ private Drawable getPinIcon(boolean isPinned) {
+ return isPinned
+ ? getContext().getDrawable(R.drawable.ic_close)
+ : getContext().getDrawable(R.drawable.ic_chooser_pin_dialog);
+ }
+
+ private CharSequence getPinLabel(boolean isPinned, CharSequence targetLabel) {
+ return isPinned
+ ? getResources().getString(R.string.unpin_specific_target, targetLabel)
+ : getResources().getString(R.string.pin_specific_target, targetLabel);
+ }
+
+ @NonNull
+ protected CharSequence getItemLabel(DisplayResolveInfo dri) {
+ final PackageManager pm = getContext().getPackageManager();
+ return getPinLabel(dri.isPinned(), dri.getResolveInfo().loadLabel(pm));
+ }
+
+ @Nullable
+ protected Drawable getItemIcon(DisplayResolveInfo dri) {
+ return getPinIcon(dri.isPinned());
+ }
+
+ private ResolveInfoPresentationGetter getProvidingAppPresentationGetter() {
+ final ActivityManager am = (ActivityManager) getContext()
+ .getSystemService(ACTIVITY_SERVICE);
+ final int iconDpi = am.getLauncherLargeIconDensity();
+
+ // Use the matching application icon and label for the title, any TargetInfo will do
+ return new ResolveInfoPresentationGetter(getContext(), iconDpi,
+ mTargetInfos.get(0).getResolveInfo());
+ }
+
+ @Override
+ public void onConfigurationChanged(Configuration newConfig) {
+ // Dismiss on config changed (eg: rotation)
+ // TODO: Maintain state on config change
+ super.onConfigurationChanged(newConfig);
+ dismiss();
+ }
+
+}
diff --git a/core/java/com/android/internal/app/ResolverActivity.java b/core/java/com/android/internal/app/ResolverActivity.java
index 66d850e..ff8fd50 100644
--- a/core/java/com/android/internal/app/ResolverActivity.java
+++ b/core/java/com/android/internal/app/ResolverActivity.java
@@ -133,9 +133,6 @@
private CharSequence mTitle;
private int mDefaultTitleResId;
- @VisibleForTesting
- protected boolean mUseLayoutForBrowsables;
-
// Whether or not this activity supports choosing a default handler for the intent.
@VisibleForTesting
protected boolean mSupportsAlwaysUseOption;
@@ -364,10 +361,6 @@
mTitle = title;
mDefaultTitleResId = defaultTitleRes;
- mUseLayoutForBrowsables = getTargetIntent() == null
- ? false
- : isHttpSchemeAndViewAction(getTargetIntent());
-
mSupportsAlwaysUseOption = supportsAlwaysUseOption;
mWorkProfileUserHandle = fetchWorkProfileUserProfile();
@@ -461,7 +454,6 @@
initialIntents,
rList,
filterLastUsed,
- mUseLayoutForBrowsables,
/* userHandle */ UserHandle.of(UserHandle.myUserId()));
return new ResolverMultiProfilePagerAdapter(
/* context */ this,
@@ -500,7 +492,6 @@
rList,
(filterLastUsed && UserHandle.myUserId()
== getPersonalProfileUserHandle().getIdentifier()),
- mUseLayoutForBrowsables,
/* userHandle */ getPersonalProfileUserHandle());
UserHandle workProfileUserHandle = getWorkProfileUserHandle();
ResolverListAdapter workAdapter = createResolverListAdapter(
@@ -510,7 +501,6 @@
rList,
(filterLastUsed && UserHandle.myUserId()
== workProfileUserHandle.getIdentifier()),
- mUseLayoutForBrowsables,
/* userHandle */ workProfileUserHandle);
return new ResolverMultiProfilePagerAdapter(
/* context */ this,
@@ -775,26 +765,6 @@
mMultiProfilePagerAdapter.getActiveListAdapter().getFilteredPosition() >= 0;
if (title == ActionTitle.DEFAULT && defaultTitleRes != 0) {
return getString(defaultTitleRes);
- } else if (isHttpSchemeAndViewAction(intent)) {
- // If the Intent's scheme is http(s) then we need to warn the user that
- // they're giving access for the activity to open URLs from this specific host
- String dialogTitle = null;
- if (named && !mUseLayoutForBrowsables) {
- dialogTitle = getString(ActionTitle.BROWSABLE_APP_TITLE_RES,
- mMultiProfilePagerAdapter.getActiveListAdapter().getFilteredItem()
- .getDisplayLabel());
- } else if (named && mUseLayoutForBrowsables) {
- dialogTitle = getString(ActionTitle.BROWSABLE_HOST_APP_TITLE_RES,
- intent.getData().getHost(),
- mMultiProfilePagerAdapter.getActiveListAdapter().getFilteredItem()
- .getDisplayLabel());
- } else if (mMultiProfilePagerAdapter.getActiveListAdapter().areAllTargetsBrowsers()) {
- dialogTitle = getString(ActionTitle.BROWSABLE_TITLE_RES);
- } else {
- dialogTitle = getString(ActionTitle.BROWSABLE_HOST_TITLE_RES,
- intent.getData().getHost());
- }
- return dialogTitle;
} else {
return named
? getString(title.namedTitleRes, mMultiProfilePagerAdapter
@@ -907,12 +877,6 @@
mMultiProfilePagerAdapter.clearInactiveProfileCache();
}
- private boolean isHttpSchemeAndViewAction(Intent intent) {
- return (IntentFilter.SCHEME_HTTP.equals(intent.getScheme())
- || IntentFilter.SCHEME_HTTPS.equals(intent.getScheme()))
- && Intent.ACTION_VIEW.equals(intent.getAction());
- }
-
private boolean hasManagedProfile() {
UserManager userManager = (UserManager) getSystemService(Context.USER_SERVICE);
if (userManager == null) {
@@ -963,13 +927,9 @@
} else {
enabled = true;
}
- if (mUseLayoutForBrowsables && !ri.handleAllWebDataURI) {
- mAlwaysButton.setText(getResources()
- .getString(R.string.activity_resolver_set_always));
- } else {
- mAlwaysButton.setText(getResources()
- .getString(R.string.activity_resolver_use_always));
- }
+
+ mAlwaysButton.setText(getResources()
+ .getString(R.string.activity_resolver_use_always));
}
if (ri != null) {
@@ -999,31 +959,7 @@
? currentListAdapter.getFilteredPosition()
: listView.getCheckedItemPosition();
boolean hasIndexBeenFiltered = !currentListAdapter.hasFilteredItem();
- ResolveInfo ri = currentListAdapter.resolveInfoForPosition(which, hasIndexBeenFiltered);
- if (mUseLayoutForBrowsables
- && !ri.handleAllWebDataURI && id == R.id.button_always) {
- showSettingsForSelected(ri);
- } else {
- startSelected(which, id == R.id.button_always, hasIndexBeenFiltered);
- }
- }
-
- private void showSettingsForSelected(ResolveInfo ri) {
- Intent intent = new Intent();
-
- final String packageName = ri.activityInfo.packageName;
- Bundle showFragmentArgs = new Bundle();
- showFragmentArgs.putString(EXTRA_FRAGMENT_ARG_KEY, OPEN_LINKS_COMPONENT_KEY);
- showFragmentArgs.putString("package", packageName);
-
- // For regular apps, we open the Open by Default page
- intent.setAction(Settings.ACTION_APP_OPEN_BY_DEFAULT_SETTINGS)
- .setData(Uri.fromParts("package", packageName, null))
- .addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT)
- .putExtra(EXTRA_FRAGMENT_ARG_KEY, OPEN_LINKS_COMPONENT_KEY)
- .putExtra(EXTRA_SHOW_FRAGMENT_ARGS, showFragmentArgs);
-
- startActivity(intent);
+ startSelected(which, id == R.id.button_always, hasIndexBeenFiltered);
}
public void startSelected(int which, boolean always, boolean hasIndexBeenFiltered) {
@@ -1415,12 +1351,12 @@
@VisibleForTesting
protected ResolverListAdapter createResolverListAdapter(Context context,
List<Intent> payloadIntents, Intent[] initialIntents, List<ResolveInfo> rList,
- boolean filterLastUsed, boolean useLayoutForBrowsables, UserHandle userHandle) {
+ boolean filterLastUsed, UserHandle userHandle) {
Intent startIntent = getIntent();
boolean isAudioCaptureDevice =
startIntent.getBooleanExtra(EXTRA_IS_AUDIO_CAPTURE_DEVICE, false);
return new ResolverListAdapter(context, payloadIntents, initialIntents, rList,
- filterLastUsed, createListController(userHandle), useLayoutForBrowsables, this,
+ filterLastUsed, createListController(userHandle), this,
isAudioCaptureDevice);
}
@@ -1794,7 +1730,7 @@
listView.setOnItemClickListener(listener);
listView.setOnItemLongClickListener(listener);
- if (mSupportsAlwaysUseOption || mUseLayoutForBrowsables) {
+ if (mSupportsAlwaysUseOption) {
listView.setChoiceMode(AbsListView.CHOICE_MODE_SINGLE);
}
}
@@ -1835,7 +1771,7 @@
}
protected void resetButtonBar() {
- if (!mSupportsAlwaysUseOption && !mUseLayoutForBrowsables) {
+ if (!mSupportsAlwaysUseOption) {
return;
}
final ViewGroup buttonLayout = findViewById(R.id.button_bar);
diff --git a/core/java/com/android/internal/app/ResolverListAdapter.java b/core/java/com/android/internal/app/ResolverListAdapter.java
index d942e85..97f43d27 100644
--- a/core/java/com/android/internal/app/ResolverListAdapter.java
+++ b/core/java/com/android/internal/app/ResolverListAdapter.java
@@ -69,13 +69,11 @@
private final PackageManager mPm;
protected final Context mContext;
private final ColorMatrixColorFilter mSuspendedMatrixColorFilter;
- private final boolean mUseLayoutForBrowsables;
private final int mIconDpi;
protected ResolveInfo mLastChosen;
private DisplayResolveInfo mOtherProfile;
ResolverListController mResolverListController;
private int mPlaceholderCount;
- private boolean mAllTargetsAreBrowsers = false;
protected final LayoutInflater mInflater;
@@ -94,7 +92,6 @@
Intent[] initialIntents, List<ResolveInfo> rList,
boolean filterLastUsed,
ResolverListController resolverListController,
- boolean useLayoutForBrowsables,
ResolverListCommunicator resolverListCommunicator,
boolean isAudioCaptureDevice) {
mContext = context;
@@ -107,7 +104,6 @@
mFilterLastUsed = filterLastUsed;
mResolverListController = resolverListController;
mSuspendedMatrixColorFilter = createSuspendedColorMatrix();
- mUseLayoutForBrowsables = useLayoutForBrowsables;
mResolverListCommunicator = resolverListCommunicator;
mIsAudioCaptureDevice = isAudioCaptureDevice;
final ActivityManager am = (ActivityManager) mContext.getSystemService(ACTIVITY_SERVICE);
@@ -183,14 +179,6 @@
}
/**
- * @return true if all items in the display list are defined as browsers by
- * ResolveInfo.handleAllWebDataURI
- */
- public boolean areAllTargetsBrowsers() {
- return mAllTargetsAreBrowsers;
- }
-
- /**
* Rebuild the list of resolvers. In some cases some parts will need some asynchronous work
* to complete.
*
@@ -207,7 +195,6 @@
mOtherProfile = null;
mLastChosen = null;
mLastChosenPosition = -1;
- mAllTargetsAreBrowsers = false;
mDisplayList.clear();
mIsTabLoaded = false;
@@ -322,8 +309,6 @@
boolean doPostProcessing) {
int n;
if (sortedComponents != null && (n = sortedComponents.size()) != 0) {
- mAllTargetsAreBrowsers = mUseLayoutForBrowsables;
-
// First put the initial items at the top.
if (mInitialIntents != null) {
for (int i = 0; i < mInitialIntents.length; i++) {
@@ -353,7 +338,6 @@
ri.noResourceId = true;
ri.icon = 0;
}
- mAllTargetsAreBrowsers &= ri.handleAllWebDataURI;
addResolveInfo(new DisplayResolveInfo(ii, ri,
ri.loadLabel(mPm), null, ii, makePresentationGetter(ri)));
@@ -364,7 +348,6 @@
for (ResolvedComponentInfo rci : sortedComponents) {
final ResolveInfo ri = rci.getResolveInfoAt(0);
if (ri != null) {
- mAllTargetsAreBrowsers &= ri.handleAllWebDataURI;
addResolveInfoWithAlternates(rci);
}
}
diff --git a/core/java/com/android/internal/app/ResolverTargetActionsDialogFragment.java b/core/java/com/android/internal/app/ResolverTargetActionsDialogFragment.java
deleted file mode 100644
index cdc600c..0000000
--- a/core/java/com/android/internal/app/ResolverTargetActionsDialogFragment.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.android.internal.app;
-
-import static android.content.Context.ACTIVITY_SERVICE;
-
-import static com.android.internal.app.ResolverListAdapter.ResolveInfoPresentationGetter;
-
-import android.app.ActivityManager;
-import android.app.AlertDialog.Builder;
-import android.app.Dialog;
-import android.app.DialogFragment;
-import android.content.ComponentName;
-import android.content.DialogInterface;
-import android.content.SharedPreferences;
-import android.content.pm.PackageManager;
-import android.content.res.Configuration;
-import android.os.Bundle;
-import android.os.UserHandle;
-
-import com.android.internal.R;
-import com.android.internal.app.chooser.DisplayResolveInfo;
-import com.android.internal.app.chooser.TargetInfo;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Shows a dialog with actions to take on a chooser target.
- */
-public class ResolverTargetActionsDialogFragment extends DialogFragment
- implements DialogInterface.OnClickListener {
-
- private List<DisplayResolveInfo> mTargetInfos = new ArrayList<>();
- private UserHandle mUserHandle;
-
- public ResolverTargetActionsDialogFragment() {
- }
-
- public ResolverTargetActionsDialogFragment(List<DisplayResolveInfo> targets,
- UserHandle userHandle) {
- mUserHandle = userHandle;
- mTargetInfos = targets;
- }
-
- @Override
- public Dialog onCreateDialog(Bundle savedInstanceState) {
- final Bundle args = getArguments();
- final PackageManager pm = getContext().getPackageManager();
-
- // Pin item for each sub-item
- CharSequence[] items = new CharSequence[mTargetInfos.size()];
- for (int i = 0; i < mTargetInfos.size(); i++) {
- final TargetInfo ti = mTargetInfos.get(i);
- final CharSequence label = ti.getResolveInfo().loadLabel(pm);
- items[i] = ti.isPinned()
- ? getResources().getString(R.string.unpin_specific_target, label)
- : getResources().getString(R.string.pin_specific_target, label);
- }
-
- // Use the matching application icon and label for the title, any TargetInfo will do
- final ActivityManager am = (ActivityManager) getContext()
- .getSystemService(ACTIVITY_SERVICE);
- final int iconDpi = am.getLauncherLargeIconDensity();
- final ResolveInfoPresentationGetter pg = new ResolveInfoPresentationGetter(getContext(),
- iconDpi, mTargetInfos.get(0).getResolveInfo());
-
- return new Builder(getContext())
- .setTitle(pg.getLabel())
- .setIcon(pg.getIcon(mUserHandle))
- .setCancelable(true)
- .setItems(items, this)
- .create();
- }
-
- @Override
- public void onClick(DialogInterface dialog, int which) {
- pinComponent(mTargetInfos.get(which).getResolvedComponentName());
- ((ChooserActivity) getActivity()).handlePackagesChanged();
- dismiss();
- }
-
- private void pinComponent(ComponentName name) {
- SharedPreferences sp = ChooserActivity.getPinnedSharedPrefs(getContext());
- final String key = name.flattenToString();
- boolean currentVal = sp.getBoolean(name.flattenToString(), false);
- if (currentVal) {
- sp.edit().remove(key).apply();
- } else {
- sp.edit().putBoolean(key, true).apply();
- }
- }
-
- @Override
- public void onConfigurationChanged(Configuration newConfig) {
- // Dismiss on config changed (eg: rotation)
- // TODO: Maintain state on config change
- super.onConfigurationChanged(newConfig);
- dismiss();
- }
-
-}
diff --git a/core/java/com/android/internal/os/ZygoteInit.java b/core/java/com/android/internal/os/ZygoteInit.java
index c2b13c9..2e32730 100644
--- a/core/java/com/android/internal/os/ZygoteInit.java
+++ b/core/java/com/android/internal/os/ZygoteInit.java
@@ -376,11 +376,17 @@
null /*declaringPackage*/, null /*dependentPackages*/, null /*dependencies*/);
hidlManager.addDependency(hidlBase);
+ SharedLibraryInfo androidTestBase = new SharedLibraryInfo(
+ "/system/framework/android.test.base.jar", null /*packageName*/,
+ null /*codePaths*/, null /*name*/, 0 /*version*/, SharedLibraryInfo.TYPE_BUILTIN,
+ null /*declaringPackage*/, null /*dependentPackages*/, null /*dependencies*/);
+
ApplicationLoaders.getDefault().createAndCacheNonBootclasspathSystemClassLoaders(
new SharedLibraryInfo[]{
// ordered dependencies first
hidlBase,
hidlManager,
+ androidTestBase,
});
}
diff --git a/core/jni/android_hardware_display_DisplayViewport.cpp b/core/jni/android_hardware_display_DisplayViewport.cpp
index e74aafe..c25da0f 100644
--- a/core/jni/android_hardware_display_DisplayViewport.cpp
+++ b/core/jni/android_hardware_display_DisplayViewport.cpp
@@ -34,6 +34,7 @@
jclass clazz;
jfieldID displayId;
+ jfieldID isActive;
jfieldID orientation;
jfieldID logicalFrame;
jfieldID physicalFrame;
@@ -59,6 +60,7 @@
static const jmethodID byteValue = env->GetMethodID(byteClass, "byteValue", "()B");
viewport->displayId = env->GetIntField(viewportObj, gDisplayViewportClassInfo.displayId);
+ viewport->isActive = env->GetBooleanField(viewportObj, gDisplayViewportClassInfo.isActive);
viewport->orientation = env->GetIntField(viewportObj, gDisplayViewportClassInfo.orientation);
viewport->deviceWidth = env->GetIntField(viewportObj, gDisplayViewportClassInfo.deviceWidth);
viewport->deviceHeight = env->GetIntField(viewportObj, gDisplayViewportClassInfo.deviceHeight);
@@ -104,6 +106,9 @@
gDisplayViewportClassInfo.displayId = GetFieldIDOrDie(env,
gDisplayViewportClassInfo.clazz, "displayId", "I");
+ gDisplayViewportClassInfo.isActive =
+ GetFieldIDOrDie(env, gDisplayViewportClassInfo.clazz, "isActive", "Z");
+
gDisplayViewportClassInfo.orientation = GetFieldIDOrDie(env,
gDisplayViewportClassInfo.clazz, "orientation", "I");
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index f285d95..c661fd4 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -5001,7 +5001,8 @@
<permission android:name="android.permission.ASSOCIATE_INPUT_DEVICE_TO_DISPLAY_BY_PORT"
android:protectionLevel="signature" />
- <!-- Allows query of any normal app on the device, regardless of manifest declarations. -->
+ <!-- Allows query of any normal app on the device, regardless of manifest declarations.
+ <p>Protection level: normal -->
<permission android:name="android.permission.QUERY_ALL_PACKAGES"
android:protectionLevel="normal" />
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>
diff --git a/core/res/res/drawable/ic_chooser_pin_dialog.xml b/core/res/res/drawable/ic_chooser_pin_dialog.xml
new file mode 100644
index 0000000..2ac01c7
--- /dev/null
+++ b/core/res/res/drawable/ic_chooser_pin_dialog.xml
@@ -0,0 +1,25 @@
+<!--
+ ~ 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.
+ -->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24"
+ android:viewportHeight="24">
+ <path
+ android:pathData="M14,4v5c0,1.12 0.37,2.16 1,3H9c0.65,-0.86 1,-1.9 1,-3V4H14M17,2H7C6.45,2 6,2.45 6,3c0,0.55 0.45,1 1,1c0,0 0,0 0,0l1,0v5c0,1.66 -1.34,3 -3,3v2h5.97v7l1,1l1,-1v-7H19v-2c0,0 0,0 0,0c-1.66,0 -3,-1.34 -3,-3V4l1,0c0,0 0,0 0,0c0.55,0 1,-0.45 1,-1C18,2.45 17.55,2 17,2L17,2z"
+ android:fillColor="#FF000000"/>
+</vector>
diff --git a/core/res/res/layout/chooser_dialog_item.xml b/core/res/res/layout/chooser_dialog_item.xml
new file mode 100644
index 0000000..1d63697
--- /dev/null
+++ b/core/res/res/layout/chooser_dialog_item.xml
@@ -0,0 +1,44 @@
+<?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.
+ -->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="horizontal"
+ android:gravity="start|center_vertical"
+ android:paddingStart="?attr/dialogPreferredPadding"
+ android:paddingEnd="?attr/dialogPreferredPadding"
+ android:minHeight="48dp"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <!-- Icon and text aligns with aligns with alert_dialog_title_material -->
+ <ImageView android:id="@+id/icon"
+ android:tint="?android:attr/textColorAlertDialogListItem"
+ android:padding="4dp"
+ android:layout_marginEnd="8dp"
+ android:layout_width="32dp"
+ android:layout_height="32dp"/>
+
+ <!-- Using text style from select_dialog_item_material -->
+ <TextView android:id="@+id/text"
+ android:textAppearance="?android:attr/textAppearanceListItemSmall"
+ android:textColor="?android:attr/textColorAlertDialogListItem"
+ android:lines="1"
+ android:ellipsize="end"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"/>
+
+</LinearLayout>
\ No newline at end of file
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index 233f72ea..dc21e87 100644
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -456,12 +456,12 @@
days the profile is allowed to be off and this number is at least 3. [CHAR LIMIT=NONE] -->
<string name="personal_apps_suspension_soon_text">
Personal apps will be blocked on <xliff:g id="date" example="May 29">%1$s</xliff:g> at
- <xliff:g id="time" example="5:20 PM">%2$s</xliff:g>. Your work profile can\u2019t stay off
- for more than <xliff:g id="number" example="3">%3$d</xliff:g> days.
+ <xliff:g id="time" example="5:20 PM">%2$s</xliff:g>. Your IT admin doesn\u2019t allow your
+ work profile to stay off for more than <xliff:g id="number" example="3">%3$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>
+ <string name="personal_apps_suspended_turn_profile_on">Turn on</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>
@@ -4138,17 +4138,9 @@
<string name="activity_resolver_use_always">Always</string>
<!-- Title for a button to choose the currently selected activity
- as the default in the activity resolver. [CHAR LIMIT=50] -->
- <string name="activity_resolver_set_always">Set to always open</string>
-
- <!-- Title for a button to choose the currently selected activity
from the activity resolver to use just this once. [CHAR LIMIT=25] -->
<string name="activity_resolver_use_once">Just once</string>
- <!-- Title for a button to choose to go to
- 'Open by Default' app settings. [CHAR LIMIT=25] -->
- <string name="activity_resolver_app_settings">Settings</string>
-
<!-- Text for the toast that is shown when the user clicks on a launcher that
doesn't support the work profile. [CHAR LIMIT=100] -->
<string name="activity_resolver_work_profiles_support">%1$s doesn\'t support work profile</string>
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index b0f0148..878b8db 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -2552,7 +2552,6 @@
<java-symbol type="bool" name="config_allow_ussd_over_ims" />
<java-symbol type="attr" name="touchscreenBlocksFocus" />
<java-symbol type="layout" name="resolver_list_with_default" />
- <java-symbol type="string" name="activity_resolver_set_always" />
<java-symbol type="string" name="activity_resolver_use_always" />
<java-symbol type="string" name="whichApplicationNamed" />
<java-symbol type="string" name="whichApplicationLabel" />
@@ -2748,6 +2747,7 @@
<java-symbol type="drawable" name="ic_chooser_group_arrow"/>
<java-symbol type="drawable" name="chooser_group_background"/>
<java-symbol type="drawable" name="ic_chooser_pin"/>
+ <java-symbol type="drawable" name="ic_chooser_pin_dialog"/>
<java-symbol type="drawable" name="chooser_pinned_background"/>
<java-symbol type="integer" name="config_maxShortcutTargetsPerApp" />
<java-symbol type="layout" name="resolve_grid_item" />
@@ -3834,10 +3834,12 @@
<java-symbol type="string" name="config_factoryResetPackage" />
<java-symbol type="array" name="config_highRefreshRateBlacklist" />
+ <java-symbol type="layout" name="chooser_dialog_item" />
<java-symbol type="id" name="chooser_copy_button" />
<java-symbol type="layout" name="chooser_action_button" />
<java-symbol type="dimen" name="chooser_action_button_icon_size" />
<java-symbol type="string" name="config_defaultNearbySharingComponent" />
+ <java-symbol type="drawable" name="ic_close" />
<java-symbol type="bool" name="config_automotiveHideNavBarForKeyboard" />
diff --git a/core/tests/coretests/src/com/android/internal/app/ChooserWrapperActivity.java b/core/tests/coretests/src/com/android/internal/app/ChooserWrapperActivity.java
index 071b225..749b0e5 100644
--- a/core/tests/coretests/src/com/android/internal/app/ChooserWrapperActivity.java
+++ b/core/tests/coretests/src/com/android/internal/app/ChooserWrapperActivity.java
@@ -61,12 +61,12 @@
@Override
public ChooserListAdapter createChooserListAdapter(Context context, List<Intent> payloadIntents,
Intent[] initialIntents, List<ResolveInfo> rList, boolean filterLastUsed,
- boolean useLayoutForBrowsables, ResolverListController resolverListController) {
+ ResolverListController resolverListController) {
PackageManager packageManager =
sOverrides.packageManager == null ? context.getPackageManager()
: sOverrides.packageManager;
return new ChooserListAdapter(context, payloadIntents, initialIntents, rList,
- filterLastUsed, resolverListController, useLayoutForBrowsables,
+ filterLastUsed, resolverListController,
this, this, packageManager);
}
diff --git a/core/tests/coretests/src/com/android/internal/app/ResolverWrapperActivity.java b/core/tests/coretests/src/com/android/internal/app/ResolverWrapperActivity.java
index 2087104..0c009a0 100644
--- a/core/tests/coretests/src/com/android/internal/app/ResolverWrapperActivity.java
+++ b/core/tests/coretests/src/com/android/internal/app/ResolverWrapperActivity.java
@@ -42,9 +42,9 @@
@Override
public ResolverListAdapter createResolverListAdapter(Context context,
List<Intent> payloadIntents, Intent[] initialIntents, List<ResolveInfo> rList,
- boolean filterLastUsed, boolean useLayoutForBrowsables, UserHandle userHandle) {
+ boolean filterLastUsed, UserHandle userHandle) {
return new ResolverWrapperAdapter(context, payloadIntents, initialIntents, rList,
- filterLastUsed, createListController(userHandle), useLayoutForBrowsables, this);
+ filterLastUsed, createListController(userHandle), this);
}
@Override
@@ -166,4 +166,4 @@
};
}
}
-}
\ No newline at end of file
+}
diff --git a/core/tests/coretests/src/com/android/internal/app/ResolverWrapperAdapter.java b/core/tests/coretests/src/com/android/internal/app/ResolverWrapperAdapter.java
index a2191b5..56a7070 100644
--- a/core/tests/coretests/src/com/android/internal/app/ResolverWrapperAdapter.java
+++ b/core/tests/coretests/src/com/android/internal/app/ResolverWrapperAdapter.java
@@ -35,11 +35,10 @@
List<Intent> payloadIntents,
Intent[] initialIntents,
List<ResolveInfo> rList, boolean filterLastUsed,
- ResolverListController resolverListController, boolean useLayoutForBrowsables,
+ ResolverListController resolverListController,
ResolverListCommunicator resolverListCommunicator) {
super(context, payloadIntents, initialIntents, rList, filterLastUsed,
- resolverListController,
- useLayoutForBrowsables, resolverListCommunicator, false);
+ resolverListController, resolverListCommunicator, false);
}
public CountingIdlingResource getLabelIdlingResource() {
diff --git a/data/etc/privapp-permissions-platform.xml b/data/etc/privapp-permissions-platform.xml
index 16851cf..04fead8 100644
--- a/data/etc/privapp-permissions-platform.xml
+++ b/data/etc/privapp-permissions-platform.xml
@@ -411,6 +411,8 @@
<permission name="android.permission.TUNER_RESOURCE_ACCESS" />
<!-- Permissions required for CTS test - TVInputManagerTest -->
<permission name="android.permission.TV_INPUT_HARDWARE" />
+ <!-- Permission required for CTS test - PrivilegedLocationPermissionTest -->
+ <permission name="android.permission.LOCATION_HARDWARE" />
</privapp-permissions>
<privapp-permissions package="com.android.statementservice">
diff --git a/media/java/android/media/MediaCodec.java b/media/java/android/media/MediaCodec.java
index d6496c0..62d76c0 100644
--- a/media/java/android/media/MediaCodec.java
+++ b/media/java/android/media/MediaCodec.java
@@ -2742,6 +2742,9 @@
* See {@link MediaCodec.CryptoInfo.Pattern}.
*/
public void setPattern(Pattern newPattern) {
+ if (newPattern == null) {
+ newPattern = zeroPattern;
+ }
pattern = newPattern;
}
@@ -2767,6 +2770,11 @@
builder.append(Arrays.toString(numBytesOfClearData));
builder.append(", encrypted ");
builder.append(Arrays.toString(numBytesOfEncryptedData));
+ builder.append(", pattern (encrypt: ");
+ builder.append(pattern.mEncryptBlocks);
+ builder.append(", skip: ");
+ builder.append(pattern.mSkipBlocks);
+ builder.append(")");
return builder.toString();
}
};
diff --git a/packages/SettingsLib/res/drawable/ic_headphone.xml b/packages/SettingsLib/res/drawable/ic_headphone.xml
new file mode 100644
index 0000000..3b44f8f
--- /dev/null
+++ b/packages/SettingsLib/res/drawable/ic_headphone.xml
@@ -0,0 +1,29 @@
+<!--
+ 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
+ -->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24"
+ android:viewportHeight="24"
+ android:tint="?android:attr/colorControlNormal">
+ <path
+ android:fillColor="#000000"
+ android:pathData="M19,15v3c0,0.55 -0.45,1 -1,1h-1v-4h2M7,15v4H6c-0.55,
+ 0 -1,-0.45 -1,-1v-3h2m5,-13c-4.97,0 -9,4.03 -9,9v7c0,1.66 1.34,3 3,3h3v-8H5v-2c0,
+ -3.87 3.13,-7 7,-7s7,3.13 7,7v2h-4v8h3c1.66,0 3,-1.34 3,-3v-7c0,-4.97 -4.03,
+ -9 -9,-9z"/>
+</vector>
\ No newline at end of file
diff --git a/packages/SettingsLib/res/drawable/ic_media_device.xml b/packages/SettingsLib/res/drawable/ic_media_device.xml
deleted file mode 100644
index 5a6aeb4..0000000
--- a/packages/SettingsLib/res/drawable/ic_media_device.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2019 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:viewportWidth="24"
- android:viewportHeight="24"
- android:width="24dp"
- android:height="24dp"
- android:tint="?android:attr/colorControlNormal">
- <path
- android:fillColor="#00000000"
- android:fillAlpha=".1"
- android:pathData="M0 0h24v24H0z" />
- <path
- android:fillColor="#00000000"
- android:pathData="M0 0h24v24H0z" />
- <path
- android:fillColor="#000000"
- android:pathData="M21 3H3c-1.1 0-2 0.9-2 2v3h2V5h18v14h-7v2h7c1.1 0 2 -0.9 2-2V5c0-1.1 -0.9-2-2-2zM1 18v3h3c0-1.66-1.34-3-3-3zm0-4v2c2.76 0 5 2.24 5 5h2c0-3.87-3.13-7-7-7zm0-4v2c4.97 0 9 4.03 9 9h2c0-6.08-4.93-11-11-11z" />
-</vector>
\ No newline at end of file
diff --git a/packages/SettingsLib/res/drawable/ic_media_display_device.xml b/packages/SettingsLib/res/drawable/ic_media_display_device.xml
new file mode 100644
index 0000000..78b4e2a
--- /dev/null
+++ b/packages/SettingsLib/res/drawable/ic_media_display_device.xml
@@ -0,0 +1,30 @@
+<?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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="14dp"
+ android:height="11dp"
+ android:viewportWidth="14"
+ android:viewportHeight="11"
+ android:tint="?android:attr/colorControlNormal">
+ <path
+ android:pathData="M10,10v1H4v-1H1.5A1.5,1.5 0,0 1,0 8.5v-7A1.5,1.5 0,
+ 0 1,1.5 0h11A1.5,1.5 0,0 1,14 1.5v7a1.5,1.5 0,0 1,-1.5 1.5H10zM1.5,
+ 1a0.5,0.5 0,0 0,-0.5 0.5v7a0.5,0.5 0,0 0,0.5 0.5h11a0.5,0.5 0,0 0,
+ 0.5 -0.5v-7a0.5,0.5 0,0 0,-0.5 -0.5h-11z"
+ android:fillColor="#000000"
+ android:fillType="evenOdd"/>
+</vector>
\ No newline at end of file
diff --git a/packages/SettingsLib/res/drawable/ic_media_group_device.xml b/packages/SettingsLib/res/drawable/ic_media_group_device.xml
index ba5e651..478a860 100644
--- a/packages/SettingsLib/res/drawable/ic_media_group_device.xml
+++ b/packages/SettingsLib/res/drawable/ic_media_group_device.xml
@@ -21,12 +21,16 @@
android:viewportHeight="24"
android:tint="?android:attr/colorControlNormal">
<path
- android:pathData="M18.2,1L9.8,1C8.81,1 8,1.81 8,2.8v14.4c0,0.99 0.81,1.79 1.8,1.79l8.4,0.01c0.99,0 1.8,-0.81 1.8,-1.8L20,2.8c0,-0.99 -0.81,-1.8 -1.8,-1.8zM14,3c1.1,0 2,0.89 2,2s-0.9,2 -2,2 -2,-0.89 -2,-2 0.9,-2 2,-2zM14,16.5c-2.21,0 -4,-1.79 -4,-4s1.79,-4 4,-4 4,1.79 4,4 -1.79,4 -4,4z"
- android:fillColor="#000000"/>
+ android:fillColor="#000000"
+ android:pathData="M19,4v14l-10,-0.01V4h10m0,-2H9c-1.1,0 -2,0.9 -2,2v13.99c0,1.1 0.89,
+ 2 2,2L19,20c1.1,0 2,-0.9 2,-2V4c0,-1.1 -0.9,-2 -2,-2z"/>
<path
- android:pathData="M14,12.5m-2.5,0a2.5,2.5 0,1 1,5 0a2.5,2.5 0,1 1,-5 0"
- android:fillColor="#000000"/>
+ android:fillColor="#000000"
+ android:pathData="M14,7m-1.5,0a1.5,1.5 0,1 1,3 0a1.5,1.5 0,1 1,-3 0"/>
<path
- android:pathData="M6,5H4v16c0,1.1 0.89,2 2,2h10v-2H6V5z"
- android:fillColor="#000000"/>
+ android:fillColor="#000000"
+ android:pathData="M14,17c1.93,0 3.5,-1.57 3.5,-3.5S15.93,10 14,10s-3.5,
+ 1.57 -3.5,3.5S12.07,17 14,17zM14,12c0.83,0 1.5,0.67 1.5,1.5S14.83,15 14,
+ 15s-1.5,-0.67 -1.5,-1.5 0.67,-1.5 1.5,-1.5zM6,5L4,5v16c0,1.1 0.89,2 2,
+ 2h10v-2L6,21L6,5z"/>
</vector>
\ No newline at end of file
diff --git a/packages/SettingsLib/res/drawable/ic_media_speaker_device.xml b/packages/SettingsLib/res/drawable/ic_media_speaker_device.xml
new file mode 100644
index 0000000..32fe7d1
--- /dev/null
+++ b/packages/SettingsLib/res/drawable/ic_media_speaker_device.xml
@@ -0,0 +1,30 @@
+<!--
+ 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
+ -->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24"
+ android:viewportHeight="24"
+ android:tint="?android:attr/colorControlNormal">
+ <path
+ android:fillColor="#000000"
+ android:pathData="M17,2L7,2c-1.1,0 -2,0.9 -2,2v16c0,1.1 0.9,1.99 2,1.99L17,
+ 22c1.1,0 2,-0.9 2,-2L19,4c0,-1.1 -0.9,-2 -2,-2zM7,20L7,4h10v16L7,20zM12,9c1.1,0 2,
+ -0.9 2,-2s-0.9,-2 -2,-2c-1.11,0 -2,0.9 -2,2s0.89,2 2,2zM12,11c-2.21,0 -4,1.79 -4,
+ 4s1.79,4 4,4 4,-1.79 4,-4 -1.79,-4 -4,-4zM12,17c-1.1,0 -2,-0.9 -2,-2s0.9,-2 2,-2 2,
+ 0.9 2,2 -0.9,2 -2,2z"/>
+</vector>
\ No newline at end of file
diff --git a/packages/SettingsLib/res/drawable/ic_smartphone.xml b/packages/SettingsLib/res/drawable/ic_smartphone.xml
index 84a96da..09811bb 100644
--- a/packages/SettingsLib/res/drawable/ic_smartphone.xml
+++ b/packages/SettingsLib/res/drawable/ic_smartphone.xml
@@ -21,9 +21,8 @@
android:height="24dp"
android:tint="?android:attr/colorControlNormal">
<path
- android:fillColor="#00000000"
- android:pathData="M0 0h24v24H0z" />
- <path
android:fillColor="#000000"
- android:pathData="M17 1.01L7 1c-1.1 0-2 0.9-2 2v18c0 1.1 0.9 2 2 2h10c1.1 0 2 -0.9 2-2V3c0-1.1 -0.9-1.99-2-1.99zM17 19H7V5h10v14z" />
+ android:pathData="M17,1.01L7,1c-1.1,0 -2,0.9 -2,2v18c0,1.1 0.9,
+ 2 2,2h10c1.1,0 2,-0.9 2,-2L19,3c0,-1.1 -0.9,-1.99 -2,-1.99zM17,
+ 21L7,21v-1h10v1zM17,18L7,18L7,6h10v12zM7,4L7,3h10v1L7,4z"/>
</vector>
diff --git a/packages/SettingsLib/res/values-af/strings.xml b/packages/SettingsLib/res/values-af/strings.xml
index 35e2295..704d264 100644
--- a/packages/SettingsLib/res/values-af/strings.xml
+++ b/packages/SettingsLib/res/values-af/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Gedeaktiveer"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Geaktiveer"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Jou toestel moet herselflaai om hierdie verandering toe te pas. Herselflaai nou of kanselleer."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"Werk-<xliff:g id="APP_NAME">%s</xliff:g>"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Bedraade oorfoon"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-am/strings.xml b/packages/SettingsLib/res/values-am/strings.xml
index 25cea4d..585924d 100644
--- a/packages/SettingsLib/res/values-am/strings.xml
+++ b/packages/SettingsLib/res/values-am/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"ተሰናክሏል"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"ነቅቷል"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"የእርስዎን መሣሪያ ይህ ለው ለማመልከት እንደገና መነሣት አለበት። አሁን እንደገና ያስነሡ ወይም ይተዉት።"</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"የስራ <xliff:g id="APP_NAME">%s</xliff:g>"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"ባለገመድ ጆሮ ማዳመጫ"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-ar/strings.xml b/packages/SettingsLib/res/values-ar/strings.xml
index bd94c40..2b51b54 100644
--- a/packages/SettingsLib/res/values-ar/strings.xml
+++ b/packages/SettingsLib/res/values-ar/strings.xml
@@ -557,6 +557,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"غير مفعّل"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"مفعّل"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"يجب إعادة تشغيل جهازك ليتم تطبيق هذا التغيير. يمكنك إعادة التشغيل الآن أو إلغاء التغيير."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"<xliff:g id="APP_NAME">%s</xliff:g> المخصّص للعمل"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"سمّاعة رأس سلكية"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-as/strings.xml b/packages/SettingsLib/res/values-as/strings.xml
index 5572994..e0455cb 100644
--- a/packages/SettingsLib/res/values-as/strings.xml
+++ b/packages/SettingsLib/res/values-as/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"অক্ষম কৰা আছে"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"সক্ষম কৰা আছে"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"এই সলনিটো কার্যকৰী হ’বলৈ আপোনাৰ ডিভাইচটো ৰিবুট কৰিবই লাগিব। এতিয়াই ৰিবুট কৰক অথবা বাতিল কৰক।"</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"কৰ্মস্থান <xliff:g id="APP_NAME">%s</xliff:g>"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"তাঁৰযুক্ত হেডফ\'ন"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-az/strings.xml b/packages/SettingsLib/res/values-az/strings.xml
index 39ab078..6565d53 100644
--- a/packages/SettingsLib/res/values-az/strings.xml
+++ b/packages/SettingsLib/res/values-az/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Deaktiv"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Aktiv"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Bu dəyişikliyin tətbiq edilməsi üçün cihaz yenidən başladılmalıdır. İndi yenidən başladın və ya ləğv edin."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"İş <xliff:g id="APP_NAME">%s</xliff:g>"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Simli qulaqlıq"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
index 78fd0bf..3ced29b 100644
--- a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
+++ b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
@@ -554,6 +554,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Onemogućeno"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Omogućeno"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Morate da restartujete uređaj da bi se ova promena primenila. Restartujte ga odmah ili otkažite."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"<xliff:g id="APP_NAME">%s</xliff:g> za posao"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Žičane slušalice"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-be/strings.xml b/packages/SettingsLib/res/values-be/strings.xml
index 30a9e0e..d039c9f 100644
--- a/packages/SettingsLib/res/values-be/strings.xml
+++ b/packages/SettingsLib/res/values-be/strings.xml
@@ -555,6 +555,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Выключана"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Уключана"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Перазагрузіце прыладу, каб прымяніць гэта змяненне. Перазагрузіце ці скасуйце."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"<xliff:g id="APP_NAME">%s</xliff:g> (праца)"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Правадныя навушнікі"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-bg/strings.xml b/packages/SettingsLib/res/values-bg/strings.xml
index c8dd82f..16029ee 100644
--- a/packages/SettingsLib/res/values-bg/strings.xml
+++ b/packages/SettingsLib/res/values-bg/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Деактивирано"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Активирано"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"За да бъде приложена тази промяна, устройството ви трябва да бъде рестартирано. Рестартирайте сега или анулирайте."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"<xliff:g id="APP_NAME">%s</xliff:g> за работа"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Слушалки с кабел"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-bn/strings.xml b/packages/SettingsLib/res/values-bn/strings.xml
index 02ca679..6ca4828 100644
--- a/packages/SettingsLib/res/values-bn/strings.xml
+++ b/packages/SettingsLib/res/values-bn/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"বন্ধ করা আছে"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"চালু করা আছে"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"এই পরিবর্তনটি প্রয়োগ করার জন্য আপনার ডিভাইসটি অবশ্যই রিবুট করতে হবে। এখন রিবুট করুন বা বাতিল করুন।"</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"অফিস <xliff:g id="APP_NAME">%s</xliff:g>"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"তার যুক্ত হেডফোন"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-bs/strings.xml b/packages/SettingsLib/res/values-bs/strings.xml
index 785460f..50f0b76 100644
--- a/packages/SettingsLib/res/values-bs/strings.xml
+++ b/packages/SettingsLib/res/values-bs/strings.xml
@@ -554,6 +554,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Onemogućeno"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Omogućeno"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Morate ponovo pokrenuti uređaj da se ova promjena primijeni. Ponovo pokrenite odmah ili otkažite."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"Poslovna aplikacija <xliff:g id="APP_NAME">%s</xliff:g>"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Žičane slušalice"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-ca/strings.xml b/packages/SettingsLib/res/values-ca/strings.xml
index 50c0374..3ca9d52 100644
--- a/packages/SettingsLib/res/values-ca/strings.xml
+++ b/packages/SettingsLib/res/values-ca/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Desactivat"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Activat"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Has de reiniciar el teu dispositiu perquè s\'apliquin els canvis. Reinicia\'l ara o cancel·la."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"<xliff:g id="APP_NAME">%s</xliff:g> de la feina"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Auriculars amb cable"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-cs/strings.xml b/packages/SettingsLib/res/values-cs/strings.xml
index 9fb63ea..a5532e0 100644
--- a/packages/SettingsLib/res/values-cs/strings.xml
+++ b/packages/SettingsLib/res/values-cs/strings.xml
@@ -555,6 +555,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Vypnuto"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Zapnuto"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Aby se tato změna projevila, je třeba zařízení restartovat. Restartujte zařízení nebo zrušte akci."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"Pracovní <xliff:g id="APP_NAME">%s</xliff:g>"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Kabelová sluchátka"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-da/strings.xml b/packages/SettingsLib/res/values-da/strings.xml
index dc4f873..0dda52a 100644
--- a/packages/SettingsLib/res/values-da/strings.xml
+++ b/packages/SettingsLib/res/values-da/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Deaktiveret"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Aktiveret"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Din enhed skal genstartes for at denne enhed bliver anvendt. Genstart nu, eller annuller."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"<xliff:g id="APP_NAME">%s</xliff:g> – arbejde"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Høretelefoner med ledning"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-de/strings.xml b/packages/SettingsLib/res/values-de/strings.xml
index bee2d79..fe2a775 100644
--- a/packages/SettingsLib/res/values-de/strings.xml
+++ b/packages/SettingsLib/res/values-de/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Deaktiviert"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Aktiviert"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Damit diese Änderung übernommen wird, musst du dein Gerät neu starten. Du kannst es jetzt neu starten oder den Vorgang abbrechen."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"<xliff:g id="APP_NAME">%s</xliff:g> (geschäftlich)"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Kabelgebundene Kopfhörer"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-el/strings.xml b/packages/SettingsLib/res/values-el/strings.xml
index b1d07ac..8db0b7e 100644
--- a/packages/SettingsLib/res/values-el/strings.xml
+++ b/packages/SettingsLib/res/values-el/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Ανενεργή"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Ενεργή"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Για να εφαρμοστεί αυτή η αλλαγή, θα πρέπει να επανεκκινήσετε τη συσκευή σας. Επανεκκίνηση τώρα ή ακύρωση."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"Εργασία <xliff:g id="APP_NAME">%s</xliff:g>"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Ενσύρματα ακουστικά"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-en-rAU/strings.xml b/packages/SettingsLib/res/values-en-rAU/strings.xml
index e51456a..0ef8e06 100644
--- a/packages/SettingsLib/res/values-en-rAU/strings.xml
+++ b/packages/SettingsLib/res/values-en-rAU/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Disabled"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Enabled"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Your device must be rebooted for this change to apply. Reboot now or cancel."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"Work <xliff:g id="APP_NAME">%s</xliff:g>"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Wired headphone"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-en-rCA/strings.xml b/packages/SettingsLib/res/values-en-rCA/strings.xml
index e51456a..0ef8e06 100644
--- a/packages/SettingsLib/res/values-en-rCA/strings.xml
+++ b/packages/SettingsLib/res/values-en-rCA/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Disabled"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Enabled"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Your device must be rebooted for this change to apply. Reboot now or cancel."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"Work <xliff:g id="APP_NAME">%s</xliff:g>"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Wired headphone"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-en-rGB/strings.xml b/packages/SettingsLib/res/values-en-rGB/strings.xml
index e51456a..0ef8e06 100644
--- a/packages/SettingsLib/res/values-en-rGB/strings.xml
+++ b/packages/SettingsLib/res/values-en-rGB/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Disabled"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Enabled"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Your device must be rebooted for this change to apply. Reboot now or cancel."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"Work <xliff:g id="APP_NAME">%s</xliff:g>"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Wired headphone"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-en-rIN/strings.xml b/packages/SettingsLib/res/values-en-rIN/strings.xml
index e51456a..0ef8e06 100644
--- a/packages/SettingsLib/res/values-en-rIN/strings.xml
+++ b/packages/SettingsLib/res/values-en-rIN/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Disabled"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Enabled"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Your device must be rebooted for this change to apply. Reboot now or cancel."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"Work <xliff:g id="APP_NAME">%s</xliff:g>"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Wired headphone"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-en-rXC/strings.xml b/packages/SettingsLib/res/values-en-rXC/strings.xml
index 34ff568..41c20e0 100644
--- a/packages/SettingsLib/res/values-en-rXC/strings.xml
+++ b/packages/SettingsLib/res/values-en-rXC/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Disabled"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Enabled"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Your device must be rebooted for this change to apply. Reboot now or cancel."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"Work <xliff:g id="APP_NAME">%s</xliff:g>"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Wired headphone"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-es-rUS/strings.xml b/packages/SettingsLib/res/values-es-rUS/strings.xml
index fb5e9d7..c27973f 100644
--- a/packages/SettingsLib/res/values-es-rUS/strings.xml
+++ b/packages/SettingsLib/res/values-es-rUS/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Inhabilitado"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Habilitado"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Debes reiniciar el dispositivo para que se aplique el cambio. Reinícialo ahora o cancela la acción."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"<xliff:g id="APP_NAME">%s</xliff:g> de trabajo"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Auriculares con cable"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-es/strings.xml b/packages/SettingsLib/res/values-es/strings.xml
index a6a89dd..a0c00c3 100644
--- a/packages/SettingsLib/res/values-es/strings.xml
+++ b/packages/SettingsLib/res/values-es/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Inhabilitado"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Habilitado"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Es necesario reiniciar tu dispositivo para que se apliquen los cambios. Reiniciar ahora o cancelar."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"<xliff:g id="APP_NAME">%s</xliff:g> de trabajo"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Auriculares con cable"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-et/strings.xml b/packages/SettingsLib/res/values-et/strings.xml
index 65f1043..65f456e 100644
--- a/packages/SettingsLib/res/values-et/strings.xml
+++ b/packages/SettingsLib/res/values-et/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Keelatud"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Lubatud"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Selle muudatuse rakendamiseks tuleb seade taaskäivitada. Taaskäivitage kohe või tühistage."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"Töö: <xliff:g id="APP_NAME">%s</xliff:g>"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Juhtmega kõrvaklapid"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-eu/strings.xml b/packages/SettingsLib/res/values-eu/strings.xml
index 6864db1..137116f 100644
--- a/packages/SettingsLib/res/values-eu/strings.xml
+++ b/packages/SettingsLib/res/values-eu/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Desgaituta"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Gaituta"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Aldaketa aplikatzeko, berrabiarazi egin behar da gailua. Berrabiaraz ezazu orain, edo utzi bertan behera."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"Laneko <xliff:g id="APP_NAME">%s</xliff:g>"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Entzungailu kableduna"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-fa/strings.xml b/packages/SettingsLib/res/values-fa/strings.xml
index 5e13c1b..1c08815 100644
--- a/packages/SettingsLib/res/values-fa/strings.xml
+++ b/packages/SettingsLib/res/values-fa/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"غیرفعال"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"فعال"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"برای اعمال این تغییر، دستگاهتان باید راهاندازی مجدد شود. اکنون راهاندازی مجدد کنید یا لغو کنید."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"<xliff:g id="APP_NAME">%s</xliff:g> محل کار"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"هدفون سیمی"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-fi/strings.xml b/packages/SettingsLib/res/values-fi/strings.xml
index 1ec71c7..33e6659 100644
--- a/packages/SettingsLib/res/values-fi/strings.xml
+++ b/packages/SettingsLib/res/values-fi/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Ei käytössä"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Käytössä"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Laitteesi on käynnistettävä uudelleen, jotta muutos tulee voimaan. Käynnistä uudelleen nyt tai peruuta."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"<xliff:g id="APP_NAME">%s</xliff:g> (työ)"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Langalliset kuulokkeet"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-fr-rCA/strings.xml b/packages/SettingsLib/res/values-fr-rCA/strings.xml
index 0a32ca5..140d4ce 100644
--- a/packages/SettingsLib/res/values-fr-rCA/strings.xml
+++ b/packages/SettingsLib/res/values-fr-rCA/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Désactivé"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Activé"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Votre appareil doit être redémarré pour que ce changement prenne effet. Redémarrez-le maintenant ou annulez la modification."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"<xliff:g id="APP_NAME">%s</xliff:g> (travail)"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Écouteurs filaires"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-fr/strings.xml b/packages/SettingsLib/res/values-fr/strings.xml
index bb069b5..09fe903 100644
--- a/packages/SettingsLib/res/values-fr/strings.xml
+++ b/packages/SettingsLib/res/values-fr/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Désactivé"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Activé"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Vous devez redémarrer l\'appareil pour que cette modification soit appliquée. Redémarrez maintenant ou annulez l\'opération."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"<xliff:g id="APP_NAME">%s</xliff:g> (travail)"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Casque filaire"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-gl/strings.xml b/packages/SettingsLib/res/values-gl/strings.xml
index a27f2c4..3e8b1c1 100644
--- a/packages/SettingsLib/res/values-gl/strings.xml
+++ b/packages/SettingsLib/res/values-gl/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Desactivado"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Activado"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"É necesario reiniciar o teu dispositivo para aplicar este cambio. Reiníciao agora ou cancela o cambio."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"Aplicación <xliff:g id="APP_NAME">%s</xliff:g> do traballo"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Auriculares con cable"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-gu/strings.xml b/packages/SettingsLib/res/values-gu/strings.xml
index cf1e5ee..aa1f960 100644
--- a/packages/SettingsLib/res/values-gu/strings.xml
+++ b/packages/SettingsLib/res/values-gu/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"બંધ છે"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"ચાલુ છે"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"આ ફેરફારને લાગુ કરવા માટે તમારા ડિવાઇસને રીબૂટ કરવાની જરૂર છે. હમણાં જ રીબૂટ કરો કે રદ કરો."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"ઑફિસ <xliff:g id="APP_NAME">%s</xliff:g>"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"વાયરવાળો હૅડફોન"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-hi/strings.xml b/packages/SettingsLib/res/values-hi/strings.xml
index 89b7f67..bfc4a43 100644
--- a/packages/SettingsLib/res/values-hi/strings.xml
+++ b/packages/SettingsLib/res/values-hi/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"बंद है"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"चालू है"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"बदली गई सेटिंग को लागू करने के लिए, अपने डिवाइस को फिर से चालू करें. डिवाइस को फिर से चालू करें या रद्द करें."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"ऑफ़िस वाला <xliff:g id="APP_NAME">%s</xliff:g>"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"वायर वाला हेडफ़ोन"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-hr/strings.xml b/packages/SettingsLib/res/values-hr/strings.xml
index f57a302..14e3330 100644
--- a/packages/SettingsLib/res/values-hr/strings.xml
+++ b/packages/SettingsLib/res/values-hr/strings.xml
@@ -554,6 +554,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Onemogućeno"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Omogućeno"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Uređaj se mora ponovno pokrenuti da bi se ta promjena primijenila. Ponovo pokrenite uređaj odmah ili odustanite."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"<xliff:g id="APP_NAME">%s</xliff:g> za posao"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Žičane slušalice"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-hu/strings.xml b/packages/SettingsLib/res/values-hu/strings.xml
index e8699dc..d16ff03 100644
--- a/packages/SettingsLib/res/values-hu/strings.xml
+++ b/packages/SettingsLib/res/values-hu/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Letiltva"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Engedélyezve"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Az eszközt újra kell indítani, hogy a módosítás megtörténjen. Indítsa újra most, vagy vesse el a módosítást."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"Munkahelyi <xliff:g id="APP_NAME">%s</xliff:g>"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Vezetékes fejhallgató"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-hy/strings.xml b/packages/SettingsLib/res/values-hy/strings.xml
index 3f2b414..276ad88 100644
--- a/packages/SettingsLib/res/values-hy/strings.xml
+++ b/packages/SettingsLib/res/values-hy/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Անջատված է"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Միացված է"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Սարքն անհրաժեշտ է վերագործարկել, որպեսզի փոփոխությունը կիրառվի։ Վերագործարկեք հիմա կամ չեղարկեք փոփոխությունը։"</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"Աշխատանքային <xliff:g id="APP_NAME">%s</xliff:g>"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Լարով ականջակալ"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-in/strings.xml b/packages/SettingsLib/res/values-in/strings.xml
index dd1f999..9735c16 100644
--- a/packages/SettingsLib/res/values-in/strings.xml
+++ b/packages/SettingsLib/res/values-in/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Nonaktif"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Aktif"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Perangkat Anda harus di-reboot agar perubahan ini diterapkan. Reboot sekarang atau batalkan."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"<xliff:g id="APP_NAME">%s</xliff:g> kerja"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Headphone berkabel"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-is/strings.xml b/packages/SettingsLib/res/values-is/strings.xml
index 5dad63d..0ebc341 100644
--- a/packages/SettingsLib/res/values-is/strings.xml
+++ b/packages/SettingsLib/res/values-is/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Slökkt"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Virkt"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Endurræsa þarf tækið til að þessi breyting taki gildi. Endurræstu núna eða hættu við."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"<xliff:g id="APP_NAME">%s</xliff:g> í vinnu"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Heyrnartól með snúru"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-it/strings.xml b/packages/SettingsLib/res/values-it/strings.xml
index 02b8533..efc186a 100644
--- a/packages/SettingsLib/res/values-it/strings.xml
+++ b/packages/SettingsLib/res/values-it/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Non attivo"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Attivo"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Devi riavviare il dispositivo per applicare questa modifica. Riavvia ora o annulla."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"App <xliff:g id="APP_NAME">%s</xliff:g> di lavoro"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Cuffie con cavo"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-iw/strings.xml b/packages/SettingsLib/res/values-iw/strings.xml
index af6a870..3a45526 100644
--- a/packages/SettingsLib/res/values-iw/strings.xml
+++ b/packages/SettingsLib/res/values-iw/strings.xml
@@ -555,6 +555,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"מושבת"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"מופעל"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"צריך להפעיל מחדש את המכשיר כדי להחיל את השינוי. יש להפעיל מחדש עכשיו או לבטל."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"<xliff:g id="APP_NAME">%s</xliff:g> של עבודה"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"אוזניות עם חוט"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-ja/strings.xml b/packages/SettingsLib/res/values-ja/strings.xml
index 080c1a9..0395770 100644
--- a/packages/SettingsLib/res/values-ja/strings.xml
+++ b/packages/SettingsLib/res/values-ja/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"無効"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"有効"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"この変更を適用するには、デバイスの再起動が必要です。今すぐ再起動してください。キャンセルすることもできます。"</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"仕事の<xliff:g id="APP_NAME">%s</xliff:g>"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"有線ヘッドフォン"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-ka/strings.xml b/packages/SettingsLib/res/values-ka/strings.xml
index 23de5b2..9b671a8 100644
--- a/packages/SettingsLib/res/values-ka/strings.xml
+++ b/packages/SettingsLib/res/values-ka/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"გათიშული"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"ჩართული"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"ამ ცვლილების ასამოქმედებლად თქვენი მოწყობილობა უნდა გადაიტვირთოს. გადატვირთეთ ახლავე ან გააუქმეთ."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"სამსახურის <xliff:g id="APP_NAME">%s</xliff:g>"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"სადენიანი ყურსასმენი"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-kk/strings.xml b/packages/SettingsLib/res/values-kk/strings.xml
index 821c566..1ee06b8 100644
--- a/packages/SettingsLib/res/values-kk/strings.xml
+++ b/packages/SettingsLib/res/values-kk/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Өшірулі"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Қосулы"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Бұл өзгеріс күшіне енуі үшін, құрылғыны қайта жүктеу керек. Қазір қайта жүктеңіз не бас тартыңыз."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"<xliff:g id="APP_NAME">%s</xliff:g> (жұмыс)"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Сымды құлақаспап"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-km/strings.xml b/packages/SettingsLib/res/values-km/strings.xml
index f93ab25..6c36d2f 100644
--- a/packages/SettingsLib/res/values-km/strings.xml
+++ b/packages/SettingsLib/res/values-km/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"បានបិទ"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"បានបើក"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"ត្រូវតែចាប់ផ្ដើមឧបករណ៍របស់អ្នកឡើងវិញ ទើបការផ្លាស់ប្ដូរនេះត្រូវបានអនុវត្ត។ ចាប់ផ្ដើមឡើងវិញឥឡូវនេះ ឬបោះបង់។"</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"<xliff:g id="APP_NAME">%s</xliff:g> សម្រាប់ការងារ"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"កាសមានខ្សែ"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-kn/strings.xml b/packages/SettingsLib/res/values-kn/strings.xml
index e418779..71c5e49 100644
--- a/packages/SettingsLib/res/values-kn/strings.xml
+++ b/packages/SettingsLib/res/values-kn/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"ಈ ಬದಲಾವಣೆ ಅನ್ವಯವಾಗಲು ನಿಮ್ಮ ಸಾಧನವನ್ನು ರೀಬೂಟ್ ಮಾಡಬೇಕು. ಇದೀಗ ರೀಬೂಟ್ ಮಾಡಿ ಅಥವಾ ರದ್ದುಗೊಳಿಸಿ."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"ಉದ್ಯೋಗ <xliff:g id="APP_NAME">%s</xliff:g>"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"ವೈಯರ್ ಹೊಂದಿರುವ ಹೆಡ್ಫೋನ್"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-ko/strings.xml b/packages/SettingsLib/res/values-ko/strings.xml
index 6b273a3..5d82eae 100644
--- a/packages/SettingsLib/res/values-ko/strings.xml
+++ b/packages/SettingsLib/res/values-ko/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"사용 중지됨"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"사용 설정됨"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"변경사항을 적용하려면 기기를 재부팅해야 합니다. 지금 재부팅하거나 취소하세요."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"직장용 <xliff:g id="APP_NAME">%s</xliff:g>"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"유선 헤드폰"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-ky/strings.xml b/packages/SettingsLib/res/values-ky/strings.xml
index d035362..6003e09 100644
--- a/packages/SettingsLib/res/values-ky/strings.xml
+++ b/packages/SettingsLib/res/values-ky/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Өчүк"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Күйүк"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Бул өзгөртүүнү колдонуу үчүн түзмөктү өчүрүп күйгүзүңүз. Азыр өчүрүп күйгүзүңүз же жокко чыгарыңыз."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"Жумуш <xliff:g id="APP_NAME">%s</xliff:g>"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Зымдуу гарнитура"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-lo/strings.xml b/packages/SettingsLib/res/values-lo/strings.xml
index e188f3d..7a2c338 100644
--- a/packages/SettingsLib/res/values-lo/strings.xml
+++ b/packages/SettingsLib/res/values-lo/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"ປິດການນຳໃຊ້ແລ້ວ"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"ເປີດການນຳໃຊ້ແລ້ວ"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"ທ່ານຕ້ອງປິດເປີດອຸປະກອນຄືນໃໝ່ເພື່ອນຳໃຊ້ການປ່ຽນແປງນີ້. ປິດເປີດໃໝ່ດຽວນີ້ ຫຼື ຍົກເລີກ."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"ບ່ອນເຮັດວຽກ <xliff:g id="APP_NAME">%s</xliff:g>"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"ຫູຟັງແບບມີສາຍ"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-lt/strings.xml b/packages/SettingsLib/res/values-lt/strings.xml
index 075032c..b73aa66 100644
--- a/packages/SettingsLib/res/values-lt/strings.xml
+++ b/packages/SettingsLib/res/values-lt/strings.xml
@@ -555,6 +555,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Išjungta"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Įgalinta"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Kad pakeitimas būtų pritaikytas, įrenginį reikia paleisti iš naujo. Dabar paleiskite iš naujo arba atšaukite."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"Darbo „<xliff:g id="APP_NAME">%s</xliff:g>“"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Laidinės ausinės"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-lv/strings.xml b/packages/SettingsLib/res/values-lv/strings.xml
index c37811f..8e5d24c 100644
--- a/packages/SettingsLib/res/values-lv/strings.xml
+++ b/packages/SettingsLib/res/values-lv/strings.xml
@@ -554,6 +554,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Atspējots"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Iespējots"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Lai šīs izmaiņas tiktu piemērotas, nepieciešama ierīces atkārtota palaišana. Atkārtoti palaidiet to tūlīt vai atceliet izmaiņas."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"Darbā: <xliff:g id="APP_NAME">%s</xliff:g>"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Vadu austiņas"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-mk/strings.xml b/packages/SettingsLib/res/values-mk/strings.xml
index 1f5908c..34299d8 100644
--- a/packages/SettingsLib/res/values-mk/strings.xml
+++ b/packages/SettingsLib/res/values-mk/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Оневозможено"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Овозможено"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"За да се примени променава, уредот мора да се рестартира. Рестартирајте сега или откажете."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"Работна <xliff:g id="APP_NAME">%s</xliff:g>"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Жичени слушалки"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-ml/strings.xml b/packages/SettingsLib/res/values-ml/strings.xml
index 6ee9777..ac643c3 100644
--- a/packages/SettingsLib/res/values-ml/strings.xml
+++ b/packages/SettingsLib/res/values-ml/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"പ്രവർത്തനരഹിതമാക്കി"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"പ്രവർത്തനക്ഷമമാക്കി"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"ഈ മാറ്റം ബാധകമാകുന്നതിന് നിങ്ങളുടെ ഉപകരണം റീബൂട്ട് ചെയ്യേണ്ടതുണ്ട്. ഇപ്പോൾ റീബൂട്ട് ചെയ്യുകയോ റദ്ദാക്കുകയോ ചെയ്യുക."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"ഔദ്യോഗികം <xliff:g id="APP_NAME">%s</xliff:g>"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"വയർ മുഖേന ബന്ധിപ്പിച്ച ഹെഡ്ഫോൺ"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-mn/strings.xml b/packages/SettingsLib/res/values-mn/strings.xml
index 29647df..0dd982b 100644
--- a/packages/SettingsLib/res/values-mn/strings.xml
+++ b/packages/SettingsLib/res/values-mn/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Идэвхгүй болгосон"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Идэвхжүүлсэн"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Энэ өөрчлөлтийг хэрэгжүүлэхийн тулд таны төхөөрөмжийг дахин асаах ёстой. Одоо дахин асаах эсвэл болино уу."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"Ажлын <xliff:g id="APP_NAME">%s</xliff:g>"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Утастай чихэвч"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-mr/strings.xml b/packages/SettingsLib/res/values-mr/strings.xml
index 99bf1e8..c50f365 100644
--- a/packages/SettingsLib/res/values-mr/strings.xml
+++ b/packages/SettingsLib/res/values-mr/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"बंद केले आहे"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"सुरू केले आहे"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"हा बदल लागू करण्यासाठी तुमचे डिव्हाइस रीबूट करणे आवश्यक आहे. आता रीबूट करा किंवा रद्द करा."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"कार्य <xliff:g id="APP_NAME">%s</xliff:g>"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"वायर असलेला हेडफोन"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-ms/strings.xml b/packages/SettingsLib/res/values-ms/strings.xml
index bdecf64..a0a434f 100644
--- a/packages/SettingsLib/res/values-ms/strings.xml
+++ b/packages/SettingsLib/res/values-ms/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Dilumpuhkan"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Didayakan"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Peranti anda mesti dibut semula supaya perubahan ini berlaku. But semula sekarang atau batalkan."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"Kerja <xliff:g id="APP_NAME">%s</xliff:g>"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Fon kepala berwayar"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-my/strings.xml b/packages/SettingsLib/res/values-my/strings.xml
index 1519380..fa49929 100644
--- a/packages/SettingsLib/res/values-my/strings.xml
+++ b/packages/SettingsLib/res/values-my/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"ပိတ်ထားသည်"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"ဖွင့်ထားသည်"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"ဤအပြောင်းအလဲ ထည့်သွင်းရန် သင့်စက်ကို ပြန်လည်စတင်ရမည်။ ယခု ပြန်လည်စတင်ပါ သို့မဟုတ် ပယ်ဖျက်ပါ။"</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"အလုပ် <xliff:g id="APP_NAME">%s</xliff:g>"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"ကြိုးတပ်နားကြပ်"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-nb/strings.xml b/packages/SettingsLib/res/values-nb/strings.xml
index a2f862e..aeaba31 100644
--- a/packages/SettingsLib/res/values-nb/strings.xml
+++ b/packages/SettingsLib/res/values-nb/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Slått av"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Slått på"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Enheten din må startes på nytt for at denne endringen skal tre i kraft. Start på nytt nå eller avbryt."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"Jobb-<xliff:g id="APP_NAME">%s</xliff:g>"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Hodetelefoner med kabel"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-ne/strings.xml b/packages/SettingsLib/res/values-ne/strings.xml
index 159050e..4a2c171 100644
--- a/packages/SettingsLib/res/values-ne/strings.xml
+++ b/packages/SettingsLib/res/values-ne/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"असक्षम पारिएको छ"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"सक्षम पारिएको छ"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"यो परिवर्तन लागू गर्न तपाईंको यन्त्र अनिवार्य रूपमा रिबुट गर्नु पर्छ। अहिले रिबुट गर्नुहोस् वा रद्द गर्नुहोस्।"</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"कार्यालयको प्रोफाइल <xliff:g id="APP_NAME">%s</xliff:g>"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"तारसहितको हेडफोन"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-nl/strings.xml b/packages/SettingsLib/res/values-nl/strings.xml
index 7e3005b..e33df4a 100644
--- a/packages/SettingsLib/res/values-nl/strings.xml
+++ b/packages/SettingsLib/res/values-nl/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Uitgeschakeld"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Ingeschakeld"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Je apparaat moet opnieuw worden opgestart om deze wijziging toe te passen. Start nu opnieuw op of annuleer de wijziging."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"<xliff:g id="APP_NAME">%s</xliff:g> voor werk"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Bedrade hoofdtelefoon"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-or/strings.xml b/packages/SettingsLib/res/values-or/strings.xml
index 19e250b..8e5bf25 100644
--- a/packages/SettingsLib/res/values-or/strings.xml
+++ b/packages/SettingsLib/res/values-or/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"ଅକ୍ଷମ କରାଯାଇଛି"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"ସକ୍ଷମ କରାଯାଇଛି"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"ଏହି ପରିବର୍ତ୍ତନ ଲାଗୁ କରିବା ପାଇଁ ଆପଣଙ୍କ ଡିଭାଇସକୁ ନିଶ୍ଚିତ ରୂପେ ରିବୁଟ୍ କରାଯିବା ଆବଶ୍ୟକ। ବର୍ତ୍ତମାନ ରିବୁଟ୍ କରନ୍ତୁ କିମ୍ବା ବାତିଲ୍ କରନ୍ତୁ।"</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"ୱାର୍କ <xliff:g id="APP_NAME">%s</xliff:g>"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"ତାରଯୁକ୍ତ ହେଡଫୋନ୍"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-pa/strings.xml b/packages/SettingsLib/res/values-pa/strings.xml
index 184f4cd..df94430 100644
--- a/packages/SettingsLib/res/values-pa/strings.xml
+++ b/packages/SettingsLib/res/values-pa/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"ਬੰਦ ਕੀਤਾ ਗਿਆ"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"ਚਾਲੂ ਕੀਤਾ ਗਿਆ"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"ਇਸ ਤਬਦੀਲੀ ਨੂੰ ਲਾਗੂ ਕਰਨ ਲਈ ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਨੂੰ ਰੀਬੂਟ ਕਰਨਾ ਲਾਜ਼ਮੀ ਹੈ। ਹੁਣੇ ਰੀਬੂਟ ਕਰੋ ਜਾਂ ਰੱਦ ਕਰੋ।"</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"ਕੰਮ <xliff:g id="APP_NAME">%s</xliff:g>"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"ਤਾਰ ਵਾਲੇ ਹੈੱਡਫ਼ੋਨ"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-pl/strings.xml b/packages/SettingsLib/res/values-pl/strings.xml
index eebea5f..fd5dfa5 100644
--- a/packages/SettingsLib/res/values-pl/strings.xml
+++ b/packages/SettingsLib/res/values-pl/strings.xml
@@ -555,6 +555,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Wyłączono"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Włączono"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Wprowadzenie zmiany wymaga ponownego uruchomienia urządzenia. Uruchom ponownie teraz lub anuluj."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"<xliff:g id="APP_NAME">%s</xliff:g> (do pracy)"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Słuchawki przewodowe"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-pt-rBR/strings.xml b/packages/SettingsLib/res/values-pt-rBR/strings.xml
index 142ef47..4214a27 100644
--- a/packages/SettingsLib/res/values-pt-rBR/strings.xml
+++ b/packages/SettingsLib/res/values-pt-rBR/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Desativado"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Ativado"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"É necessário reinicializar o dispositivo para que a mudança seja aplicada. Faça isso agora ou cancele."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"App <xliff:g id="APP_NAME">%s</xliff:g> de trabalho"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Fones de ouvido com fio"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-pt-rPT/strings.xml b/packages/SettingsLib/res/values-pt-rPT/strings.xml
index 0c6f488..4002267 100644
--- a/packages/SettingsLib/res/values-pt-rPT/strings.xml
+++ b/packages/SettingsLib/res/values-pt-rPT/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Desativada"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Ativada"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"É necessário reiniciar o dispositivo para aplicar esta alteração. Reinicie agora ou cancele."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"<xliff:g id="APP_NAME">%s</xliff:g> de trabalho"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Auscultadores com fios"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-pt/strings.xml b/packages/SettingsLib/res/values-pt/strings.xml
index 142ef47..4214a27 100644
--- a/packages/SettingsLib/res/values-pt/strings.xml
+++ b/packages/SettingsLib/res/values-pt/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Desativado"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Ativado"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"É necessário reinicializar o dispositivo para que a mudança seja aplicada. Faça isso agora ou cancele."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"App <xliff:g id="APP_NAME">%s</xliff:g> de trabalho"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Fones de ouvido com fio"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-ro/strings.xml b/packages/SettingsLib/res/values-ro/strings.xml
index 036cf83..f433879 100644
--- a/packages/SettingsLib/res/values-ro/strings.xml
+++ b/packages/SettingsLib/res/values-ro/strings.xml
@@ -554,6 +554,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Dezactivat"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Activat"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Pentru ca modificarea să se aplice, trebuie să reporniți dispozitivul. Reporniți-l acum sau anulați."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"<xliff:g id="APP_NAME">%s</xliff:g> de serviciu"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Căști cu fir"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-ru/strings.xml b/packages/SettingsLib/res/values-ru/strings.xml
index 6b39754..9c0a2f5 100644
--- a/packages/SettingsLib/res/values-ru/strings.xml
+++ b/packages/SettingsLib/res/values-ru/strings.xml
@@ -555,6 +555,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Отключено"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Включено"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Чтобы изменение вступило в силу, необходимо перезапустить устройство. Вы можете сделать это сейчас или позже."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"Рабочее приложение \"<xliff:g id="APP_NAME">%s</xliff:g>\""</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Проводные наушники"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-si/strings.xml b/packages/SettingsLib/res/values-si/strings.xml
index 9074c63..8d0e93e 100644
--- a/packages/SettingsLib/res/values-si/strings.xml
+++ b/packages/SettingsLib/res/values-si/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"අබල කළා"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"සබලයි"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"මෙම වෙනස යෙදීමට ඔබේ උපාංගය නැවත පණ ගැන්විය යුතුය. දැන් නැවත පණ ගන්වන්න හෝ අවලංගු කරන්න."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"කාර්යාල <xliff:g id="APP_NAME">%s</xliff:g>"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"රැහැන්ගත කළ හෙඩ්ෆෝන්"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-sk/strings.xml b/packages/SettingsLib/res/values-sk/strings.xml
index cd3109f..fc9a49c 100644
--- a/packages/SettingsLib/res/values-sk/strings.xml
+++ b/packages/SettingsLib/res/values-sk/strings.xml
@@ -555,6 +555,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Vypnuté"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Zapnuté"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Táto zmena sa uplatní až po reštartovaní zariadenia. Zariadenie reštartujte alebo zmenu zrušte."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"Pracovná aplikácia <xliff:g id="APP_NAME">%s</xliff:g>"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Slúchadlá s káblom"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-sl/strings.xml b/packages/SettingsLib/res/values-sl/strings.xml
index 0e492c7..233c8e4 100644
--- a/packages/SettingsLib/res/values-sl/strings.xml
+++ b/packages/SettingsLib/res/values-sl/strings.xml
@@ -555,6 +555,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Onemogočeno"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Omogočeno"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Napravo je treba znova zagnati, da bo ta sprememba uveljavljena. Znova zaženite zdaj ali prekličite."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"<xliff:g id="APP_NAME">%s</xliff:g> za delo"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Žične slušalke"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-sq/strings.xml b/packages/SettingsLib/res/values-sq/strings.xml
index 4a80bcd..6af1062 100644
--- a/packages/SettingsLib/res/values-sq/strings.xml
+++ b/packages/SettingsLib/res/values-sq/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Joaktiv"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Aktiv"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Pajisja jote duhet të riniset që ky ndryshim të zbatohet. Rinise tani ose anuloje."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"<xliff:g id="APP_NAME">%s</xliff:g> për punën"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Kufje me tela"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-sr/strings.xml b/packages/SettingsLib/res/values-sr/strings.xml
index 321645e..74c2aec 100644
--- a/packages/SettingsLib/res/values-sr/strings.xml
+++ b/packages/SettingsLib/res/values-sr/strings.xml
@@ -554,6 +554,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Онемогућено"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Омогућено"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Морате да рестартујете уређај да би се ова промена применила. Рестартујте га одмах или откажите."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"<xliff:g id="APP_NAME">%s</xliff:g> за посао"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Жичане слушалице"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-sv/strings.xml b/packages/SettingsLib/res/values-sv/strings.xml
index cd28c86b..fe1b0a8 100644
--- a/packages/SettingsLib/res/values-sv/strings.xml
+++ b/packages/SettingsLib/res/values-sv/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Inaktiverat"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Aktiverat"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Enheten måste startas om för att ändringen ska börja gälla. Starta om nu eller avbryt."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"<xliff:g id="APP_NAME">%s</xliff:g> för arbetet"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Hörlurar med sladd"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-sw/strings.xml b/packages/SettingsLib/res/values-sw/strings.xml
index 2bc038e..41ccdeb 100644
--- a/packages/SettingsLib/res/values-sw/strings.xml
+++ b/packages/SettingsLib/res/values-sw/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Imezimwa"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Imewashwa"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Ni lazima uwashe tena kifaa chako ili mabadiliko haya yatekelezwe. Washa tena sasa au ughairi."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"Ya kazini <xliff:g id="APP_NAME">%s</xliff:g>"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Vipokea sauti vyenye waya vinavyobanwa kichwani"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-ta/strings.xml b/packages/SettingsLib/res/values-ta/strings.xml
index a28fdce..241644f 100644
--- a/packages/SettingsLib/res/values-ta/strings.xml
+++ b/packages/SettingsLib/res/values-ta/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"முடக்கப்பட்டது"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"இயக்கப்பட்டது"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"இந்த மாற்றங்கள் செயல்படுத்தப்பட உங்கள் சாதனத்தை மறுபடி தொடங்க வேண்டும். இப்போதே மறுபடி தொடங்கவும் அல்லது ரத்துசெய்யவும்."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"பணியிடம் <xliff:g id="APP_NAME">%s</xliff:g>"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"வயருள்ள ஹெட்ஃபோன்"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-te/strings.xml b/packages/SettingsLib/res/values-te/strings.xml
index b7bb6e8..a9ec2ea9 100644
--- a/packages/SettingsLib/res/values-te/strings.xml
+++ b/packages/SettingsLib/res/values-te/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"డిజేబుల్ చేయబడింది"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"ఎనేబుల్ చేయబడింది"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"ఈ మార్పును వర్తింపజేయాలంటే మీరు మీ పరికరాన్ని తప్పనిసరిగా రీబూట్ చేయాలి. ఇప్పుడే రీబూట్ చేయండి లేదా రద్దు చేయండి."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"ఆఫీసు <xliff:g id="APP_NAME">%s</xliff:g>"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"వైర్ ఉన్న హెడ్ఫోన్"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-th/strings.xml b/packages/SettingsLib/res/values-th/strings.xml
index 2f9ac46..b8343c6 100644
--- a/packages/SettingsLib/res/values-th/strings.xml
+++ b/packages/SettingsLib/res/values-th/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"ปิดใช้"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"เปิดใช้"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"คุณต้องรีบูตอุปกรณ์เพื่อให้การเปลี่ยนแปลงนี้มีผล รีบูตเลยหรือยกเลิก"</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"<xliff:g id="APP_NAME">%s</xliff:g> ในโปรไฟล์งาน"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"หูฟังแบบมีสาย"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-tl/strings.xml b/packages/SettingsLib/res/values-tl/strings.xml
index 5064c1e..8aeb392 100644
--- a/packages/SettingsLib/res/values-tl/strings.xml
+++ b/packages/SettingsLib/res/values-tl/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Naka-disable"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Na-enable"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Dapat i-reboot ang iyong device para mailapat ang pagbabagong ito. Mag-reboot ngayon o kanselahin."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"<xliff:g id="APP_NAME">%s</xliff:g> sa Trabaho"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Wired na headphone"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-tr/strings.xml b/packages/SettingsLib/res/values-tr/strings.xml
index 454ca3b..b113aff 100644
--- a/packages/SettingsLib/res/values-tr/strings.xml
+++ b/packages/SettingsLib/res/values-tr/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Devre dışı"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Etkin"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Bu değişikliğin geçerli olması için cihazının yeniden başlatılması gerekir. Şimdi yeniden başlatın veya iptal edin."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"<xliff:g id="APP_NAME">%s</xliff:g> (İş)"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Kablolu kulaklık"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-uk/strings.xml b/packages/SettingsLib/res/values-uk/strings.xml
index 7e969f7..8332940 100644
--- a/packages/SettingsLib/res/values-uk/strings.xml
+++ b/packages/SettingsLib/res/values-uk/strings.xml
@@ -555,6 +555,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Вимкнено"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Увімкнено"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Щоб застосувати ці зміни, перезапустіть пристрій. Перезапустіть пристрій або скасуйте зміни."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"Робочий додаток <xliff:g id="APP_NAME">%s</xliff:g>"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Дротові навушники"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-ur/strings.xml b/packages/SettingsLib/res/values-ur/strings.xml
index e3b28c7..05cfeb6 100644
--- a/packages/SettingsLib/res/values-ur/strings.xml
+++ b/packages/SettingsLib/res/values-ur/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"غیر فعال"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"فعال"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"اس تبدیلی کو لاگو کرنے کے ليے آپ کے آلہ کو ریبوٹ کرنا ضروری ہے۔ ابھی ریبوٹ کریں یا منسوخ کریں۔"</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"دفتر <xliff:g id="APP_NAME">%s</xliff:g>"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"وائرڈ ہیڈ فون"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-uz/strings.xml b/packages/SettingsLib/res/values-uz/strings.xml
index 04707c5..29a9637 100644
--- a/packages/SettingsLib/res/values-uz/strings.xml
+++ b/packages/SettingsLib/res/values-uz/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Yoqilmagan"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Yoniq"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Oʻzgarishlar qurilma oʻchib yonganda bajariladi. Hoziroq oʻchib yoqish yoki bekor qilish."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"Ish <xliff:g id="APP_NAME">%s</xliff:g>"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Simli quloqlik"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-vi/strings.xml b/packages/SettingsLib/res/values-vi/strings.xml
index e7fbf46..380cd8e 100644
--- a/packages/SettingsLib/res/values-vi/strings.xml
+++ b/packages/SettingsLib/res/values-vi/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Đã tắt"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Đã bật"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Bạn phải khởi động lại thiết bị để áp dụng sự thay đổi này. Hãy khởi động lại ngay hoặc hủy."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"<xliff:g id="APP_NAME">%s</xliff:g> dành cho công việc"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Tai nghe có dây"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-zh-rCN/strings.xml b/packages/SettingsLib/res/values-zh-rCN/strings.xml
index bda7d8b..75c1333 100644
--- a/packages/SettingsLib/res/values-zh-rCN/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rCN/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"已停用"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"已启用"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"设备必须重新启动才能应用此更改。您可以立即重新启动或取消。"</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"工作资料中的<xliff:g id="APP_NAME">%s</xliff:g>"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"有线耳机"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-zh-rHK/strings.xml b/packages/SettingsLib/res/values-zh-rHK/strings.xml
index 841de63..26ddfb1 100644
--- a/packages/SettingsLib/res/values-zh-rHK/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rHK/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"已停用"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"已啟用"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"您的裝置必須重新開機,才能套用此變更。請立即重新開機或取消。"</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"工作設定檔入面嘅「<xliff:g id="APP_NAME">%s</xliff:g>」"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"有線耳機"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-zh-rTW/strings.xml b/packages/SettingsLib/res/values-zh-rTW/strings.xml
index a6c1647..72ea043 100644
--- a/packages/SettingsLib/res/values-zh-rTW/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rTW/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"已停用"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"已啟用"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"裝置必須重新啟動才能套用這項變更。請立即重新啟動或取消變更。"</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"工作資料夾中的<xliff:g id="APP_NAME">%s</xliff:g>"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"有線耳機"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-zu/strings.xml b/packages/SettingsLib/res/values-zu/strings.xml
index c437580..6b8739f 100644
--- a/packages/SettingsLib/res/values-zu/strings.xml
+++ b/packages/SettingsLib/res/values-zu/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Ikhutshaziwe"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Inikwe amandla"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Kufanele idivayisi yakho iqaliswe ukuze lolu shintsho lusebenze. Qalisa manje noma khansela."</string>
- <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"Umsebenzi we-<xliff:g id="APP_NAME">%s</xliff:g>"</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Ama-headphone anentambo"</string>
</resources>
diff --git a/packages/SettingsLib/src/com/android/settingslib/media/BluetoothMediaDevice.java b/packages/SettingsLib/src/com/android/settingslib/media/BluetoothMediaDevice.java
index a2f77e2..40d8048 100644
--- a/packages/SettingsLib/src/com/android/settingslib/media/BluetoothMediaDevice.java
+++ b/packages/SettingsLib/src/com/android/settingslib/media/BluetoothMediaDevice.java
@@ -59,12 +59,18 @@
public Drawable getIcon() {
final Pair<Drawable, String> pair = BluetoothUtils
.getBtRainbowDrawableWithDescription(mContext, mCachedDevice);
- return pair.first;
+ return isFastPairDevice()
+ ? pair.first
+ : BluetoothUtils.buildBtRainbowDrawable(mContext,
+ mContext.getDrawable(R.drawable.ic_headphone),
+ mCachedDevice.getAddress().hashCode());
}
@Override
public Drawable getIconWithoutBackground() {
- return BluetoothUtils.getBtDrawableWithDescription(mContext, mCachedDevice).first;
+ return isFastPairDevice()
+ ? BluetoothUtils.getBtDrawableWithDescription(mContext, mCachedDevice).first
+ : mContext.getDrawable(R.drawable.ic_headphone);
}
@Override
diff --git a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaDevice.java b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaDevice.java
index 22dc906..8d6bc5c 100644
--- a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaDevice.java
+++ b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaDevice.java
@@ -73,9 +73,11 @@
resId = R.drawable.ic_media_group_device;
break;
case TYPE_REMOTE_TV:
+ resId = R.drawable.ic_media_display_device;
+ break;
case TYPE_REMOTE_SPEAKER:
default:
- resId = R.drawable.ic_media_device;
+ resId = R.drawable.ic_media_speaker_device;
break;
}
return resId;
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/InfoMediaDeviceTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/InfoMediaDeviceTest.java
index 685c834..49b236a 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/InfoMediaDeviceTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/InfoMediaDeviceTest.java
@@ -95,11 +95,13 @@
public void getDrawableResId_returnCorrectResId() {
when(mRouteInfo.getType()).thenReturn(TYPE_REMOTE_TV);
- assertThat(mInfoMediaDevice.getDrawableResId()).isEqualTo(R.drawable.ic_media_device);
+ assertThat(mInfoMediaDevice.getDrawableResId()).isEqualTo(
+ R.drawable.ic_media_display_device);
when(mRouteInfo.getType()).thenReturn(TYPE_REMOTE_SPEAKER);
- assertThat(mInfoMediaDevice.getDrawableResId()).isEqualTo(R.drawable.ic_media_device);
+ assertThat(mInfoMediaDevice.getDrawableResId()).isEqualTo(
+ R.drawable.ic_media_speaker_device);
when(mRouteInfo.getType()).thenReturn(TYPE_GROUP);
diff --git a/packages/Shell/AndroidManifest.xml b/packages/Shell/AndroidManifest.xml
index a0130f8..ae8e8e8 100644
--- a/packages/Shell/AndroidManifest.xml
+++ b/packages/Shell/AndroidManifest.xml
@@ -303,6 +303,9 @@
<!-- Permissions required for CTS test - TVInputManagerTest -->
<uses-permission android:name="android.permission.TV_INPUT_HARDWARE" />
+ <!-- Permission needed for CTS test - PrivilegedLocationPermissionTest -->
+ <uses-permission android:name="android.permission.LOCATION_HARDWARE" />
+
<application android:label="@string/app_label"
android:theme="@android:style/Theme.DeviceDefault.DayNight"
android:defaultToDeviceProtectedStorage="true"
diff --git a/packages/SystemUI/res-product/values/strings.xml b/packages/SystemUI/res-product/values/strings.xml
index 54e5d41..f1c539e 100644
--- a/packages/SystemUI/res-product/values/strings.xml
+++ b/packages/SystemUI/res-product/values/strings.xml
@@ -122,4 +122,12 @@
Try again in <xliff:g id="number">%3$d</xliff:g> seconds.
</string>
+
+ <!-- Text shown when viewing global actions while phone is locked and additional controls are hidden [CHAR LIMIT=NONE] -->
+ <string name="global_action_lock_message" product="default">Unlock your phone for more options</string>
+ <!-- Text shown when viewing global actions while phone is locked and additional controls are hidden [CHAR LIMIT=NONE] -->
+ <string name="global_action_lock_message" product="tablet">Unlock your tablet for more options</string>
+ <!-- Text shown when viewing global actions while phone is locked and additional controls are hidden [CHAR LIMIT=NONE] -->
+ <string name="global_action_lock_message" product="device">Unlock your device for more options</string>
+
</resources>
diff --git a/packages/SystemUI/res/layout/controls_more_item.xml b/packages/SystemUI/res/layout/controls_more_item.xml
index f24850e..df03787 100644
--- a/packages/SystemUI/res/layout/controls_more_item.xml
+++ b/packages/SystemUI/res/layout/controls_more_item.xml
@@ -18,5 +18,7 @@
style="@style/Control.MenuItem"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_gravity="start" />
+ android:layout_gravity="start"
+ android:paddingStart="@dimen/control_menu_horizontal_padding"
+ android:paddingEnd="@dimen/control_menu_horizontal_padding"/>
diff --git a/packages/SystemUI/res/values-en-rXC/strings.xml b/packages/SystemUI/res/values-en-rXC/strings.xml
index 9b8d5d7..ee0e232 100644
--- a/packages/SystemUI/res/values-en-rXC/strings.xml
+++ b/packages/SystemUI/res/values-en-rXC/strings.xml
@@ -77,9 +77,6 @@
<string name="compat_mode_on" msgid="4963711187149440884">"Zoom to fill screen"</string>
<string name="compat_mode_off" msgid="7682459748279487945">"Stretch to fill screen"</string>
<string name="global_action_screenshot" msgid="2760267567509131654">"Screenshot"</string>
- <string name="global_action_lock_message" product="default" msgid="4466026255205186456">"Unlock your phone for more options"</string>
- <string name="global_action_lock_message" product="tablet" msgid="7621167597240332986">"Unlock your tablet for more options"</string>
- <string name="global_action_lock_message" product="device" msgid="538790401275363781">"Unlock your device for more options"</string>
<string name="remote_input_image_insertion_text" msgid="4850791636452521123">"sent an image"</string>
<string name="screenshot_saving_ticker" msgid="6519186952674544916">"Saving screenshot…"</string>
<string name="screenshot_saving_title" msgid="2298349784913287333">"Saving screenshot…"</string>
diff --git a/packages/SystemUI/res/values-uz/strings.xml b/packages/SystemUI/res/values-uz/strings.xml
index a32fdb2..ed3001e 100644
--- a/packages/SystemUI/res/values-uz/strings.xml
+++ b/packages/SystemUI/res/values-uz/strings.xml
@@ -77,9 +77,6 @@
<string name="compat_mode_on" msgid="4963711187149440884">"Ekranga moslashtirish"</string>
<string name="compat_mode_off" msgid="7682459748279487945">"Ekran hajmida cho‘zish"</string>
<string name="global_action_screenshot" msgid="2760267567509131654">"Skrinshot"</string>
- <string name="global_action_lock_message" product="default" msgid="4466026255205186456">"Boshqa parametrlar uchun telefoningiz qulfini oching"</string>
- <string name="global_action_lock_message" product="tablet" msgid="7621167597240332986">"Boshqa parametrlar uchun planshetingiz qulfini oching"</string>
- <string name="global_action_lock_message" product="device" msgid="538790401275363781">"Boshqa parametrlar uchun qurilmangiz qulfini oching"</string>
<string name="remote_input_image_insertion_text" msgid="4850791636452521123">"rasm yuborildi"</string>
<string name="screenshot_saving_ticker" msgid="6519186952674544916">"Skrinshot saqlanmoqda…"</string>
<string name="screenshot_saving_title" msgid="2298349784913287333">"Skrinshot saqlanmoqda…"</string>
diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml
index ddad1cd..e567b51 100644
--- a/packages/SystemUI/res/values/strings.xml
+++ b/packages/SystemUI/res/values/strings.xml
@@ -212,13 +212,6 @@
<!-- Power menu item for taking a screenshot [CHAR LIMIT=20]-->
<string name="global_action_screenshot">Screenshot</string>
- <!-- Text shown when viewing global actions while phone is locked and additional controls are hidden [CHAR LIMIT=NONE] -->
- <string name="global_action_lock_message" product="default">Unlock your phone for more options</string>
- <!-- Text shown when viewing global actions while phone is locked and additional controls are hidden [CHAR LIMIT=NONE] -->
- <string name="global_action_lock_message" product="tablet">Unlock your tablet for more options</string>
- <!-- Text shown when viewing global actions while phone is locked and additional controls are hidden [CHAR LIMIT=NONE] -->
- <string name="global_action_lock_message" product="device">Unlock your device for more options</string>
-
<!-- text to show in place of RemoteInput images when they cannot be shown.
[CHAR LIMIT=50] -->
<string name="remote_input_image_insertion_text">sent an image</string>
diff --git a/packages/SystemUI/res/values/styles.xml b/packages/SystemUI/res/values/styles.xml
index 8102043..07ba5eb 100644
--- a/packages/SystemUI/res/values/styles.xml
+++ b/packages/SystemUI/res/values/styles.xml
@@ -396,6 +396,7 @@
<style name="Theme.SystemUI.Dialog.Alert" parent="@*android:style/Theme.DeviceDefault.Light.Dialog.Alert" />
<style name="Theme.SystemUI.Dialog.GlobalActions" parent="@android:style/Theme.DeviceDefault.Light.NoActionBar.Fullscreen">
+ <item name="android:colorError">@*android:color/error_color_material_dark</item>
<item name="android:windowIsFloating">true</item>
</style>
diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleDataRepository.kt b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleDataRepository.kt
index 1c5e98b..c2b9195 100644
--- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleDataRepository.kt
+++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleDataRepository.kt
@@ -162,10 +162,10 @@
}
uiScope.launch { cb(bubbles) }
}
-
- private data class ShortcutKey(val userId: Int, val pkg: String)
}
+data class ShortcutKey(val userId: Int, val pkg: String)
+
private const val TAG = "BubbleDataRepository"
private const val DEBUG = false
private const val SHORTCUT_QUERY_FLAG =
diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleOverflowActivity.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleOverflowActivity.java
index 2109a7b..bea4ba7 100644
--- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleOverflowActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleOverflowActivity.java
@@ -284,7 +284,7 @@
Bubble.FlyoutMessage message = b.getFlyoutMessage();
if (message != null && message.senderName != null) {
- vh.textView.setText(message.senderName);
+ vh.textView.setText(message.senderName.toString());
} else {
vh.textView.setText(b.getAppName());
}
diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/storage/BubbleVolatileRepository.kt b/packages/SystemUI/src/com/android/systemui/bubbles/storage/BubbleVolatileRepository.kt
index d1eee2f6..bdeb714 100644
--- a/packages/SystemUI/src/com/android/systemui/bubbles/storage/BubbleVolatileRepository.kt
+++ b/packages/SystemUI/src/com/android/systemui/bubbles/storage/BubbleVolatileRepository.kt
@@ -15,6 +15,10 @@
*/
package com.android.systemui.bubbles.storage
+import android.content.pm.LauncherApps
+import android.os.UserHandle
+import com.android.internal.annotations.VisibleForTesting
+import com.android.systemui.bubbles.ShortcutKey
import javax.inject.Inject
import javax.inject.Singleton
@@ -25,11 +29,19 @@
* manipulation.
*/
@Singleton
-class BubbleVolatileRepository @Inject constructor() {
+class BubbleVolatileRepository @Inject constructor(
+ private val launcherApps: LauncherApps
+) {
/**
* An ordered set of bubbles based on their natural ordering.
*/
- private val entities = mutableSetOf<BubbleEntity>()
+ private var entities = mutableSetOf<BubbleEntity>()
+
+ /**
+ * The capacity of the cache.
+ */
+ @VisibleForTesting
+ var capacity = CAPACITY
/**
* Returns a snapshot of all the bubbles.
@@ -45,15 +57,34 @@
@Synchronized
fun addBubbles(bubbles: List<BubbleEntity>) {
if (bubbles.isEmpty()) return
- bubbles.forEach { entities.remove(it) }
- if (entities.size + bubbles.size >= CAPACITY) {
- entities.drop(entities.size + bubbles.size - CAPACITY)
+ // Verify the size of given bubbles is within capacity, otherwise trim down to capacity
+ val bubblesInRange = bubbles.takeLast(capacity)
+ // To ensure natural ordering of the bubbles, removes bubbles which already exist
+ val uniqueBubbles = bubblesInRange.filterNot { entities.remove(it) }
+ val overflowCount = entities.size + bubblesInRange.size - capacity
+ if (overflowCount > 0) {
+ // Uncache ShortcutInfo of bubbles that will be removed due to capacity
+ uncache(entities.take(overflowCount))
+ entities = entities.drop(overflowCount).toMutableSet()
}
- entities.addAll(bubbles)
+ entities.addAll(bubblesInRange)
+ cache(uniqueBubbles)
}
@Synchronized
- fun removeBubbles(bubbles: List<BubbleEntity>) {
- bubbles.forEach { entities.remove(it) }
+ fun removeBubbles(bubbles: List<BubbleEntity>) = uncache(bubbles.filter { entities.remove(it) })
+
+ private fun cache(bubbles: List<BubbleEntity>) {
+ bubbles.groupBy { ShortcutKey(it.userId, it.packageName) }.forEach { (key, bubbles) ->
+ launcherApps.cacheShortcuts(key.pkg, bubbles.map { it.shortcutId },
+ UserHandle.of(key.userId), LauncherApps.FLAG_CACHE_BUBBLE_SHORTCUTS)
+ }
+ }
+
+ private fun uncache(bubbles: List<BubbleEntity>) {
+ bubbles.groupBy { ShortcutKey(it.userId, it.packageName) }.forEach { (key, bubbles) ->
+ launcherApps.uncacheShortcuts(key.pkg, bubbles.map { it.shortcutId },
+ UserHandle.of(key.userId), LauncherApps.FLAG_CACHE_BUBBLE_SHORTCUTS)
+ }
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java
index d66b9ac..0f3a94b 100644
--- a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java
+++ b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java
@@ -306,7 +306,7 @@
RingerModeTracker ringerModeTracker, SysUiState sysUiState, @Main Handler handler,
ControlsComponent controlsComponent,
CurrentUserContextTracker currentUserContextTracker) {
- mContext = new ContextThemeWrapper(context, com.android.systemui.R.style.qs_theme);
+ mContext = context;
mWindowManagerFuncs = windowManagerFuncs;
mAudioManager = audioManager;
mDreamManager = iDreamManager;
@@ -564,8 +564,8 @@
mItems.clear();
mOverflowItems.clear();
- String[] defaultActions = getDefaultActions();
+ String[] defaultActions = getDefaultActions();
// make sure emergency affordance action is first, if needed
if (mEmergencyAffordanceManager.needsEmergencyAffordance()) {
addActionItem(new EmergencyAffordanceAction());
@@ -1341,18 +1341,11 @@
View view = convertView != null ? convertView
: LayoutInflater.from(mContext).inflate(viewLayoutResource, parent, false);
TextView textView = (TextView) view;
- textView.setOnClickListener(v -> onClickItem(position));
if (action.getMessageResId() != 0) {
textView.setText(action.getMessageResId());
} else {
textView.setText(action.getMessage());
}
-
- if (action instanceof LongPressAction) {
- textView.setOnLongClickListener(v -> onLongClickItem(position));
- } else {
- textView.setOnLongClickListener(null);
- }
return textView;
}
@@ -2064,11 +2057,15 @@
}
private ListPopupWindow createPowerOverflowPopup() {
- ListPopupWindow popup = new GlobalActionsPopupMenu(
+ GlobalActionsPopupMenu popup = new GlobalActionsPopupMenu(
new ContextThemeWrapper(
- mContext,
- com.android.systemui.R.style.Control_ListPopupWindow
+ mContext,
+ com.android.systemui.R.style.Control_ListPopupWindow
), false /* isDropDownMode */);
+ popup.setOnItemClickListener(
+ (parent, view, position, id) -> mOverflowAdapter.onClickItem(position));
+ popup.setOnItemLongClickListener(
+ (parent, view, position, id) -> mOverflowAdapter.onLongClickItem(position));
View overflowButton =
findViewById(com.android.systemui.R.id.global_actions_overflow_button);
popup.setAnchorView(overflowButton);
diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsPopupMenu.java b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsPopupMenu.java
index a5ced7b..6b71f1e 100644
--- a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsPopupMenu.java
+++ b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsPopupMenu.java
@@ -22,6 +22,7 @@
import android.view.View;
import android.view.View.MeasureSpec;
import android.view.WindowManager;
+import android.widget.AdapterView;
import android.widget.ListAdapter;
import android.widget.ListPopupWindow;
import android.widget.ListView;
@@ -37,10 +38,10 @@
public class GlobalActionsPopupMenu extends ListPopupWindow {
private Context mContext;
private boolean mIsDropDownMode;
- private int mMenuHorizontalPadding = 0;
private int mMenuVerticalPadding = 0;
private int mGlobalActionsSidePadding = 0;
private ListAdapter mAdapter;
+ private AdapterView.OnItemLongClickListener mOnItemLongClickListener;
public GlobalActionsPopupMenu(@NonNull Context context, boolean isDropDownMode) {
super(context);
@@ -57,8 +58,6 @@
mGlobalActionsSidePadding = res.getDimensionPixelSize(R.dimen.global_actions_side_margin);
if (!isDropDownMode) {
mMenuVerticalPadding = res.getDimensionPixelSize(R.dimen.control_menu_vertical_padding);
- mMenuHorizontalPadding =
- res.getDimensionPixelSize(R.dimen.control_menu_horizontal_padding);
}
}
@@ -76,6 +75,9 @@
public void show() {
// need to call show() first in order to construct the listView
super.show();
+ if (mOnItemLongClickListener != null) {
+ getListView().setOnItemLongClickListener(mOnItemLongClickListener);
+ }
ListView listView = getListView();
Resources res = mContext.getResources();
@@ -92,7 +94,7 @@
// width should be between [.5, .9] of screen
int parentWidth = res.getSystem().getDisplayMetrics().widthPixels;
int widthSpec = MeasureSpec.makeMeasureSpec(
- (int) (parentWidth * 0.9) - 2 * mMenuHorizontalPadding, MeasureSpec.AT_MOST);
+ (int) (parentWidth * 0.9), MeasureSpec.AT_MOST);
int maxWidth = 0;
for (int i = 0; i < mAdapter.getCount(); i++) {
View child = mAdapter.getView(i, null, listView);
@@ -100,10 +102,8 @@
int w = child.getMeasuredWidth();
maxWidth = Math.max(w, maxWidth);
}
- int width = Math.max(maxWidth, (int) (parentWidth * 0.5) - 2 * mMenuHorizontalPadding)
- + 2 * mMenuHorizontalPadding;
- listView.setPadding(mMenuHorizontalPadding, mMenuVerticalPadding,
- mMenuHorizontalPadding, mMenuVerticalPadding);
+ int width = Math.max(maxWidth, (int) (parentWidth * 0.5));
+ listView.setPadding(0, mMenuVerticalPadding, 0, mMenuVerticalPadding);
setWidth(width);
setHorizontalOffset(getAnchorView().getWidth() - mGlobalActionsSidePadding - width);
@@ -111,4 +111,8 @@
super.show();
}
+
+ public void setOnItemLongClickListener(AdapterView.OnItemLongClickListener listener) {
+ mOnItemLongClickListener = listener;
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java b/packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java
index c2f8cb9..3a84767 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java
@@ -204,6 +204,7 @@
private WindowContainerToken mToken;
private SurfaceControl mLeash;
private boolean mInPip;
+ private boolean mExitingPip;
private @PipAnimationController.AnimationType int mOneShotAnimationType = ANIM_TYPE_BOUNDS;
private PipSurfaceTransactionHelper.SurfaceControlTransactionFactory
mSurfaceControlTransactionFactory;
@@ -270,9 +271,9 @@
* @param animationDurationMs duration in millisecond for the exiting PiP transition
*/
public void exitPip(int animationDurationMs) {
- if (!mInPip || mToken == null) {
+ if (!mInPip || mExitingPip || mToken == null) {
Log.wtf(TAG, "Not allowed to exitPip in current state"
- + " mInPip=" + mInPip + " mToken=" + mToken);
+ + " mInPip=" + mInPip + " mExitingPip=" + mExitingPip + " mToken=" + mToken);
return;
}
@@ -312,15 +313,16 @@
}
});
}
+ mExitingPip = true;
}
/**
* Removes PiP immediately.
*/
public void removePip() {
- if (!mInPip || mToken == null) {
+ if (!mInPip || mExitingPip || mToken == null) {
Log.wtf(TAG, "Not allowed to removePip in current state"
- + " mInPip=" + mInPip + " mToken=" + mToken);
+ + " mInPip=" + mInPip + " mExitingPip=" + mExitingPip + " mToken=" + mToken);
return;
}
getUpdateHandler().post(() -> {
@@ -332,6 +334,7 @@
}
});
mInitialState.remove(mToken.asBinder());
+ mExitingPip = true;
}
@Override
@@ -340,6 +343,7 @@
mTaskInfo = info;
mToken = mTaskInfo.token;
mInPip = true;
+ mExitingPip = false;
mLeash = leash;
mInitialState.put(mToken.asBinder(), new Configuration(mTaskInfo.configuration));
mPictureInPictureParams = mTaskInfo.pictureInPictureParams;
@@ -420,6 +424,7 @@
mShouldDeferEnteringPip = false;
mPictureInPictureParams = null;
mInPip = false;
+ mExitingPip = false;
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/Divider.java b/packages/SystemUI/src/com/android/systemui/stackdivider/Divider.java
index 5bc295b..95aceed 100644
--- a/packages/SystemUI/src/com/android/systemui/stackdivider/Divider.java
+++ b/packages/SystemUI/src/com/android/systemui/stackdivider/Divider.java
@@ -238,10 +238,7 @@
mSplitLayout.mSecondary = new Rect(mRotateSplitLayout.mSecondary);
mRotateSplitLayout = null;
}
-
- if (isSplitActive()) {
- update(newConfig);
- }
+ update(newConfig);
}
Handler getHandler() {
@@ -316,6 +313,11 @@
mHandler.post(this::removeDivider);
}
+ void onTasksReady() {
+ mHandler.post(() -> update(mDisplayController.getDisplayContext(
+ mContext.getDisplayId()).getResources().getConfiguration()));
+ }
+
private void updateVisibility(final boolean visible) {
if (DEBUG) Slog.d(TAG, "Updating visibility " + mVisible + "->" + visible);
if (mVisible != visible) {
diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/SplitScreenTaskOrganizer.java b/packages/SystemUI/src/com/android/systemui/stackdivider/SplitScreenTaskOrganizer.java
index 5ff1f3a..c496d22 100644
--- a/packages/SystemUI/src/com/android/systemui/stackdivider/SplitScreenTaskOrganizer.java
+++ b/packages/SystemUI/src/com/android/systemui/stackdivider/SplitScreenTaskOrganizer.java
@@ -113,6 +113,8 @@
t.setColor(mSecondaryDim, new float[]{0f, 0f, 0f});
t.apply();
releaseTransaction(t);
+
+ mDivider.onTasksReady();
}
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/InstantAppNotifier.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/InstantAppNotifier.java
index 040dbe3..312b2c5 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/InstantAppNotifier.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/InstantAppNotifier.java
@@ -275,7 +275,7 @@
0,
new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
.setData(Uri.fromParts("package", pkg, null)),
- 0,
+ PendingIntent.FLAG_IMMUTABLE,
null,
user);
Notification.Action action =
@@ -309,7 +309,7 @@
mContext,
0 /* requestCode */,
browserIntent,
- 0 /* flags */,
+ PendingIntent.FLAG_IMMUTABLE /* flags */,
null,
user);
ComponentName aiaComponent = null;
@@ -331,8 +331,8 @@
.putExtra(Intent.EXTRA_LONG_VERSION_CODE, appInfo.longVersionCode)
.putExtra(Intent.EXTRA_INSTANT_APP_FAILURE, pendingIntent);
- PendingIntent webPendingIntent =
- PendingIntent.getActivityAsUser(mContext, 0, goToWebIntent, 0, null, user);
+ PendingIntent webPendingIntent = PendingIntent.getActivityAsUser(mContext, 0,
+ goToWebIntent, PendingIntent.FLAG_IMMUTABLE, null, user);
Notification.Action webAction =
new Notification.Action.Builder(
null, mContext.getString(R.string.go_to_web), webPendingIntent)
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/AppOpsInfo.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/AppOpsInfo.java
index 10fc990..9dcc187 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/AppOpsInfo.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/AppOpsInfo.java
@@ -189,6 +189,11 @@
}
@Override
+ public boolean needsFalsingProtection() {
+ return false;
+ }
+
+ @Override
public View getContentView() {
return this;
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationConversationInfo.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationConversationInfo.java
index 9217756..9befa31 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationConversationInfo.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationConversationInfo.java
@@ -404,6 +404,11 @@
}
@Override
+ public boolean needsFalsingProtection() {
+ return true;
+ }
+
+ @Override
public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
super.onInitializeAccessibilityEvent(event);
if (mGutsContainer != null &&
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationGuts.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationGuts.java
index 18d436f..c762b73 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationGuts.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationGuts.java
@@ -104,6 +104,12 @@
* Called when the guts view has finished its close animation.
*/
default void onFinishedClosing() {}
+
+ /**
+ * Returns whether falsing protection is needed before showing the contents of this
+ * view on the lockscreen
+ */
+ boolean needsFalsingProtection();
}
public interface OnGutsClosedListener {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationGutsManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationGutsManager.java
index 1caf8f8..a64dcdf 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationGutsManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationGutsManager.java
@@ -523,23 +523,27 @@
int x,
int y,
NotificationMenuRowPlugin.MenuItem menuItem) {
- if (menuItem.getGutsView() instanceof NotificationInfo) {
- if (mStatusBarStateController instanceof StatusBarStateControllerImpl) {
- ((StatusBarStateControllerImpl) mStatusBarStateController)
- .setLeaveOpenOnKeyguardHide(true);
+ if (menuItem.getGutsView() instanceof NotificationGuts.GutsContent) {
+ NotificationGuts.GutsContent gutsView =
+ (NotificationGuts.GutsContent) menuItem.getGutsView();
+ if (gutsView.needsFalsingProtection()) {
+ if (mStatusBarStateController instanceof StatusBarStateControllerImpl) {
+ ((StatusBarStateControllerImpl) mStatusBarStateController)
+ .setLeaveOpenOnKeyguardHide(true);
+ }
+
+ Runnable r = () -> mMainHandler.post(
+ () -> openGutsInternal(view, x, y, menuItem));
+
+ mStatusBarLazy.get().executeRunnableDismissingKeyguard(
+ r,
+ null /* cancelAction */,
+ false /* dismissShade */,
+ true /* afterKeyguardGone */,
+ true /* deferred */);
+
+ return true;
}
-
- Runnable r = () -> mMainHandler.post(
- () -> openGutsInternal(view, x, y, menuItem));
-
- mStatusBarLazy.get().executeRunnableDismissingKeyguard(
- r,
- null /* cancelAction */,
- false /* dismissShade */,
- true /* afterKeyguardGone */,
- true /* deferred */);
-
- return true;
}
return openGutsInternal(view, x, y, menuItem);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationInfo.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationInfo.java
index 91c31cf..3345999 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationInfo.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationInfo.java
@@ -490,6 +490,11 @@
}
@Override
+ public boolean needsFalsingProtection() {
+ return true;
+ }
+
+ @Override
public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
super.onInitializeAccessibilityEvent(event);
if (mGutsContainer != null &&
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationSnooze.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationSnooze.java
index e56771c..cde3dfd 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationSnooze.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationSnooze.java
@@ -442,6 +442,11 @@
return true;
}
+ @Override
+ public boolean needsFalsingProtection() {
+ return false;
+ }
+
public class NotificationSnoozeOption implements SnoozeOption {
private SnoozeCriterion mCriterion;
private int mMinutesToSnoozeFor;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/PartialConversationInfo.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/PartialConversationInfo.java
index 1dc828b..ea059cb 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/PartialConversationInfo.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/PartialConversationInfo.java
@@ -301,6 +301,11 @@
}
@Override
+ public boolean needsFalsingProtection() {
+ return true;
+ }
+
+ @Override
public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
super.onInitializeAccessibilityEvent(event);
if (mGutsContainer != null &&
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationSwipeHelper.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationSwipeHelper.java
index 6c0655e..d7d09e0 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationSwipeHelper.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationSwipeHelper.java
@@ -426,8 +426,8 @@
final int height = (view instanceof ExpandableView)
? ((ExpandableView) view).getActualHeight()
: view.getHeight();
- final int rx = (int) ev.getRawX();
- final int ry = (int) ev.getRawY();
+ final int rx = (int) ev.getX();
+ final int ry = (int) ev.getY();
int[] temp = new int[2];
view.getLocationOnScreen(temp);
final int x = temp[0];
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java
index 999e636..a850007 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java
@@ -2325,6 +2325,18 @@
}
@Override
+ protected boolean shouldExpandToTopOfClearAll(float targetHeight) {
+ boolean perform = super.shouldExpandToTopOfClearAll(targetHeight);
+ if (!perform) {
+ return false;
+ }
+ // Let's make sure we're not appearing but the animation will end below the appear.
+ // Otherwise quick settings would jump at the end of the animation.
+ float fraction = mNotificationStackScroller.calculateAppearFraction(targetHeight);
+ return fraction >= 1.0f;
+ }
+
+ @Override
protected boolean shouldUseDismissingAnimation() {
return mBarState != StatusBarState.SHADE && (mKeyguardStateController.canDismissLockScreen()
|| !isTracking());
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelViewController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelViewController.java
index 81dc9e1..57d36fc 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelViewController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelViewController.java
@@ -532,11 +532,8 @@
// Hack to make the expand transition look nice when clear all button is visible - we make
// the animation only to the last notification, and then jump to the maximum panel height so
// clear all just fades in and the decelerating motion is towards the last notification.
- final boolean
- clearAllExpandHack =
- expand && fullyExpandedClearAllVisible()
- && mExpandedHeight < getMaxPanelHeight() - getClearAllHeight()
- && !isClearAllVisible();
+ final boolean clearAllExpandHack = expand &&
+ shouldExpandToTopOfClearAll(getMaxPanelHeight() - getClearAllHeight());
if (clearAllExpandHack) {
target = getMaxPanelHeight() - getClearAllHeight();
}
@@ -601,6 +598,21 @@
animator.start();
}
+ /**
+ * When expanding, should we expand to the top of clear all and expand immediately?
+ * This will make sure that the animation will stop smoothly at the end of the last notification
+ * before the clear all affordance.
+ *
+ * @param targetHeight the height that we would animate to, right above clear all
+ *
+ * @return true if we can expand to the top of clear all
+ */
+ protected boolean shouldExpandToTopOfClearAll(float targetHeight) {
+ return fullyExpandedClearAllVisible()
+ && mExpandedHeight < targetHeight
+ && !isClearAllVisible();
+ }
+
protected abstract boolean shouldUseDismissingAnimation();
public String getName() {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java
index e65b6fe..b4de3cd 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java
@@ -652,6 +652,8 @@
}
mDataState = state;
if (networkType != mTelephonyDisplayInfo.getNetworkType()) {
+ Log.d(mTag, "onDataConnectionStateChanged:"
+ + " network type change and reset displayInfo. type=" + networkType);
mTelephonyDisplayInfo = new TelephonyDisplayInfo(networkType,
TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NONE);
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/bubbles/storage/BubbleVolatileRepositoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/bubbles/storage/BubbleVolatileRepositoryTest.kt
index ee48846..2bb6bb8 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/bubbles/storage/BubbleVolatileRepositoryTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/bubbles/storage/BubbleVolatileRepositoryTest.kt
@@ -16,37 +16,92 @@
package com.android.systemui.bubbles.storage
+import android.content.pm.LauncherApps
+import android.os.UserHandle
import android.testing.AndroidTestingRunner
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
+import com.android.systemui.util.mockito.eq
import junit.framework.Assert.assertEquals
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
+import org.mockito.Mockito.mock
+import org.mockito.Mockito.verify
+import org.mockito.Mockito.verifyNoMoreInteractions
@SmallTest
@RunWith(AndroidTestingRunner::class)
class BubbleVolatileRepositoryTest : SysuiTestCase() {
- private val bubble1 = BubbleEntity(0, "com.example.messenger", "shortcut-1", "k1")
- private val bubble2 = BubbleEntity(10, "com.example.chat", "alice and bob", "k2")
- private val bubble3 = BubbleEntity(0, "com.example.messenger", "shortcut-2", "k3")
+ private val user0 = UserHandle.of(0)
+ private val user10 = UserHandle.of(10)
+
+ private val bubble1 = BubbleEntity(0, PKG_MESSENGER, "shortcut-1", "k1")
+ private val bubble2 = BubbleEntity(10, PKG_CHAT, "alice and bob", "k2")
+ private val bubble3 = BubbleEntity(0, PKG_MESSENGER, "shortcut-2", "k3")
+
private val bubbles = listOf(bubble1, bubble2, bubble3)
private lateinit var repository: BubbleVolatileRepository
+ private lateinit var launcherApps: LauncherApps
@Before
fun setup() {
- repository = BubbleVolatileRepository()
+ launcherApps = mock(LauncherApps::class.java)
+ repository = BubbleVolatileRepository(launcherApps)
}
@Test
- fun testAddAndRemoveBubbles() {
+ fun testAddBubbles() {
repository.addBubbles(bubbles)
assertEquals(bubbles, repository.bubbles)
+ verify(launcherApps).cacheShortcuts(eq(PKG_MESSENGER),
+ eq(listOf("shortcut-1", "shortcut-2")), eq(user0),
+ eq(LauncherApps.FLAG_CACHE_BUBBLE_SHORTCUTS))
+ verify(launcherApps).cacheShortcuts(eq(PKG_CHAT),
+ eq(listOf("alice and bob")), eq(user10),
+ eq(LauncherApps.FLAG_CACHE_BUBBLE_SHORTCUTS))
+
repository.addBubbles(listOf(bubble1))
assertEquals(listOf(bubble2, bubble3, bubble1), repository.bubbles)
- repository.removeBubbles(listOf(bubble3))
- assertEquals(listOf(bubble2, bubble1), repository.bubbles)
+ verifyNoMoreInteractions(launcherApps)
}
-}
\ No newline at end of file
+
+ @Test
+ fun testRemoveBubbles() {
+ repository.addBubbles(bubbles)
+ assertEquals(bubbles, repository.bubbles)
+
+ repository.removeBubbles(listOf(bubble3))
+ assertEquals(listOf(bubble1, bubble2), repository.bubbles)
+ verify(launcherApps).uncacheShortcuts(eq(PKG_MESSENGER),
+ eq(listOf("shortcut-2")), eq(user0),
+ eq(LauncherApps.FLAG_CACHE_BUBBLE_SHORTCUTS))
+ }
+
+ @Test
+ fun testAddAndRemoveBubblesWhenExceedingCapacity() {
+ repository.capacity = 2
+ // push bubbles beyond capacity
+ repository.addBubbles(bubbles)
+ // verify it is trim down to capacity
+ assertEquals(listOf(bubble2, bubble3), repository.bubbles)
+ verify(launcherApps).cacheShortcuts(eq(PKG_MESSENGER),
+ eq(listOf("shortcut-2")), eq(user0),
+ eq(LauncherApps.FLAG_CACHE_BUBBLE_SHORTCUTS))
+ verify(launcherApps).cacheShortcuts(eq(PKG_CHAT),
+ eq(listOf("alice and bob")), eq(user10),
+ eq(LauncherApps.FLAG_CACHE_BUBBLE_SHORTCUTS))
+
+ repository.addBubbles(listOf(bubble1))
+ // verify the oldest bubble is popped
+ assertEquals(listOf(bubble3, bubble1), repository.bubbles)
+ verify(launcherApps).uncacheShortcuts(eq(PKG_CHAT),
+ eq(listOf("alice and bob")), eq(user10),
+ eq(LauncherApps.FLAG_CACHE_BUBBLE_SHORTCUTS))
+ }
+}
+
+private const val PKG_MESSENGER = "com.example.messenger"
+private const val PKG_CHAT = "com.example.chat"
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationSwipeHelperTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationSwipeHelperTest.java
index 06a2eec..323d8bd 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationSwipeHelperTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationSwipeHelperTest.java
@@ -436,8 +436,8 @@
assertEquals("returns false when view is null", false,
NotificationSwipeHelper.isTouchInView(mEvent, null));
- doReturn(5f).when(mEvent).getRawX();
- doReturn(10f).when(mEvent).getRawY();
+ doReturn(5f).when(mEvent).getX();
+ doReturn(10f).when(mEvent).getY();
doReturn(20).when(mView).getWidth();
doReturn(20).when(mView).getHeight();
@@ -453,7 +453,7 @@
assertTrue("Touch is within the view",
mSwipeHelper.isTouchInView(mEvent, mView));
- doReturn(50f).when(mEvent).getRawX();
+ doReturn(50f).when(mEvent).getX();
assertFalse("Touch is not within the view",
mSwipeHelper.isTouchInView(mEvent, mView));
@@ -464,8 +464,8 @@
assertEquals("returns false when view is null", false,
NotificationSwipeHelper.isTouchInView(mEvent, null));
- doReturn(5f).when(mEvent).getRawX();
- doReturn(10f).when(mEvent).getRawY();
+ doReturn(5f).when(mEvent).getX();
+ doReturn(10f).when(mEvent).getY();
doReturn(20).when(mNotificationRow).getWidth();
doReturn(20).when(mNotificationRow).getActualHeight();
@@ -481,7 +481,7 @@
assertTrue("Touch is within the view",
mSwipeHelper.isTouchInView(mEvent, mNotificationRow));
- doReturn(50f).when(mEvent).getRawX();
+ doReturn(50f).when(mEvent).getX();
assertFalse("Touch is not within the view",
mSwipeHelper.isTouchInView(mEvent, mNotificationRow));
diff --git a/packages/Tethering/Android.bp b/packages/Tethering/Android.bp
index 1ee017b..8ae30a5 100644
--- a/packages/Tethering/Android.bp
+++ b/packages/Tethering/Android.bp
@@ -33,7 +33,7 @@
"net-utils-framework-common",
],
libs: [
- "framework-tethering",
+ "framework-tethering.impl",
"framework-wifi-stubs-systemapi",
"unsupportedappusage",
],
diff --git a/packages/Tethering/common/TetheringLib/Android.bp b/packages/Tethering/common/TetheringLib/Android.bp
index ae4bb3e..408725c 100644
--- a/packages/Tethering/common/TetheringLib/Android.bp
+++ b/packages/Tethering/common/TetheringLib/Android.bp
@@ -13,31 +13,28 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-java_library {
+java_sdk_library {
name: "framework-tethering",
- sdk_version: "module_current",
+ defaults: ["framework-module-defaults"],
srcs: [
":framework-tethering-srcs",
],
+
+ // TODO(b/155480189) - Remove naming_scheme once references have been resolved.
+ // Temporary java_sdk_library component naming scheme to use to ease the transition from separate
+ // modules to java_sdk_library.
+ naming_scheme: "framework-modules",
+
jarjar_rules: "jarjar-rules.txt",
installable: true,
- libs: [
- "framework-annotations-lib",
- ],
-
hostdex: true, // for hiddenapi check
visibility: ["//frameworks/base/packages/Tethering:__subpackages__"],
+ stubs_library_visibility: ["//visibility:public"],
apex_available: ["com.android.tethering"],
permitted_packages: ["android.net"],
}
-stubs_defaults {
- name: "framework-tethering-stubs-defaults",
- srcs: [":framework-tethering-srcs"],
- dist: { dest: "framework-tethering.txt" },
-}
-
filegroup {
name: "framework-tethering-srcs",
srcs: [
@@ -55,83 +52,3 @@
],
path: "src"
}
-
-droidstubs {
- name: "framework-tethering-stubs-srcs-publicapi",
- defaults: [
- "framework-module-stubs-defaults-publicapi",
- "framework-tethering-stubs-defaults",
- ],
- check_api: {
- last_released: {
- api_file: ":framework-tethering.api.public.latest",
- removed_api_file: ":framework-tethering-removed.api.public.latest",
- },
- api_lint: {
- new_since: ":framework-tethering.api.public.latest",
- },
- },
-}
-
-droidstubs {
- name: "framework-tethering-stubs-srcs-systemapi",
- defaults: [
- "framework-module-stubs-defaults-systemapi",
- "framework-tethering-stubs-defaults",
- ],
- check_api: {
- last_released: {
- api_file: ":framework-tethering.api.system.latest",
- removed_api_file: ":framework-tethering-removed.api.system.latest",
- },
- api_lint: {
- new_since: ":framework-tethering.api.system.latest",
- },
- },
-}
-
-droidstubs {
- name: "framework-tethering-api-module_libs_api",
- defaults: [
- "framework-module-api-defaults-module_libs_api",
- "framework-tethering-stubs-defaults",
- ],
- check_api: {
- last_released: {
- api_file: ":framework-tethering.api.module-lib.latest",
- removed_api_file: ":framework-tethering-removed.api.module-lib.latest",
- },
- api_lint: {
- new_since: ":framework-tethering.api.module-lib.latest",
- },
- },
-}
-
-droidstubs {
- name: "framework-tethering-stubs-srcs-module_libs_api",
- defaults: [
- "framework-module-stubs-defaults-module_libs_api",
- "framework-tethering-stubs-defaults",
- ],
-}
-
-java_library {
- name: "framework-tethering-stubs-publicapi",
- srcs: [":framework-tethering-stubs-srcs-publicapi"],
- defaults: ["framework-module-stubs-lib-defaults-publicapi"],
- dist: { dest: "framework-tethering.jar" },
-}
-
-java_library {
- name: "framework-tethering-stubs-systemapi",
- srcs: [":framework-tethering-stubs-srcs-systemapi"],
- defaults: ["framework-module-stubs-lib-defaults-systemapi"],
- dist: { dest: "framework-tethering.jar" },
-}
-
-java_library {
- name: "framework-tethering-stubs-module_libs_api",
- srcs: [":framework-tethering-stubs-srcs-module_libs_api"],
- defaults: ["framework-module-stubs-lib-defaults-module_libs_api"],
- dist: { dest: "framework-tethering.jar" },
-}
diff --git a/packages/Tethering/tests/unit/Android.bp b/packages/Tethering/tests/unit/Android.bp
index e00435b..fccc690 100644
--- a/packages/Tethering/tests/unit/Android.bp
+++ b/packages/Tethering/tests/unit/Android.bp
@@ -29,7 +29,7 @@
sdk_version: "core_platform",
libs: [
"framework-minus-apex",
- "framework-tethering",
+ "framework-tethering.impl",
],
visibility: ["//cts/tests/tests/tethering"],
}
@@ -59,7 +59,7 @@
"ext",
"framework-minus-apex",
"framework-res",
- "framework-tethering",
+ "framework-tethering.impl",
"framework-wifi-stubs-module_libs_api",
],
jni_libs: [
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
index 07bb335..22b082f 100644
--- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
+++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
@@ -1136,6 +1136,7 @@
userState.mEnabledServices,
UserHandle.USER_SYSTEM);
onUserStateChangedLocked(userState);
+ migrateAccessibilityButtonSettingsIfNecessaryLocked(userState, null);
}
private int getClientStateLocked(AccessibilityUserState userState) {
diff --git a/services/autofill/java/com/android/server/autofill/Session.java b/services/autofill/java/com/android/server/autofill/Session.java
index 06c60a3..37ed6f7 100644
--- a/services/autofill/java/com/android/server/autofill/Session.java
+++ b/services/autofill/java/com/android/server/autofill/Session.java
@@ -2588,14 +2588,15 @@
id)) {
// Regular autofill handled the view and returned null response, but it
// triggered augmented autofill
- if (!isSameViewEntered) {
+ if (!isSameViewEntered || mExpiredResponse) {
if (sDebug) Slog.d(TAG, "trigger augmented autofill.");
triggerAugmentedAutofillLocked(flags);
} else {
if (sDebug) Slog.d(TAG, "skip augmented autofill for same view.");
}
return;
- } else if (mForAugmentedAutofillOnly && isSameViewEntered) {
+ } else if (mForAugmentedAutofillOnly && isSameViewEntered
+ && !mExpiredResponse) {
// Regular autofill is disabled.
if (sDebug) Slog.d(TAG, "skip augmented autofill for same view.");
return;
diff --git a/services/contentcapture/java/com/android/server/contentcapture/RemoteContentCaptureService.java b/services/contentcapture/java/com/android/server/contentcapture/RemoteContentCaptureService.java
index 9a170ac..0b9bf39 100644
--- a/services/contentcapture/java/com/android/server/contentcapture/RemoteContentCaptureService.java
+++ b/services/contentcapture/java/com/android/server/contentcapture/RemoteContentCaptureService.java
@@ -54,7 +54,9 @@
boolean verbose, int idleUnbindTimeoutMs) {
super(context, serviceInterface, serviceComponentName, userId, perUserService,
context.getMainThreadHandler(),
- bindInstantServiceAllowed ? Context.BIND_ALLOW_INSTANT : 0, verbose,
+ Context.BIND_INCLUDE_CAPABILITIES
+ | (bindInstantServiceAllowed ? Context.BIND_ALLOW_INSTANT : 0),
+ verbose,
/* initialCapacity= */ 2);
mPerUserService = perUserService;
mServerCallback = callback.asBinder();
diff --git a/services/core/java/com/android/server/audio/AudioDeviceBroker.java b/services/core/java/com/android/server/audio/AudioDeviceBroker.java
index df4c269..67e27c4 100644
--- a/services/core/java/com/android/server/audio/AudioDeviceBroker.java
+++ b/services/core/java/com/android/server/audio/AudioDeviceBroker.java
@@ -45,7 +45,10 @@
import java.io.PrintWriter;
import java.util.ArrayList;
+import java.util.HashSet;
import java.util.NoSuchElementException;
+import java.util.Set;
+import java.util.concurrent.atomic.AtomicBoolean;
/** @hide */
@@ -59,6 +62,9 @@
// Timeout for connection to bluetooth headset service
/*package*/ static final int BT_HEADSET_CNCT_TIMEOUT_MS = 3000;
+ // Delay before checking it music should be unmuted after processing an A2DP message
+ private static final int BTA2DP_MUTE_CHECK_DELAY_MS = 50;
+
private final @NonNull AudioService mAudioService;
private final @NonNull Context mContext;
@@ -1050,9 +1056,19 @@
final int strategy = msg.arg1;
mDeviceInventory.onSaveRemovePreferredDevice(strategy);
} break;
+ case MSG_CHECK_MUTE_MUSIC:
+ checkMessagesMuteMusic();
+ break;
default:
Log.wtf(TAG, "Invalid message " + msg.what);
}
+
+ // Give some time to Bluetooth service to post a connection message
+ // in case of active device switch
+ if (MESSAGES_MUTE_MUSIC.contains(msg.what)) {
+ sendMsg(MSG_CHECK_MUTE_MUSIC, SENDMSG_REPLACE, BTA2DP_MUTE_CHECK_DELAY_MS);
+ }
+
if (isMessageHandledUnderWakelock(msg.what)) {
try {
mBrokerEventWakeLock.release();
@@ -1116,6 +1132,7 @@
private static final int MSG_I_SAVE_REMOVE_PREF_DEVICE_FOR_STRATEGY = 34;
private static final int MSG_L_SPEAKERPHONE_CLIENT_DIED = 35;
+ private static final int MSG_CHECK_MUTE_MUSIC = 36;
private static boolean isMessageHandledUnderWakelock(int msgId) {
@@ -1132,6 +1149,7 @@
case MSG_L_A2DP_DEVICE_CONNECTION_CHANGE_EXT_CONNECTION:
case MSG_L_A2DP_DEVICE_CONNECTION_CHANGE_EXT_DISCONNECTION:
case MSG_L_HEARING_AID_DEVICE_CONNECTION_CHANGE_EXT:
+ case MSG_CHECK_MUTE_MUSIC:
return true;
default:
return false;
@@ -1231,6 +1249,37 @@
mBrokerHandler.sendMessageAtTime(mBrokerHandler.obtainMessage(msg, arg1, arg2, obj),
time);
}
+ if (MESSAGES_MUTE_MUSIC.contains(msg)) {
+ checkMessagesMuteMusic();
+ }
+ }
+
+ /** List of messages for which music is muted while processing is pending */
+ private static final Set<Integer> MESSAGES_MUTE_MUSIC;
+ static {
+ MESSAGES_MUTE_MUSIC = new HashSet<>();
+ MESSAGES_MUTE_MUSIC.add(MSG_IL_SET_A2DP_SINK_CONNECTION_STATE_CONNECTED);
+ MESSAGES_MUTE_MUSIC.add(MSG_IL_SET_A2DP_SINK_CONNECTION_STATE_DISCONNECTED);
+ MESSAGES_MUTE_MUSIC.add(MSG_L_A2DP_DEVICE_CONFIG_CHANGE);
+ MESSAGES_MUTE_MUSIC.add(MSG_L_A2DP_ACTIVE_DEVICE_CHANGE);
+ MESSAGES_MUTE_MUSIC.add(MSG_L_A2DP_DEVICE_CONNECTION_CHANGE_EXT_CONNECTION);
+ MESSAGES_MUTE_MUSIC.add(MSG_L_A2DP_DEVICE_CONNECTION_CHANGE_EXT_DISCONNECTION);
+ }
+
+ private AtomicBoolean mMusicMuted = new AtomicBoolean(false);
+
+ /** Mutes or unmutes music according to pending A2DP messages */
+ private void checkMessagesMuteMusic() {
+ boolean mute = false;
+ for (int msg : MESSAGES_MUTE_MUSIC) {
+ if (mBrokerHandler.hasMessages(msg)) {
+ mute = true;
+ break;
+ }
+ }
+ if (mute != mMusicMuted.getAndSet(mute)) {
+ mAudioService.setMusicMute(mute);
+ }
}
private class SpeakerphoneClient implements IBinder.DeathRecipient {
diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java
index d5f014b..ed05fff 100755
--- a/services/core/java/com/android/server/audio/AudioService.java
+++ b/services/core/java/com/android/server/audio/AudioService.java
@@ -109,6 +109,7 @@
import android.os.Looper;
import android.os.Message;
import android.os.PowerManager;
+import android.os.Process;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.SystemClock;
@@ -3186,10 +3187,17 @@
return (mStreamStates[streamType].getMaxIndex() + 5) / 10;
}
- /** @see AudioManager#getStreamMinVolumeInt(int) */
+ /** @see AudioManager#getStreamMinVolumeInt(int)
+ * Part of service interface, check permissions here */
public int getStreamMinVolume(int streamType) {
ensureValidStreamType(streamType);
- return (mStreamStates[streamType].getMinIndex() + 5) / 10;
+ final boolean isPrivileged =
+ Binder.getCallingUid() == Process.SYSTEM_UID
+ || (mContext.checkCallingPermission(Manifest.permission.MODIFY_AUDIO_SETTINGS)
+ == PackageManager.PERMISSION_GRANTED)
+ || (mContext.checkCallingPermission(Manifest.permission.MODIFY_AUDIO_ROUTING)
+ == PackageManager.PERMISSION_GRANTED);
+ return (mStreamStates[streamType].getMinIndex(isPrivileged) + 5) / 10;
}
/** Get last audible volume before stream was muted. */
@@ -5061,6 +5069,10 @@
profile, suppressNoisyIntent, a2dpVolume);
}
+ /*package*/ void setMusicMute(boolean mute) {
+ mStreamStates[AudioSystem.STREAM_MUSIC].muteInternally(mute);
+ }
+
/**
* See AudioManager.handleBluetoothA2dpDeviceConfigChange()
* @param device
@@ -5463,6 +5475,7 @@
private int mIndexMax;
private boolean mIsMuted;
+ private boolean mIsMutedInternally;
private String mVolumeIndexSettingName;
private int mObservedDevices;
@@ -5636,7 +5649,8 @@
// Only set audio policy BT SCO stream volume to 0 when the stream is actually muted.
// This allows RX path muting by the audio HAL only when explicitly muted but not when
// index is just set to 0 to repect BT requirements
- if (mStreamType == AudioSystem.STREAM_BLUETOOTH_SCO && index == 0 && !mIsMuted) {
+ if (mStreamType == AudioSystem.STREAM_BLUETOOTH_SCO && index == 0
+ && !isFullyMuted()) {
index = 1;
}
AudioSystem.setStreamVolumeIndexAS(mStreamType, index, device);
@@ -5645,7 +5659,7 @@
// must be called while synchronized VolumeStreamState.class
/*package*/ void applyDeviceVolume_syncVSS(int device, boolean isAvrcpAbsVolSupported) {
int index;
- if (mIsMuted) {
+ if (isFullyMuted()) {
index = 0;
} else if (AudioSystem.DEVICE_OUT_ALL_A2DP_SET.contains(device)
&& isAvrcpAbsVolSupported) {
@@ -5668,7 +5682,7 @@
for (int i = 0; i < mIndexMap.size(); i++) {
final int device = mIndexMap.keyAt(i);
if (device != AudioSystem.DEVICE_OUT_DEFAULT) {
- if (mIsMuted) {
+ if (isFullyMuted()) {
index = 0;
} else if (AudioSystem.DEVICE_OUT_ALL_A2DP_SET.contains(device)
&& isAvrcpAbsVolSupported) {
@@ -5685,7 +5699,7 @@
}
// apply default volume last: by convention , default device volume will be used
// by audio policy manager if no explicit volume is present for a given device type
- if (mIsMuted) {
+ if (isFullyMuted()) {
index = 0;
} else {
index = (getIndex(AudioSystem.DEVICE_OUT_DEFAULT) + 5)/10;
@@ -5790,11 +5804,23 @@
return mIndexMax;
}
+ /**
+ * @return the lowest index regardless of permissions
+ */
public int getMinIndex() {
return mIndexMin;
}
/**
+ * @param isPrivileged true if the caller is privileged and not subject to minimum
+ * volume index thresholds
+ * @return the lowest index that this caller can set or adjust to
+ */
+ public int getMinIndex(boolean isPrivileged) {
+ return isPrivileged ? mIndexMin : mIndexMinNoPerm;
+ }
+
+ /**
* Copies all device/index pairs from the given VolumeStreamState after initializing
* them with the volume for DEVICE_OUT_DEFAULT. No-op if the source VolumeStreamState
* has the same stream type as this instance.
@@ -5867,6 +5893,41 @@
return changed;
}
+ /**
+ * Mute/unmute the stream by AudioService
+ * @param state the new mute state
+ * @return true if the mute state was changed
+ */
+ public boolean muteInternally(boolean state) {
+ boolean changed = false;
+ synchronized (VolumeStreamState.class) {
+ if (state != mIsMutedInternally) {
+ changed = true;
+ mIsMutedInternally = state;
+
+ // Set the new mute volume. This propagates the values to
+ // the audio system, otherwise the volume won't be changed
+ // at the lower level.
+ sendMsg(mAudioHandler,
+ MSG_SET_ALL_VOLUMES,
+ SENDMSG_QUEUE,
+ 0,
+ 0,
+ this, 0);
+ }
+ }
+ if (changed) {
+ sVolumeLogger.log(new VolumeEvent(
+ VolumeEvent.VOL_MUTE_STREAM_INT, mStreamType, state));
+ }
+ return changed;
+ }
+
+ @GuardedBy("VolumeStreamState.class")
+ public boolean isFullyMuted() {
+ return mIsMuted || mIsMutedInternally;
+ }
+
public int getStreamType() {
return mStreamType;
}
@@ -5903,6 +5964,8 @@
private void dump(PrintWriter pw) {
pw.print(" Muted: ");
pw.println(mIsMuted);
+ pw.print(" Muted Internally: ");
+ pw.println(mIsMutedInternally);
pw.print(" Min: ");
pw.print((mIndexMin + 5) / 10);
if (mIndexMin != mIndexMinNoPerm) {
diff --git a/services/core/java/com/android/server/audio/AudioServiceEvents.java b/services/core/java/com/android/server/audio/AudioServiceEvents.java
index 5913567..f3ff02f 100644
--- a/services/core/java/com/android/server/audio/AudioServiceEvents.java
+++ b/services/core/java/com/android/server/audio/AudioServiceEvents.java
@@ -100,6 +100,7 @@
static final int VOL_VOICE_ACTIVITY_HEARING_AID = 6;
static final int VOL_MODE_CHANGE_HEARING_AID = 7;
static final int VOL_SET_GROUP_VOL = 8;
+ static final int VOL_MUTE_STREAM_INT = 9;
final int mOp;
final int mStream;
@@ -188,6 +189,18 @@
logMetricEvent();
}
+ /** used for VOL_MUTE_STREAM_INT */
+ VolumeEvent(int op, int stream, boolean state) {
+ mOp = op;
+ mStream = stream;
+ mVal1 = state ? 1 : 0;
+ mVal2 = 0;
+ mCaller = null;
+ mGroupName = null;
+ mAudioAttributes = null;
+ logMetricEvent();
+ }
+
/**
* Audio Analytics unique Id.
@@ -278,6 +291,9 @@
.set(MediaMetrics.Property.INDEX, mVal1)
.record();
return;
+ case VOL_MUTE_STREAM_INT:
+ // No value in logging metrics for this internal event
+ return;
default:
return;
}
@@ -343,6 +359,11 @@
.append(" flags:0x").append(Integer.toHexString(mVal2))
.append(") from ").append(mCaller)
.toString();
+ case VOL_MUTE_STREAM_INT:
+ return new StringBuilder("VolumeStreamState.muteInternally(stream:")
+ .append(AudioSystem.streamToString(mStream))
+ .append(mVal1 == 1 ? ", muted)" : ", unmuted)")
+ .toString();
default: return new StringBuilder("FIXME invalid op:").append(mOp).toString();
}
}
diff --git a/services/core/java/com/android/server/display/DisplayManagerService.java b/services/core/java/com/android/server/display/DisplayManagerService.java
index 02d499f..dee6cd0 100644
--- a/services/core/java/com/android/server/display/DisplayManagerService.java
+++ b/services/core/java/com/android/server/display/DisplayManagerService.java
@@ -111,6 +111,7 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+import java.util.Optional;
import java.util.concurrent.CopyOnWriteArrayList;
/**
@@ -971,6 +972,18 @@
if (diff == DisplayDeviceInfo.DIFF_STATE) {
Slog.i(TAG, "Display device changed state: \"" + info.name
+ "\", " + Display.stateToString(info.state));
+ final Optional<Integer> viewportType = getViewportType(info);
+ if (viewportType.isPresent()) {
+ for (DisplayViewport d : mViewports) {
+ if (d.type == viewportType.get() && info.uniqueId.equals(d.uniqueId)) {
+ // Update display view port power state
+ d.isActive = Display.isActiveState(info.state);
+ }
+ }
+ if (mInputManagerInternal != null) {
+ mHandler.sendEmptyMessage(MSG_UPDATE_VIEWPORT);
+ }
+ }
} else if (diff != 0) {
Slog.i(TAG, "Display device changed: " + info);
}
@@ -1507,6 +1520,23 @@
mViewports.clear();
}
+ private Optional<Integer> getViewportType(DisplayDeviceInfo info) {
+ // Get the corresponding viewport type.
+ if ((info.flags & DisplayDeviceInfo.FLAG_DEFAULT_DISPLAY) != 0) {
+ return Optional.of(VIEWPORT_INTERNAL);
+ } else if (info.touch == DisplayDeviceInfo.TOUCH_EXTERNAL) {
+ return Optional.of(VIEWPORT_EXTERNAL);
+ } else if (info.touch == DisplayDeviceInfo.TOUCH_VIRTUAL
+ && !TextUtils.isEmpty(info.uniqueId)) {
+ return Optional.of(VIEWPORT_VIRTUAL);
+ } else {
+ if (DEBUG) {
+ Slog.i(TAG, "Display " + info + " does not support input device matching.");
+ }
+ }
+ return Optional.empty();
+ }
+
private void configureDisplayLocked(SurfaceControl.Transaction t, DisplayDevice device) {
final DisplayDeviceInfo info = device.getDisplayDeviceInfoLocked();
final boolean ownContent = (info.flags & DisplayDeviceInfo.FLAG_OWN_CONTENT_ONLY) != 0;
@@ -1533,21 +1563,10 @@
return;
}
display.configureDisplayLocked(t, device, info.state == Display.STATE_OFF);
- final int viewportType;
- // Update the corresponding viewport.
- if ((info.flags & DisplayDeviceInfo.FLAG_DEFAULT_DISPLAY) != 0) {
- viewportType = VIEWPORT_INTERNAL;
- } else if (info.touch == DisplayDeviceInfo.TOUCH_EXTERNAL) {
- viewportType = VIEWPORT_EXTERNAL;
- } else if (info.touch == DisplayDeviceInfo.TOUCH_VIRTUAL
- && !TextUtils.isEmpty(info.uniqueId)) {
- viewportType = VIEWPORT_VIRTUAL;
- } else {
- Slog.i(TAG, "Display " + info + " does not support input device matching.");
- return;
+ final Optional<Integer> viewportType = getViewportType(info);
+ if (viewportType.isPresent()) {
+ populateViewportLocked(viewportType.get(), display.getDisplayIdLocked(), device, info);
}
-
- populateViewportLocked(viewportType, display.getDisplayIdLocked(), device, info.uniqueId);
}
/**
@@ -1587,12 +1606,13 @@
return viewport;
}
- private void populateViewportLocked(int viewportType,
- int displayId, DisplayDevice device, String uniqueId) {
- final DisplayViewport viewport = getViewportLocked(viewportType, uniqueId);
+ private void populateViewportLocked(int viewportType, int displayId, DisplayDevice device,
+ DisplayDeviceInfo info) {
+ final DisplayViewport viewport = getViewportLocked(viewportType, info.uniqueId);
device.populateViewportLocked(viewport);
viewport.valid = true;
viewport.displayId = displayId;
+ viewport.isActive = Display.isActiveState(info.state);
}
private LogicalDisplay findLogicalDisplayForDeviceLocked(DisplayDevice device) {
diff --git a/services/core/java/com/android/server/net/NetworkStatsFactory.java b/services/core/java/com/android/server/net/NetworkStatsFactory.java
index 3dac106..86ad0b3 100644
--- a/services/core/java/com/android/server/net/NetworkStatsFactory.java
+++ b/services/core/java/com/android/server/net/NetworkStatsFactory.java
@@ -152,12 +152,10 @@
/**
* Applies 464xlat adjustments with ifaces noted with {@link #noteStackedIface(String, String)}.
- * @see NetworkStats#apply464xlatAdjustments(NetworkStats, NetworkStats, Map, boolean)
+ * @see NetworkStats#apply464xlatAdjustments(NetworkStats, NetworkStats, Map)
*/
- public void apply464xlatAdjustments(NetworkStats baseTraffic,
- NetworkStats stackedTraffic, boolean useBpfStats) {
- NetworkStats.apply464xlatAdjustments(baseTraffic, stackedTraffic, mStackedIfaces,
- useBpfStats);
+ public void apply464xlatAdjustments(NetworkStats baseTraffic, NetworkStats stackedTraffic) {
+ NetworkStats.apply464xlatAdjustments(baseTraffic, stackedTraffic, mStackedIfaces);
}
public NetworkStatsFactory() {
@@ -380,7 +378,7 @@
// network, the overhead is their fault.
// No locking here: apply464xlatAdjustments behaves fine with an add-only
// ConcurrentHashMap.
- delta.apply464xlatAdjustments(mStackedIfaces, mUseBpfStats);
+ delta.apply464xlatAdjustments(mStackedIfaces);
// Migrate data usage over a VPN to the TUN network.
for (VpnInfo info : vpnArray) {
diff --git a/services/core/java/com/android/server/net/NetworkStatsService.java b/services/core/java/com/android/server/net/NetworkStatsService.java
index cf5a412..ba9f486 100644
--- a/services/core/java/com/android/server/net/NetworkStatsService.java
+++ b/services/core/java/com/android/server/net/NetworkStatsService.java
@@ -1882,14 +1882,13 @@
// fold tethering stats and operations into uid snapshot
final NetworkStats tetherSnapshot = getNetworkStatsTethering(STATS_PER_UID);
tetherSnapshot.filter(UID_ALL, ifaces, TAG_ALL);
- mStatsFactory.apply464xlatAdjustments(uidSnapshot, tetherSnapshot,
- mUseBpfTrafficStats);
+ mStatsFactory.apply464xlatAdjustments(uidSnapshot, tetherSnapshot);
uidSnapshot.combineAllValues(tetherSnapshot);
// get a stale copy of uid stats snapshot provided by providers.
final NetworkStats providerStats = getNetworkStatsFromProviders(STATS_PER_UID);
providerStats.filter(UID_ALL, ifaces, TAG_ALL);
- mStatsFactory.apply464xlatAdjustments(uidSnapshot, providerStats, mUseBpfTrafficStats);
+ mStatsFactory.apply464xlatAdjustments(uidSnapshot, providerStats);
uidSnapshot.combineAllValues(providerStats);
uidSnapshot.combineAllValues(mUidOperations);
diff --git a/services/core/java/com/android/server/wm/ActivityStackSupervisor.java b/services/core/java/com/android/server/wm/ActivityStackSupervisor.java
index 21d0752..80ca95f 100644
--- a/services/core/java/com/android/server/wm/ActivityStackSupervisor.java
+++ b/services/core/java/com/android/server/wm/ActivityStackSupervisor.java
@@ -72,6 +72,7 @@
import static com.android.server.wm.RootWindowContainer.MATCH_TASK_IN_STACKS_OR_RECENT_TASKS;
import static com.android.server.wm.RootWindowContainer.MATCH_TASK_IN_STACKS_OR_RECENT_TASKS_AND_RESTORE;
import static com.android.server.wm.RootWindowContainer.TAG_STATES;
+import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_APP_TRANSITION;
import static com.android.server.wm.Task.FLAG_FORCE_HIDDEN_FOR_PINNED_TASK;
import static com.android.server.wm.Task.LOCK_TASK_AUTH_LAUNCHABLE;
import static com.android.server.wm.Task.LOCK_TASK_AUTH_LAUNCHABLE_PRIV;
@@ -1803,15 +1804,11 @@
ArrayList<ActivityRecord> readyToStopActivities = null;
for (int i = mStoppingActivities.size() - 1; i >= 0; --i) {
final ActivityRecord s = mStoppingActivities.get(i);
- final boolean animating = s.isAnimating(TRANSITION | PARENTS);
+ final boolean animating = s.isAnimating(TRANSITION | PARENTS,
+ ANIMATION_TYPE_APP_TRANSITION);
if (DEBUG_STATES) Slog.v(TAG, "Stopping " + s + ": nowVisible=" + s.nowVisible
+ " animating=" + animating + " finishing=" + s.finishing);
-
- final ActivityStack stack = s.getRootTask();
- final boolean shouldSleepOrShutDown = stack != null
- ? stack.shouldSleepOrShutDownActivities()
- : mService.isSleepingOrShuttingDownLocked();
- if (!animating || shouldSleepOrShutDown) {
+ if (!animating || mService.mShuttingDown) {
if (!processPausingActivities && s.isState(PAUSING)) {
// Defer processing pausing activities in this iteration and reschedule
// a delayed idle to reprocess it again
diff --git a/services/core/java/com/android/server/wm/ImeInsetsSourceProvider.java b/services/core/java/com/android/server/wm/ImeInsetsSourceProvider.java
index a0985fc..8298763 100644
--- a/services/core/java/com/android/server/wm/ImeInsetsSourceProvider.java
+++ b/services/core/java/com/android/server/wm/ImeInsetsSourceProvider.java
@@ -18,9 +18,11 @@
import static com.android.server.wm.ProtoLogGroup.WM_DEBUG_IME;
+import android.graphics.PixelFormat;
import android.view.InsetsSource;
import android.view.WindowInsets;
+import com.android.internal.annotations.VisibleForTesting;
import com.android.server.protolog.common.ProtoLog;
/**
@@ -107,7 +109,8 @@
mShowImeRunner = null;
}
- private boolean isImeTargetFromDisplayContentAndImeSame() {
+ @VisibleForTesting
+ boolean isImeTargetFromDisplayContentAndImeSame() {
// IMMS#mLastImeTargetWindow always considers focused window as
// IME target, however DisplayContent#computeImeTarget() can compute
// a different IME target.
@@ -118,6 +121,7 @@
// TODO(b/139861270): Remove the child & sublayer check once IMMS is aware of
// actual IME target.
final WindowState dcTarget = mDisplayContent.mInputMethodTarget;
+ final InsetsControlTarget controlTarget = mDisplayContent.mInputMethodControlTarget;
if (dcTarget == null || mImeTargetFromIme == null) {
return false;
}
@@ -127,6 +131,9 @@
return (!dcTarget.isClosing() && mImeTargetFromIme == dcTarget)
|| (mImeTargetFromIme != null && dcTarget.getParentWindow() == mImeTargetFromIme
&& dcTarget.mSubLayer > mImeTargetFromIme.mSubLayer)
- || mImeTargetFromIme == mDisplayContent.getImeFallback();
+ || mImeTargetFromIme == mDisplayContent.getImeFallback()
+ // If IME target is transparent but control target matches requesting window.
+ || (controlTarget == mImeTargetFromIme
+ && PixelFormat.formatHasAlpha(dcTarget.mAttrs.format));
}
}
diff --git a/services/core/java/com/android/server/wm/WindowContainer.java b/services/core/java/com/android/server/wm/WindowContainer.java
index a1fbb59..3fe8229 100644
--- a/services/core/java/com/android/server/wm/WindowContainer.java
+++ b/services/core/java/com/android/server/wm/WindowContainer.java
@@ -399,7 +399,11 @@
}
void createSurfaceControl(boolean force) {
- setSurfaceControl(makeSurface().build());
+ setInitialSurfaceControlProperties(makeSurface().build());
+ }
+
+ private void setInitialSurfaceControlProperties(SurfaceControl surfaceControl) {
+ setSurfaceControl(surfaceControl);
getPendingTransaction().show(mSurfaceControl);
onSurfaceShown(getPendingTransaction());
updateSurfacePosition();
@@ -423,7 +427,16 @@
// Clear the last position so the new SurfaceControl will get correct position
mLastSurfacePosition.set(0, 0);
- createSurfaceControl(false /* force */);
+ final SurfaceControl.Builder b = mWmService.makeSurfaceBuilder(null)
+ .setContainerLayer()
+ .setName(getName());
+
+ setInitialSurfaceControlProperties(b.build());
+
+ // If parent is null, the layer should be placed offscreen so reparent to null. Otherwise,
+ // set to the available parent.
+ t.reparent(mSurfaceControl, mParent == null ? null : mParent.getSurfaceControl());
+
if (mLastRelativeToLayer != null) {
t.setRelativeLayer(mSurfaceControl, mLastRelativeToLayer, mLastLayer);
} else {
diff --git a/services/core/jni/com_android_server_input_InputManagerService.cpp b/services/core/jni/com_android_server_input_InputManagerService.cpp
index 2013945..75ec224 100644
--- a/services/core/jni/com_android_server_input_InputManagerService.cpp
+++ b/services/core/jni/com_android_server_input_InputManagerService.cpp
@@ -403,7 +403,8 @@
DisplayViewport viewport;
android_hardware_display_DisplayViewport_toNative(env, viewportObj, &viewport);
- ALOGI("Viewport [%d] to add: %s", (int) i, viewport.uniqueId.c_str());
+ ALOGI("Viewport [%d] to add: %s, isActive: %s", (int)i, viewport.uniqueId.c_str(),
+ toString(viewport.isActive));
viewports.push_back(viewport);
env->DeleteLocalRef(viewportObj);
diff --git a/services/core/jni/com_android_server_location_GnssLocationProvider.cpp b/services/core/jni/com_android_server_location_GnssLocationProvider.cpp
index e4061b4..c7dac78 100644
--- a/services/core/jni/com_android_server_location_GnssLocationProvider.cpp
+++ b/services/core/jni/com_android_server_location_GnssLocationProvider.cpp
@@ -337,7 +337,11 @@
JavaObject::JavaObject(JNIEnv* env, jclass clazz, jmethodID stringCtor, const char * sz_arg_1)
: env_(env), clazz_(clazz) {
- object_ = env_->NewObject(clazz_, stringCtor, env->NewStringUTF(sz_arg_1));
+ jstring szArg = env->NewStringUTF(sz_arg_1);
+ object_ = env_->NewObject(clazz_, stringCtor, szArg);
+ if (szArg) {
+ env_->DeleteLocalRef(szArg);
+ }
}
@@ -724,6 +728,9 @@
JNIEnv* env = getJniEnv();
jstring jstringName = env->NewStringUTF(name.c_str());
env->CallVoidMethod(mCallbacksObj, method_setGnssHardwareModelName, jstringName);
+ if (jstringName) {
+ env->DeleteLocalRef(jstringName);
+ }
checkAndClearExceptionFromCallback(env, __FUNCTION__);
return Void();
@@ -827,6 +834,13 @@
static_cast<jint>(listSize), svidWithFlagArray, cn0Array, elevArray, azimArray,
carrierFreqArray, basebandCn0Array);
+ env->DeleteLocalRef(svidWithFlagArray);
+ env->DeleteLocalRef(cn0Array);
+ env->DeleteLocalRef(elevArray);
+ env->DeleteLocalRef(azimArray);
+ env->DeleteLocalRef(carrierFreqArray);
+ env->DeleteLocalRef(basebandCn0Array);
+
checkAndClearExceptionFromCallback(env, __FUNCTION__);
return Void();
}
@@ -1429,13 +1443,18 @@
JNIEnv* env = getJniEnv();
translateSingleGnssMeasurement(&(measurement_V2_0->v1_1), object);
- SET(CodeType, env->NewStringUTF(measurement_V2_0->codeType.c_str()));
+ jstring codeType = env->NewStringUTF(measurement_V2_0->codeType.c_str());
+ SET(CodeType, codeType);
// Overwrite with v2_0.state since v2_0->v1_1->v1_0.state is deprecated.
SET(State, static_cast<int32_t>(measurement_V2_0->state));
// Overwrite with v2_0.constellation since v2_0->v1_1->v1_0.constellation is deprecated.
SET(ConstellationType, static_cast<int32_t>(measurement_V2_0->constellation));
+
+ if (codeType) {
+ env->DeleteLocalRef(codeType);
+ }
}
// Preallocate object as: JavaObject object(env, "android/location/GnssMeasurement");
@@ -1515,10 +1534,16 @@
SET(ReferenceConstellationTypeForIsb,
static_cast<int32_t>(clock.referenceSignalTypeForIsb.constellation));
SET(ReferenceCarrierFrequencyHzForIsb, clock.referenceSignalTypeForIsb.carrierFrequencyHz);
- SET(ReferenceCodeTypeForIsb,
- env->NewStringUTF(clock.referenceSignalTypeForIsb.codeType.c_str()));
+
+ jstring referenceCodeTypeForIsb =
+ env->NewStringUTF(clock.referenceSignalTypeForIsb.codeType.c_str());
+ SET(ReferenceCodeTypeForIsb, referenceCodeTypeForIsb);
translateGnssClock(object, clock.v1_0);
+
+ if (referenceCodeTypeForIsb) {
+ env->DeleteLocalRef(referenceCodeTypeForIsb);
+ }
}
template<>
@@ -1565,7 +1590,9 @@
for (uint16_t i = 0; i < count; ++i) {
JavaObject object(env, class_gnssMeasurement, method_gnssMeasurementCtor);
translateSingleGnssMeasurement(&(measurements[i]), object);
- env->SetObjectArrayElement(gnssMeasurementArray, i, object.get());
+ jobject gnssMeasurement = object.get();
+ env->SetObjectArrayElement(gnssMeasurementArray, i, gnssMeasurement);
+ env->DeleteLocalRef(gnssMeasurement);
}
return gnssMeasurementArray;
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
index b7a9ba5..8d32d7c 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
@@ -11951,11 +11951,11 @@
user);
mInjector.getLocationManager().setLocationEnabledForUser(locationEnabled, user);
- // make a best effort to only show the notification if the admin is actually changing
- // something. this is subject to race conditions with settings changes, but those are
+ // make a best effort to only show the notification if the admin is actually enabling
+ // location. this is subject to race conditions with settings changes, but those are
// unlikely to realistically interfere
- if (wasLocationEnabled != locationEnabled) {
- showLocationSettingsChangedNotification(user);
+ if (locationEnabled && (wasLocationEnabled != locationEnabled)) {
+ showLocationSettingsEnabledNotification(user);
}
});
@@ -11968,7 +11968,7 @@
.write();
}
- private void showLocationSettingsChangedNotification(UserHandle user) {
+ private void showLocationSettingsEnabledNotification(UserHandle user) {
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// Fill the component explicitly to prevent the PendingIntent from being intercepted
@@ -12100,8 +12100,11 @@
saveSettingsLocked(callingUserId);
}
mInjector.settingsSecurePutStringForUser(setting, value, callingUserId);
- if (setting.equals(Settings.Secure.LOCATION_MODE)) {
- showLocationSettingsChangedNotification(UserHandle.of(callingUserId));
+ // Notify the user if it's the location mode setting that's been set, to any value
+ // other than 'off'.
+ if (setting.equals(Settings.Secure.LOCATION_MODE)
+ && (Integer.parseInt(value) != 0)) {
+ showLocationSettingsEnabledNotification(UserHandle.of(callingUserId));
}
});
}
diff --git a/services/tests/mockingservicestests/src/com/android/server/blob/BlobStoreManagerServiceTest.java b/services/tests/mockingservicestests/src/com/android/server/blob/BlobStoreManagerServiceTest.java
index ade01dc..7446289 100644
--- a/services/tests/mockingservicestests/src/com/android/server/blob/BlobStoreManagerServiceTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/blob/BlobStoreManagerServiceTest.java
@@ -372,6 +372,7 @@
doReturn(sessionId).when(session).getSessionId();
doReturn(sessionFile).when(session).getSessionFile();
doReturn(blobHandle).when(session).getBlobHandle();
+ doCallRealMethod().when(session).isExpired();
return session;
}
diff --git a/services/tests/wmtests/src/com/android/server/wm/ImeInsetsSourceProviderTest.java b/services/tests/wmtests/src/com/android/server/wm/ImeInsetsSourceProviderTest.java
new file mode 100644
index 0000000..ca739c0
--- /dev/null
+++ b/services/tests/wmtests/src/com/android/server/wm/ImeInsetsSourceProviderTest.java
@@ -0,0 +1,59 @@
+/*
+ * 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.wm;
+
+import static android.view.InsetsState.ITYPE_IME;
+import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION;
+
+import static org.junit.Assert.assertTrue;
+
+import android.graphics.PixelFormat;
+import android.platform.test.annotations.Presubmit;
+import android.view.InsetsSource;
+
+import androidx.test.filters.SmallTest;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@SmallTest
+@Presubmit
+@RunWith(WindowTestRunner.class)
+public class ImeInsetsSourceProviderTest extends WindowTestsBase {
+
+ private InsetsSource mImeSource = new InsetsSource(ITYPE_IME);
+ private ImeInsetsSourceProvider mImeProvider;
+
+ @Before
+ public void setUp() throws Exception {
+ mImeSource.setVisible(true);
+ mImeProvider = new ImeInsetsSourceProvider(mImeSource,
+ mDisplayContent.getInsetsStateController(), mDisplayContent);
+ }
+
+ @Test
+ public void testTransparentControlTargetWindowCanShowIme() {
+ final WindowState appWin = createWindow(null, TYPE_APPLICATION, "app");
+ final WindowState popup = createWindow(appWin, TYPE_APPLICATION, "popup");
+ mDisplayContent.mInputMethodControlTarget = popup;
+ mDisplayContent.mInputMethodTarget = appWin;
+ popup.mAttrs.format = PixelFormat.TRANSPARENT;
+ mImeProvider.scheduleShowImePostLayout(appWin);
+ assertTrue(mImeProvider.isImeTargetFromDisplayContentAndImeSame());
+ }
+}
diff --git a/tests/net/java/android/net/NetworkStatsTest.java b/tests/net/java/android/net/NetworkStatsTest.java
index 98f705f..735fa7c 100644
--- a/tests/net/java/android/net/NetworkStatsTest.java
+++ b/tests/net/java/android/net/NetworkStatsTest.java
@@ -909,8 +909,8 @@
13805 /* txPackets */,
0 /* operations */);
- // Traffic measured for the root uid on the base interface if eBPF is in use.
- final NetworkStats.Entry ebpfRootUidEntry = new NetworkStats.Entry(
+ // Traffic measured for the root uid on the base interface.
+ final NetworkStats.Entry rootUidEntry = new NetworkStats.Entry(
baseIface, rootUid, SET_DEFAULT, TAG_NONE,
163577 /* rxBytes */,
187 /* rxPackets */,
@@ -918,17 +918,6 @@
97 /* txPackets */,
0 /* operations */);
- // Traffic measured for the root uid on the base interface if xt_qtaguid is in use.
- // Incorrectly includes appEntry's bytes and packets, plus IPv4-IPv6 translation
- // overhead (20 bytes per packet), in rx direction.
- final NetworkStats.Entry xtRootUidEntry = new NetworkStats.Entry(
- baseIface, rootUid, SET_DEFAULT, TAG_NONE,
- 31113087 /* rxBytes */,
- 22588 /* rxPackets */,
- 17607 /* txBytes */,
- 97 /* txPackets */,
- 0 /* operations */);
-
final NetworkStats.Entry otherEntry = new NetworkStats.Entry(
otherIface, appUid, SET_DEFAULT, TAG_NONE,
2600 /* rxBytes */,
@@ -937,21 +926,14 @@
3 /* txPackets */,
0 /* operations */);
- final NetworkStats statsXt = new NetworkStats(TEST_START, 3)
+ final NetworkStats stats = new NetworkStats(TEST_START, 3)
.insertEntry(appEntry)
- .insertEntry(xtRootUidEntry)
+ .insertEntry(rootUidEntry)
.insertEntry(otherEntry);
- final NetworkStats statsEbpf = new NetworkStats(TEST_START, 3)
- .insertEntry(appEntry)
- .insertEntry(ebpfRootUidEntry)
- .insertEntry(otherEntry);
+ stats.apply464xlatAdjustments(stackedIface);
- statsXt.apply464xlatAdjustments(stackedIface, false);
- statsEbpf.apply464xlatAdjustments(stackedIface, true);
-
- assertEquals(3, statsXt.size());
- assertEquals(3, statsEbpf.size());
+ assertEquals(3, stats.size());
final NetworkStats.Entry expectedAppUid = new NetworkStats.Entry(
v4Iface, appUid, SET_DEFAULT, TAG_NONE,
30949510,
@@ -966,12 +948,9 @@
17607,
97,
0);
- assertEquals(expectedAppUid, statsXt.getValues(0, null));
- assertEquals(expectedRootUid, statsXt.getValues(1, null));
- assertEquals(otherEntry, statsXt.getValues(2, null));
- assertEquals(expectedAppUid, statsEbpf.getValues(0, null));
- assertEquals(expectedRootUid, statsEbpf.getValues(1, null));
- assertEquals(otherEntry, statsEbpf.getValues(2, null));
+ assertEquals(expectedAppUid, stats.getValues(0, null));
+ assertEquals(expectedRootUid, stats.getValues(1, null));
+ assertEquals(otherEntry, stats.getValues(2, null));
}
@Test
@@ -996,7 +975,7 @@
.insertEntry(secondEntry);
// Empty map: no adjustment
- stats.apply464xlatAdjustments(new ArrayMap<>(), false);
+ stats.apply464xlatAdjustments(new ArrayMap<>());
assertEquals(2, stats.size());
assertEquals(firstEntry, stats.getValues(0, null));
diff --git a/tests/net/java/com/android/server/net/NetworkStatsFactoryTest.java b/tests/net/java/com/android/server/net/NetworkStatsFactoryTest.java
index 4473492..e4996d9 100644
--- a/tests/net/java/com/android/server/net/NetworkStatsFactoryTest.java
+++ b/tests/net/java/com/android/server/net/NetworkStatsFactoryTest.java
@@ -446,7 +446,7 @@
assertStatsEntry(stats, "v4-wlan0", 1000, SET_DEFAULT, 0x0, 30812L, 2310L);
assertStatsEntry(stats, "v4-wlan0", 10102, SET_DEFAULT, 0x0, 10022L, 3330L);
assertStatsEntry(stats, "v4-wlan0", 10060, SET_DEFAULT, 0x0, 9532772L, 254112L);
- assertStatsEntry(stats, "wlan0", 0, SET_DEFAULT, 0x0, 15229L, 0L);
+ assertStatsEntry(stats, "wlan0", 0, SET_DEFAULT, 0x0, 0L, 0L);
assertStatsEntry(stats, "wlan0", 1000, SET_DEFAULT, 0x0, 6126L, 2013L);
assertStatsEntry(stats, "wlan0", 10013, SET_DEFAULT, 0x0, 0L, 144L);
assertStatsEntry(stats, "wlan0", 10018, SET_DEFAULT, 0x0, 5980263L, 167667L);
@@ -468,9 +468,7 @@
long appRxBytesAfter = 439237478L;
assertEquals("App traffic should be ~100MB", 110553449, appRxBytesAfter - appRxBytesBefore);
- long rootRxBytesBefore = 1394011L;
- long rootRxBytesAfter = 1398634L;
- assertEquals("UID 0 traffic should be ~0", 4623, rootRxBytesAfter - rootRxBytesBefore);
+ long rootRxBytes = 330187296L;
mFactory.noteStackedIface("v4-wlan0", "wlan0");
NetworkStats stats;
@@ -478,12 +476,12 @@
// Stats snapshot before the download
stats = parseDetailedStats(R.raw.xt_qtaguid_with_clat_100mb_download_before);
assertStatsEntry(stats, "v4-wlan0", 10106, SET_FOREGROUND, 0x0, appRxBytesBefore, 5199872L);
- assertStatsEntry(stats, "wlan0", 0, SET_DEFAULT, 0x0, rootRxBytesBefore, 0L);
+ assertStatsEntry(stats, "wlan0", 0, SET_DEFAULT, 0x0, rootRxBytes, 0L);
// Stats snapshot after the download
stats = parseDetailedStats(R.raw.xt_qtaguid_with_clat_100mb_download_after);
assertStatsEntry(stats, "v4-wlan0", 10106, SET_FOREGROUND, 0x0, appRxBytesAfter, 7867488L);
- assertStatsEntry(stats, "wlan0", 0, SET_DEFAULT, 0x0, rootRxBytesAfter, 0L);
+ assertStatsEntry(stats, "wlan0", 0, SET_DEFAULT, 0x0, rootRxBytes, 0L);
}
/**
diff --git a/tests/net/res/raw/xt_qtaguid_with_clat b/tests/net/res/raw/xt_qtaguid_with_clat
index 6cd7499..f04b32f 100644
--- a/tests/net/res/raw/xt_qtaguid_with_clat
+++ b/tests/net/res/raw/xt_qtaguid_with_clat
@@ -7,7 +7,7 @@
7 v4-wlan0 0x0 10060 1 1448660 1041 31192 753 1448660 1041 0 0 0 0 31192 753 0 0 0 0
8 v4-wlan0 0x0 10102 0 9702 16 2870 23 9702 16 0 0 0 0 2870 23 0 0 0 0
9 v4-wlan0 0x0 10102 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-10 wlan0 0x0 0 0 11058671 7892 0 0 11043898 7811 13117 61 1656 20 0 0 0 0 0 0
+10 wlan0 0x0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
11 wlan0 0x0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
12 wlan0 0x0 1000 0 6126 13 2013 16 5934 11 192 2 0 0 1821 14 192 2 0 0
13 wlan0 0x0 1000 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
@@ -41,5 +41,3 @@
41 dummy0 0x0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
42 lo 0x0 0 0 1288 16 1288 16 0 0 532 8 756 8 0 0 532 8 756 8
43 lo 0x0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-44 wlan0 0x0 1029 0 0 0 312046 5113 0 0 0 0 0 0 306544 5046 3230 38 2272 29
-45 wlan0 0x0 1029 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
\ No newline at end of file
diff --git a/tests/net/res/raw/xt_qtaguid_with_clat_100mb_download_after b/tests/net/res/raw/xt_qtaguid_with_clat_100mb_download_after
index 9f86153..12d98ca 100644
--- a/tests/net/res/raw/xt_qtaguid_with_clat_100mb_download_after
+++ b/tests/net/res/raw/xt_qtaguid_with_clat_100mb_download_after
@@ -9,7 +9,7 @@
9 v4-wlan0 0x0 10057 1 728 7 392 7 0 0 728 7 0 0 0 0 392 7 0 0
10 v4-wlan0 0x0 10106 0 2232 18 2232 18 0 0 2232 18 0 0 0 0 2232 18 0 0
11 v4-wlan0 0x0 10106 1 432952718 314238 5442288 121260 432950238 314218 2480 20 0 0 5433900 121029 8388 231 0 0
-12 wlan0 0x0 0 0 440746376 329772 0 0 439660007 315369 232001 1276 854368 13127 0 0 0 0 0 0
+12 wlan0 0x0 0 0 330187296 250652 0 0 329106990 236273 226202 1255 854104 13124 0 0 0 0 0 0
13 wlan0 0x0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
14 wlan0 0x0 1000 0 77113 272 56151 575 77113 272 0 0 0 0 19191 190 36960 385 0 0
15 wlan0 0x0 1000 1 20227 80 8356 72 18539 74 1688 6 0 0 7562 66 794 6 0 0
diff --git a/tests/net/res/raw/xt_qtaguid_with_clat_simple b/tests/net/res/raw/xt_qtaguid_with_clat_simple
index b37fae6..a1d6d411 100644
--- a/tests/net/res/raw/xt_qtaguid_with_clat_simple
+++ b/tests/net/res/raw/xt_qtaguid_with_clat_simple
@@ -1,5 +1,4 @@
idx iface acct_tag_hex uid_tag_int cnt_set rx_bytes rx_packets tx_bytes tx_packets rx_tcp_bytes rx_tcp_packets rx_udp_bytes rx_udp_packets rx_other_bytes rx_other_packets tx_tcp_bytes tx_tcp_packets tx_udp_bytes tx_udp_packets tx_other_bytes tx_other_packets
2 v4-wlan0 0x0 10060 0 42600 213 4100 41 42600 213 0 0 0 0 4100 41 0 0 0 0
3 v4-wlan0 0x0 10060 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-4 wlan0 0x0 0 0 46860 213 0 0 46860 213 0 0 0 0 0 0 0 0 0 0
-5 wlan0 0x0 1029 0 0 0 4920 41 0 0 0 0 0 0 4920 41 0 0 0 0
+4 wlan0 0x0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0